diff --git a/.devcontainer/.gitignore b/.devcontainer/.gitignore index a58f289c30..cdb408d2d7 100644 --- a/.devcontainer/.gitignore +++ b/.devcontainer/.gitignore @@ -1,6 +1,5 @@ -!Makefile -base/*.sql -base/*.zip -base/db/ -base/maps/ -!base/expansion/Makefile +base/ +!base/*.json +override/ +repo/ +cache/ diff --git a/.devcontainer/Makefile b/.devcontainer/Makefile index 53f06232c9..65bda74af0 100644 --- a/.devcontainer/Makefile +++ b/.devcontainer/Makefile @@ -1,196 +1,127 @@ +# Build binaries: make cmake, make build +# One time initial setup (or to reset db): make prep, make inject-mariadb, make maps +# Update custom db edits: make inject-custom +# Start up server: make shared, make login, make world, make zone +# in game, stop combat spam #logs set gmsay 79 0 +# in game, stop loot spam #logs set gmsay 69 0 NAME := eqemu-server -.ONESHELL: -DOCKER_ARGS := --rm --name ${NAME} -v $$PWD:/src -w /src ${NAME} -DOCKER_ARM64_ARGS := --rm --platform linux/arm64 --name ${NAME}-arm64 -v $$PWD:/src -w /src ${NAME}-arm64 - -.PHONY: build -build: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile build --no-print-directory - exit -endif - cd build$$BUILD_SUFFIX && cmake --build . --config Release --target all -- - -.PHONY: cmake -cmake: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile cmake --no-print-directory - exit -endif - @echo "working directory: $$PWD" - mkdir -p build$$BUILD_SUFFIX - @cd build$$BUILD_SUFFIX && cmake -DEQEMU_BUILD_LOGIN=ON \ - -DEQEMU_BUILD_TESTS=ON \ - -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -G Ninja .. - -clean: -ifneq (,$(findstring .devcontainer,$$PWD)) - @make -C ../ -f .devcontainer/Makefile clean --no-print-directory -endif - rm -rf build - -docker-cmake: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile docker-cmake --no-print-directory - exit -endif - @echo "working directory: $$PWD" - git submodule update --init --recursive - docker run ${DOCKER_ARGS} make cmake - -docker-build: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile docker-build --no-print-directory - exit -endif - docker run ${DOCKER_ARGS} make build - -# Build image if it doesn't exist -docker-image-build: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile docker-image-build --no-print-directory - exit -endif -ifeq ($(shell docker images -q ${NAME} 2> /dev/null),) - @echo "Docker image not found. Building..." - docker build -f Dockerfile.debian.dev -t ${NAME} . -endif - -docker-arm-cmake: docker-arm-image-build -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile docker-arm-cmake --no-print-directory - exit -endif - git submodule update --init --recursive - docker run ${DOCKER_ARM64_ARGS} make cmake BUILD_SUFFIX=arm64 +.PHONY: prep +prep: is-vscode + @echo "Preparing build/bin for usage..." -docker-arm-build: docker-arm-image-build -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile docker-arm-build --no-print-directory - exit -endif - docker run ${DOCKER_ARM64_ARGS} make build BUILD_SUFFIX=arm64 + @echo "Prepping folders..." + @mkdir -p .devcontainer/override + @mkdir -p .devcontainer/repo + @mkdir -p .devcontainer/cache + @mkdir -p build/bin/logs + @mkdir -p build/bin/shared + @mkdir -p build/bin/assets + + @echo "Applying overrides..." + @if [ ! -f .devcontainer/override/eqemu_config.json ]; then cp .devcontainer/base/eqemu_config.json .devcontainer/override/eqemu_config.json; fi + @if [ -f build/bin/eqemu_config.json ]; then unlink build/bin/eqemu_config.json; fi + cd build/bin && ln -s ../../.devcontainer/override/eqemu_config.json eqemu_config.json + @if [ ! -f .devcontainer/override/login.json ]; then cp .devcontainer/base/login.json .devcontainer/override/login.json; fi + @if [ -f build/bin/login.json ]; then unlink build/bin/login.json; fi + cd build/bin && ln -s ../../.devcontainer/override/login.json login.json + + @echo "Cloning repositories..." + cd .devcontainer/repo && if [ ! -d "quests" ]; then cd ../../.devcontainer/repo/ && git clone https://github.com/ProjectEQ/projecteqquests.git quests; fi + cd .devcontainer/repo && if [ ! -d "eqemu-definitions" ]; then cd ../../.devcontainer/repo/ && git clone https://github.com/xackery/eqemu-definitions.git eqemu-definitions; fi + cd .devcontainer/repo && if [ ! -d "maps" ]; then cd ../../ && make maps; fi + @if [ -d build/bin/quests ]; then unlink build/bin/quests; fi + cd build/bin && ln -s ../../.devcontainer/repo/quests quests + @if [ -d build/bin/maps ]; then unlink build/bin/maps; fi + cd build/bin && ln -s ../../.devcontainer/repo/maps maps + @if [ -d build/bin/eqemu-definitions ]; then unlink build/bin/eqemu-definitions; fi + cd build/bin && ln -s ../../.devcontainer/repo/eqemu-definitions eqemu-definitions + @mkdir -p build/bin/quests/mods + + @echo "Applying base links..." + cp -R -u -p utils/patches .devcontainer/base/ + @if [ -d build/bin/assets/patches ]; then unlink build/bin/assets/patches; fi + cd build/bin/assets && ln -s ../../../.devcontainer/base/patches patches + @if [ -d build/bin/lua_modules ]; then unlink build/bin/lua_modules; fi + cd build/bin && ln -s ../../.devcontainer/repo/quests/lua_modules lua_modules + @if [ -d build/bin/mods ]; then unlink build/bin/mods; fi + cd build/bin && ln -s ../../.devcontainer/repo/quests/mods mods + @if [ -d build/bin/plugins ]; then unlink build/bin/plugins; fi + cd build/bin && ln -s ../../.devcontainer/repo/quests/plugins plugins -docker-arm-image-build: -ifeq ($(shell docker images -q ${NAME}-arm64 2> /dev/null),) - @echo "Docker image not found. Building..." - docker build -f Dockerfile.debian.arm.dev -t ${NAME}-arm64 . -endif + @echo "Eqemu is prepared. Edit build/bin/eqemu_config.json to configure." -docker-clean: clean +is-vscode: + @if [ -z "$$REMOTE_CONTAINERS" ]; then \ + echo "Not running in VS Code devcontainer"; \ + exit 1; \ + fi -.PHONY: prep -prep: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile prep --no-print-directory - exit -endif - @echo "Preparing build/bin for usage..." - mkdir -p build/bin/assets/patches - cp -R -u -p .devcontainer/base/eqemu_config.json build/bin/eqemu_config.json - cp -R -u -p .devcontainer/base/login.json build/bin/login.json - cp -R -u -p loginserver/login_util/* build/bin/assets/patches/ - mkdir -p build/bin/assets - cp -R -u -p utils/patches build/bin/assets/ - -unlink build/bin/lua_modules - cd build/bin && ln -s quests/lua_modules lua_modules - -unlink build/bin/mods - cd build/bin && ln -s quests/mods mods - -unlink build/bin/maps - cd build/bin && ln -s ../../base/maps maps - mkdir -p build/bin/logs - mkdir -p build/bin/shared - @echo "Eqemu is prepared. Edit build/bin/eqemu_config.json to configure." +clean: is-vscode + rm -rf build -maps: +.PHONY: maps +maps: is-vscode @echo "Downloading maps..." - @mkdir -p base/maps - @cd base/maps && wget -nc https://github.com/Akkadius/eqemu-maps/archive/refs/heads/master.zip - @cd base/maps && unzip -o master.zip - @cd base/maps && mv eqemu-maps-master/* . - @cd base/maps && rm -rf eqemu-maps-master + @mkdir -p .devcontainer/repo/maps + @cd .devcontainer/repo/maps && wget -nc https://github.com/EQEmu/maps/archive/refs/heads/master.zip + @cd .devcontainer/repo/maps && unzip -o master.zip + @cd .devcontainer/repo/maps && mv maps-master/* . + @cd .devcontainer/repo/maps && rm -rf maps-master @echo "Maps downloaded." -quests: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile quests --no-print-directory - exit -endif - @cd build/bin && git clone https://github.com/ProjectEQ/projecteqquests.git quests - # Runs tests .PHONY: test -test: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile test --no-print-directory - exit -endif +test: is-vscode cd build/bin && ./tests # Runs login binary .PHONY: login -login: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile login --no-print-directory - exit -endif +login: is-vscode check-mariadb cd build/bin && ./loginserver +.PHONY: hotfix +hotfix: shared + # Runs shared_memory binary .PHONY: shared -shared: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile shared --no-print-directory - exit -endif +shared: is-vscode check-mariadb cd build/bin && ./shared_memory # Runs zone binary .PHONY: zone -zone: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile zone --no-print-directory - exit -endif - @-rm build/bin/logs/zone/zone*.log +zone: is-vscode check-mariadb + @find build/bin/logs/zone/ -type f -name 'zone*.log' -exec rm -f {} + cd build/bin && ./zone +check-mariadb: is-vscode + @if ! sudo service mariadb status | grep -q 'active (running)'; then \ + sudo service mariadb start; \ + fi + # Runs world binary .PHONY: world -world: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile world --no-print-directory - exit -endif - @-rm build/bin/logs/world*.log +world: is-vscode check-mariadb + @find build/bin/logs/ -type f -name 'world*.log' -exec rm -f {} + cd build/bin && ./world # Runs ucs binary .PHONY: ucs -ucs: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile ucs --no-print-directory - exit -endif - @-rm build/bin/logs/ucs*.log +ucs: is-vscode check-mariadb + @find build/bin/logs/ -type f -name 'ucs*.log' -exec rm -f {} + cd build/bin && ./ucs # Runs queryserv binary .PHONY: queryserv -queryserv: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile queryserv --no-print-directory - exit -endif - @-rm build/bin/logs/query_server*.log +queryserv: is-vscode check-mariadb + @find build/bin/logs/ -type f -name 'query_server*.log' -exec rm -f {} + cd build/bin && ./queryserv -valgrind-%: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile valgrind --no-print-directory - exit -endif +reset-content: + @echo "Resetting content tables in database peq..." + cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_content.sql" + +valgrind-%: is-vscode cd build/bin && valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=logs/$*.valgrind.log ./$* # Start mariaDB standalone @@ -201,30 +132,33 @@ mariadb: .PHONY: inject-mariadb inject-mariadb: -sudo service mariadb start - -mkdir -p base/db/ + -mkdir -p .devcontainer/cache/db/ -sudo mariadb -e 'DROP DATABASE IF EXISTS peq;' -sudo mariadb -e 'CREATE DATABASE peq;' - -sudo mariadb -e "CREATE USER 'peq'@'127.0.0.1' IDENTIFIED BY 'peqpass';" + -sudo mariadb -e "CREATE USER IF NOT EXISTS 'peq'@'127.0.0.1' IDENTIFIED BY 'peqpass';" -sudo mariadb -e "GRANT ALL PRIVILEGES ON *.* TO 'peq'@'127.0.0.1';" -ifeq (,$(wildcard base/db/db.sql.zip)) - @echo "base/db.sql.zip not found. Downloading latest from https://db.projecteq.net/" - wget -nc https://db.projecteq.net/latest -O base/db/db.sql.zip - -cd base/db && unzip db.sql.zip +ifeq (,$(wildcard .devcontainer/cache/db/db.sql.zip)) + @echo ".devcontainer/cache/db.sql.zip not found. Downloading database from https://db.eqemu.dev/latest" + wget -nc https://db.eqemu.dev/latest -O .devcontainer/cache/db/db.sql.zip + -cd .devcontainer/cache/db && unzip db.sql.zip endif @echo "Sourcing db may take a while, please wait..." - @cd base/db/peq-dump && sudo mariadb --database peq -e "source create_all_tables.sql" + + @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_content.sql" + @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_login.sql" + @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_player.sql" + @# deprecated cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_queryserv.sql" + @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_state.sql" + @cd .devcontainer/cache/db/peq-dump && sudo mariadb --database peq -e "source create_tables_system.sql" + @echo "MariaDB is now injected." .PHONY: gm-% -gm-%: +gm-%: is-vscode sudo mariadb --database peq -e "UPDATE account SET status=255 WHERE name = '$*';" @echo "Account $* is now a GM. /camp to have it go into effect." -depends: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile depends --no-print-directory - exit -endif +depends: is-vscode sudo apt install graphviz pip time pip3 install graphviz mkdir -p build/depends @@ -241,44 +175,54 @@ endif @echo "Common..." time python3 build/depends/dependency_graph.py -f png common build/depends/common.dot -backup: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile backup --no-print-directory - exit -endif +backup: is-vscode @mkdir -p build/bin/backup cd build/bin && ./world database:dump --compress --player-tables --state-tables --system-tables --query-serv-tables -cpu-zone: +restore-%: is-vscode + @if [ -z "$*" ]; then \ + echo "Please provide a backup file to restore from. Example: make restore-backup.sql"; \ + exit 1; \ + fi + @echo "Restoring from backup $*" + @sudo mariadb --database peq -e "$*" + + +cpu-zone: is-vscode ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile cpu-zone --no-print-directory + @echo "This makefile is not intended to be run from the .devcontainer directory." exit endif @cd build/bin && mkdir -p tmp cd build/bin && CPUPROFILE=prof.out ./zone -pprof-zone: +pprof-zone: is-vscode ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile pprof-zone --no-print-directory + @echo "This makefile is not intended to be run from the .devcontainer directory." exit endif cd build/bin && google-pprof --pdf zone prof.out > prof.pdf -pprof-web-zone: -ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile pprof-web-zone --no-print-directory - exit -endif - cd build/bin && google-pprof --web zone prof.out -pprof-gv-zone: + +pprof-gv-zone: is-vscode ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile pprof-gv-zone --no-print-directory + @echo "This makefile is not intended to be run from the .devcontainer directory." exit endif cd build/bin && google-pprof --gv zone prof.out > prof.gv -heap-zone: + +heap-zone: is-vscode ifeq ($(findstring .devcontainer,$(CURDIR)),.devcontainer) - @make -C ../ -f .devcontainer/Makefile heap-zone --no-print-directory + @echo "This makefile is not intended to be run from the .devcontainer directory." exit endif @cd build/bin && mkdir -p tmp cd build/bin && HEAPPROFILE=prof.out ./zone + + +.PHONY: pull +pull: + git pull + @if [ ! -d "quests" ]; then git clone https://github.com/rebuildeq/quests.git quests; fi + cd quests && git pull + @if [ ! -d "eqemu-definitions" ]; then git clone https://github.com/xackery/eqemu-definitions.git eqemu-definitions; fi + cd eqemu-definitions && git pull \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d6ccc72654..90ec8234c7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -40,10 +40,41 @@ "GitHub.copilot", "xackery.make-magic", "Gruntfuggly.todo-tree", - "ms-vscode.cmake-tools" - ] + "ms-vscode.cmake-tools", + "sumneko.lua" + ], + "settings": { + "Lua.runtime.version": "Lua 5.1", + "Lua.workspace.library": [ + "/src/repo/eqemu-definitions" + ], + "Lua.diagnostics.disable": [ + "lowercase-global" + ], + "cmake.statusbar.advanced": { + "kit": { + "visibility": "hidden" + }, + "debug": { + "visibility": "hidden" + }, + "buildTarget": { + "visibility": "compact" + }, + "launch": { + "visibility": "hidden" + }, + "ctest": { + "visibility": "icon" + } + } + } } }, + "mounts": [ + "source=${localWorkspaceFolder}/.devcontainer/Makefile,target=/src/Makefile,type=bind,consistency=cached" + ], + "workspaceFolder": "/src", "workspaceMount": "source=${localWorkspaceFolder},target=/src,type=bind,consistency=cached" } \ No newline at end of file diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index 7a5443d4c4..0000000000 --- a/.drone.yml +++ /dev/null @@ -1,98 +0,0 @@ ---- - -kind: pipeline -type: docker -name: Build Linux - -# Limits how many of these builds can run on the drone runner at a time, this isn't about cores -concurrency: - limit: 1 - -volumes: - - name: cache - host: - path: /var/lib/cache-release - -steps: - - name: Build Linux X64 - image: akkadius/eqemu-server:v14 - environment: - GITHUB_TOKEN: - from_secret: GH_RELEASE_GITHUB_API_TOKEN - RCLONE_CONFIG_REMOTE_TYPE: ftp - RCLONE_FTP_HOST: drone.akkadius.com - RCLONE_FTP_USER: artifacts - RCLONE_FTP_PASS: - from_secret: RCLONE_FTP_PASS - commands: - - ./utils/scripts/build/linux-build.sh - volumes: - - name: cache - path: /home/eqemu/.ccache/ - ---- - -kind: pipeline -type: exec -name: Build Windows - -# Limits how many of these builds can run on the drone runner at a time, this isn't about cores -concurrency: - limit: 1 - -platform: - os: windows - arch: amd64 - -steps: - - name: Build Windows X64 - environment: - RCLONE_CONFIG_REMOTE_TYPE: ftp - RCLONE_FTP_HOST: drone.akkadius.com - RCLONE_FTP_USER: artifacts - RCLONE_FTP_PASS: - from_secret: RCLONE_FTP_PASS - GITHUB_TOKEN: - from_secret: GH_RELEASE_GITHUB_API_TOKEN - commands: - - .\utils\scripts\build\windows-build.ps1 - ---- - -kind: pipeline -type: docker -name: Publish Artifacts to Github - -steps: - - name: Upload Artifacts - image: akkadius/eqemu-build-releaser:v3 - environment: - RCLONE_CONFIG_REMOTE_TYPE: ftp - RCLONE_FTP_HOST: drone.akkadius.com - RCLONE_FTP_USER: artifacts - RCLONE_FTP_PASS: - from_secret: RCLONE_FTP_PASS - GH_RELEASE_GITHUB_API_TOKEN: - from_secret: GH_RELEASE_GITHUB_API_TOKEN - GITHUB_TOKEN: - from_secret: GH_RELEASE_GITHUB_API_TOKEN - commands: - - ./utils/scripts/build/should-release/should-release - - rclone config create remote ftp env_auth true > /dev/null - - | - rclone copy remote: --include "eqemu-server*.zip" . - - gh-release --assets=eqemu-server-linux-x64.zip,eqemu-server-windows-x64.zip -y - - | - rclone delete remote: --include "eqemu-server*.zip" - -trigger: - branch: - - master - event: - - push - -depends_on: - - Build Windows - - Build Linux - - diff --git a/.editorconfig b/.editorconfig index 03f7824943..e181959dce 100644 --- a/.editorconfig +++ b/.editorconfig @@ -3,9 +3,7 @@ # top-most EditorConfig file root = true -# Unix-style newlines with a newline ending every file [*] -end_of_line = lf insert_final_newline = true # Matches multiple files with brace expansion notation @@ -20,4 +18,4 @@ indent_style = tab # Tab indentation (no size specified) [Makefile] -indent_style = tab \ No newline at end of file +indent_style = tab diff --git a/.gitattributes b/.gitattributes index c89cdbf70c..1d788f033f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -20,7 +20,4 @@ *.css text *.js text *.types text - -*.vcproj text merge=union -*.csproj text merge=union -*.sln text merge=union eol=crlf +*.pdf binary diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000000..7c18822926 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,105 @@ +name: Build +on: + push: + branches: + - master + - develop + pull_request: +jobs: + linux: + name: Linux + runs-on: ubuntu-latest + steps: + - name: Checkout source + uses: actions/checkout@v5 + with: + submodules: recursive + + - name: Setup ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ${{ runner.os }}-ccache + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential ninja-build ccache uuid-dev + + - name: Restore vcpkg Cache + uses: actions/cache@v5 + with: + path: | + build/vcpkg_installed + submodules/vcpkg/downloads + key: ${{ runner.os }}-vcpkg-${{ hashFiles('vcpkg.json') }} + restore-keys: | + ${{ runner.os }}-vcpkg-${{ hashFiles('vcpkg.json') }}- + ${{ runner.os }}-vcpkg- + + - name: Configure + run: | + cmake -S . -B build -G Ninja \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -DEQEMU_BUILD_TESTS=ON \ + -DEQEMU_BUILD_LOGIN=ON \ + -DEQEMU_BUILD_LUA=ON \ + -DEQEMU_BUILD_PERL=ON \ + -DEQEMU_BUILD_CLIENT_FILES=ON + + - name: Build + run: cmake --build build --parallel + + - name: Test + working-directory: build + run: ./bin/tests + + windows: + name: Windows + runs-on: windows-latest + env: + VCPKG_DOWNLOADS: ${{ github.workspace }}\submodules\vcpkg\downloads + VCPKG_BINARY_SOURCES: 'clear;files,${{ github.workspace }}\vcpkg_archives,readwrite' + steps: + - name: Checkout source + uses: actions/checkout@v5 + with: + submodules: recursive + + - name: Enable long paths + run: git config --global core.longpaths true + + - name: Setup MSVC environment + uses: TheMrMilchmann/setup-msvc-dev@v4 + with: + arch: x64 + + - name: Restore vcpkg Cache + uses: actions/cache@v5 + with: + path: | + ${{ env.VCPKG_DOWNLOADS }} + ${{ github.workspace }}/vcpkg_archives + key: ${{ runner.os }}-vcpkg-${{ hashFiles('vcpkg.json') }} + restore-keys: | + ${{ runner.os }}-vcpkg- + + - name: Configure + shell: pwsh + run: | + cmake -S . -B build -G "Visual Studio 17 2022" -A x64 ` + -DCMAKE_BUILD_TYPE=RelWithDebInfo ` + -DEQEMU_BUILD_TESTS=ON ` + -DEQEMU_BUILD_LOGIN=ON ` + -DEQEMU_BUILD_LUA=ON ` + -DEQEMU_BUILD_ZLIB=ON ` + -DEQEMU_BUILD_CLIENT_FILES=ON + + - name: Build + shell: pwsh + run: cmake --build build --config RelWithDebInfo --target ALL_BUILD -- /m + + - name: Test + working-directory: build + run: ./bin/RelWithDebInfo/tests.exe diff --git a/.gitignore b/.gitignore index 627d3c6306..703d34de06 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,16 @@ compile_flags.txt # CMake Files cmake-build-relwithdebinfo/* skill-caps.diff + +# Local code index and AI NPC bridge runtime artifacts +.codegraph/ +features/ai-npc-response/ai-bridge/.venv/ +features/ai-npc-response/ai-bridge/runtime/ +features/ai-npc-response/ai-bridge/ollama-models/ +features/ai-npc-response/ai-bridge/**/__pycache__/ + +# Local multiclass planning notes +features/multiclass/TRIO_NAMES.md + +# All-features owns its launcher patcher source. +!features/patcher/eqemupatcher/EQEmu Patcher/EQEmu Patcher.sln diff --git a/.gitmodules b/.gitmodules index c9c3988cb6..b7f3564e59 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,18 +1,6 @@ -[submodule "submodules/glm"] - path = submodules/glm - url = https://github.com/g-truc/glm.git -[submodule "submodules/fmt"] - path = submodules/fmt - url = https://github.com/fmtlib/fmt.git -[submodule "submodules/libuv"] - path = submodules/libuv - url = https://github.com/libuv/libuv.git -[submodule "submodules/cereal"] - path = submodules/cereal - url = https://github.com/USCiLab/cereal.git [submodule "submodules/websocketpp"] path = submodules/websocketpp url = https://github.com/zaphoyd/websocketpp.git -[submodule "submodules/recastnavigation"] - path = submodules/recastnavigation - url = https://github.com/EQEmu/recastnavigation.git +[submodule "submodules/vcpkg"] + path = submodules/vcpkg + url = https://github.com/microsoft/vcpkg.git diff --git a/.vscode/settings.json b/.vscode/settings.json index bf5c79fae3..8bdf6f6fae 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,14 +21,6 @@ "${workspaceFolder}/dependencies/zlibng" ], "telemetry.enableTelemetry": false, - "cmake.buildDirectory": "${workspaceFolder}/build", - "cmake.configureArgs": [ - "-DEQEMU_BUILD_LOGIN=ON", - "-DEQEMU_BUILD_TESTS=ON", - "-DCMAKE_CXX_COMPILER_LAUNCHER=ccache", - "-DEQEMU_ADD_PROFILER=ON", - "Ninja" - ], "cmake.skipConfigureIfCachePresent": true, "cmake.configureOnOpen": false, "files.associations": { @@ -115,22 +107,5 @@ "format": "cpp", "ranges": "cpp", "span": "cpp" - }, - "cmake.statusbar.advanced": { - "kit": { - "visibility": "hidden", - }, - "debug": { - "visibility": "hidden", - }, - "buildTarget": { - "visibility": "hidden", - }, - "launch": { - "visibility": "hidden", - }, - "ctest": { - "visibility": "icon", - } } } \ No newline at end of file diff --git a/BUILD.md b/BUILD.md index c1051f2b63..a49192a967 100644 --- a/BUILD.md +++ b/BUILD.md @@ -4,46 +4,35 @@ This guide is far from exhaustive, you should expect to have some experience wit ### CMake -EQEmu uses CMake as the build system on all platforms. You will need CMake 3.2 or higher to build from source. +EQEmu uses CMake as the build system on all platforms. You will need CMake 3.20 or higher to build from source. ### Dependencies The following libraries are required to build from source: -- [boost](https://www.boost.org/ "boost") -- [zlib](https://www.zlib.net/ "zlib") (If not included the source will build [zlib-ng](https://github.com/zlib-ng/zlib-ng "zlib-ng") instead) -- [libmysql](https://dev.mysql.com/downloads/connector/c/ "libmysql") or [libmariadb](https://github.com/MariaDB/mariadb-connector-c "libmariadb") +- uuid (unix) The following libraries are not strictly required but in many cased recommended. -- [OpenSSL](https://www.openssl.org/ "OpenSSL") or [mbedTLS](https://tls.mbed.org/ "mbedTLS") (Required for the loginserver and headless client) -- [libsodium](https://github.com/jedisct1/libsodium "libsodium") (Required for strong password hashing on the loginserver) -- [Lua 5.1](https://www.lua.org/ "Lua 5.1") or [LuaJit](http://luajit.org/ "LuaJit") (Required for Lua Quest Scripting) - [Perl](https://www.perl.org/ "Perl") (Required for Perl Quest Scripting) ##### Windows -For windows it is suggested you make use of [vcpkg](https://github.com/microsoft/vcpkg "vcpkg") if you wish to build your own dependencies. - If you wish to use Perl then you should use whichever version of Perl you have installed on the target system. -You can also download a vcpkg export from our releases section for Visual Studio [x86](https://github.com/EQEmu/Server/releases/download/v1.2/vcpkg-export-x86.zip "x86") or [x64](https://github.com/EQEmu/Server/releases/download/v1.2/vcpkg-export-x64.zip "x64") that includes a toolchain file you can pass to CMake. - ##### Linux For Linux you simply can install the dependencies from your package manager, below is an example of doing it on Ubuntu using apt-get. - sudo apt-get install libmysqlclient-dev libperl-dev libboost-dev liblua5.1-0-dev zlib1g-dev uuid-dev libssl-dev + sudo apt-get install libperl-dev uuid-dev ### Running CMake ##### Windows The following is a modified command our automated build server uses to run CMake via the release vcpkg export and its toolchain file. -Assuming it is starting in c:/projects/eqemu and the x64 dependencies were extracted to c:/projects/eqemu/vcpkg. - mkdir build cd build - cmake -G "Visual Studio 15 2017 Win64" -DEQEMU_BUILD_TESTS=ON -DEQEMU_BUILD_LOGIN=ON -DEQEMU_BUILD_ZLIB=ON -DCMAKE_TOOLCHAIN_FILE="c:/projects/eqemu/vcpkg/vcpkg-export-20180828-145455/scripts/buildsystems/vcpkg.cmake" .. + cmake -G "Visual Studio 15 2022 Win64" -DEQEMU_BUILD_TESTS=ON -DEQEMU_BUILD_LOGIN=ON .. ##### Linux -Similarly to Windows running CMake on Linux is simple it just omits the toolchain file and uses a different generator. +Similarly to Windows running CMake on Linux is simple it just uses a different generator. mkdir build cd build diff --git a/CHANGELOG.md b/CHANGELOG.md index 627baca5e6..7f735023c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,133 @@ +## [23.10.3] 9/16/2025 + +### Hotfix + +* Hotfix crashes occurring in #4987. @Akkadius 2025-09-17 + +## [23.10.2] 9/16/2025 + +### Hotfix + +* Revert #4996 as it was causing critical issues with spells that needs to be further investigated. @Akkadius 2025-09-17 + +## [23.10.1] 9/16/2025 + +### Hotfix +* Fixed Mail Key Bug ([#5015](https://github.com/EQEmu/Server/pull/5015)) @Kinglykrab 2025-09-16 + +## [23.10.0] 9/15/2025 + +### Build + +* Fix Linking with GCC ([#4969](https://github.com/EQEmu/Server/pull/4969)) @solar984 2025-08-03 + +### Code + +* Add #npcedit npc_tint_id Help Message ([#4982](https://github.com/EQEmu/Server/pull/4982)) @Kinglykrab 2025-08-17 +* Cleanup #show ip_lookup Message ([#5005](https://github.com/EQEmu/Server/pull/5005)) @Kinglykrab 2025-08-30 +* Fix #set race 0 Message ([#5004](https://github.com/EQEmu/Server/pull/5004)) @Kinglykrab 2025-08-30 +* Fix Issues with Strings::Commify and Mob::SendStatsWindow ([#4984](https://github.com/EQEmu/Server/pull/4984)) @Kinglykrab 2025-08-17 +* Remove Attributions ([#4988](https://github.com/EQEmu/Server/pull/4988)) @KimLS 2025-08-16 +* Remove Unused errorname Variable ([#5001](https://github.com/EQEmu/Server/pull/5001)) @Kinglykrab 2025-08-29 + +### Commands + +* Add #find account Subcommand ([#4981](https://github.com/EQEmu/Server/pull/4981)) @Kinglykrab 2025-08-17 +* Add #show keyring Subcommand ([#4973](https://github.com/EQEmu/Server/pull/4973)) @Kinglykrab 2025-08-03 +* Add #task complete Saylink to #task show ([#4985](https://github.com/EQEmu/Server/pull/4985)) @Kinglykrab 2025-08-17 + +### Constants + +* Change Race Changes to Race Namespace ([#5000](https://github.com/EQEmu/Server/pull/5000)) @Kinglykrab 2025-08-30 +* Convert SE Defines to SpellEffect Namespace ([#4999](https://github.com/EQEmu/Server/pull/4999)) @Kinglykrab 2025-08-30 + +### Database + +* Add `heal_amount` to `character_stats_record` ([#4986](https://github.com/EQEmu/Server/pull/4986)) @Kinglykrab 2025-08-17 + +### Fixes + +* Fix #show recipe uint16 Cap ([#4978](https://github.com/EQEmu/Server/pull/4978)) @Kinglykrab 2025-08-11 +* Fix Race 474 for Titanium ([#4979](https://github.com/EQEmu/Server/pull/4979)) @regneq 2025-08-11 +* Fix Recipe Inspect Bug ([#4994](https://github.com/EQEmu/Server/pull/4994)) @Kinglykrab 2025-08-30 +* Fix Several Evolving Item Bugs ([#4992](https://github.com/EQEmu/Server/pull/4992)) @neckkola 2025-09-08 +* Fix Task Reloading ([#5002](https://github.com/EQEmu/Server/pull/5002)) @Kinglykrab 2025-08-29 + +### Loginserver + +* Fix Legacy World When Using Local DB ([#4970](https://github.com/EQEmu/Server/pull/4970)) @solar984 2025-08-03 + +### Pets + +* Add Pet Constants and Methods ([#4987](https://github.com/EQEmu/Server/pull/4987)) @Kinglykrab 2025-08-17 + +### Quest API + +* Add EVENT_CHARM_START and EVENT_CHARM_END ([#5013](https://github.com/EQEmu/Server/pull/5013)) @Kinglykrab 2025-09-15 +* Add GetKeyRing() to Perl/Lua ([#4980](https://github.com/EQEmu/Server/pull/4980)) @Kinglykrab 2025-08-17 +* Add GetNPCTintIndex() to Perl/Lua ([#4983](https://github.com/EQEmu/Server/pull/4983)) @Kinglykrab 2025-08-17 +* Add GetTimers() and GetPausedTimers() to Perl/Lua ([#4965](https://github.com/EQEmu/Server/pull/4965)) @Kinglykrab 2025-08-03 +* Add Identifiers to Get/Modify NPC Stat Methods ([#5012](https://github.com/EQEmu/Server/pull/5012)) @Kinglykrab 2025-09-15 + +### Repositories + +* Convert Character Inspect Messages to Repositories ([#4997](https://github.com/EQEmu/Server/pull/4997)) @Kinglykrab 2025-08-30 +* Convert Damage Shield Types to Repositories ([#4995](https://github.com/EQEmu/Server/pull/4995)) @Kinglykrab 2025-08-30 +* Convert Item Loading to Repositories ([#4998](https://github.com/EQEmu/Server/pull/4998)) @Kinglykrab 2025-08-30 +* Convert Mail Key to Repositories ([#5007](https://github.com/EQEmu/Server/pull/5007)) @Kinglykrab 2025-09-15 +* Convert Shared Bank Platinum to Repositories ([#5006](https://github.com/EQEmu/Server/pull/5006)) @Kinglykrab 2025-09-02 +* Convert Spell Loading to Repositories ([#4996](https://github.com/EQEmu/Server/pull/4996)) @Kinglykrab 2025-08-30 +* Convert Total Time Played to Repositories ([#5008](https://github.com/EQEmu/Server/pull/5008)) @Kinglykrab 2025-09-15 + +## [23.9.1] 8/2/2025 + +### Hotfix + +* Fix Quest Ownership Edge Case ([#4977](https://github.com/EQEmu/Server/pull/4977)) @Kinglykrab 2025-08-02 + +## [23.9.0] 8/2/2025 + +### Bots + +* Fix FinishBuffing rule ([#4961](https://github.com/EQEmu/Server/pull/4961)) @nytmyr 2025-07-01 +* Fix ^cast resurrects ([#4958](https://github.com/EQEmu/Server/pull/4958)) @nytmyr 2025-06-29 + +### Build + +* Fix Linking with GCC ([#4969](https://github.com/EQEmu/Server/pull/4969)) @solar984 2025-08-03 +* More Build Speed Improvements ([#4959](https://github.com/EQEmu/Server/pull/4959)) @Akkadius 2025-06-30 + +### Commands + +* Add #show keyring Subcommand ([#4973](https://github.com/EQEmu/Server/pull/4973)) @Kinglykrab 2025-08-03 + +### Database + +* Add Indexes to NPC's Spawns Loot ([#4972](https://github.com/EQEmu/Server/pull/4972)) @Akkadius 2025-07-30 + +### Feature + +* Zone Scripting ([#4908](https://github.com/EQEmu/Server/pull/4908)) @Kinglykrab 2025-07-10 + +### Fixes + +* Add a missing Froglok starting area for Titanium Startzone. ([#4962](https://github.com/EQEmu/Server/pull/4962)) @regneq 2025-07-04 +* Fix Hero's Forge Ingame and Character Select ([#4966](https://github.com/EQEmu/Server/pull/4966)) @Kinglykrab 2025-07-30 +* Show player count on the server list status. ([#4971](https://github.com/EQEmu/Server/pull/4971)) @regneq 2025-07-30 + +### Loginserver + +* Fix Legacy World When Using Local DB ([#4970](https://github.com/EQEmu/Server/pull/4970)) @solar984 2025-08-03 + +### Performance + +* Clear Wearchange Deduplication Cache ([#4960](https://github.com/EQEmu/Server/pull/4960)) @Akkadius 2025-06-30 + +### Quest API + +* Add GetMemberRole() to Perl/Lua ([#4963](https://github.com/EQEmu/Server/pull/4963)) @Barathos 2025-07-10 +* Add GetTimers() and GetPausedTimers() to Perl/Lua ([#4965](https://github.com/EQEmu/Server/pull/4965)) @Kinglykrab 2025-08-03 + ## [23.8.1] 6/28/2025 ### Crash Fix diff --git a/CMakeLists.txt b/CMakeLists.txt index 59279caa8c..d89f370d93 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,490 +1,187 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.12) - -SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/" ${CMAKE_MODULE_PATH}) - -IF(POLICY CMP0074) - CMAKE_POLICY(SET CMP0074 NEW) -ENDIF() - -PROJECT(EQEmu) - -IF(NOT CMAKE_BUILD_TYPE) - SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE) -ENDIF(NOT CMAKE_BUILD_TYPE) - -SET(CMAKE_CXX_STANDARD 20) -SET(CMAKE_CXX_STANDARD_REQUIRED ON) -SET(CMAKE_CXX_EXTENSIONS OFF) - -OPTION(EQEMU_BUILD_STATIC "Build with static linking" OFF) -OPTION(EQEMU_BUILD_PCH "Build with precompiled headers (Windows)" ON) - -IF (EQEMU_BUILD_STATIC) - SET(BUILD_SHARED_LIBS OFF) - SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".a") - MESSAGE(STATUS "Building with static linking") - SET(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") - IF (UNIX) - SET(PERL_LIBRARY "/opt/eqemu-perl/lib/5.32.1/x86_64-linux-thread-multi/CORE/libperl.so") - SET(PERL_INCLUDE_PATH "/opt/eqemu-perl/lib/5.32.1/x86_64-linux-thread-multi/CORE/") - SET(PERL_EXECUTABLE "/opt/eqemu-perl/bin/perl") - ENDIF () -ENDIF (EQEMU_BUILD_STATIC) - - -# Requires libgoogle-perftools-dev google-perftools packages for linux (debian) -IF(EQEMU_ADD_PROFILER) - SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-as-needed,-lprofiler,--as-needed") -ENDIF(EQEMU_ADD_PROFILER) - -IF(USE_MAP_MMFS) - ADD_DEFINITIONS(-DUSE_MAP_MMFS) -ENDIF (USE_MAP_MMFS) - -IF(MSVC) +cmake_minimum_required(VERSION 3.20.0) + +set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/" ${CMAKE_MODULE_PATH}) + +if(NOT CMAKE_TOOLCHAIN_FILE) + if(DEFINED ENV{VCPKG_ROOT}) + message(STATUS "Using vcpkg from VCPKG_ROOT") + set(CMAKE_TOOLCHAIN_FILE + "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" + CACHE FILEPATH "Vcpkg toolchain file" + ) + else() + message(STATUS "Using vcpkg submodule") + set(CMAKE_TOOLCHAIN_FILE + "${CMAKE_CURRENT_SOURCE_DIR}/submodules/vcpkg/scripts/buildsystems/vcpkg.cmake" + CACHE FILEPATH "Vcpkg toolchain file" + ) + endif() +endif() + +project(EQEmu + VERSION 24.10.3 + LANGUAGES CXX +) + +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +#explicitly set CMP0167 for Find Boost +if(POLICY CMP0167) + cmake_policy(SET CMP0167 NEW) +endif() + +if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Build type") +endif() + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +option(EQEMU_BUILD_PCH "Build with precompiled headers (Windows)" ON) + +if(MSVC) add_compile_options(/bigobj) - ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) - ADD_DEFINITIONS(-DNOMINMAX) - ADD_DEFINITIONS(-DCRASH_LOGGING) - ADD_DEFINITIONS(-D_HAS_AUTO_PTR_ETC) # for Luabind on C++17 - - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") - - OPTION(EQEMU_DISABLE_MSVC_WARNINGS "Disable MSVC compile warnings." ON) - IF(EQEMU_DISABLE_MSVC_WARNINGS) - ADD_DEFINITIONS( "/W0 /D_CRT_SECURE_NO_WARNINGS /wd4005 /wd4996 /nologo /Os") - ENDIF(EQEMU_DISABLE_MSVC_WARNINGS) -ELSE(MSVC) - ADD_DEFINITIONS(-DHAS_UNION_SEMUN) -ENDIF(MSVC) + add_compile_definitions(_CRT_SECURE_NO_WARNINGS NOMINMAX WIN32_LEAN_AND_MEAN CRASH_LOGGING) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") + + option(EQEMU_DISABLE_MSVC_WARNINGS "Disable MSVC compile warnings." OFF) + if(EQEMU_DISABLE_MSVC_WARNINGS) + add_compile_options(/W0 /wd4005 /wd4996 /nologo /Os) + endif() + + option(EQEMU_MSVC_DEBUG_CRT "Use the debug CRT on MSVC debug builds" OFF) + if(EQEMU_MSVC_DEBUG_CRT) + add_compile_definitions(_CRT_DBG_MAP_ALLOC) + endif() +else() + add_compile_definitions(HAS_UNION_SEMUN) +endif() #FreeBSD support -IF(UNIX) - IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") - ADD_DEFINITIONS(-DFREEBSD) - ADD_DEFINITIONS(-D_GLIBCXX_USE_C99) - SET(FREEBSD TRUE) - ENDIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") - IF(CMAKE_SYSTEM_NAME MATCHES "Darwin") - ADD_DEFINITIONS(-DDARWIN) - SET(DARWIN TRUE) - ENDIF(CMAKE_SYSTEM_NAME MATCHES "Darwin") -ENDIF(UNIX) - -ADD_DEFINITIONS(-DGLM_FORCE_RADIANS) -ADD_DEFINITIONS(-DGLM_FORCE_CTOR_INIT) -ADD_DEFINITIONS(-DGLM_ENABLE_EXPERIMENTAL) - -#MSVC can fetch dependencies automatically. -IF(MSVC) - INCLUDE("${CMAKE_SOURCE_DIR}/cmake/DependencyHelperMSVC.cmake") -ENDIF() - -#Find everything we need -FIND_PACKAGE(Boost REQUIRED) -FIND_PACKAGE(MySQL) -FIND_PACKAGE(MariaDB) -FIND_PACKAGE(ZLIB) -FIND_PACKAGE(OpenSSL) -FIND_PACKAGE(Lua51) -FIND_PACKAGE(LuaJit) -FIND_PACKAGE(PerlLibs) -FIND_PACKAGE(Sodium) -FIND_PACKAGE(mbedTLS) - -MESSAGE(STATUS "**************************************************") -MESSAGE(STATUS "* Library Detection *") -MESSAGE(STATUS "**************************************************") - -IF(MYSQL_FOUND) - MESSAGE(STATUS "* MySQL: FOUND *") -ELSE() - MESSAGE(STATUS "* MySQL: MISSING *") -ENDIF() - -IF(MARIADB_FOUND) - MESSAGE(STATUS "* MariaDB: FOUND *") -ELSE() - MESSAGE(STATUS "* MariaDB: MISSING *") -ENDIF() - -IF(ZLIB_FOUND) - MESSAGE(STATUS "* ZLIB: FOUND *") -ELSE() - MESSAGE(STATUS "* ZLIB: MISSING *") -ENDIF() - -IF(Lua51_FOUND) - MESSAGE(STATUS "* Lua: FOUND *") -ELSE() - MESSAGE(STATUS "* Lua: MISSING *") -ENDIF() - -IF(LuaJit_FOUND) - MESSAGE(STATUS "* LuaJIT: FOUND *") -ELSE() - MESSAGE(STATUS "* LuaJIT: MISSING *") -ENDIF() - -IF(PerlLibs_FOUND) - MESSAGE(STATUS "* Perl: FOUND *") -ELSE() - MESSAGE(STATUS "* Perl: MISSING *") -ENDIF() - -IF(SODIUM_FOUND) - MESSAGE(STATUS "* libsodium: FOUND *") -ELSE() - MESSAGE(STATUS "* libsodium: MISSING *") -ENDIF() - -IF(OpenSSL_FOUND) - MESSAGE(STATUS "* OpenSSL: FOUND *") -ELSE() - MESSAGE(STATUS "* OpenSSL: MISSING *") -ENDIF() - -IF(MBEDTLS_FOUND) - MESSAGE(STATUS "* mbedTLS: FOUND *") -ELSE() - MESSAGE(STATUS "* mbedTLS: MISSING *") -ENDIF() - -MESSAGE(STATUS "PERL_INCLUDE_PATH: ${PERL_INCLUDE_PATH}") -MESSAGE(STATUS "PERL_LIBRARY: ${PERL_LIBRARY}") -MESSAGE(STATUS "PERL_INCLUDE_DIR: ${PERL_INCLUDE_DIR}") -MESSAGE(STATUS "PERL_INCLUDE_DIRS: ${PERL_INCLUDE_DIRS}") -MESSAGE(STATUS "PERL_LIBRARIES: ${PERL_LIBRARIES}") -MESSAGE(STATUS "PERL_VERSION: ${PERL_VERSION}") - -MESSAGE(STATUS "**************************************************") +if(UNIX) + if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD") + add_compile_definitions(FREEBSD) + add_compile_definitions(_GLIBCXX_USE_C99) + set(FREEBSD TRUE) + endif() + if(CMAKE_SYSTEM_NAME MATCHES "Darwin") + add_compile_definitions(DARWIN) + set(DARWIN TRUE) + endif() +endif() + +find_package(Boost REQUIRED COMPONENTS dynamic_bitset foreach tuple) +find_package(cereal CONFIG REQUIRED) +find_package(fmt CONFIG REQUIRED) +find_package(glm CONFIG REQUIRED) +find_package(unofficial-libmariadb CONFIG REQUIRED) +find_package(libuv CONFIG REQUIRED) +find_package(OpenSSL REQUIRED) +find_package(recastnavigation CONFIG REQUIRED) +find_package(ZLIB REQUIRED) +find_package(LuaJit REQUIRED) +find_package(unofficial-sodium CONFIG REQUIRED) +find_package(PerlLibs) + +message(STATUS "**************************************************") +message(STATUS "* Library Detection *") +message(STATUS "**************************************************") + +if(MARIADB_FOUND) + message(STATUS "* MariaDB: FOUND *") +else() + message(STATUS "* MariaDB: MISSING *") +endif() + +if(ZLIB_FOUND) + message(STATUS "* ZLIB: FOUND *") +else() + message(STATUS "* ZLIB: MISSING *") +endif() + +if(LuaJit_FOUND) + message(STATUS "* LuaJIT: FOUND *") +else() + message(STATUS "* LuaJIT: MISSING *") +endif() + +if(PerlLibs_FOUND) + message(STATUS "* Perl: FOUND *") +else() + message(STATUS "* Perl: MISSING *") +endif() + +if(OpenSSL_FOUND) + message(STATUS "* OpenSSL: FOUND *") +else() + message(STATUS "* OpenSSL: MISSING *") +endif() + +message(STATUS "PERL_INCLUDE_PATH: ${PERL_INCLUDE_PATH}") +message(STATUS "PERL_LIBRARY: ${PERL_LIBRARY}") +message(STATUS "PERL_INCLUDE_DIR: ${PERL_INCLUDE_DIR}") +message(STATUS "PERL_INCLUDE_DIRS: ${PERL_INCLUDE_DIRS}") +message(STATUS "PERL_LIBRARIES: ${PERL_LIBRARIES}") +message(STATUS "PERL_VERSION: ${PERL_VERSION}") +message(STATUS "**************************************************") #options -OPTION(EQEMU_COMMANDS_LOGGING "Enable GM Command logs" ON) -OPTION(EQEMU_BUILD_SERVER "Build the game server." ON) -OPTION(EQEMU_BUILD_LOGIN "Build the login server." ON) -OPTION(EQEMU_BUILD_HC "Build the headless client." OFF) -OPTION(EQEMU_BUILD_TESTS "Build utility tests." OFF) -OPTION(EQEMU_BUILD_CLIENT_FILES "Build Client Import/Export Data Programs." ON) -OPTION(EQEMU_PREFER_LUA "Build with normal Lua even if LuaJIT is found." OFF) - -#PRNG options -OPTION(EQEMU_ADDITIVE_LFIB_PRNG "Use Additive LFib for PRNG." OFF) -MARK_AS_ADVANCED(EQEMU_ADDITIVE_LFIB_PRNG) -OPTION(EQEMU_BIASED_INT_DIST "Use biased int dist instead of uniform." OFF) -MARK_AS_ADVANCED(EQEMU_BIASED_INT_DIST) -SET(EQEMU_CUSTOM_PRNG_ENGINE "" CACHE STRING "Custom random engine. (ex. std::default_random_engine)") -MARK_AS_ADVANCED(EQEMU_CUSTOM_PRNG_ENGINE) - -IF(CMAKE_COMPILER_IS_GNUCXX) - OPTION(EQEMU_SFMT19937 "Use GCC's extention for SIMD Fast MT19937." OFF) - MARK_AS_ADVANCED(EQEMU_SFMT19937) -ENDIF() - -IF(EQEMU_ADDITIVE_LFIB_PRNG) - ADD_DEFINITIONS(-DUSE_ADDITIVE_LFIB_PRNG) - IF(EQEMU_SFMT19937) - MESSAGE(STATUS "SFMT19937 and ADDITITVE_LFIB_PRNG both set, SFMT19937 ignored.") - SET(EQEMU_SFMT19937 OFF) - ENDIF() - IF(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "") - MESSAGE(STATUS "CUSTOM_PRNG_ENGINE and ADDITITVE_LFIB_PRNG both set, CUSTOM_PRNG_ENGINE ignored.") - SET(EQEMU_CUSTOM_PRNG_ENGINE "") - ENDIF() -ENDIF() - -IF(EQEMU_SFMT19937) - ADD_DEFINITIONS(-DUSE_SFMT19937) - IF(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "") - MESSAGE(STATUS "CUSTOM_PRNG_ENGINE and SFMT19937 both set, CUSTOM_PRNG_ENGINE ignored.") - SET(EQEMU_CUSTOM_PRNG_ENGINE "") - ENDIF() -ENDIF() - -IF(NOT EQEMU_CUSTOM_PRNG_ENGINE STREQUAL "") - ADD_DEFINITIONS(-DUSE_CUSTOM_PRNG_ENGINE=${EQEMU_CUSTOM_PRNG_ENGINE}) -ENDIF() - -IF(EQEMU_BIASED_INT_DIST) - ADD_DEFINITIONS(-DBIASED_INT_DIST) -ENDIF() - -IF(EQEMU_COMMANDS_LOGGING) - ADD_DEFINITIONS(-DCOMMANDS_LOGGING) -ENDIF(EQEMU_COMMANDS_LOGGING) - -#database -IF(MySQL_FOUND AND MariaDB_FOUND) - SET(DATABASE_LIBRARY_SELECTION MariaDB CACHE STRING "Database library to use: - MySQL - MariaDB" - ) - - IF(DATABASE_LIBRARY_SELECTION STREQUAL "MySQL") - SET(DATABASE_LIBRARY_TYPE " MySQL") - SET(DATABASE_LIBRARY_LIBS ${MySQL_LIBRARIES}) - SET(DATABASE_LIBRARY_INCLUDE ${MySQL_INCLUDE_DIR}) - ELSEIF(DATABASE_LIBRARY_SELECTION STREQUAL "MariaDB") - SET(DATABASE_LIBRARY_TYPE "MariaDB") - SET(DATABASE_LIBRARY_LIBS ${MariaDB_LIBRARIES}) - SET(DATABASE_LIBRARY_INCLUDE ${MariaDB_INCLUDE_DIR}) - ELSE() - MESSAGE(FATAL_ERROR "Unknown database library set, should be one of: MySQL, MariaDB") - ENDIF() -ELSEIF(MariaDB_FOUND) - SET(DATABASE_LIBRARY_TYPE "MariaDB") - SET(DATABASE_LIBRARY_LIBS ${MariaDB_LIBRARIES}) - SET(DATABASE_LIBRARY_INCLUDE ${MariaDB_INCLUDE_DIR}) -ELSEIF(MySQL_FOUND) - SET(DATABASE_LIBRARY_TYPE " MySQL") - SET(DATABASE_LIBRARY_LIBS ${MySQL_LIBRARIES}) - SET(DATABASE_LIBRARY_INCLUDE ${MySQL_INCLUDE_DIR}) -ELSE() - MESSAGE(FATAL_ERROR "One of MySQL or MariaDB is a required dependency.") -ENDIF() - -#security -#prefer openssl to mbedtls (arbitrary) -IF(OpenSSL_FOUND AND MBEDTLS_FOUND) - SET(TLS_LIBRARY_SELECTION OpenSSL CACHE STRING "TLS library to use: - OpenSSL - mbedTLS" - ) - - IF(TLS_LIBRARY_SELECTION STREQUAL "OpenSSL") - SET(TLS_LIBRARY_TYPE " OpenSSL") - SET(TLS_LIBRARY_ENABLED ON) - SET(TLS_LIBRARY_LIBS ${OPENSSL_LIBRARIES}) - SET(TLS_LIBRARY_INCLUDE ${OPENSSL_INCLUDE_DIR}) - ADD_DEFINITIONS(-DEQEMU_USE_OPENSSL) - IF(${OPENSSL_VERSION} VERSION_GREATER_EQUAL "1.1.1") - ADD_DEFINITIONS(-DCPPHTTPLIB_OPENSSL_SUPPORT) - ENDIF() - ELSEIF(TLS_LIBRARY_SELECTION STREQUAL "mbedTLS") - SET(TLS_LIBRARY_TYPE " mbedTLS") - SET(TLS_LIBRARY_ENABLED ON) - SET(TLS_LIBRARY_LIBS ${MBEDTLS_LIBRARY} ${MBEDX509_LIBRARY} ${MBEDCRYPTO_LIBRARY}) - SET(TLS_LIBRARY_INCLUDE ${MBEDTLS_INCLUDE_DIR}) - ADD_DEFINITIONS(-DEQEMU_USE_MBEDTLS) - ELSE() - MESSAGE(FATAL_ERROR "Unknown TLS library set, should be one of: OpenSSL, mbedTLS") - ENDIF() -ELSEIF(OpenSSL_FOUND) - SET(TLS_LIBRARY_TYPE " OpenSSL") - SET(TLS_LIBRARY_ENABLED ON) - SET(TLS_LIBRARY_LIBS ${OPENSSL_LIBRARIES}) - SET(TLS_LIBRARY_INCLUDE ${OPENSSL_INCLUDE_DIR}) - ADD_DEFINITIONS(-DEQEMU_USE_OPENSSL) - IF(${OPENSSL_VERSION} VERSION_GREATER_EQUAL "1.1.1") - ADD_DEFINITIONS(-DCPPHTTPLIB_OPENSSL_SUPPORT) - ENDIF() -ELSEIF(MBEDTLS_FOUND) - SET(TLS_LIBRARY_TYPE " mbedTLS") - SET(TLS_LIBRARY_ENABLED ON) - SET(TLS_LIBRARY_LIBS ${MBEDTLS_LIBRARY} ${MBEDX509_LIBRARY} ${MBEDCRYPTO_LIBRARY}) - SET(TLS_LIBRARY_INCLUDE ${MBEDTLS_INCLUDE_DIR}) - ADD_DEFINITIONS(-DEQEMU_USE_MBEDTLS) -ELSE() - SET(TLS_LIBRARY_TYPE "Disabled") - SET(TLS_LIBRARY_ENABLED OFF) -ENDIF() - -IF(SODIUM_FOUND) - SET(SODIUM_LIBRARY_TYPE "Libsodium") - SET(SODIUM_LIBRARY_ENABLED ON) - SET(SODIUM_LIBRARY_LIBS ${SODIUM_LIBRARIES}) - SET(SODIUM_LIBRARY_INCLUDE ${SODIUM_INCLUDE_DIRS}) - ADD_DEFINITIONS(-DENABLE_SECURITY) -ELSE() - SET(SODIUM_LIBRARY_TYPE " Disabled") - SET(SODIUM_LIBRARY_ENABLED OFF) -ENDIF() - -IF(LUAJIT_FOUND AND NOT (EQEMU_PREFER_LUA AND Lua51_FOUND)) - SET(LUA_LIBRARY_TYPE " LuaJIT") - SET(LUA_LIBRARY_ENABLED ON) - SET(LUA_LIBRARY_LIBS ${LUAJIT_LIBRARY} luabind) - SET(LUA_LIBRARY_INCLUDE ${LUAJIT_INCLUDE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/libs/luabind") -ELSEIF(Lua51_FOUND ) - SET(LUA_LIBRARY_TYPE " Lua 5.1") - SET(LUA_LIBRARY_ENABLED ON) - SET(LUA_LIBRARY_LIBS ${LUA_LIBRARY} luabind) - SET(LUA_LIBRARY_INCLUDE ${LUA_INCLUDE_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/libs/luabind") -ELSE() - SET(LUA_LIBRARY_TYPE "Disabled") - SET(LUA_LIBRARY_ENABLED OFF) -ENDIF() - -IF(PerlLibs_FOUND) - SET(PERL_LIBRARY_TYPE " Perl") - SET(PERL_LIBRARY_ENABLED ON) - SET(PERL_LIBRARY_LIBS ${PERL_LIBRARY}) - SET(PERL_LIBRARY_INCLUDE ${PERL_INCLUDE_PATH}) -ELSE() - SET(PERL_LIBRARY_TYPE "Disabled") - SET(PERL_LIBRARY_ENABLED OFF) -ENDIF() - -#use zlib if exists -IF(ZLIB_FOUND) - OPTION(EQEMU_BUILD_ZLIB "Build internal version of zlib." ON) - IF(EQEMU_BUILD_ZLIB) - SET(ZLIB_LIBRARY_TYPE "zlib-ng") - SET(ZLIB_LIBRARY_LIBS "zlibstatic") - SET(ZLIB_LIBRARY_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/libs/zlibng") - INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_BINARY_DIR}/libs/zlibng") - ELSE() - SET(ZLIB_LIBRARY_TYPE " zlib") - SET(ZLIB_LIBRARY_LIBS ${ZLIB_LIBRARY}) - SET(ZLIB_LIBRARY_INCLUDE ${ZLIB_INCLUDE_DIRS}) - ENDIF() -ELSE() - SET(ZLIB_LIBRARY_TYPE "zlib-ng") - SET(ZLIB_LIBRARY_LIBS "zlibstatic") - SET(ZLIB_LIBRARY_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/libs/zlibng") -ENDIF() - -IF (EQEMU_BUILD_STATIC) - SET(ZLIB_LIBRARY_LIBS libz.a) -ENDIF(EQEMU_BUILD_STATIC) - -MESSAGE(STATUS "") -MESSAGE(STATUS "**************************************************") -MESSAGE(STATUS "* Library Usage *") -MESSAGE(STATUS "**************************************************") -MESSAGE(STATUS "* Database: ${DATABASE_LIBRARY_TYPE} *") -MESSAGE(STATUS "* TLS: ${TLS_LIBRARY_TYPE} *") -MESSAGE(STATUS "* Sodium: ${SODIUM_LIBRARY_TYPE} *") -MESSAGE(STATUS "* Lua: ${LUA_LIBRARY_TYPE} *") -MESSAGE(STATUS "* Perl: ${PERL_LIBRARY_TYPE} *") -MESSAGE(STATUS "* zlib: ${ZLIB_LIBRARY_TYPE} *") -MESSAGE(STATUS "**************************************************") - -#setup server libs and headers -SET(SERVER_LIBS common ${DATABASE_LIBRARY_LIBS} ${ZLIB_LIBRARY_LIBS} ${Boost_LIBRARIES} uv_a fmt RecastNavigation::Detour) - -set(FMT_HEADER_ONLY OFF) - -INCLUDE_DIRECTORIES(SYSTEM "${DATABASE_LIBRARY_INCLUDE}") -INCLUDE_DIRECTORIES(SYSTEM "${ZLIB_LIBRARY_INCLUDE}") -INCLUDE_DIRECTORIES(SYSTEM "${Boost_INCLUDE_DIRS}") -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/glm") -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/cereal/include") -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/fmt/include") -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/libuv/include" ) -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/recastnavigation/DebugUtils/Include") -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/recastnavigation/Detour/Include") -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/recastnavigation/DetourCrowd/Include") -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/recastnavigation/DetourTileCache/Include") -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/recastnavigation/Recast/Include") -INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/submodules/websocketpp") - -# silence obnoxious deprecation message -ADD_DEFINITIONS(-DBOOST_BIND_GLOBAL_PLACEHOLDERS) - -IF(TLS_LIBRARY_ENABLED) - SET(SERVER_LIBS ${SERVER_LIBS} ${TLS_LIBRARY_LIBS}) - INCLUDE_DIRECTORIES(SYSTEM "${TLS_LIBRARY_INCLUDE}") -ENDIF() - -IF(SODIUM_LIBRARY_ENABLED) - SET(SERVER_LIBS ${SERVER_LIBS} ${SODIUM_LIBRARY_LIBS}) - INCLUDE_DIRECTORIES(SYSTEM "${SODIUM_LIBRARY_INCLUDE}") -ENDIF() - -IF(LUA_LIBRARY_ENABLED) - OPTION(EQEMU_BUILD_LUA "Build Lua parser." ON) - - IF(EQEMU_BUILD_LUA) - ADD_DEFINITIONS(-DLUA_EQEMU) - SET(ZONE_LIBS ${LUA_LIBRARY_LIBS}) - INCLUDE_DIRECTORIES(SYSTEM "${LUA_LIBRARY_INCLUDE}") - - OPTION(EQEMU_SANITIZE_LUA_LIBS "Sanitize Lua Libraries (Remove OS and IO standard libraries from being able to run)." ON) - IF(EQEMU_SANITIZE_LUA_LIBS) - ADD_DEFINITIONS(-DSANITIZE_LUA_LIBS) - ENDIF() - ENDIF() -ENDIF() - -IF(PERL_LIBRARY_ENABLED) - OPTION(EQEMU_BUILD_PERL "Build Perl parser." ON) - IF(EQEMU_BUILD_PERL) - SET(SERVER_LIBS ${SERVER_LIBS} ${PERL_LIBRARY_LIBS} perlbind) - INCLUDE_DIRECTORIES(SYSTEM "${PERL_LIBRARY_INCLUDE}") - ADD_DEFINITIONS(-DEMBPERL) - ADD_DEFINITIONS(-DEMBPERL_PLUGIN) - ADD_DEFINITIONS(-DPERLBIND_NO_STRICT_SCALAR_TYPES) - IF (UNIX AND EQEMU_BUILD_STATIC) - SET(SERVER_LIBS ${SERVER_LIBS} libcrypt.a) - ENDIF () - ENDIF() -ENDIF() - -IF(WIN32) - SET(SERVER_LIBS ${SERVER_LIBS} "ws2_32" "psapi" "iphlpapi" "userenv") -ENDIF() - -IF(UNIX) - SET(SERVER_LIBS ${SERVER_LIBS} ${CMAKE_DL_LIBS} "z" "m" "pthread") - IF(NOT DARWIN) - SET(SERVER_LIBS ${SERVER_LIBS} "rt") - ENDIF() - # Freebsd provides uuids in the C library - IF(NOT ${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD") - SET(SERVER_LIBS ${SERVER_LIBS} "uuid") - ENDIF() -ENDIF() - -SET(ZONE_LIBS ${ZONE_LIBS} ${SERVER_LIBS}) - -IF(EQEMU_BUILD_LOGIN AND NOT TLS_LIBRARY_ENABLED) - MESSAGE(FATAL_ERROR "Login server requires a TLS Library to build.") -ENDIF() - -IF(EQEMU_BUILD_HC AND NOT TLS_LIBRARY_ENABLED) - MESSAGE(FATAL_ERROR "Headless client requires a TLS Library to build.") -ENDIF() - -IF(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS OR EQEMU_BUILD_HC) - ADD_SUBDIRECTORY(common) - ADD_SUBDIRECTORY(libs) - ADD_SUBDIRECTORY(submodules/fmt) - ADD_SUBDIRECTORY(submodules/libuv) - - IF(EQEMU_BUILD_ZLIB) - SET(ZLIB_COMPAT ON CACHE BOOL "Compile with zlib compatible API") - SET(ZLIB_ENABLE_TESTS OFF CACHE BOOL "Build test binaries") - ADD_SUBDIRECTORY(libs/zlibng) - ENDIF() - - SET(RECASTNAVIGATION_DEMO OFF CACHE BOOL "Build demo") - SET(RECASTNAVIGATION_TESTS OFF CACHE BOOL "Build tests") - SET(RECASTNAVIGATION_EXAMPLES OFF CACHE BOOL "Build examples") - ADD_SUBDIRECTORY(submodules/recastnavigation) -ENDIF(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS OR EQEMU_BUILD_HC) - -IF(EQEMU_BUILD_SERVER) - ADD_SUBDIRECTORY(shared_memory) - ADD_SUBDIRECTORY(world) - ADD_SUBDIRECTORY(zone) - ADD_SUBDIRECTORY(ucs) - ADD_SUBDIRECTORY(queryserv) - ADD_SUBDIRECTORY(eqlaunch) -ENDIF(EQEMU_BUILD_SERVER) - -IF(EQEMU_BUILD_LOGIN) - ADD_SUBDIRECTORY(loginserver) -ENDIF(EQEMU_BUILD_LOGIN) - -IF(EQEMU_BUILD_HC) - ADD_SUBDIRECTORY(hc) -ENDIF(EQEMU_BUILD_HC) - -IF(EQEMU_BUILD_TESTS) - ADD_SUBDIRECTORY(tests) -ENDIF(EQEMU_BUILD_TESTS) - -IF(EQEMU_BUILD_CLIENT_FILES) - ADD_SUBDIRECTORY(client_files) -ENDIF(EQEMU_BUILD_CLIENT_FILES) +option(EQEMU_BUILD_SERVER "Build the game server." ON) +option(EQEMU_BUILD_LOGIN "Build the login server." ON) +option(EQEMU_BUILD_TESTS "Build utility tests." OFF) +option(EQEMU_BUILD_CLIENT_FILES "Build Client Import/Export Data Programs." ON) + +if(PerlLibs_FOUND) + option(EQEMU_BUILD_PERL "Build Perl parser." ON) + + if(EQEMU_BUILD_PERL) + set(PERL_LIBRARY_TYPE " Perl") + else() + set(PERL_LIBRARY_TYPE " Missing") + endif() +else() + set(PERL_LIBRARY_TYPE "Disabled") +endif() + +message(STATUS "") +message(STATUS "**************************************************") +message(STATUS "* Library Usage *") +message(STATUS "**************************************************") +message(STATUS "* Database: MariaDB *") +message(STATUS "* TLS: OpenSSL *") +message(STATUS "* Lua: LuaJIT *") +message(STATUS "* Perl: ${PERL_LIBRARY_TYPE} *") +message(STATUS "* zlib: ZLIB *") +message(STATUS "**************************************************") + + +option(EQEMU_BUILD_LUA "Build Lua parser." ON) + +if(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS OR EQEMU_BUILD_CLIENT_FILES) + add_subdirectory(common) + add_subdirectory(libs) +else() + message(FATAL_ERROR "No targets were selected to build, we must build at least one target.") +endif() + +if(EQEMU_BUILD_SERVER) + add_subdirectory(shared_memory) + add_subdirectory(world) + add_subdirectory(zone) + add_subdirectory(ucs) + add_subdirectory(queryserv) + add_subdirectory(eqlaunch) +endif() + +if(EQEMU_BUILD_LOGIN) + add_subdirectory(loginserver) +endif() + +if(EQEMU_BUILD_TESTS) + add_subdirectory(tests) +endif() + +if(EQEMU_BUILD_CLIENT_FILES) + add_subdirectory(client_files) +endif() diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000000..f410afea4e --- /dev/null +++ b/CMakePresets.json @@ -0,0 +1,53 @@ +{ + "version": 3, + "cmakeMinimumRequired": { + "major": 3, + "minor": 19, + "patch": 0 + }, + "configurePresets": [ + { + "name": "linux-debug", + "displayName": "Linux Debug", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Debug", + "CMAKE_EXPORT_COMPILE_COMMANDS": "ON", + "CMAKE_C_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache", + "EQEMU_BUILD_LOGIN": "ON", + "EQEMU_BUILD_TESTS": "ON", + "EQEMU_ADD_PROFILER": "ON" + } + }, + { + "name": "linux-release", + "displayName": "Linux Release", + "generator": "Ninja", + "binaryDir": "${sourceDir}/build/release", + "cacheVariables": { + "CMAKE_BUILD_TYPE": "Release", + "CMAKE_C_COMPILER_LAUNCHER": "ccache", + "CMAKE_CXX_COMPILER_LAUNCHER": "ccache", + "EQEMU_BUILD_LOGIN": "ON" + } + }, + { + "name": "win-msvc", + "displayName": "Windows MSVC (VS 2022)", + "generator": "Visual Studio 17 2022", + "binaryDir": "${sourceDir}/build/${presetName}", + "architecture": { "value": "x64" }, + "cacheVariables": { + "CMAKE_CONFIGURATION_TYPES": "Debug;Release", + "EQEMU_BUILD_LOGIN": "ON", + "EQEMU_BUILD_TESTS": "ON", + "EQEMU_BUILD_PERL": "ON", + "PERL_EXECUTABLE": "C:/Strawberry/perl/bin/perl.exe", + "PERL_INCLUDE_PATH": "C:/Strawberry/perl/lib/CORE", + "PERL_LIBRARY": "C:/Strawberry/perl/lib/CORE/libperl524.a" + } + } + ] +} diff --git a/LICENSE b/LICENSE deleted file mode 100644 index f288702d2f..0000000000 --- a/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000000..04fb21e16f --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,675 @@ +# GNU GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +## Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom +to share and change all versions of a program--to make sure it remains +free software for all its users. We, the Free Software Foundation, use +the GNU General Public License for most of our software; it applies +also to any other work released this way by its authors. You can apply +it to your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you +have certain responsibilities if you distribute copies of the +software, or if you modify it: responsibilities to respect the freedom +of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the +manufacturer can do so. This is fundamentally incompatible with the +aim of protecting users' freedom to change the software. The +systematic pattern of such abuse occurs in the area of products for +individuals to use, which is precisely where it is most unacceptable. +Therefore, we have designed this version of the GPL to prohibit the +practice for those products. If such problems arise substantially in +other domains, we stand ready to extend this provision to those +domains in future versions of the GPL, as needed to protect the +freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish +to avoid the special danger that patents applied to a free program +could make it effectively proprietary. To prevent this, the GPL +assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + +## TERMS AND CONDITIONS + +### 0. Definitions. + +"This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a "modified version" of +the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays "Appropriate Legal Notices" to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +### 1. Source Code. + +The "source code" for a work means the preferred form of the work for +making modifications to it. "Object code" means any non-source form of +a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +### 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + +### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +### 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +### 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +- a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. +- b) The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in section 4 + to "keep intact all notices". +- c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. +- d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +### 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +- a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. +- b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the Corresponding + Source from a network server at no charge. +- c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. +- d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. +- e) Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the general + public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +"normally used" refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +### 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +- a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or +- b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or +- c) Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or +- d) Limiting the use for publicity purposes of names of licensors + or authors of the material; or +- e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or +- f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions + of it) with contractual assumptions of liability to the recipient, + for any liability that these contractual assumptions directly + impose on those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +### 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +### 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +### 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +### 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +### 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree to +terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +### 13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +### 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in +detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU General Public +License "or any later version" applies to it, you have the option of +following the terms and conditions either of that numbered version or +of any later version published by the Free Software Foundation. If the +Program does not specify a version number of the GNU General Public +License, you may choose any version ever published by the Free +Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU General Public License can be used, that proxy's public +statement of acceptance of a version permanently authorizes you to +choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +### 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +### 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +### 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +## How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper +mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, your +program's commands might be different; for a GUI interface, you would +use an "about box". + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU GPL, see . + +The GNU General Public License does not permit incorporating your +program into proprietary programs. If your program is a subroutine +library, you may consider it more useful to permit linking proprietary +applications with the library. If this is what you want to do, use the +GNU Lesser General Public License instead of this License. But first, +please read . diff --git a/README.md b/README.md index 033fcccabb..bc709c681d 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

EQEmulator Server Platform

- +

@@ -9,17 +9,17 @@

-Contributors + +Contributors Discord -Docs -License -Latest Release -Release Date -Github All Releases -Build Status +Docs +License +Latest Release +Release Date +Github All Releases GitHub Issues or Pull Requests Docker Pulls -Build Status Official +Official

@@ -121,30 +121,30 @@ Every system, packet, opcode, and game mechanic has been reconstructed through c | Resource | Badges | Link | |---------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------| -| **EQEmulator Docs** | [![Docs](https://img.shields.io/badge/docs-MkDocs%20Powered-blueviolet)](https://docs.eqemu.io) | [docs.eqemu.io](https://docs.eqemu.io/) | +| **EQEmulator Docs** | [![Docs](https://img.shields.io/badge/docs-MkDocs%20Powered-blueviolet)](https://docs.eqemu.dev) | [docs.eqemu.dev](https://docs.eqemu.dev/) | | **Discord Community**| [![Discord](https://img.shields.io/discord/212663220849213441?label=Discord&logo=discord&color=7289DA)](https://discord.gg/QHsm7CD) | [Join Discord](https://discord.gg/QHsm7CD) | -| **Latest Release** | [![Latest Release](https://img.shields.io/github/v/release/eqemu/server)](https://github.com/eqemu/server/releases)
[![Release Date](https://img.shields.io/github/release-date/EQEmu/Server)](https://github.com/EQEmu/Server/releases)
[![All Releases](https://img.shields.io/github/downloads/eqemu/server/total.svg)](https://github.com/eqemu/server/releases) | [View Releases](https://github.com/eqemu/server/releases) | -| **License** | [![License](https://img.shields.io/github/license/EQEmu/Server)](./LICENSE) | [View License](./LICENSE) | -| **Build Status** | [![Build Status](http://drone.akkadius.com/api/badges/EQEmu/Server/status.svg)](http://drone.akkadius.com/EQEmu/Server) | [View Build Status](http://drone.akkadius.com/EQEmu/Server) | +| **Latest Release** | [![Latest Release](https://img.shields.io/github/v/release/EQEmu/EQEmu)](https://github.com/EQEmu/EQEmu/releases)
[![Release Date](https://img.shields.io/github/release-date/EQEmu/EQEmu)](https://github.com/EQEmu/EQEmu/releases)
[![All Releases](https://img.shields.io/github/downloads/EQEmu/EQEmu/total.svg)](https://github.com/EQEmu/EQEmu/releases) | [View Releases](https://github.com/EQEmu/EQEmu/releases) | +| **License** | [![License](https://img.shields.io/github/license/EQEmu/EQEmu)](./LICENSE.md) | [View License](./LICENSE.md) | +| **Build Status** | [![Build](https://github.com/EQEmu/EQEmu/actions/workflows/build.yaml/badge.svg)](https://github.com/EQEmu/EQEmu/actions/workflows/build.yaml) | [View Build Status](https://github.com/EQEmu/EQEmu/actions/workflows/build.yaml) | | **Docker Pulls** | [![Docker Pulls](https://img.shields.io/docker/pulls/akkadius/eqemu-server)](https://hub.docker.com/r/akkadius/eqemu-server) | [Docker Hub](https://hub.docker.com/r/akkadius/eqemu-server) | -| **Contributions** | [![GitHub PRs](https://img.shields.io/github/issues-pr-closed/eqemu/server)](https://github.com/eqemu/server/pulls?q=is%3Apr+is%3Aclosed) | [Closed PRs & Issues](https://github.com/eqemu/server/pulls?q=is%3Apr+is%3Aclosed) | +| **Contributions** | [![GitHub PRs](https://img.shields.io/github/issues-pr-closed/EQEmu/EQEmu)](https://github.com/EQEmu/EQEmu/pulls?q=is%3Apr+is%3Aclosed) | [Closed PRs & Issues](https://github.com/EQEmu/EQEmu/pulls?q=is%3Apr+is%3Aclosed) | ## ðŸ› ï¸ Getting Started -If you want to set up your own EQEmulator server, please refer to the current [server installation guides](https://docs.eqemu.io/#server-installation). We've had 100,000s of players and developers use our guides to set up their own servers, and we hope you will too! +If you want to set up your own EQEmulator server, please refer to the current [server installation guides](https://docs.eqemu.dev/#server-installation). We've had 100,000s of players and developers use our guides to set up their own servers, and we hope you will too! ## ðŸ—‚ï¸ Related Repositories | Repository | Description | |--------------------|----------------------------------------------------------------------------------| | [ProjectEQ Quests](https://github.com/ProjectEQ/projecteqquests) | Official quests and event scripts for ProjectEQ | -| [Maps](https://github.com/Akkadius/EQEmuMaps) | EQEmu-compatible zone maps | +| [Maps](https://github.com/EQEmu/maps) | EQEmu-compatible zone maps | | [Installer Resources](https://github.com/Akkadius/EQEmuInstall) | Scripts and assets for setting up EQEmu servers | | [Zone Utilities](https://github.com/EQEmu/zone-utilities) | Utilities for parsing, rendering, and manipulating EQ zone files | ## Contributors - - + + diff --git a/client_files/CMakeLists.txt b/client_files/CMakeLists.txt index d4b5962e3d..2fec654cfc 100644 --- a/client_files/CMakeLists.txt +++ b/client_files/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.5) +cmake_minimum_required(VERSION 3.20) add_subdirectory(import) add_subdirectory(export) diff --git a/client_files/export/CMakeLists.txt b/client_files/export/CMakeLists.txt index b7f15dddbd..c81977fb06 100644 --- a/client_files/export/CMakeLists.txt +++ b/client_files/export/CMakeLists.txt @@ -1,16 +1,18 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.12) +cmake_minimum_required(VERSION 3.20.0) -SET(export_sources +set(export_sources main.cpp ) -SET(export_headers +set(export_headers ) -ADD_EXECUTABLE(export_client_files ${export_sources} ${export_headers}) +add_executable(export_client_files ${export_sources} ${export_headers}) -INSTALL(TARGETS export_client_files RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +install(TARGETS export_client_files RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) -TARGET_LINK_LIBRARIES(export_client_files ${SERVER_LIBS}) +target_link_libraries(export_client_files common) +target_include_directories(export_client_files PRIVATE ../..) -SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) +set_property(TARGET export_client_files PROPERTY FOLDER executables/tools) diff --git a/client_files/export/main.cpp b/client_files/export/main.cpp index 8d0a27a3ca..87f29ea56d 100644 --- a/client_files/export/main.cpp +++ b/client_files/export/main.cpp @@ -1,42 +1,40 @@ -/* EQEMu: Everquest Server Emulator - Copyright (C) 2001-2013 EQEMu Development Team (http://eqemulator.net) +/* EQEmu: EQEmulator + + Copyright (C) 2001-2026 EQEmu Development Team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY except by those people which sell it, which - are required to give you total support for your newly bought product; - without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + along with this program. If not, see . */ - -#include - -#include "../../common/eqemu_logsys.h" -#include "../../common/global_define.h" -#include "../../common/shareddb.h" -#include "../../common/eqemu_config.h" -#include "../../common/platform.h" -#include "../../common/crash.h" -#include "../../common/rulesys.h" -#include "../../common/strings.h" -#include "../../common/content/world_content_service.h" -#include "../../common/zone_store.h" -#include "../../common/path_manager.h" -#include "../../common/repositories/base_data_repository.h" -#include "../../common/repositories/db_str_repository.h" -#include "../../common/repositories/skill_caps_repository.h" -#include "../../common/repositories/spells_new_repository.h" -#include "../../common/file.h" -#include "../../common/events/player_event_logs.h" -#include "../../common/skill_caps.h" -#include "../../common/evolving_items.h" +#include "common/content/world_content_service.h" +#include "common/crash.h" +#include "common/eqemu_config.h" +#include "common/eqemu_logsys.h" +#include "common/events/player_event_logs.h" +#include "common/evolving_items.h" +#include "common/file.h" +#include "common/path_manager.h" +#include "common/platform.h" +#include "common/repositories/base_data_repository.h" +#include "common/repositories/db_str_repository.h" +#include "common/repositories/skill_caps_repository.h" +#include "common/repositories/spells_new_repository.h" +#include "common/rulesys.h" +#include "common/shareddb.h" +#include "common/skill_caps.h" +#include "common/strings.h" +#include "common/zone_store.h" + +#include void ExportSpells(SharedDatabase *db); void ExportSkillCaps(SharedDatabase *db); @@ -154,7 +152,7 @@ void ExportSkillCaps(SharedDatabase* db) return; } - const auto& lines = SkillCapsRepository::GetSkillCapFileLines(*db); + const auto& lines = SkillCapsRepository::GetMulticlassSkillCapFileLines(*db); const std::string& file_string = Strings::Implode("\n", lines); @@ -162,7 +160,7 @@ void ExportSkillCaps(SharedDatabase* db) file.close(); - LogInfo("Exported [{}] Skill Cap{}", lines.size(), lines.size() != 1 ? "s" : ""); + LogInfo("Exported [{}] Multiclass Skill Cap{}", lines.size(), lines.size() != 1 ? "s" : ""); } void ExportBaseData(SharedDatabase *db) diff --git a/client_files/import/CMakeLists.txt b/client_files/import/CMakeLists.txt index da08cda6e3..7966eb3b3e 100644 --- a/client_files/import/CMakeLists.txt +++ b/client_files/import/CMakeLists.txt @@ -1,16 +1,18 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 3.12) +cmake_minimum_required(VERSION 3.20.0) -SET(import_sources +set(import_sources main.cpp ) -SET(import_headers +set(import_headers ) -ADD_EXECUTABLE(import_client_files ${import_sources} ${import_headers}) +add_executable(import_client_files ${import_sources} ${import_headers}) -INSTALL(TARGETS import_client_files RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) +install(TARGETS import_client_files RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) -TARGET_LINK_LIBRARIES(import_client_files ${SERVER_LIBS}) +target_link_libraries(import_client_files common) +target_include_directories(import_client_files PRIVATE ../..) -SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) +set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) +set_property(TARGET import_client_files PROPERTY FOLDER executables/tools) diff --git a/client_files/import/main.cpp b/client_files/import/main.cpp index b7be706d76..eadb584718 100644 --- a/client_files/import/main.cpp +++ b/client_files/import/main.cpp @@ -1,36 +1,34 @@ -/* EQEMu: Everquest Server Emulator - Copyright (C) 2001-2013 EQEMu Development Team (http://eqemulator.net) +/* EQEmu: EQEmulator + + Copyright (C) 2001-2026 EQEmu Development Team This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; version 2 of the License. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY except by those people which sell it, which - are required to give you total support for your newly bought product; - without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + along with this program. If not, see . */ - -#include "../../common/eqemu_logsys.h" -#include "../../common/global_define.h" -#include "../../common/shareddb.h" -#include "../../common/eqemu_config.h" -#include "../../common/platform.h" -#include "../../common/crash.h" -#include "../../common/rulesys.h" -#include "../../common/strings.h" -#include "../../common/content/world_content_service.h" -#include "../../common/zone_store.h" -#include "../../common/path_manager.h" -#include "../../common/repositories/base_data_repository.h" -#include "../../common/file.h" -#include "../../common/events/player_event_logs.h" -#include "../../common/evolving_items.h" +#include "common/content/world_content_service.h" +#include "common/crash.h" +#include "common/eqemu_config.h" +#include "common/eqemu_logsys.h" +#include "common/events/player_event_logs.h" +#include "common/evolving_items.h" +#include "common/file.h" +#include "common/path_manager.h" +#include "common/platform.h" +#include "common/repositories/base_data_repository.h" +#include "common/rulesys.h" +#include "common/shareddb.h" +#include "common/strings.h" +#include "common/zone_store.h" void ImportSpells(SharedDatabase *db); void ImportSkillCaps(SharedDatabase *db); diff --git a/client_files/login/rof/Resources/loadscreen.jpg b/client_files/login/rof/Resources/loadscreen.jpg new file mode 100644 index 0000000000..9e1c58b3d5 Binary files /dev/null and b/client_files/login/rof/Resources/loadscreen.jpg differ diff --git a/client_files/login/rof/eqlsClient.ini b/client_files/login/rof/eqlsClient.ini new file mode 100644 index 0000000000..942c87a808 --- /dev/null +++ b/client_files/login/rof/eqlsClient.ini @@ -0,0 +1,40 @@ +[STRINGTABLE] +Filename=eqlsstr_us.txt + +[CHAT] +DefaultChannel=General + +[CLIENT] +IniFlushIntervalInSecs=60 +AccountURL=https://account.station.sony.com +EQLiveURL=http://eqlive.station.sony.com/ +TechSupportURL=http://help.station.sony.com/cgi-bin/soe.cfg/php/enduser/live.php +EQHelpURL=www.station.com/kb +NetworkStatusURL=http://eqlive.station.sony.com/support/network_status.jsp +DowntimeURL=http://eqlive.station.sony.com/support/scheduled_downtime.jsp +PasswordResetURL=https://account.station.sony.com/cam/resetRequired/resetPassword!input.action?theme=eq +PasswordToolURL=https://www.station.sony.com/secure/en/registration/view.jsp +WebOrderLink5=https://eqbl.station.sony.com/launchpad/subscription.jsp +WebOrderLink6=http://www.everquest.com/rates +WebOrderLink7=http://www.walkofgame.com/ + + +[DIGITAL_DOWNLOAD] +Kunark=https://store.station.sony.com/digital/index.jsp?SKU=EQ1RE-DD-SW1103-DDRUIN-KUNRK +Velious=https://store.station.sony.com/digital/index.jsp?SKU=EQ1RE-DD-SW1103-DDSCRS-VELIO +Luclin=https://store.station.sony.com/digital/index.jsp?SKU=EQ1RE-DD-SW1103-DDSHDW-LUCLN +PoP=https://store.station.sony.com/digital/index.jsp?SKU=EQ1RE-DD-SW1103-DDPLNS-POWER +LoY=https://store.station.sony.com/store/digitalDistribution/digitalDistributionList.jsp?listname=EQ-LOY +LDoN=https://store.station.sony.com/digitalDistribution/ldn/digitalDistributionList.jsp?listname=EQ-LDN +Gates=https://store.station.sony.com/digitalDistribution/god/digitalDistributionList.jsp?listname=EQ-GOD +Omens=https://store.station.sony.com/digitalDistribution/oow/digitalDistributionList.jsp?listname=EQ-OOW +Dragons=https://store.station.sony.com/digitalDistribution/don/digitalDistributionList.jsp?listname=EQ-DON +Depths=https://store.station.sony.com/digitalDistribution/dod/digitalDistributionList.jsp?listname=EQ-DOD +Prophecy=https://store.station.sony.com/digitalDistribution/por/digitalDistributionList.jsp?listname=EQ-POR +BuriedSea=https://store.station.sony.com/digitalDistribution/tbs/digitalDistribution.jsp?SKU=EQ1RE-DD-SW0207-TBSPRE +SoF=https://account.station.sony.com/authenticated/commerce/updateAddOns!input.action?gameCode=EQ +SoD=https://account.station.sony.com/authenticated/commerce/buyNowFlow.action?gameCode=EQ +Und=https://account.station.sony.com/authenticated/commerce/preOrderEntryPoint.action?gameCode=EQ +HoT=https://account.station.sony.com/authenticated/commerce/preOrderEntryPoint.action?gameCode=EQ +VoA=https://account.station.sony.com/authenticated/dlc/buyDLContentFlow.action?gameCode=EQ +RoF=https://account.station.sony.com/authenticated/dlc/buyDLContentFlow.action?gameCode=EQ diff --git a/client_files/login/rof/eqlsnews.txt b/client_files/login/rof/eqlsnews.txt new file mode 100644 index 0000000000..ef686f8480 --- /dev/null +++ b/client_files/login/rof/eqlsnews.txt @@ -0,0 +1,403 @@ +May 15, 2013
+_____________________
+
+
+*** Hotfix ***
+
+- Restored the missing armor appearances for several Hero's Forge sets.
+
+
+
+May 14, 2013
+_____________________
+
+
+*** Highlights ***
+
+- The four progressive Living Legacy raids -- Infinitely Regenerative Automaton (1 and 2), Eothar the Sand Golem, and the Avatar of Despair -- will be available from May 24th, 2013 to June 17th, 2013.
+- Added melee skill and spell reuse timer groups to the combat abilities window and spell description window. Now conflicts can be seen without having to activate the skills or spells.
+- Added the /stopdisc command, which will cancel any currently running discipline.
+- You can now set options to click through yourself, pets, and mercenaries when clicking on the screen. These settings can be enabled in the Options window.
+- Created the /useitem command, which allows for socials to be created that activate clickable items. See below for details and how to use it.
+- Retuned several Rain of Fear missions to reduce their overall difficulty. See details below.
+- Increased the time of the Bottle of Adventure III and Bottle of Shared Adventure III to 4 hours.
+
+
+*** Items ***
+
+- Prayer Shawl augments now require a distiller to remove.
+- Classes that do not have the Two-Handed Piercing skill can once again use the rare 2HP items that they could use before the skills were split.
+- Fixed the names of a handful of quest items that had been renamed inappropriately.
+- All stages of the Accursed Grin of Malevolence now share a lore group.
+- All stages of the Wretched Skull Ring now share a lore group.
+- Fixed several items that were displaying incorrect, non-functional spell data. Examples include the Gold Full Plate Bracer and Imbued Cabilis Scale Mask.
+- Removed mana regen from several melee class-only weapons.
+- Weapons from Shadow of Fear are now placeable in real estates.
+- Updated the icons for several hundred items, primarily food and tradeskill. For example, aprons look like aprons instead of leather belts, and hilts look like weapon hilts instead of scepters.
+- Teleport to anchor spells once again work on players outside your group.
+- Increased the time of the Bottle of Adventure III and Bottle of Shared Adventure III to 4 hours.
+- Fixed Ghostrider's Bridle.
+- Token of Shattered Memories, Token of Forgotten Memories, and Quintessence of Shadow now have descriptions and grant the correct stats.
+
+
+*** Quests & Events ***
+
+- The four progressive Living Legacy raids -- Infinitely Regenerative Automaton (1 and 2), Eothar the Sand Golem, and the Avatar of Despair -- will be available from May 24th, 2013 to June 17th, 2013.
+- Velishan's Revenge - Velishan no longer casts Frost Shock on the entire raid.
+- Surviving Xmiticzin - The Terror spell cast by Xmiticzin now also roots the target so they won't run through locked doors.
+- Evantil: Heart of the Oak - Raid - The "an aggressive ant" NPCs no longer exhibit odd behavior.
+- The Return of King Xorbb - Raid and Mission - Reduced the range at which the Soul Stealer drains your power.
+- Defeat Zeixshi-Kar - Mission - Reduced the number of adds leading up to Zeixshi-Kar.
+- Defeat Zeixshi-Kar - Mission - Significantly Lowered Zeixshi-Kar's melee damage and HP.
+- Defeat Zeixshi-Kar - Mission - Reduced the amount of HP or DPS added to Zeixshi-Kar depending on your performance with the adds.
+- Defeat Zeixshi-Kar - Mission - Removed anti-kite mechanics from the adds.
+- Evantil: Heart of the Oak - Mission - Reduced the HP of the Molars.
+- Evantil: Heart of the Oak - Mission - Increased the proc rate of Touch of Flame.
+- A Matter of Life and Death - Mission - Significantly reduced the damage of Scorching Bones
+- The Queen's Decree - Mission - Reduced the health of all NPCs in the mission. Grelleth and her children had the largest reductions.
+- The Queen's Decree - Mission - Reduced the damage of all NPC. Adds had the largest reductions.
+- The Queen's Decree - Mission - Reduced the damage of several abilities used by NPCs.
+- The Queen's Decree - Mission - Halved the number of adds that spawn with Turo, Wuran, Zurel.
+- The Queen's Decree - Mission - Lelri and Lelro are no longer concerned about their distance from each other.
+- The Queen's Decree - Mission - Priests of Decay no longer heal Wuran or Grelleth.
+- The Queen's Decree - Mission - Zurel no longer increases damage or rampages below 25 percent health.
+- The Queen's Decree - Mission - Zurel no longer uses Chain Toss, Slam, or Shoulder Throw.
+- The Queen's Decree - Mission - Grelleth only spawns two undead adds during the final phase. Other adds were removed.
+- The Queen's Decree - Mission - Grelleth no longer uses Crush of Fear.
+- The Queen's Decree - Mission - Fearsome Bellow has been redesigned. It deals moderate damage to the most hated and nearby targets. It also increases Grelleth's melee damage by 10 percent per use.
+
+
+*** Spells ***
+
+- Berserker - Vicious Spiral will generate less hate than before and no longer requires you to be below 90 percent health to use.
+- Cleric - Corrected Shining Rampart and Shining Armor so that they no longer conflict with other damage absorbing disciplines.
+- Monk - Earthforce Discipline now correctly triggers either Impenetrable Effect or Impenetrable Effect II when activated.
+- Monk - Lowered the damage threshold that will trigger Swift Reflexes Block to 18,000.
+- Ranger - Renamed Windblast and Ashcloud Enigma to Boon spells. Their triggered focus spells will now match the spells that you cast initially.
+- Ranger - Increased the damage added by the Freeze and Burn spells that are triggered by Windblast and Ashcloud Boon.
+- Shadowknight - Drape of the Fallen has increased its AC to match Cloak of Spurs.
+- Shaman - Corrected all ranks of Recourse heals (Qirik's, Gotikan's, and Blezon's Recourse) so that they now can co-exist with promised heals.
+- Warrior - Harassing Shout Effect now applies a hate-over-time effect in addition to the hate it generates on casting. The spell's endurance cost was increased by a small amount.
+- Warrior - Increased the damage added by Offensive Discipline and decreased the extra damage you take while it is running.
+- Warrior - Tempestuous Defense Stun should now be much more difficult to resist in PvP.
+- Wizard - Ethereal spells from Rain of Fear and Shadow of Fear are now less efficient.
+- Wizard - Increased the recast time of Ethereal Weave to 36 seconds.
+
+
+*** NPC ***
+
+- The wandering Lich of Miragul in the caves of Everfrost is no longer hostile.
+- Lessened Mata Muram's undue influence over the world by removing Discordian appearances from non-Discordian creatures and objects across Norrath.
+- Fixed the spelling errors in the names of goblin aggressors in Warslik's Woods.
+- The Dark Lady will no longer display a pop-up to everyone in Plane of Shadow.
+- Many NPCs that were missing apostrophes in their names will now display them correctly.
+
+
+*** AA ***
+
+- Berserker - Frenzied Axe now triggers a Two-Handed Slashing attack to keep it consistent with other abilities.
+- Berserker - Juggernaut Surge and Savage Spirit now stack correctly.
+- Enchanter - Ethereal Manipulation will now only focus Wizards' Ethereal spell lines as originally intended.
+- Necromancer and Shadowknight - Rest the Dead is now correctly labeled as a Class ability.
+
+
+*** Miscellaneous ***
+
+- Improved performance in several zones.
+- The Guild Lobby map now includes the area leading to the Neighborhoods.
+- Campfires are now fully functional in Plane of Shadow.
+- Added the /stopdisc command, which will cancel any currently running discipline.
+- Fixed a space issue in your name when you had a title that started with a comma.
+- When claiming an item that can be claimed on more than one character, it will no longer incorrectly say that the item can only be claimed once per account.
+- Parcels that contain only money can now be retrieved even if your inventory is completely full.
+- Items that have evolved to level 16 or higher will now properly display when linked in chat.
+- Created the /useitem [subindex] command, which allows for socials to be created that activate clickable items. This will activate the item in an inventory slot number. If that item is a container, then it will also allow for specifying which slot in that container to use.
+- You can now set options to click through yourself, pets, and mercenaries when clicking on the screen. These settings can be enabled in the Options window.
+
+
+*** UI ***
+
+- Fixed some spacing issues and typos in the atlas for Luclin.
+- Added melee skill and spell reuse timer groups to the UI. For melee skills, you can see the timer groups in a new column in the combat abilities window. For spells, this information will now appear in the spell description window.
+
+- Changed -
+EQUI_Animations.xml
+EQUI_CombatSkillsSelectWindow.xml
+EQUI_OptionsWindow.xml
+
+
+*** Already Patched ***
+
+- Updated NPC damage, health, and experience values for many non-boss NPCs in Shadow of Fear raids.
+
+
+
+- The EverQuest Team
+
+
+
+April 24, 2013
+_____________________
+
+
+*** Items ***
+
+- Shadow of Fear bows can now cast Prismatic Ward properly.
+- Berserker chest armor now has the proper focus effect name: Sundering Discipline Quickening.
+- Brell's Blessed Chromatic Strike and Brell's Sacred Chromatic Strike now trigger a separate mana return effect.
+
+
+*** Quests & Events ***
+
+- Prove Your Worth, Slave - Task updates should now be given to all players in the group when stealing fisherman bait.
+- Hold Nothing Back - Task updates should now be given to all players in the group when lighting Shissar on fire, placing cursed weapons in chests, and throwing relic bundles to cultists.
+- Ready The Killing Blow - Task updates should now be given to all players in the group when collecting armor in the gladiator training grounds, and using the tumor on scientists.
+- How Puzzling All These Changes Are - The task element for killing shissar guards and rebel informants now directs you to the correct tunnels.
+- Dial L for Luclin - If you do not get the update for the ritual, the quest will now reset to allow speaking to Aten Ha Ra again.
+
+
+*** Spells ***
+
+- Berserker - Modified Augmented Frenzy so that it only augments the Frenzy skill rather than every skill. Increased the base recast time to 2 minutes. Lowered the damage dealt by Augmented Frenzy Strike. Corrected the description of Augmented Frenzy Effect.
+- Cleric - Corrected the description of Shining Bastion.
+
+
+*** NPC ***
+
+- Chelsith Reborn - Turtles on the beach are no longer immune to snare effects.
+- New, powerful rare challengers await in Chelsith Reborn. You might discover them if you seek out defeated gladiators, experimental mistakes, and worthy contenders. You will find that they are unusually challenging but unusually rewarding.
+- Fixed a problem that could cause Bashermaker to spawn under the world in Mesa.
+
+
+*** AA ***
+
+- Berserker - Savage Spirit should no longer cause Haste buffs to fade.
+- Necromancer - Corrected a description error for Cascade of Decay.
+- Wizard - Arcane Destruction should now correctly block up to 200,000hp of incoming damage before fading.
+
+
+*** Tradeskills ***
+
+- All new shawl recipes now correctly require a Beautiful Tiger Hide as per their descriptions.
+
+
+- The EverQuest Team
+
+
+
+April 19, 2013
+_____________________
+
+
+*** Hotfix ***
+
+- Hold Nothing Back - Corrected a case in this Chelsith Reborn quest where the Living Flame item was not giving proper quest credit while in a group.
+- Dispelling the Shadows (Group and Raid) - Added a check to prevent a possible reset if an NPC died too early.
+
+
+- The EverQuest Team
+
+
+
+April 17, 2013
+_____________________
+
+
+*** Highlights ***
+
+- Shadow of Fear, the second chapter in Rain of Fear, is now available to everyone who has Rain of Fear!
+- - Explore two new zones: Chelsith Reborn, and the mysterious Plane of Shadow, with new quests, missions, and raids!
+- - Every class has new Alternate Advancement abilities, spells, or disciplines available!
+
+- All weapon and shield ornamentations that are purely cosmetic (augments that do not offer stats or spell effects) no longer require a solvent to remove.
+- Hero's Forge robe augments can now be used on any leather armor.
+- Created a new skill, Two-Handed Piercing, and renamed the existing Piercing skill to One-Handed Piercing. All existing characters will be granted equivalent skills in both types of piercing (where applicable to their class).
+
+
+*** Housing Improvements ***
+
+- House yards and interiors can now hold more items.
+- - All yards have had their capacity increased by 30.
+- - All one room houses can now hold 300 items.
+- - All three room houses can now hold 500 items.
+- - The Hermit's Hideaway now holds 400 items.
+- - Evantil's Abode now holds 600 items.
+- Greatly reduced the size and weight of houses when placed in your inventory.
+- Added a /leaverealestate command that will exit a real estate zone. This is also available in the EQ Menu under Real Estate.
+- Keep an eye on the Marketplace for new updates to housing items. Many of them will be changing quantities (increasing) and prices (decreasing) soon!
+
+
+*** Items ***
+
+- All weapon and shield ornamentations that are purely cosmetic (augments that do not offer stats or spell effects) no longer require a solvent to remove.
+- The mana recourse effects on all of Brell's prayer shawls have been increased in power, but now should only benefit the caster once per spell.
+- Rust-Tinged Box of Fear now states what class it is for in the Lore tab description.
+- Removed Berserkers from Warden's Stone of Enhancement since they can't use 1h weapons.
+- Freedom of Dexterity now has added backstab damage.
+- Fear Fruit now properly causes damage when eating it.
+- Hero's Forge robe augments can now be used on any leather armor.
+- Increased the mana, spell damage, and clairvoyance on caster 2h weapons from Rain of Fear. Removed attack, combat effects, and strikethrough from caster 1h and 2h weapons.
+- Changed the way the berserker breastplate clicks Chaotic Frenzy and Boundless Frenzy work. The procs are now much harder to resist, but they have a limit of 10 procs as they were originally intended to and occur less often.
+- Added labels to many existing items that were part of lore groups but did not indicate so, such as Drops of Focused Sunlight and Stones of Power.
+- Fixed a spelling error in the "Title Pack: Animal Lover" item.
+- 2-handed piercing bonuses have been added to Cleave. Beginning with Cleave VII, 2-handed piercing has replaced Kick when Cleave has a damage added bonus. This is a short-term fix. We are working on a long term resolution for a future release.
+- Corrected several items that could sometimes fail to activate their spell effects due to timer sharing. Examples include the 'Vicious Rabbit' and the potion 'Kilva's Blistering Flesh'.
+- Clarified the tribute description for the 'Trophy of the Garden Path'.
+- Yunaizarn's Fang can now stun enemies up to level 100.
+
+
+*** Tradeskills ***
+
+- Kerst Frostrift and his companions have created what they call the "New Tanaan Merchant Alliance" in the Plane of Knowledge. He might have some particularly interesting news for you if you have completed a certain shawl...
+- The book "Fear Powered Fletching" now lists how to create Terror Crossbows and Terror Crossbow Bolts.
+
+
+*** Quests & Events ***
+
+- Piestro's Day Off - Made significant tuning changes to the mission:
+- - Enemies will no longer repop in the mission.
+- - Removed most passive abilities from the template characters and replaced them with activated abilities.
+- - Lowered the recast timers of several very long abilities so they can be used much more often.
+- - Increased template character power relevant to the template class. Warriors now have higher defense and AC. Monks and Rogues have higher melee damage output and avoidance. Casters have larger mana pools and regenerate mana faster.
+- - Added a dagger to the rogue template so that they can properly backstab.
+- - Most NPCs can now be snared, mesmerized, and otherwise crowd controlled.
+- - Reduced the HP, damage, and maximum level of many NPCs that could previously overwhelm the party.
+- - Reduced the spell resistance for all NPCs.
+- - Changed the maximum number of any particular template character to 1. Each player must now play a different class.
+- - Removed the ability to bring Mercenaries into the instance.
+- The Dynamic Zones for Grelleth's Palace and Shard's Landing will now allow players to be added after the raid event has been won.
+- Guardian of the Gate - Modified the event so its difficulty is closer to other events in its tier:
+- - Reduced the amount of damage Findlewill and Mordaur do.
+- - Findlewill will only choose one target to cast a fireball on.
+- - Fireballs move a bit more slowly now, giving you a better chance to run away!
+- The Return of King Xorbb - Raid and Mission - Several changes were made to prevent potential zone crashes: Brantun no longer has the power to crystallize his opponents, and the Soul Stealer no longer uses an aura to steal power.
+- Sheriff Knotter Botter is continuing his hiatus while the "Big Gnomes, Big Problems" mission is addressed. Access to all 14th Anniversary missions has been extended to June 26th.
+
+
+*** Spells ***
+
+- All player spells and abilities that affected piercing or two-handed attacks have had Two-Handed Piercing added where appropriate.
+- Ranger - Flusterbolt and Blusterbolt are now physical resist abilities and should land far more reliably.
+- Spells that cure detrimental effects, such as Splash of Sanctification and Radiant Cure, will no longer remove charm from pets owned by players.
+- Beastlord, Magician, and Necromancer pets (level 96-100) have had their base HP and AC reduced slightly. Reduced the AC and HP advantage given to pets with the most basic focus (Enhanced Minion VII) and adjusted the later ranks accordingly.
+- All existing player-castable pet block buffs have had damage caps added to them. These values should easily exceed damage from group content of the appropriate eras:
+- - Set a damage cap per hit on Ward of Calliav of 11747.
+- - Set a damage cap per hit on Guard of Calliav of 12922.
+- - Set a damage cap per hit on Protection of Calliav of 14214.
+- - Set a damage cap per hit on Bulwark of Calliav and Feral Guard of 15635.
+- - Set a damage cap per hit on Mammoth-Hide Guard of 17198.
+- - Set a damage cap per hit on Aegis of Calliav of 17198.
+- - Set a damage cap per hit on Dragonscale Guard of 18918.
+- - Set a damage cap per hit on Bulwark of Tri'Qaras of 18017/18467/18929.
+- - Set a damage cap per hit on Aegis of Kildrukaun of 18918.
+- - Set a damage cap per hit on Spectral Rampart of 19580.
+- - Set a damage cap per hit on Beastwood Rampart of 20265.
+- - Set a damage cap per hit on Beastwood Ward of 22902.
+
+
+*** AA ***
+
+- All AAs that affected piercing or two-handed attacks have had Two-Handed Piercing added where appropriate.
+- Fixed an issue where using a Glyph AA would cause your current HP to get out of synch with the server.
+- AAs such as Mystical Shield that allow you to innately resist spells will no longer block beneficial spells.
+- Nature's Bounty will now allow for a proper second forage in zones where there are scripted forage events.
+- Berserker - Dying Blow will now correctly trigger when you die.
+- Cleric - Corrected an issue with Touch of the Divine which could have prevented it from properly healing the player it landed on.
+- Monk - Techniques of Master Wu will now execute only the skill that triggered it, and can now chain a few extra times.
+
+
+*** Achievements ***
+
+- Existing Rain of Fear Collection Achievements have been moved underneath the Rain of Fear expansion header in the Achievements window. This should not affect player progression on those achievements.
+
+
+*** Miscellaneous ***
+
+- It is now possible to forage while on a mount.
+- Added the 2H Piercing skill to the game, and renamed Piercing to 1H Piercing.
+- Fixed an issue that would cause certain archery attacks to miss when accuracy was too high.
+- Fixed multiple instances of abilities and spells with a percent chance to happen missing out on 1% of that chance.
+- Adjusted the difficulty of learning Begging, Intimidate, and Disarm. They should be much easier to learn.
+- - Intimidate can now gain skill on a success or a failure.
+- - Disarm can now be attempted on enemies that are not holding weapons.
+- Fixed an issue where ground spawns (such as collection items) could spawn in the air.
+
+
+*** UI ***
+
+- Added more appropriate minimum sizes to some of the windows.
+- Added the ability to pull up the bazaar search (Shift+Ctrl+Left Click) and barter search (Shift+Alt+Left Click) windows from multiple different locations like inventory slots or item links.
+- Changed the selections in the Loot Nodrop confirmation pulldown. "Sometimes" is now named "Not Usable". Additionally, updated /lootnodrop to now accept "usable".
+- Added check boxes to filter mercenaries and pets in the Tracking Window that tie in to the existing All, Group or None filters.
+- Converted all of the dragitem TGA files to the DDS format to reduce memory requirements. If you maintain a UI that uses custom images, we suggest you define these images in another XML file and add the name of that file to EQUI.xml instead of adding them directly to EQUI_Animations.xml.
+- Corrected many icons that previously bled into each other.
+- Added many more usable icons to the game.
+- Converted the location of where we define a window as "Escapable" from the code to the XML for that window. There is now a new XML tag that we recognize "Escapable". By default, all windows that don't have this tag will default to closing when pressing 'Esc'.
+- Added the ability to set "'Esc' to Close" to the default context menu for all windows.
+- Changed defaults.ini to force many windows to not be escapable by default to address clients using custom UI's that haven't been updated.
+- The SC icon will now flash and broadcast a message when an item goes on a flash sale. Clicking the SC button will take you to that item.
+
+- Changed -
+EQUI_ActionsWindow.xml
+EQUI_AggroMeterWnd.xml
+EQUI_AlertStackWnd.xml
+EQUI_Animations.xml
+EQUI_AuraWnd.xml
+EQUI_BreathWindow.xml
+EQUI_BuffWindow.xml
+EQUI_CastingWindow.xml
+EQUI_CastSpellWnd.xml
+EQUI_ChatWindow.xml
+EQUI_CombatAbilityWnd.xml
+EQUI_CompassWnd.xml
+EQUI_EQMainWnd.xml
+EQUI_ExtendedTargetWindow.xml
+EQUI_GroupMentorWnd.xml
+EQUI_GroupWindow.xml
+EQUI_HotButtonWnd.xml
+EQUI_LargeDialogWnd.xml
+EQUI_MailCompositionWindow.xml
+EQUI_MercenaryManageWnd.xml
+EQUI_MusicPlayerWnd.xml
+EQUI_OptionsWindow.xml
+EQUI_PetInfoWindow.xml
+EQUI_PlayerWindow.xml
+EQUI_PotionBeltWnd.xml
+EQUI_ShortDurationBuffWindow.xml
+EQUI_TargetOfTargetWindow.xml
+EQUI_TargetWindow.xml
+EQUI_Templates.xml
+EQUI_TrackingWnd.xml
+SIDL.xml
+
+*** Previously Updated ***
+
+- Gearbie Gogglenoggin will now offer the "Infiltrating the Guardian (Level 90)" mission to adventurers level 95 or higher.
+- Assistant Gerta will now offer the "Short Circuit (Level 90)" quest to adventurers level 95 or higher.
+
+
+- The EverQuest Team
+
+
+
+March 27, 2013
+_____________________
+
+
+*** Hotfix ***
+
+- I'm trying to draw a pretty picture of the Guild Lobby, but you keep messing it up. I made you much easier to draw now! - Bristlebane
+- Sheriff Knotter Botter has finished reformulating his plans and has returned to Steamfont Mountains to deal with all those giant skeletons! You can once again participate in the "Ogres at the Gates" and "Big Gnomes, Big Problems" events.
+
+
+
+March 14, 2013
+_____________________
+
+
+*** Hotfix ***
+
+- Set the default option for looting no-drop items to require confirmation to avoid unexpected behavior.
+- Corrected a sporadic zone crash.
+
+
\ No newline at end of file diff --git a/client_files/login/rof/eqlsstr_us.txt b/client_files/login/rof/eqlsstr_us.txt new file mode 100644 index 0000000000..70c8231672 --- /dev/null +++ b/client_files/login/rof/eqlsstr_us.txt @@ -0,0 +1,557 @@ +EQST0002 +0 555 +101 No Error +102 Error - Unknown Error Occurred +103 Error - A timeout occurred +104 Error - Not connected +105 Error - The username and/or password were not valid. Please check them and try again.

Please Note: Until now EverQuest passwords could differ from all other SOE games/services. As part of the process of moving over to the new EverQuest login, all SOE access has been consolidated into a single username/password per account.

For any accounts that had multiple passwords, the non-EverQuest password has been set as the password for that account and should be used to login to any SOE game/service including EverQuest.

If this is your first time logging in, you need to create a username and password by %1

If you have forgotten your username and/or password, you may look them up by %2. +106 DB Error - Username not found +107 DB Error - Invalid password +108 DB Error - Guild name was empty +109 The Login Server is currently unavailable. Please try again later. +110 Error 1017: Cannot login to the EverQuest server. You may need to re-run the Update Patch. Repeatedly seeing this message indicates a loss of connectivity to the Patch Server. This is usually temporary. +111 Error 1018: You currently have an active character on that EverQuest Server, please allow a minute for synchronization and try again. +112 The connection has been terminated by the server. Most likely you have been inactive longer than allowed. +113 In order to login you must reset your password. You may access the SOE password reset web page by %1 +114 You have a character logged into a world server as an OFFLINE TRADER from this account. You may only have 1 character from a single account logged into a server at a time (even across different servers). Would you like to remove this character from the game so you may login? +150 DB Error - execution failed +151 DB Error - no data found +152 DB Error - duplicate record +153 DB Error - invalid row +154 DB Error - invalid parent user ID +155 DB Error - invalid processor speed +156 DB Error - invalid processor type +157 DB Error - invalid system RAM +158 DB Error - invalid video card +159 DB Error - invalid sound card +160 DB Error - invalid connection speed +161 DB Error - invalid OS type +162 DB Error - invalid income level +163 DB Error - invalid marital status +164 DB Error - invalid education +165 DB Error - invalid security question +166 DB Error - invalid data sharing +167 DB Error - invalid game type +168 DB Error - invalid game ID +169 DB Error - invalid game system +170 DB Error - invalid region +171 DB Error - invalid name +172 DB Error - login name already taken +173 DB Error - invalid browser +174 DB Error - visitor same as owner +175 DB Error - invalid country code +176 DB Error - invalid number of children +177 DB Error - database error +178 DB Error - unknown DB error +179 +197 The login server is currently not allowing connections. This is most likely due to a server patch that currently in progress. Please try again later. +198 You are currently not allowed to login to the server becasue this IP has a temporary block on it. Please try again later. +199 You are currently not allowed to login to the server becasue this account has a temporary block on it. Please try again later. +200 The station name is invalid +201 The station name is already taken +202 The password is invalid +203 The first name is invalid +204 The last name is invalid +205 The middle name is invalid +206 The gender is invalid +207 The date of birth is invalid +208 The e-mail address is invalid +209 The country is invalid +210 The zip is invalid +300 The version of messaging being used is not the same between client and server. This is most likely the result of the client and/or server having been patched. Please try re-patching the client in order to correct this issue. +301 You need to be logged into the server before continuing. +302 You already have a character logged into a world server from this account. You may only have 1 character from a single account logged into a server at a time (even across different servers). Would you like to remove this character from the game so you may login? +303 The world server has denied your login request. Please try again later. +304 Your login could not be validated. Please try logging in again. +305 An unknown login error occurred with the login type. Please try logging in again. +306 The login session you supplied is already in use. Please try logging in again. +307 This login requires a valid EverQuest subscription. Please make sure you have signed up for this via the billing option.

You may access the billing system by %1 +308 This login requires that the account be activated. Please make sure your account is active in order to login. +309 The server requires that you logout and log back in before proceeding. Please do so. +310 The login data could not be verified. Please try logging in again. +311 The services required to process your request could not be accessed at this time. Please try again in a minute. +312 The services required to process your request could not be accessed at this time. Please try again in a minute. +313 This subscription is pre-paid and therefore can not be cancelled at this time. +314 A valid subscription for this account could not be found. Please make sure you have signed up for the game and the billing is current, for this account.

You may access the billing system by %1 +315 There are pre-conditions that need to be met in order to proceed. These conditions have not been met, and therefore further action can not proceed. +316 The account key supplied is not valid. Please double check the key. +317 The account key you supplied has already been used. An account key may only be used once. +318 The account key you supplied would give you no new features on this account. Therefore this action has failed. +319 The credit card number supplied is invalid. Please re-check this and try again. +320 The chat server is unavailable. Please try again in a minute. +321 The command you entered could not be found. Please make sure you had the spelling/syntax correct. +322 The command syntax was incorrect, please consult the help documentation. +323 That server is currently unavailable. Please check the EverQuest webpage for current server status and try again later. +324 An unknown error occurred while trying to join the server. +325 The command could not be executed. Please check the help and verify syntax. +326 That server is currently unavailable. Please check the EverQuest webpage for current server status and try again later. +327 You could not login because this account requires a secure login. Please try again using your secure login. +328 You can not access this server because you do not have Mac access rights. +329 You can not access this server because you do not have Beta access rights. +330 You can not access this server because you belong to a different provider. +331 You can not access this server because it is a premium Legends server. Access to this server is an additional cost due to the additional features it provides. Please visit the EverQuest website for more information. +332 You cannot access this server because you are only allowed to access free-play servers, this server is not a free-play server. +333 Error - unable to access a UI control. Please check your XML files. +334 The macro ID you specified is less than 1. ID's must be positive numbers. +335 You can not save the macro with this ID since this is the ID of a system macro. Please choose another ID. +336 There is no macro selected. Please choose a macro to insert into the chat input. +337 This account is currently suspended. Please contact customer service for more information. +338 This account is currently banned. Please contact customer service for more information. +339 The world server is currently at maximum capacity and not allowing further logins until the number of players online decreases. Please try again later. +340 The request to remove the player was denied because a player is still actively playing. +341 The request to remove the player was denied. +999 / +1000 ; +1001 # +1002 myip +1003 Usage: %1myip +1004 This command displays the current IP address of your computer +1005 time +1006 Usage: %1time +1007 This command displays the current time +1008 version +1009 Usage: %1version +1010 This command displays the version information for the login system (both client and server). +1011 journal +1012 Usage: %1journal +1013 This command adds an entry to your personal login journal +1014 help +1015 Usage: %1help +1016 This command either displays a list of all commands available to you, or a detailed description of what individual commands do. Pass in an optionall command for a description of that command, or pass in nothing to this command to get a listing of commands. +1100 Your IP address is: %1 +1101 The version of the client is: %1 +1102 The version of the server is: %1 +1103 The current time is: %1 +1104 [%1] - %2 +1105 [%1] %2 +1106 +1107 +1108 +1109 File (%1) was not found on the system. +1110 There is currently a spawned process running on the client. There is a limit of 1 spawned process running at a time. +1111 Failed to create file: %1 +1112 Failed to spawn the process on the client machine. +1113 The executable could not be found. +1114 tracert.exe %1 +1115 The contents of file: %1 +1116 The local commands available are: +1117 macro +1118 Usage: %1macro [number] +1119 This will either fire off a macro that you have already defined, or bring up the macro editor. If a number is specified after the command, then the appropriate macro is fired off. If no additional parameters are specified, then the editor is brought up. +1120 log +1121 Usage: %1log [on|off] +1122 This will turn on/off chat logging. When on all chat is logged to a file (with a timestamp). By default the file is "chat.txt" located in your root EverQuest directory. Logging appends to the file, so it can grow very large unless you manually edit/delete the contents. +1200 on +1201 off +2000 Entry Deleted due to buffer overrun +2001 Bad syntax in grammar rule %1 +2002 English +2003 KOREAN +2004 TChinese +2005 Japanese +2006 German +2007 French +2008 SChinese +3000 Debug +3001 Info +3002 Warning +3003 Error +3004 Fatal +3005 None +3006 EverQuest +3007 Ruins of Kunark +3008 Scars of Velious +3009 Shadows of Luclin +3010 Planes of Power +3012 Legacy of Ykesha +3014 Lost Dungeons of Norrath +3016 Beta +3017 UbiSoft Beta +3018 LDoN Freebie +3019 Access to most servers +3020 Access to OEM servers +3021 Access to Role-Play servers +3022 Access to Legends content +3023 Access to United Kingdom servers +3024 Access to internal servers +3025 Access to Rallos Zek +3026 Access to Vallon/Tallon Zek +3027 Access to Sullon Zek +3028 Access to no-transfer servers +3029 Access to Mac servers +3030 Premium +3031 Gates of Discord +3032 Gates freebie +3033 Omens of War +3034 Omens freebie +3035 PCGamer Freebie +3036 Dragons of Norrath +3037 Dragons freebie +3038 Access to Free Trial servers +3039 Access to Escape To Norrath servers +3040 Depths of Darkhollow +3041 Depths freebie1 +3042 Depths freebie2 +3043 Titanium freebie +3044 Prophecy freebie +3045 Prophecy of Ro +3046 The Serpent's Spine +3047 The Buried Sea +3500 Kunark +3501 Velious +3502 Luclin +3503 PoP +3504 LoY +3505 LDoN +3506 Gates +3507 Omens +3508 Dragons +3509 Depths +3510 Prophecy +3511 Serpent +3512 BuriedSea +3513 SoF +3514 Secrets of Faydwer +3515 SoD +3516 Seeds of Destruction +3517 Und +3518 Underfoot +3519 HoT +3520 House of Thule +3521 VoA +3522 Veil of Alaris +3523 RoF +3524 Rain of Fear +5001 join +5002 leave +5003 +5004 leaveall +5005 set +5006 list +5007 announce +5008 ignore +5009 tell +5010 oplist +5011 invisible +5012 afk +5013 buddy +5014 namespace +5015 invite +5016 kick +5017 moderate +5018 local +5019 voice +5020 grant +5021 password +5022 opadd +5023 opremove +5024 setowner +5025 kickall +5026 tells +5028 none +5029 on +5030 off +5031 ;setowner none %1 +5032 General +5033 %1: %2 +5034 %1 tells you: %2 +5035 %1 +5036 %1: %2 +5037 You told %1: %2 +5049 ;join %1:%2 +5050 ;join %1 +5051 ;leave %1 +5052 ;#%1 %2 +5053 ;leaveall +5054 ;set %1 +5055 ;list %1 +5056 ;announce %1 +5057 ;ignore %1 +5058 ;tell %1 %2 +5059 ;oplist %1 +5060 ;afk %1 +5061 ;buddy %1%2 +5062 ;invisible %1 +5063 ;namespace +5064 ;invite %1 %2 +5065 ;kick %1 %2 +5066 ;moderate %1 +5067 ;local %1 +5068 ;voice %1 %2 +5069 ;grant %1 %2 +5070 ;password %1 %2 +5071 ;opadd %1 %2 +5072 ;opremove %1 %2 +5073 ;setowner %1 %2 +5074 ;stats %1 +5075 ;pstats %1 +5076 ;listall %1 +5077 reply +5078 Usage: %1reply +5079 This is used as a shortcut to format a tell command to the player who last sent you a tell. So if player "Jim" sent you a tell, using this command would auto-insert "/tell Jim" into the chat entry control. +5080 squelch +5081 Usage: %1squelch +5082 This command will squelch (ignore) all messages sent from the specified player. +5083 unsquelch +5084 Usage: %1unsquelch +5085 This will remove the specified player from your squelch (ignore) list. +5086 squelchlist +5087 Usage: %1squelchlist +5088 This will list all players currently on your squelch (ignore) list. +5089 The player: %1 has been added to your squelch (ignore) list. +5090 The player: %1 has NOT been added to your squelch (ignore) list. The most likely cause is that you have exceeded the maximum number (%2) of blocks allowed, or the player is already on the list. Also note: you can not add yourself or GM's to the squelchlist. +5091 The player: %1 has been removed from your squelch (ignore) list. +5092 The player: %1 has NOT been removed from your squelch (ignore) list. The most likely cause is that the player is not on the list. Please check the spelling of the player's handle and try again. +5093 The following players are on your squelch (ignore) list: +5094 #squelch %1 +5095 #unsquelch %1 +6000 Close window +6001 Help +6002 Minimize window +6003 Restore window +6004 \n +6005 Up +6006 Down +6007 Locked +6008 Are you sure you wish to exit? +6009
+6010 Logging in to the server. Please wait.... +6011 A connection to the server could not be reached. Please check your internet connection to make sure you are online.

If the problem persists, please check our %1 and %2 pages for updates. If the problem persists, please use our %3 for further assistance. +6012 Unable to join the chat server. Defaulting to server select. +6013 Quick connect to server: %1 failed. Going to the server select instead. +6014 Legends Servers: +6015 Preferred Servers: +6016 Standard Servers: +6017 Type here to enter chat. Press to send the chat. +6018 There have been %1 failed login attempts on your account since the last time you logged in. +6019 You need to enter a username and password to login.

If this is your first time logging in, you need to create a username and password by %1 +6020 clicking here. +6021 clicking here. +6022 Please wait while the page launches in your web browser. +6023 Network Status +6024 Scheduled Downtime +6025 Help Link +6026 Please wait while the options editor launches in an external application. If you change your screen resolution, this will only take effect once you either login to a world or you close and restart EverQuest. +6027 clicking here. +6028 The server you have selected is for a different language and/or locale. Please choose another server to play on. +6029 EverQuest®: The Ruins of Kunark® is now available for digital download! Experience adventures in the lush jungle continent of Kunark, consisting of 20 zones, a legendary playable race of lizard-men known as the Iksar, plus new armor, weapons and ancient enemies for you to discover. This first expansion pack for EverQuest will enhance and expand your classic EverQuest universe! Prepare to enter Kunark. +6030 Order Kunark +6031 EverQuest®: The Scars of Velious® is now available for digital download! In this second expansion to EverQuest, frozen wastes, ancient enemies and new adventures await you on the lost continent of Velious, a land forever scarred by the claws of the Great Dragon Veeshan. Explore 19 dangerous icy zones, and embark on dozens of quests for characters level 35+. Discover hundreds of magical new items, landscapes and fearsome arctic creatures along the way in this land of turmoil and conflict. Add Velious to your EverQuest universe! +6032 Order Velious +6033 EverQuest®: The Shadows of Luclin™,the third expansion for EverQuest, is now available for digital download! Discover and explore the vast moonscape of Luclin, Norrath's only inhabited moon, where 28 new adventure zones are revealed. A new playable race has been discovered, the feline Vah Shir, and the introduction of a new playable class, the Beastlord. Mount noble steeds that will carry you across the lands of Norrath. Experience a new character advancement system. And enjoy it all with a massively enhanced 3D graphics engine that changes the face of Norrath, including previous expansions! +6034 Order Luclin +6035 EverQuest®: The Planes of Power™,the fourth EverQuest Expansion, is now available for digital download! Visit the homes of the gods in over 18 spine-chilling planar zones, with more than 50 furious beasts and minions who have never been unleashed in Norrath until now. Planar advancement gives your character even more diversity, and two Planar cities provide a hub for travel and player interaction. There are hundreds of new and powerful magic items to help you on your way. You'll also discover a central storyline that links the content from every zone into one compelling quest! +6036 Order PoP +6037 Troll clans have long fought amongst themselves for the right to rule their race. With the creation of the Night Keep, the Grobb clan firmly established its dominance over the trolls. The Broken Skull clan was driven from the city and built a stronghold of its own. Years later, in a flood of brutish strength and cunning the trolls of the Broken Skull clan returned, and by their actions forever changed Norrath. +6038 Order LoY +6039 Just when you thought you'd covered it all - five massive continents, the moon, and the homes of the Gods themselves - a new series of adventures leads you into some of Norrath's greatest sources of speculation and mystery. Discover EverQuest: Lost Dungeons of Norrath. The story that began in Broken Skull Rock now yields new clues about an event threatening to change the face of Norrath. Assist a band of adventurers on their quest to unearth long-hidden artifacts of power from forgotten dungeons, secret catacombs, and long-buried ruins. A mystery is unfolding and a new age of exploration and adventure has begun! +6040 Order LDoN +6041 The greatest threat to the world of Norrath has been unleashed in EverQuest! The lost continent of Taelosia has been discovered and a massive assault force, the Legion of Mata Muram, is creating chaos and devastation on this once peaceful continent! Experience EverQuest®: Gates of Discord™ and help protect your world while adventuring in many new zones, including a stony city, sprawling temples, a myriad of catacombs, and a maze of sewers. And meet the Berserker, the newest EverQuest character class and perhaps your closest allies in melee combat against the invading hoard of fearless, deadly monstrosities from the chaotic Realm of Discord. +6042 Order Gates +6043 Follow the Wayfarers Brotherhood to the war-ravaged Realm of Discord to help end the tyrannical ways of the Muramites once and for all. Mata Muram, the leader of the Muramites, is rumored to be building the ultimate invading army and it’s up to you to thwart his plans.

Experience EverQuest: Omens of War and the twisted lands of a realm where war is persistent and death is constant. Face the fear in the Battlegrounds of Discord -- landscapes that have seen eons of violent wars between many species; explore the shattered landscapes of the Discordant Plateau, then take your fury to a landscape that teems with Muramites preparing to invade not just Norrath, but countless innocent worlds. Adventure solo, in groups, and raids to complete "epic quests" and earn prestigious weapons to aide in your battles. Take your character to new levels of power and acquire new items, spells, and quests.

Enjoy features and content for all levels! +6044 Order Omens +6045 Unknown +6046 Order +6047 You own %1 of %2 expansions. %3 %4 +6048 %1 +6049 , %1 +6050 You own: %1. +6051 You do not own: %1. +6052 The Station.com store is being opened in an external browser. From the store you may purchase any EverQuest expansion(s) for Digital Download.

If you purchase any EverQuest expansion(s) from the store, you may need to repatch in order to install the files for the expansion(s) you purchase. You must also log out and log back in to have the expansion(s) enabled on your account. +6053 Your account has expansions that you have not downloaded to this computer. Would you like to update the patcher so that you will download these files the next time you patch?

Note: choosing "Yes" will update the patcher and then exit this program. You will need to restart the game in order to patch the files and play. Choosing "No" will allow you to play but you will not be able to access the content for these expansions until you patch. +6054 Unable to automatically update the patcher. You will need to do this manually by closing this application, relaunching the game, at the patcher screen choose Options, and make sure each expansion you own is selected. +6055 Note: Until now EverQuest passwords could differ from all other SOE games/services. As part of the process of moving over to the new EverQuest login, all SOE access has been consolidated into a single username/password per account.

For any accounts that had multiple passwords, the EverQuest password has been set as the password for that account and should be used to login to any SOE game/service. +6056 Insert Name +6057 You have not selected one of the poll choices. Please make a selection before you try to submit your reply, or choose "Skip" to skip this poll for now to answer it at a later date. +6058 If you decide to order this expansion and you have valid billing information on file, it will be charged. Are you sure you want to order this expansion? +6059 Congratulations! You have successfully ordered %1. +6060 You were unable to order %1. Most likely this means you do not have valid billing information in the system. The Station.com store will be launched in a browser and you can order the expansion there by entering billing information. +6061 clicking here. +6062 Many Worlds, One Destination.

Introducing Sony Online Entertainment Worlds, the ultimate magazine for the players and communities of EverQuest®, Star Wars Galaxies®, EverQuest Online Adventures™, PlanetSide®, Champions of Norrath™ and EverQuest® II. In-depth information, interviews, and columns from the creators of your games, insider scoops on new titles and expansions, as well as articles and features written for and by players just like you.

SOE Worlds contains crucial insider info on EverQuest for players of all types. For the new or returning players, we define the best tactics for playing through your first ten levels, as well as offer suggestions for finding that perfect guild; expert players will learn secrets behind high-level raiding and developing new trade skills; and Omens of War, the latest EverQuest expansion is peeled open for all to see. Your activities could be chronicled in our news section covering every server, and we reveal plans for future updates. Plus, the producer offers his unique insights into the game’s progression and development, and we showcase the exciting lore powering the game’s events – straight from the game’s designers.

To pre-order your copy today, visit http://www.soeworlds.com +6063 Introducing Station Accessâ„¢

EQ players can now subscribe to the utimate online gaming community by joining Station Access today!

Station Access is an all inclusive monthly subscription available for one low monthly price. The Station Access subscription will grant players access to EverQuest®, EverQuest® Macintosh Edition, EverQuest® Online Adventures™ for the PlayStation®2 computer entertainment system, PlanetSide®, Station Pass™, which includes the popular games Infantry Online™, Cosmic Rift™ and Tanarus®, and commencing on November 8, 2004, the epic-blockbuster, EverQuest® II.

The Station Access subscription is available for $21.99 per month (plus applicable taxes; all game software sold separately). It’s easy to upgrade your current EverQuest subscription – click on the Station Access button below or visit
www.station.sony.com/allaccess/

Don’t forget to pre-order EverQuest® II! Pre-ordering will be your last chance to get your Journeyman Boots and the official starter kit!

EverQuest® II ships on November 8th so make sure you have your copy reserved today; just visit
http://everquest2.station.sony.com/buy +6064 +6065 In appreciation for your continued loyalty and commitment to the game, SOE is offering you a variety of Veteran Rewards and the opportunity to take advantage of a discounted twelve-month subscription as part of our EQ Sixth-Year Anniversary.

Available to player characters of all levels, Veteran Rewards grant unique and entertaining abilities to active subscribers that are being unveiled for the first time as part of this special anniversary event. There will be one Veteran Reward for every year an EverQuest player has had an active, fully-paid account in good standing with a total of six rewards available for players who have been with EverQuest since the beginning. An EverQuest player can also claim their applicable reward(s) for one additional character (up to a total of six characters) for every year they have been actively subscribed with an account in good standing!

· Year 1 – Lesson of the Devoted: The player is surrounded by a beautiful blue/white glow as they gain double experience for half an hour every 24 hours.

· Year 2 – Infusion of the Faithful: Usable once every 24 hours, the player enjoys maximum resistances and statistics and a faster run speed for 15 minutes while he glows brightly with power.

· Year 3 – Chaotic Jester: Summons a Bristlebane puppet that persists for 15 minutes. Usable once every 24 hours, Bristlebane will randomly cast various spells that provide benefits or minor penalties.

· Year 4 – Expedient Recovery: Usable once per week, all the player’s corpses are summoned to their feet and given 100% experience resurrection.

· Year 5 – Steadfast Servant: Summons a creature that casts healing spells upon the player and others nearby. Lasts for half an hour and is usable once every 24 hours.

· Year 6 – Staunch Recovery: Usable once every 3 days, the player is fully healed with health, mana, and endurance fully restored.

EverQuest players will also have the opportunity to enjoy significant savings by purchasing a twelve-month subscription to EverQuest for $99.99 (plus applicable taxes), resulting in a potential a savings of more than $50 off of the monthly subscription fee. In addition, players who purchase the special 12-month subscription will be entitled to receive their next year’s reward without having to wait until their next year as a subscriber (subject to the launch date of the veteran rewards program). For example, a three year veteran will be entitled to receive awards one through three for up to three characters. If he or she decides to purchase the special Sixth-year anniversary 12-month subscription plan, he or she will also be entitled to receive the fourth year award as a bonus without having to wait until their fourth year as a subscriber. Additionally, six year veterans who purchase the Sixth-year anniversary 12-month subscription plan will receive the following unique seventh year reward without having to wait until the seventh year of their subscription:

· Year 7 – Intensity of the Resolute: Increases the power of the player’s abilities and heals substantially for 5 minutes once every 24 hours while the player is surrounded by a glow of energy.

The special Sixth-Year Anniversary 12-month subscription plan will be available April 11, 2005 through May 11, 2005. Veteran Rewards will go live in-game on May 13, 2005. For more information, please visit: www.everquest.com.
+6066 VOTE FOR EQ!

EverQuest has been nominated for induction to the Walk of Game! Each year gamers worldwide are asked to cast their votes for inductees to the Walk of Game (www.WalkOfGame.com) which honors icons and pioneers in the videogame industry. The top four Games/Characters nominees and the top two Lifetime Achievement nominees will be inducted. Previous inductees have included Nolan Bushnell, Shigeru Miyamoto, Halo, Link (The Legend of Zelda) and Sonic The Hedgehog. Walk of Game honorees receive a permanent, customized steel star on the Walk of Game, located inside the Metreon, a 350,000 square foot entertainment complex at Fourth and Mission Streets in the heart of downtown San Francisco.

From October 1st through October 31st, 2005, gamers can vote once a day (per IP address) for EverQuest to be inducted into the Walk of Game. Please visit http://www.walkofgame.com/ and cast your vote for EQ. Vote from work, vote from home, vote from your web phone, have your friends and family vote, post reminders to vote on your favorite boards and stop random folks on the street to encourage them to vote! Thank you for being an integral part of our EverQuest community and for helping to memorialize EverQuest and our community in the Walk of Game! +6067 EVERQUEST: DRAGONS OF NORRATH
Heroes Return in EverQuest: Dragons of Norrath The Next Thrilling Chapter in the EverQuest Adventure


A series of events has transpired across the world of Norrath and the familiar faces of Firiona Vie and her nemesis Lanys T’Vyl return to find themselves at the forefront of the events. Unbeknownst to them, a dark influence has seeped into the world of Norrath causing new tensions to arise and conflicts to intensify as the dawn of a new age emerges. The Age of War is upon the people of Norrath and heroes return in this ultimate, unending battle between good and evil. Prepare for EverQuest: Dragons of Norrath and return to the lands between Halas and Lavastorm as you seek out the Nest, the ancestral birthplace of the dragons, long sealed away and hidden from the eyes of Norrath. But beware, if the Nest is exposed too early during the Brood Dawn, the dragons and their eggs will be consumed in a curse and chaos will consume the lands of Norrath. Featuring new lands with enhanced graphics, bold new storylines, and updated creatures including dragons, goblins, drakes, and Frost Giants!, EverQuest: Dragons of Norrath is the next great expansion pack for the fantasy adventure that is EverQuest. New features enhance game play such as the potion belt that allows quick access to potions and other magical items. Or quickly switch between weapon sets using the bandolier interface! Message your friends with a new in game Email system! Plus a new guild hall that provides all new enhancements for your guild, such as a guild bank, guild portals, and a private guild arena! EverQuest: Dragons of Norrath is bursting with new adventures and intense battles for players with many great features for characters of all levels! +6068 Order Dragons +6069 Order Depths +6070 Order Prophecy +6071 Order Serpent +6072 Order Buried Sea +6073 Order Secrets of Faydwer +6074 Order Seeds of Destruction +6075 Please wait while the currently logged in player is removed from the world. +6076 Order Underfoot +6077 Order House of Thule +6078 clicking here. +6079 Order Veil of Alaris +6080 Order Rain of Fear +8000 Select which detailed character models you want displayed: +8001 You have about %1 MB of memory. We recommend that you only select %2 detailed models to get the best graphics performance. A lower polygon model will be used for those models not selected. The Wood Elf is required if you wish to display any Elf, and the Human is required if you wish to display the Erudite. +8002 Engine settings: +8003 You have about %1 MB of memory. These settings will allow you to tune the system for the best performance. +8004 Turning this off will prevent sounds from playing in game. Recommend: ON +8005 Turning this option on will enable the social animations for the detailed models. This options is very memory intensive. Recommend: OFF +8006 Mip Mapping causes the world to blend together better but uses more memory. Recommend: OFF +8007 Any light source carried by a player requires the effect to be calculated and drawn. Turning this off will make the graphics faster. Recommend: ON +8008 This improves load time on many systems, at the expense of using extra disk space. The first time you load any zone or the character selection screen with caching on, it will take time to build the cache, after that load times should be reduced. Changing your settings here will require new caches to be built the next time you play. Recommend: OFF +8009 This option will save memory at the cost of a very slight reduction of texture quality. Recommend: OFF +8010 This will set your preferred resolution for game play. +8011 The higher the quality of textures the better Norrath will look, but the more memory you will use. Recommended: HIGH +8012 Sound +8013 Social Animations +8014 Mip Mapping +8015 Dynamic Lighting +8016 Texture Caching +8017 Texture Compression +8018 Resolution +8019 Texture Quality +8020 Help: +8021 Restore Defaults +8022 Select All +8023 De-Select All +8024 Engine Settings +8025 640x480 +8026 800x600 +8027 1024x768 +8028 1152x864 +8029 High +8030 Medium +8031 Low +8032 Male +8033 Female +8034 Human +8035 Barbarian +8036 Erudite +8037 Wood Elf +8038 High Elf +8039 Dark Elf +8040 Half Elf +8041 Dwarf +8042 Troll +8043 Ogre +8044 Halfling +8045 Gnome +8046 Iksar +8047 Vah Shir +8048 Horses and Elementals +8049 Please select your video card from the list below. +8050 Video Card Selection +8051 Detailed Models +8052 1280x768 +8053 1280x960 +8054 1280x1024 +8055 1600x1200 +8056 All servers have been locked to players. +8057 All servers have been unlocked to players. +8058 All SOE servers have been locked to players. +8059 All SOE servers have been unlocked to players. +8060 All Ubisoft servers have been locked to players. +8061 All Ubisoft servers have been unlocked to players. +8062 The server: %1, has been locked to players. +8063 The server: %1, has been unlocked to players. +10000 Order EverQuest®: The Ruins of Kunark®, an expansion available directly from SOE by download and online credit card purchase at $9.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

Experience classic EverQuest adventures in this lush jungle continent of Kunark, consisting of 20 zones, a legendary playable race, the Iksar, classic armor, weapons and ancient enemies.

Credit card users - one click below and you're done!

+10001 o Legendary playable race, the Iksar (Lizardman)
o More than 20 adventure areas containing both newbie and expert zones filled with dramatic environmental effects.
o Non-player characters include Giant Scorpions, Dragonmen and many more.

For detailed information, go to http://everquest.station.sony.com/kunark.jsp

+10002 All sales are final.
Classic EverQuest required.

A valid credit card required – When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one. You cannot use a GameCard, GlobalCollect or any other payment option to order this expansion. We have the right to charge your credit card immediately after you place your order.

SOE will not send you anything; SOE is fulfilling all direct orders via digital download only. The complete software necessary to play this expansion will be downloaded to your computer, and no physical box, disks or other materials will be provided to you. Please note that the expansion is quite large and will take significant time to download. For download hints and further details, visit http://everquest.station.sony.com/kunark.jsp

+10003 You must purchase the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (located at http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (located at http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (located at http://sonyonline.com/tos/privacy.jsp). You must be an EverQuest subscriber to order any one or more of the expansions.

Platform: PC

Required Specs:
Windows® 98/2000/ME/XP
Pentium® III 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX 8.1 Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:
Windows® 98/2000/ME/XP
Pentium® 4 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX 9.0b Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
1.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Game specifications may change as the game progresses. +10005 Order EverQuest®: The Scars of Velious®, an expansion available directly from SOE by download and online credit card purchase at $9.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

Explore the snowy continent of Velious, where players can explore 19 dangerously icy zones. Also embark on dozens of quests for characters level 35+ and discover hundreds of magical new items.

Credit card users - one click below and you're done!

+10006 o 19 zones including ice caves, crystal caverns, crypts and frozen towers.
o An updated cast of visually stunning non-player characters including Frost Giants, Ice Dragons, Snow Orcs, Cave Bears, Snowfang Gnolls and Storm Giants.
o Magical items and quests to unveil for players level 35+.

For detailed information, go to http://everquest.station.sony.com/velious.jsp

+10007 All sales are final.
Classic EverQuest required.

A valid credit card required – When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one. You cannot use a GameCard, GlobalCollect or any other payment option to order this expansion. We have the right to charge your credit card immediately after you place your order.

SOE will not send you anything; SOE is fulfilling all direct orders via digital download only. The complete software necessary to play this expansion will be downloaded to your computer, and no physical box, disks or other materials will be provided to you. Please note that the expansion is quite large and will take significant time to download. For download hints and further details, visit http://everquest.station.sony.com/velious.jsp

+10008 You must purchase the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (located at http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (located at http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (located at http://sonyonline.com/tos/privacy.jsp). You must be an EverQuest subscriber to order any one or more of the expansions.

Platform: PC

Required Specs:
Windows® 98/2000/ME/XP
Pentium® III 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX 8.1 Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:
Windows® 98/2000/ME/XP
Pentium® 4 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX 9.0b Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
1.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Game specifications may change as the game progresses. +10010 Order EverQuest®: The Shadows of Luclin™, an expansion available directly from SOE by download and online credit card purchase at $9.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

The eerie moonscape of Luclin reveals 28 new adventure zones, the infamous player character race, the Vah Shir, and the mighty character class, the Beastlord. Plus a massively enhanced 3D graphics engine changes the face of Norrath.

Credit card users - one click below and you're done!

+10011 o 3D engine overhaul with high resolution player character models and completely re-textured zones, including the original world of Norrath.
o Play as the Vah Shir cat man race or Beastlord class.
o Mounts will carry you across the lands of Norrath.
o Explore 28 perilous zones on the moonscape of Luclin.
o Enhanced character advancement system.

For detailed information, go to http://everquest.station.sony.com/luclin.jsp

+10012 All sales are final.
Classic EverQuest required.

A valid credit card required – When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one. You cannot use a GameCard, GlobalCollect or any other payment option to order this expansion. We have the right to charge your credit card immediately after you place your order.

SOE will not send you anything; SOE is fulfilling all direct orders via digital download only. The complete software necessary to play this expansion will be downloaded to your computer, and no physical box, disks or other materials will be provided to you. Please note that the expansion is quite large and will take significant time to download. For download hints and further details, visit http://everquest.station.sony.com/luclin.jsp

+10013 You must purchase the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (located at http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (located at http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (located at http://sonyonline.com/tos/privacy.jsp). You must be an EverQuest subscriber to order any one or more of the expansions.

Platform: PC

Required Specs:
Windows® 98/2000/ME/XP
Pentium® III 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX 8.1 Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:
Windows® 98/2000/ME/XP
Pentium® 4 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX 9.0b Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
1.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Game specifications may change as the game progresses. +10015 Order EverQuest®: The Planes of Power™, an expansion available directly from SOE by download and online credit card purchase at $9.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

Visit the homes of the gods in 24 spine-chilling zones, with more than 50 furious beasts and minions who have never been unleashed in Norrath until now.

Credit card users - one click below and you're done!

+10016 o Hundreds of powerful new magic items including weapons, armor, shields, jewelry and more
o 24 Planar zones full of scripted events and dynamic content that will challenge the most skilled players
o Over 50 monsters, dozens of new spells and expanded trade skill recipes
o Two Planar cities that provide a hub for travel and player interaction
o A central storyline links the content from every zone into one compelling quest

For detailed information, go to http://everquest.station.sony.com/power/

+10017 All sales are final.
Classic EverQuest required.

A valid credit card required – When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one. You cannot use a GameCard, GlobalCollect or any other payment option to order this expansion. We have the right to charge your credit card immediately after you place your order.

SOE will not send you anything; SOE is fulfilling all direct orders via digital download only. The complete software necessary to play this expansion will be downloaded to your computer, and no physical box, disks or other materials will be provided to you. Please note that the expansion is quite large and will take significant time to download. For download hints and further details, visit http://everquest.station.sony.com/power/

+10018 You must purchase the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (located at http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (located at http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (located at http://sonyonline.com/tos/privacy.jsp). You must be an EverQuest subscriber to order any one or more of the expansions.

Platform: PC

Required Specs:
Windows® 98/2000/ME/XP
Pentium® III 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX 8.1 Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:
Windows® 98/2000/ME/XP
Pentium® 4 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX 9.0b Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
1.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Game specifications may change as the game progresses. +10020 Order EverQuest(R): The Legacy of Ykesha (TM), an expansion available directly from SOE by download and online credit card purchase at $14.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

Credit card users - one click below and you're done!

+10021 o New playable race, the Frogloks (Frogmen)
o Enhanced Looking for Group tool.
o Guild management tool.
o Cartography system
o New magic item slot: Charms
o Armor dye
o New creatures
o Expanded bank capacity
o New zones
o New spells

For detailed information, go to www.legacyofykesha.com

+10022 All sales are final.
Classic EverQuest required.

A valid credit card required – When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one. You cannot use a GameCard, GlobalCollect or any other payment option to order this expansion. We have the right to charge your credit card immediately after you place your order.

SOE will not send you anything; SOE is fulfilling all direct orders via digital download only. The complete software necessary to play this expansion will be downloaded to your computer, and no physical box, disks or other materials will be provided to you. Please note that the expansion is quite large and will take significant time to download. For download hints and further details, visit www.legacyofykesha.com.

+10023 You must purchase the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (located at http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (located at http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (located at http://sonyonline.com/tos/privacy.jsp). You must be an EverQuest subscriber to order any one or more of the expansions.

Platform: PC

Required Specs:
Windows® 98/2000/ME/XP
Pentium® III 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX 8.1 Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:
Windows® 98/2000/ME/XP
Pentium® 4 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX 9.0b Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
1.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Game specifications may change as the game progresses. +10025 Order EverQuest(R): The Lost Dungeons of Norrath (TM), an expansion available directly from SOE by download and online credit card purchase at $19.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

Credit card users - one click below and you're done!

+10026 o Explore more than 40 diverse dungeons set in 5 new environments
o Emphasizes personalized group encounters without interruption from other players.
o Enjoy the excitement of "dungeon crawls" that are tailored to your group.
o Discover new environments, items and interactive objects for the hardy adventurer.
o Reap the benefits of your adventures with an all new reward system that puts the choice in your hands.
o New tradeskill recipes to produce hundreds of new items.
o Encounter a host of new challenging monsters and NPCs.
o Unearth arcane new spells, mighty weapons and other hidden treasures!

For detailed information, go to www.lostdungeonsofnorrath.com

+10027 All sales are final.
Classic EverQuest required.

A valid credit card required – When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one. You cannot use a GameCard, GlobalCollect or any other payment option to order this expansion. We have the right to charge your credit card immediately after you place your order.

SOE will not send you anything; SOE is fulfilling all direct orders via digital download only. The complete software necessary to play this expansion will be downloaded to your computer, and no physical box, disks or other materials will be provided to you. Please note that the expansion is quite large and will take significant time to download. For download hints and further details, visit www.lostdungeonsofnorrath.com.

+10028 You must purchase the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (located at http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (located at http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (located at http://sonyonline.com/tos/privacy.jsp). You must be an EverQuest subscriber to order any one or more of the expansions.

Platform: PC

Required Specs:
Windows® 98/2000/ME/XP
Pentium® III 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX 8.1 Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:
Windows® 98/2000/ME/XP
Pentium® 4 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX 9.0b Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
1.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Game specifications may change as the game progresses. +10030 EverQuest®: Gates of Discord™ available now from SOE by download and online credit card purchase at $19.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

Credit card users - one click below and you're done!\n\n

Epic adventures now await you in EverQuest®: Gates of Discord™, the seventh expansion pack now available for EverQuest. Discover the lost continent of Taelosia and come face-to-face with invaders from the realm of chaos. Join armies of adventurers on their quest to unearth long-hidden artifacts of power from temple ruins, secret catacombs, dank sewers and vast marshlands. Should you fail, Norrath, its inhabitants, and its gods may fall under control of the forces of Discord!

Gain Entry into the Gates of Discord!
o Download now direct from the Station Store
o Purchase at your local retailer (retail boxed version includes special in-box and in-game item, while supplies last)

Exciting New Features!
o 100 new AA abilities
o 20 new zones with all-new NPCs
o New Tribute System and Leadership Experience
o Ravage your enemies with the Berserker

+10031 All sales are final.
Classic EverQuest required.

A valid credit card required. When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one. You cannot use a GameCard, GlobalCollect or any other payment option to order this expansion. We have the right to charge your credit card immediately after you place your order.

SOE will not send you anything; SOE is fulfilling all direct orders via digital download only. The complete software necessary to play this expansion will be downloaded to your computer, and no physical box, disks or other materials will be provided to you. Please note that the expansion is quite large and will take significant time to download. For download hints and further details, visit http://www.gatesofdiscord.com/


You must purchase the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (located at http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE's Terms of Service and Rules of Conduct (located at http://sonyonline.com/tos/tos.jsp), and SOE's Privacy Policy (located at http://sonyonline.com/tos/privacy.jsp). You must be an EverQuest subscriber to order any one or more of the expansions.

+10032 Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® III 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 4 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
2.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Game specifications may change as the game progresses. +10033 +10035 ORDER EVERQUEST: OMENS OF WAR EXPANSION DIGITAL DOWNLOAD
Order Omens of War with your credit card (download only) at the price of $29.99 (plus tax, if applicable). Residents of VAT-applicable European Union territories will also be charged a VAT equal to 17.5% of the applicable fee


Follow the Wayfarers Brotherhood to the war-ravaged Realm of Discord to help end the tyrannical ways of the Muramites once and for all. Mata Muram, the leader of the Muramites, is rumored to be building the ultimate invading army and it’s up to you to thwart his plans.

Experience EverQuest: Omens of War and the twisted lands of a realm where war is persistent and death is constant. Face the fear in the Battlegrounds of Discord -- landscapes that have seen eons of violent wars between many species; explore the shattered landscapes of the Discordant Plateau, then take your fury to a landscape that teems with Muramites preparing to invade not just Norrath, but countless innocent worlds. Adventure solo, in groups, and raids to complete "epic quests" and earn prestigious weapons to aide in your battles. Take your character to new levels of power and acquire new items, spells, and quests. +10036

Enjoy features and content for all levels!


Features:

o Level Cap Increase - Develop your character beyond level 65. Unlock new innovative items, powerful spells, and thrilling quests.


o Epic Weapons 2.0 - Earn specialized, hand-tailored Epic Weapons with the completion of any of 16 epic quests. New epic quests will challenge even the toughest and most experienced Norrathians as they journey alone, in groups, and in raid groups to win these valuable items. Designed for higher level players, each weapon will be unique in design and will have specialized characteristics.


o Guild Tribute System - Enhanced tribute system allows you to turn your loot into favor points for your whole guild to enjoy.


o Task System – Whether you’re on for a few minutes or a few hours, you can always advance your character by completing tasks using this new system!


o Custom PC Titles - This extension of our title system provides new flexibility in displaying the titles you've earned and creates new opportunities for you to earn more!


o Extra spell slot – For the first time, characters can earn an additional spell slot allowing for even more versatility.


o Increased number of buff slots to Player Characters – Be battle ready with more room for buffs and effects that you can earn as you take on the challenges that Omens of War has to offer.


o Voice macros – Set up hot keys that will send voice messages to your group, letting them know vital information about your character ' s status.


o Improved Graphics - Discover rich new zones with detailed environments featuring expanded graphical elements, improved spell effects and all-new graphically-improved monsters to fight.


o All-New Content - New disciplines, AA’s, items, spells, quests and tradeskills continue to make EverQuest the most-compelling and persistent online world ever created.

Classic EverQuest Required


ESRB Rating: TEEN with Blood and Gore, Suggestive Themes, Use of Alcohol and Violence.

+10037 For additional information about Omens of War, visit http://www.omensofwar.com

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

A valid credit card is required. You cannot use a GameCard or GlobalCollect payment option to purchase this digital download expansion.

Attention narrowband users: some patches may be quite large and take significant time to download. For patch hints, go to the EverQuest Patcher Help website (http://eqlive.station.sony.com/support/tech_support/ts_new_patcher.jsp). Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter.

+10038 You must have purchased the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (http://sonyonline.com/tos/tos.jsp#privacy). You must be an EverQuest subscriber to order the expansion.

Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® 2 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account
Note: All Direct 3D cards not supported. (See complete list on www.everquest.com)

Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 3 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
1.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online fees and valid credit card required.

+10039 ORDER EVERQUEST: OMENS OF WAR EXPANSION DIGITAL DOWNLOAD
Order Omens of War with your credit card (download only) at the price of $29.99 (plus tax, if applicable). Residents of VAT-applicable European Union territories will also be charged a VAT equal to 17.5% of the applicable fee


Follow the Wayfarers Brotherhood to the war-ravaged Realm of Discord to help end the tyrannical ways of the Muramites once and for all. Mata Muram, the leader of the Muramites, is rumored to be building the ultimate invading army and it’s up to you to thwart his plans.

Experience EverQuest: Omens of War and the twisted lands of a realm where war is persistent and death is constant. Face the fear in the Battlegrounds of Discord -- landscapes that have seen eons of violent wars between many species; explore the shattered landscapes of the Discordant Plateau, then take your fury to a landscape that teems with Muramites preparing to invade not just Norrath, but countless innocent worlds. Adventure solo, in groups, and raids to complete "epic quests" and earn prestigious weapons to aide in your battles. Take your character to new levels of power and acquire new items, spells, and quests. +10040

Enjoy features and content for all levels!


Features:

o Level Cap Increase - Develop your character beyond level 65. Unlock new innovative items, powerful spells, and thrilling quests.


o Epic Weapons 2.0 - Earn specialized, hand-tailored Epic Weapons with the completion of any of 16 epic quests. New epic quests will challenge even the toughest and most experienced Norrathians as they journey alone, in groups, and in raid groups to win these valuable items. Designed for higher level players, each weapon will be unique in design and will have specialized characteristics.


o Guild Tribute System - Enhanced tribute system allows you to turn your loot into favor points for your whole guild to enjoy.


o Task System – Whether you’re on for a few minutes or a few hours, you can always advance your character by completing tasks using this new system!


o Custom PC Titles - This extension of our title system provides new flexibility in displaying the titles you've earned and creates new opportunities for you to earn more!


o Extra spell slot – For the first time, characters can earn an additional spell slot allowing for even more versatility.


o Increased number of buff slots to Player Characters – Be battle ready with more room for buffs and effects that you can earn as you take on the challenges that Omens of War has to offer.


o Voice macros – Set up hot keys that will send voice messages to your group, letting them know vital information about your character ' s status.


o Improved Graphics - Discover rich new zones with detailed environments featuring expanded graphical elements, improved spell effects and all-new graphically-improved monsters to fight.


o All-New Content - New disciplines, AA’s, items, spells, quests and tradeskills continue to make EverQuest the most-compelling and persistent online world ever created.

Classic EverQuest Required


ESRB Rating: TEEN with Blood and Gore, Suggestive Themes, Use of Alcohol and Violence.

+10041 For additional information about Omens of War, visit http://www.omensofwar.com

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

A valid credit card is required. You cannot use a GameCard or GlobalCollect payment option to purchase this digital download expansion.

Attention narrowband users: some patches may be quite large and take significant time to download. For patch hints, go to the EverQuest Patcher Help website (http://eqlive.station.sony.com/support/tech_support/ts_new_patcher.jsp). Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter.

+10042 You must have purchased the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (http://sonyonline.com/tos/tos.jsp#privacy). You must be an EverQuest subscriber to order the expansion.

Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® 2 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account
Note: All Direct 3D cards not supported. (See complete list on www.everquest.com)

Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 3 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
1.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online fees and valid credit card required.

+10043 PREORDER EVERQUEST: OMENS OF WAR EXPANSION DIGITAL DOWNLOAD
Preorder Omens of War with your credit card (download only) at the preorder price of $29.99 (plus tax, if applicable). Residents of VAT-applicable European Union territories will also be charged a VAT equal to 17.5% of the applicable fee


Norrathians will venture into a world in another realm that has fallen under the dark influence of Discord. The lands are torn and ravaged by war and teeming with Muramites and strange creatures.

Explore with your fellow adventurers to learn more about this new world and help end the tyrannical ways of the Muramites once and for all. Mata Muram, the leader of the Muramites, is rumored to be building the ultimate invading army in this world. It's up to you to thwart his plans.

Experience EverQuest: Omens of War and the twisted lands of a realm where war is persistent and death is constant. Face the fear of the Bloodfields. Explore the carved and twisted landscape of The Nobles' Causeway. +10044 Then take your fury to the heart of the Muramites in Discord. Adventure solo, in groups, and raids to complete "epic quests" and earn prestigious weapons.

Enjoy features and content for all levels!


Features:

o Level Cap Increase - Develop your character beyond level 65. Unlock new innovative items, powerful spells, and thrilling quests.


o Epic Weapons 2.0 - Earn specialized, hand-tailored Epic Weapons with the completion of any of 16 epic quests. New epic quests will challenge even the toughest and most experienced Norrathians as they journey alone, in groups, and in raid groups to win these valuable items. Designed for higher level players, each weapon will be unique in design and will have specialized characteristics.


o Guild Tribute System - Enhanced tribute system allows you to turn your loot into favor points for your whole guild to enjoy.


o Task System – Whether you’re on for a few minutes or a few hours, you can always advance your character by completing tasks using this new system!


o Custom PC Titles - This extension of our title system provides new flexibility in displaying the titles you've earned and creates new opportunities for you to earn more!


o Extra spell slot – For the first time, characters can earn an additional spell slot allowing for even more versatility.


o Increased number of buff slots to Player Characters – Be battle ready with more room for buffs and effects as you take on the challenges that Omens of War has to offer.


o Voice macros – Set up hot keys that will send voice messages to your group, letting them know vital information about your character ' s status.


o Improved Graphics - Discover rich new zones with detailed environments featuring expanded graphical elements, improved spell effects and all-new graphically-improved monsters to fight.


o All-New Content - New disciplines, AA’s, items, spells, quests and tradeskills continue to make EverQuest the most-compelling and persistent online world ever created.

Classic EverQuest Required


RP (Rating Pending). This game has not yet been rated.

+10045 For download hints and further details, visit http://www.omensofwar.com

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

A valid credit card is required. You cannot use a GameCard or GlobalCollect payment option to purchase this digital download expansion. When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one.

We will charge your credit card no earlier than 12:01 a.m. PST on the date the product goes live. If you change your mind and want to cancel your pre-order before that time, go to the Station Store (https://store.station.sony.com/my_account.jsp) and cancel your preorder. At 12:01 a.m. PST on the live date and thereafter, all sales are final.

The expected live date is September 14, 2004, so PRE-ORDER NOW! The expected live date is subject to change, in which case we will post a new anticipated live date in a patch message and extend the deadline for pre-order cancellations until 12:01 a.m. PST on the new live date.

The file patch plan is to make the necessary files gradually available for patching during a several week period prior to the live date. When you pre-order, the "Omens of War" checkbox on the second page of the client patcher will be checked so that each time you patch, the patch routine will check for new expansion files and download them to you. Attention narrowband users: some patches may be quite large and take significant time to download. For patch hints, go to the EverQuest Patcher Help website (http://eqlive.station.sony.com/support/tech_support/ts_new_patcher.jsp). Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter.

+10046 You must have purchased the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (http://sonyonline.com/tos/tos.jsp#privacy). You must be an EverQuest subscriber to order the expansion.

Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® 2 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 3 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
2.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online fees and valid credit card required.

+10047 ORDER EVERQUEST: DRAGONS OF NORRATH EXPANSION DIGITAL DOWNLOAD

Heroes Return in EverQuest: Dragons of Norrath The Next Thrilling Chapter in the EverQuest Adventure.

Order your digital download copy now for the price of $29.99 (plus applicable taxes) direct from Sony Online Entertainment. Residents of VAT-applicable European Union territories will also be charged a VAT equal to 17.5% of the applicable fee. +10048


A series of events has transpired across the world of Norrath and the familiar faces of Firiona Vie and her nemesis Lanys T’Vyl return to find themselves at the forefront of the events. Unbeknownst to them, a dark influence has seeped into the world of Norrath causing new tensions to arise and conflicts to intensify as the dawn of a new age emerges. The Age of War is upon the people of Norrath and heroes return in this ultimate, unending battle between good and evil.

Prepare for EverQuest: Dragons of Norrath and return to the lands between Halas and Lavastorm as you seek out the Nest, the ancestral birthplace of the dragons, long sealed away and hidden from the eyes of Norrath. But beware, if the Nest is exposed too early during the Brood Dawn, the dragons and their eggs will be consumed in a curse and chaos will consume the lands of Norrath.

Featuring new lands with enhanced graphics, bold new storylines, and updated creatures including dragons, goblins, drakes, and Frost Giants!, EverQuest: Dragons of Norrath is the next great expansion pack for the fantasy adventure that is EverQuest.

Features:

o New Zones, Creatures and Content - From Lavastorm to the Thundercrest Isles adventure in graphically enhanced zones with all new themes. Brave challenging new quests, discover new treasures, and battle new NPC’s including drakes, goblins and fierce dragons.


o New Interactive World Map - A full color interactive map of the world of allows players to point-and-click from a world view, to a continent view, to a zone view of the traditional line maps.


o Player Barter System - Allows players to set up their own method of giving platinum or items in exchange for other items.


o Potion Belt - Allows for quick use of inventory items.


o Bandolier Equip - Lets your character have two sets of pre-arranged weapons for each hand.


o New Spells, Tradeskills, and Recipes.


o Guild Halls - An instanced guild hall for guild members to meet and prepare for playing.


o Guild Bank - Bank slot for storage of items accessible by all (designated) members of a guild.


o Guild Stone - Allows guild members to easily port to the Instanced Guild Hall.


o Mana/health Regen Pool - Allows players to easily regenerate their mana and health in preparation for battle while in the guild hall.


o Mass Corpse Summoning Altar - Allows guilds to summon guild corpses en masse to the alter room after a wipe out.


o Guild Tradeskill Objects - Various tradeskill tools are located in the guild hall for easy access by guild members.


o Guild ‘Looking for Members’ Tool - Allows guilds to recruit by placing persistent “ads†on bulletin boards, search for player characters who match guild criteria and send in-game emails to those members.


o Players ‘Looking for Guild’ Tool - Allows players to find guilds recruiting members.


o Buff timers - Allows guild members to suspend buff timers while in guild halls.


EverQuest: Dragons of Norrath is bursting with new adventures and intense battles for players with many great features for characters of all levels! +10049

Classic EverQuest Required


ESRB Rating: TEEN with Blood and Gore, Suggestive Themes, Use of Alcohol and Violence.

For download hints and further details, visit http://everquest.station.sony.com/dragonsofnorrath/features.jsp

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

A valid credit card is required. You cannot use a GameCard or GlobalCollect payment option to purchase this digital download expansion. When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one.

Attention narrowband users: some patches may be quite large and take significant time to download. For patch hints, go to the EverQuest Patcher Help website (http://eqlive.station.sony.com/support/tech_support/ts_new_patcher.jsp). Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter. +10050

You must have purchased the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (http://sonyonline.com/tos/tos.jsp#privacy). You must be an EverQuest subscriber to order the expansion.

Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® 2 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 3 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
2.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online fees and valid credit card required.

+10051 ORDER EVERQUEST: DRAGONS OF NORRATH EXPANSION DIGITAL DOWNLOAD

Heroes Return in EverQuest: Dragons of Norrath The Next Thrilling Chapter in the EverQuest Adventure.

Order your digital download copy now for the price of $29.99 (plus applicable taxes) direct from Sony Online Entertainment. Residents of VAT-applicable European Union territories will also be charged a VAT equal to 17.5% of the applicable fee. +10052


A series of events has transpired across the world of Norrath and the familiar faces of Firiona Vie and her nemesis Lanys T’Vyl return to find themselves at the forefront of the events. Unbeknownst to them, a dark influence has seeped into the world of Norrath causing new tensions to arise and conflicts to intensify as the dawn of a new age emerges. The Age of War is upon the people of Norrath and heroes return in this ultimate, unending battle between good and evil.

Prepare for EverQuest: Dragons of Norrath and return to the lands between Halas and Lavastorm as you seek out the Nest, the ancestral birthplace of the dragons, long sealed away and hidden from the eyes of Norrath. But beware, if the Nest is exposed too early during the Brood Dawn, the dragons and their eggs will be consumed in a curse and chaos will consume the lands of Norrath.

Featuring new lands with enhanced graphics, bold new storylines, and updated creatures including dragons, goblins, drakes, and Frost Giants!, EverQuest: Dragons of Norrath is the next great expansion pack for the fantasy adventure that is EverQuest.

Features:

o New Zones, Creatures and Content - From Lavastorm to the Thundercrest Isles adventure in graphically enhanced zones with all new themes. Brave challenging new quests, discover new treasures, and battle new NPC’s including drakes, goblins and fierce dragons.


o New Interactive World Map - A full color interactive map of the world of allows players to point-and-click from a world view, to a continent view, to a zone view of the traditional line maps.


o Player Barter System - Allows players to set up their own method of giving platinum or items in exchange for other items.


o Potion Belt - Allows for quick use of inventory items.


o Bandolier Equip - Lets your character have two sets of pre-arranged weapons for each hand.


o New Spells, Tradeskills, and Recipes.


o Guild Halls - An instanced guild hall for guild members to meet and prepare for playing.


o Guild Bank - Bank slot for storage of items accessible by all (designated) members of a guild.


o Guild Stone - Allows guild members to easily port to the Instanced Guild Hall.


o Mana/health Regen Pool - Allows players to easily regenerate their mana and health in preparation for battle while in the guild hall.


o Mass Corpse Summoning Altar - Allows guilds to summon guild corpses en masse to the alter room after a wipe out.


o Guild Tradeskill Objects - Various tradeskill tools are located in the guild hall for easy access by guild members.


o Guild ‘Looking for Members’ Tool - Allows guilds to recruit by placing persistent “ads†on bulletin boards, search for player characters who match guild criteria and send in-game emails to those members.


o Players ‘Looking for Guild’ Tool - Allows players to find guilds recruiting members.


o Buff timers - Allows guild members to suspend buff timers while in guild halls.


EverQuest: Dragons of Norrath is bursting with new adventures and intense battles for players with many great features for characters of all levels! +10053

Classic EverQuest Required


ESRB Rating: TEEN with Blood and Gore, Suggestive Themes, Use of Alcohol and Violence.

For download hints and further details, visit http://everquest.station.sony.com/dragonsofnorrath/features.jsp

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

A valid credit card is required. You cannot use a GameCard or GlobalCollect payment option to purchase this digital download expansion. When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one.

Attention narrowband users: some patches may be quite large and take significant time to download. For patch hints, go to the EverQuest Patcher Help website (http://eqlive.station.sony.com/support/tech_support/ts_new_patcher.jsp). Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter. +10054

You must have purchased the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (http://sonyonline.com/tos/tos.jsp#privacy). You must be an EverQuest subscriber to order the expansion.

Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® 2 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 3 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
2.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online fees and valid credit card required.

+10055 PREORDER EVERQUEST: DRAGONS OF NORRATH EXPANSION DIGITAL DOWNLOAD FOR THE SPECIAL PRICE OF $24.99

Heroes Return in EverQuest: Dragons of Norrath The Next Thrilling Chapter in the EverQuest Adventure.

Pre-Order your digital download copy now for the limited offer price of $24.99 (plus applicable taxes) direct from Sony Online Entertainment. Reserve your digital copy today and save $5.00. Residents of VAT-applicable European Union territories will also be charged a VAT equal to 17.5% of the applicable fee.

The Adventure Continues February 15, 2005. +10056


A series of events has transpired across the world of Norrath and the familiar faces of Firiona Vie and her nemesis Lanys T’Vyl return to find themselves at the forefront of the events. Unbeknownst to them, a dark influence has seeped into the world of Norrath causing new tensions to arise and conflicts to intensify as the dawn of a new age emerges. The Age of War is upon the people of Norrath and heroes return in this ultimate, unending battle between good and evil.

Prepare for EverQuest: Dragons of Norrath and return to the lands between Halas and Lavastorm as you seek out the Nest, the ancestral birthplace of the dragons, long sealed away and hidden from the eyes of Norrath. But beware, if the Nest is exposed too early during the Brood Dawn, the dragons and their eggs will be consumed in a curse and chaos will consume the lands of Norrath.

Featuring new lands with enhanced graphics, bold new storylines, and updated creatures including dragons, goblins, drakes, and Frost Giants!, EverQuest: Dragons of Norrath is the next great expansion pack for the fantasy adventure that is EverQuest.

Features:

o New Zones, Creatures and Content - From Lavastorm to the Thundercrest Isles adventure in graphically enhanced zones with all new themes. Brave challenging new quests, discover new treasures, and battle new NPC’s including drakes, goblins and fierce dragons.


o New Interactive World Map - A full color interactive map of the world of allows players to point-and-click from a world view, to a continent view, to a zone view of the traditional line maps.


o Player Barter System - Allows players to set up their own method of giving platinum or items in exchange for other items.


o Potion Belt - Allows for quick use of inventory items.


o Bandolier Equip - Lets your character have two sets of pre-arranged weapons for each hand.


o New Spells, Tradeskills, and Recipes.


o Guild Halls - An instanced guild hall for guild members to meet and prepare for playing.


o Guild Bank - Bank slot for storage of items accessible by all (designated) members of a guild.


o Guild Stone - Allows guild members to easily port to the Instanced Guild Hall.


o Mana/health Regen Pool - Allows players to easily regenerate their mana and health in preparation for battle while in the guild hall.


o Mass Corpse Summoning Altar - Allows guilds to summon guild corpses en masse to the alter room after a wipe out.


o Guild Tradeskill Objects - Various tradeskill tools are located in the guild hall for easy access by guild members.


o Guild ‘Looking for Members’ Tool - Allows guilds to recruit by placing persistent “ads†on bulletin boards, search for player characters who match guild criteria and send in-game emails to those members.


o Players ‘Looking for Guild’ Tool - Allows players to find guilds recruiting members.


o Buff timers - Allows guild members to suspend buff timers while in guild halls.


EverQuest: Dragons of Norrath is bursting with new adventures and intense battles for players with many great features for characters of all levels! +10057

Classic EverQuest Required


ESRB Rating: TEEN with Blood and Gore, Suggestive Themes, Use of Alcohol and Violence.

For download hints and further details, visit http://everquest.station.sony.com/dragonsofnorrath/features.jsp

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

A valid credit card is required. You cannot use a GameCard or GlobalCollect payment option to purchase this digital download expansion. When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one.

We will charge your credit card no earlier than 12:01 a.m. PST on the date the product goes live. If you change your mind and want to cancel your pre-order before that time, go to the Station Store (https://store.station.sony.com/my_account.jsp) and cancel your preorder. At 12:01 a.m. PST on the live date and thereafter, all sales are final.

The expected live date is February 15, 2005, so PRE-ORDER NOW! The expected live date is subject to change, in which case we will post a new anticipated live date in a patch message and extend the deadline for pre-order cancellations until 12:01 a.m. PST on the new live date.

The file patch plan is to make the necessary files gradually available for patching during a several week period prior to the live date. When you pre-order, the "EverQuest: Dragons of Norrath" checkbox on the second page of the client patcher will be checked so that each time you patch, the patch routine will check for new expansion files and download them to you. Attention narrowband users: some patches may be quite large and take significant time to download. For patch hints, go to the EverQuest Patcher Help website (http://eqlive.station.sony.com/support/tech_support/ts_new_patcher.jsp). Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter. +10058

You must have purchased the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (http://sonyonline.com/tos/tos.jsp#privacy). You must be an EverQuest subscriber to order the expansion.

Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® 2 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 3 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
2.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online fees and valid credit card required.

+10059 ORDER EVERQUEST® DEPTHS OF DARKHOLLOW™!

Join EverQuest Depths of Darkhollow and journey into a world of immorality and devastation, a world that has existed purely as a vast wilderness filled with intelligent predators, destruction and disease. Go forth with courage as the terror that lies deep within these grounds must not be allowed to spread to the surface - to Norrath.

Visit www.DepthsOfDarkhollow.com today!

Features:

* Monster Missions: Play EverQuest as you never have before and see Norrath through the eyes of some of its fearsome and powerful creatures as you step into their form to do battle against their ancient foes! Change into a creature with different abilities from your own. Experience EverQuest lore first hand through the eyes of another character in Monster Missions and unlock the ability to use more powerful monsters!

* Spirit Shrouds: Adventure with your friends of any levels. Spirit Shrouds will allow you to play as a creature at any level below your own. So don the form of a lower level creature and join your friends in battle while earning experience for your normal character!

* Evolving Items: Earn new items that advance as you use them, becoming more powerful over time and unlocking hidden abilities and wield intelligent items with a personality of their own!

* New Missions: Battle your way through over 60 new missions.

* New Creatures, New Environments and New Encounters: Over 30 unique creatures and 7 zones, 15 small instances, with a re-envisioned Nektulos Forest.

* New Crafting, Spells, Items and More: New items and tradeskill recipes! Also new spells and alternate advancement abilities!


Purchase the Retail Box Version from a participating retailer and receive a Clockwork Boar mount plus the Gargoyle Spirit Shroud. +10060 ORDER EVERQUEST® DEPTHS OF DARKHOLLOW™ DIGITAL DOWNLOAD

Order your digital download copy now for the price of $19.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee). +10061

Join EverQuest Depths of Darkhollow and journey into a world of immorality and devastation, a world that has existed purely as a vast wilderness filled with intelligent predators, destruction and disease. Go forth with courage as the terror that lies deep within these grounds must not be allowed to spread to the surface - to Norrath.

Visit www.DepthsOfDarkhollow.com today!

Features:

* Monster Missions: Play EverQuest as you never have before and see Norrath through the eyes of some of its fearsome and powerful creatures as you step into their form to do battle against their ancient foes! Change into a creature with different abilities from your own. Experience EverQuest lore first hand through the eyes of another character in Monster Missions and unlock the ability to use more powerful monsters!


* Spirit Shrouds: Adventure with your friends of any levels. Spirit Shrouds will allow you to play as a creature at any level below your own. So don the form of a lower level creature and join your friends in battle while earning experience for your normal character!


* Evolving Items: Earn new items that advance as you use them, becoming more powerful over time and unlocking hidden abilities and wield intelligent items with a personality of their own!


* New Missions: Battle your way through over 60 new missions.


* New Creatures, New Environments and New Encounters: Over 30 unique creatures and 7 zones, 15 small instances, with a re-envisioned Nektulos Forest.


* New Crafting, Spells, Items and More: New items and tradeskill recipes! Also new spells and alternate advancement abilities!


Purchase the Retail Box Version from a participating retailer and receive a Clockwork Boar mount plus the Gargoyle Spirit Shroud. +10062


Classic EverQuest Required


ESRB Rating: TEEN with Blood and Gore, Suggestive Themes, Use of Alcohol and Violence.

For further details, visit http://everquest.station.sony.com/dod/features.jsp

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

A valid credit card is required. You cannot use a GameCard or GlobalCollect payment option to purchase this digital download expansion. When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one. All sales are final

Attention narrowband users: some patches may be quite large and take significant time to download. For patch hints, go to the EverQuest Patcher Help website (http://eqlive.station.sony.com/support/tech_support/ts_new_patcher.jsp). Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter. +10063


You must have purchased the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (http://sonyonline.com/tos/tos.jsp#privacy). You must be an EverQuest subscriber to order the expansion.

Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® 2 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account


Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 3 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
2.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online fees and valid credit card required.



+10064 ORDER EVERQUEST® DEPTHS OF DARKHOLLOW™ DIGITAL DOWNLOAD

Order your digital download copy now for the price of $19.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee). +10065

Join EverQuest Depths of Darkhollow and journey into a world of immorality and devastation, a world that has existed purely as a vast wilderness filled with intelligent predators, destruction and disease. Go forth with courage as the terror that lies deep within these grounds must not be allowed to spread to the surface - to Norrath.

Visit www.DepthsOfDarkhollow.com today!

Features:

* Monster Missions: Play EverQuest as you never have before and see Norrath through the eyes of some of its fearsome and powerful creatures as you step into their form to do battle against their ancient foes! Change into a creature with different abilities from your own. Experience EverQuest lore first hand through the eyes of another character in Monster Missions and unlock the ability to use more powerful monsters!


* Spirit Shrouds: Adventure with your friends of any levels. Spirit Shrouds will allow you to play as a creature at any level below your own. So don the form of a lower level creature and join your friends in battle while earning experience for your normal character!


* Evolving Items: Earn new items that advance as you use them, becoming more powerful over time and unlocking hidden abilities and wield intelligent items with a personality of their own!


* New Missions: Battle your way through over 60 new missions.


* New Creatures, New Environments and New Encounters: Over 30 unique creatures and 7 zones, 15 small instances, with a re-envisioned Nektulos Forest.


* New Crafting, Spells, Items and More: New items and tradeskill recipes! Also new spells and alternate advancement abilities!


Purchase the Retail Box Version from a participating retailer and receive a Clockwork Boar mount plus the Gargoyle Spirit Shroud. +10066


Classic EverQuest Required


ESRB Rating: TEEN with Blood and Gore, Suggestive Themes, Use of Alcohol and Violence.

For further details, visit http://everquest.station.sony.com/dod/features.jsp

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

A valid credit card is required. You cannot use a GameCard or GlobalCollect payment option to purchase this digital download expansion. When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one. All sales are final

Attention narrowband users: some patches may be quite large and take significant time to download. For patch hints, go to the EverQuest Patcher Help website (http://eqlive.station.sony.com/support/tech_support/ts_new_patcher.jsp). Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter. +10067


You must have purchased the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (http://sonyonline.com/tos/tos.jsp#privacy). You must be an EverQuest subscriber to order the expansion.

Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® 2 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account


Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 3 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
2.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online fees and valid credit card required.



+10068 PREORDER EVERQUEST® DEPTHS OF DARKHOLLOW™!

Pre-order and purchase the digital download version from the Station Store and receive a unique Gargoyle Spirit Shroud and adventure as a Monster or purchase the Retail Box Version from a participating retailer and receive a Clockwork Boar mount plus the Gargoyle Spirit Shroud. +10069

Join EverQuest Depths of Darkhollow and journey into a world of immorality and devastation, a world that has existed purely as a vast wilderness filled with intelligent predators, destruction and disease. Go forth with courage as the terror that lies deep within these grounds must not be allowed to spread to the surface - to Norrath.

Visit www.DepthsOfDarkhollow.com today!

Features:

* Monster Missions: Play EverQuest as you never have before and see Norrath through the eyes of some of its fearsome and powerful creatures as you step into their form to do battle against their ancient foes! Change into a creature with different abilities from your own. Experience EverQuest lore first hand through the eyes of another character in Monster Missions and unlock the ability to use more powerful monsters!


* Spirit Shrouds: Adventure with your friends of any levels. Spirit Shrouds will allow you to play as a creature at any level below your own. So don the form of a lower level creature and join your friends in battle while earning experience for your normal character!


* Evolving Items: Earn new items that advance as you use them, becoming more powerful over time and unlocking hidden abilities and wield intelligent items with a personality of their own!


* New Missions: Battle your way through over 60 new missions.


* New Creatures, New Environments and New Encounters: Over 30 unique creatures and 7 zones, 15 small instances, with a re-envisioned Nektulos Forest.


* New Crafting, Spells, Items and More: New items and tradeskill recipes! Also new spells and alternate advancement abilities! +10070


Classic EverQuest Required


ESRB Rating: RP - Rating Pending.

For download hints and further details, visit http://everquest.station.sony.com/dod/features.jsp

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

A valid credit card is required. You cannot use a GameCard or GlobalCollect payment option to purchase this digital download expansion. When you order, we will check your account for a valid credit card. If your account does not have a valid credit card associated with it, your order will not be processed until you provide one.

We will charge your credit card no earlier than 12:01 a.m. PST on the date the product goes live. If you change your mind and want to cancel your pre-order before that time, go to the Station Store (https://store.station.sony.com/my_account.jsp) and cancel your preorder. At 12:01 a.m. PST on the live date and thereafter, all sales are final.

The expected live date is September 13, 2005, so PRE-ORDER NOW! The expected live date is subject to change, in which case we will post a new anticipated live date in a patch message and extend the deadline for pre-order cancellations until 12:01 a.m. PST on the new live date.

The file patch plan is to make the necessary files gradually available for patching during a several week period prior to the live date. When you pre-order, the "EverQuest Depths of Darkhollow" checkbox on the second page of the client patcher will be checked so that each time you patch, the patch routine will check for new expansion files and download them to you. Attention narrowband users: some patches may be quite large and take significant time to download. For patch hints, go to the EverQuest Patcher Help website (http://eqlive.station.sony.com/support/tech_support/ts_new_patcher.jsp). Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter. +10071


You must have purchased the expansion for each account you wish to be enabled for this expansion; you must download the expansion files to each machine on which you wish the expansion to "work."

The expansion and your order are subject to the EverQuest User Agreement and Software License (http://eqlive.station.sony.com/support/customer_service/cs_EULA.jsp), SOE’s Terms of Service and Rules of Conduct (http://sonyonline.com/tos/tos.jsp), and SOE’s Privacy Policy (http://sonyonline.com/tos/tos.jsp#privacy). You must be an EverQuest subscriber to order the expansion.

Platform: PC

Required Specs:

Windows® 98/2000/ME/XP
Pentium® 2 400 equivalent or greater
256 MB RAM
ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
DirectX Compatible Sound Card
28.8k + Internet Connection
4X Speed CD-ROM
500 MB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account


Recommended Specs:

Windows® 98/2000/ME/XP
Pentium® 3 equivalent or greater
512 MB RAM
NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
DirectX Compatible Sound Card
56.6k + Internet Connection
16X Speed CD-ROM
2.5 GB+ Hard Drive Space
DirectX 9.0
EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online fees and valid credit card required.



+10072 +10073 ORDER EVERQUEST® PROPHECY OF RO™ DIGITAL DOWNLOAD

Order your digital download copy now for the price of $29.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

The gods have returned and the mortal realm shifts with their influence. But a new presence walking among the gods - a malevolent force that was released into godhood by the follies of mortals. Unbound by the laws of the pantheon, it leaves corruption in its wake and threatens to bring the entire pantheon crumbling down. The only hope for Norrath hangs on the very mortals who have unleashed this upheaval. They may be the only ones with a chance of stopping it.

In Freeport, Druzzil has opened a portal within the Academy of Arcane Science to her home plane. The city, already strained politically, falls into chaos and power struggles as fanatics cry that the end is near.

Rallos Zek, learning of Druzzil's actions, resolves to guide Norrathians to the Plane of Rage. His daughter, Sullon Zek, the demigod of Rage, has been overtaken by the very rage she grants to mortals. Confined to a tower within her realm, she unleashes her fury upon her realm. Can intrepid mortals bring a balance to the chaos of her realm and restore Sullon?

The nature god Tunare, having lost her Chosen, has a growing sense of foreboding. She, too, has heard of Druzzil's efforts and now joins the fight against the threat. Her plan is bold but, as even Tunare herself admits, problematic. She intends to revive the ancient knowledge of her now-extinct first children, the Elddar elves. To do so, she calls upon Druzzil and Karana, the god of storms, for assistance. Karana sends great winds across the deserts of Ro to uncover the lost center of power of the Elddar elves, the palace of Takish-Hiz. Its walls and petrified gardens uncovered, Druzzil then manipulates time and space to provide Norrathians with passage into Takish-Hiz of Old, so they may learn from the most ancient race of elves and return that great knowledge to Norrath.

Though the gods have returned, time is short and the future of Norrath lies once again in the hands of mortals!


+10074 Feature Set:

* Traps: Control your battles before they even begin by setting your own traps for your foes to stumble into!

* Spheres of Influence: Punish your foes and aid your allies by taking hold of the power of the gods to impose your will upon the world around you

* Destructible Terrain: Interact with the world of Norrath like never before! Chop down doors, tumble walls, and destroy encampments. Show your enemies no mercy!

* Buff Filters: Decide which buffs you would rather auto-decline with the new buff filtering system!

* 8 new bank spaces. Even more storage for your most valuable items.

* New Missions: Battle your way through 30 new missions.

* New Creatures, New Environments and New Encounters: More than 25 unique creatures, 7 new Zones, and 6 new Instances!

* New Spells, Task Disciplines and Trade Skills


+10075 Original EverQuest Game Required.

For further details, visit http://eqplayers.station.sony.com/expansions/prophecyofro/

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you.

If you intend to play the expansion on more than one computer using the same Station account, you must log-in to your Station account on each computer that you wish to play the expansion and the expansion files will be downloaded during the installation and launch of the game on that computer. If you intend to play the expansion on more than one Station account, you must purchase a separate expansion for each Station account.

A valid credit card is required to order. You cannot use a GameCard or Global Collect payment option to order this digital download expansion.

The expansion and your order are subject to the EverQuest User Agreement and Software License, SOE's Terms of Service and Rules of Conduct, and SOE's Privacy Policy.


+10076 Platform: PC

Required Specs:

* Windows® 98/2000/ME/XP
* Pentium® 400 equivalent or greater
* 256 MB RAM
* ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
* DirectX Compatible Sound Card
* 28.8k + Internet Connection
* 4X Speed CD-ROM
* 500 MB Hard Drive Space
* DirectX 9.0
* EverQuest Classic and a valid EverQuest account

*Note: Not All Direct 3D cards are supported. (Visit our knowledge base for additional information)

Recommended Specs:

* Windows® 98/2000/ME/XP
* Pentium® 4 equivalent or greater
* 512 MB RAM
* NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
* DirectX Compatible Sound Card
* 56.6k + Internet Connection
* 16X Speed CD-ROM
* 1.5+ GB Hard Drive Space
* DirectX 9.0
* EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an Internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online subscription fees and valid credit card is required.

ESRB Rating: TEEN with Blood and Gore, Suggestive Themes, Use of Alcohol and Violence.
+10077 No text set +10082 ORDER EVERQUEST® THE SERPENT'S SPINE™ DIGITAL DOWNLOAD - Available Only Via Digital Download

Order your digital download copy now for the price of $29.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

Nestled in a great ravine in the Serpentspine Mountains lies Crescent Reach, home to the Drakkin - a new race created to protect the future of dragonkind. The Drakkin are humans that have been touched by the blood of a dragon in a ritual that infuses them with the dragon's inherent magic. The dragon-touched experience changes as the latent magic within the dragon's blood surfaces. Their hair takes on new texture and color - the same color as that of their parent dragon. Parts of their skin show small, toughened scales. Delicate horns appear in patterns on their forehead and runic patterns begin to show on their face, torsos and legs - all in the color of their dragon progenitor. As their new traits develop, a yearning to find their dragon parents grows deep within them. Many make a pilgrimage into the Serpentspine Mountains seeking out the refuge of Crescent Reach.

All players who purchase The Serpent's Spine expansion pack, no matter what race or character class they play, will be able to explore the new starting city of Crescent Reach: home to merchants, quests and combat. Players can utilize the area as a home base for adventure that spans all 75 levels and makes full use of the new dynamic gameplay features, including: auras, traps, and destructible terrain.


+10083 Feature Set:

* New Player Race: The Drakkin have been created from both human and dragon blood to protect the future of all dragon kind. Several colors and customizations will be available to make each Drakkin character unique, such as elegant scale markings and horns.

* Level Cap Increase: Players can now reach level 75, complete with new spells, abilities, raids and quests for greater power.

* Content for Levels 1 to 75: Play through every level of the game without ever leaving the Serpent Spine Mountains.

* New Starting City: Crescent Reach is a fully functioning city with all that is required to learn and thrive in EverQuest, including merchant, quest, combat and tradeskill areas.

* Dynamic Features: New zones, NPCs, destructible and interactive objects.

* New AAs, Spells: Experience new spells and Alternate Advancement abilities.


+10084 Original EverQuest Game Required.

For further details, visit http://everquest.station.sony.com/

Digital Download is a software-only purchase; SOE will not send you anything. The complete software necessary to play this expansion will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you. You must have purchased the software for each account you wish to be enabled; you must download the software to each machine you wish to play these games.

A valid credit card is required to order. You cannot use a GameCard or Global Collect payment option to order this digital download expansion.

The base software and any expansions are subject to the EverQuest User Agreement and Software License, SOE's Terms of Service and Rules of Conduct, and SOE's Privacy Policy.


+10085 Platform: PC

Required Specs:

* Windows® 98/2000/ME/XP
* Pentium® 400 equivalent or greater
* 256 MB RAM
* ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
* DirectX Compatible Sound Card
* 28.8k + Internet Connection
* 4X Speed CD-ROM
* 500 MB Hard Drive Space
* DirectX 9.0c
* EverQuest Classic and a valid EverQuest account

*Note: Not All Direct 3D cards are supported. (Visit our knowledge base for additional information)

Recommended Specs:

* Windows® 2000/ME/XP
* Pentium® 4 equivalent or greater
* 512 MB RAM
* NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
* DirectX Compatible Sound Card
* 56.6k + Internet Connection
* 16X Speed CD-ROM
* 1.5+ GB Hard Drive Space
* DirectX 9.0c
* EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses.

Internet Play:
EverQuest is an Internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections for which they are responsible. Additional online subscription fees and valid credit card is required.

ESRB Rating: TEEN with Blood and Gore, Suggestive Themes, Use of Alcohol and Violence.
+10086 ORDER EVERQUEST® THE BURIED SEA™ DIGITAL DOWNLOAD - Available Only Via Digital Download

Order your digital download copy now for the price of $29.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

All players who pre-order and then purchase The Buried Sea expansion pack, no matter what race or character class they play, will receive an Aviak Spirit Totem (one per account), which grants players a faction bonus with pirates in the Buried Sea. It affects what rewards are available from the pirates, giving players a leg up so they can more quickly reach the more advanced rewards that can be found in the expansion.

Throngs of undead trample the earth both night and day as Norrath's sun withers. With each passing hour, the growing numbers of creatures of the night rising from crypt and grave seem part of a grand design to overwhelm the lands.

Trouble also lurks deep beneath the Buried Sea off the coast of Odus in a city named Katta Castrum which has remained undiscovered for millennia. It is a city built to sustain the beloved leader of the Combine Empire named Tsaph Katta who was poisoned by General Seru. Generations of Combine Loyalists have tried to cure and awaken Katta while they house threatened populations of Kedge, Shissar, and Sphinx. But in recent times, the artifact that powers and protects their city has weakened. Without it, the city will be crushed under the pressure of the sea. Only the most intrepid Norrathians have the power to save them.


+10087 Feature Set:

* Ship-to-Ship Combat - Cross the plank and fight for your life on the open seas as you raid pirate vessels!

* Two Paths of Advancement-Battle pirates on the open seas or dive deep beneath the sea to Katta Castrum, lost stronghold of the Combine Empire.

* New Missions - Take your group through more than 60 challenging new missions ranging from defending merchant vessels against marauding pirates to uncovering the secrets behind the combine city and the danger that threatens it!

* Guild Banners-Design a guild emblem and display it with pride! Upgrade your banner to grant your guild special abilities and plant it on the field of battle so your fellow guild members can teleport directly to it!

* Fellowships - Get together with a group of your closest friends and start your own fellowship! You can join in a common chat channel, gain the ability to create a campfire that can help you in your adventures, and get a token that will let you quickly travel to your other fellowship members.

* Energeian Items - Utilizing ancient Combine technology, gain access to a new inventory slot that can be fitted with an Energeian power source and armor that can tap into the energy held within! The armor gains power based on the type of energy in the power source, so you can quickly customize the effects of your armor by changing the power source!


+10088 Original EverQuest game required.

This game is an expansion pack. The full version of EverQuest is required to play.

We will charge your credit card no earlier than 12:01 a.m. PST on the date the product goes live. If you change your mind and want to cancel your pre-order before that time, go to the Station Store and cancel your pre-order. As of 12:01 a.m. PST on the live date and thereafter, all sales are final. The expected live date is February 13, 2007, so PRE-ORDER NOW! The expected live date is subject to change, in which case we will post a new anticipated live date in a patch message and extend the deadline for pre-order cancellations until 12:01 a.m. PST on the new live date.

Digital download is software-only; SOE will not send you anything. The complete software necessary to play will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you. You must have purchased the software for each account you wish to be enabled; you must download the software to each machine you wish to play these games.

The file patch plan is to make the necessary files gradually available for patching during a several week period prior to the live date. When you pre-order, the "EverQuest The Buried Sea" checkbox on the second page of the client patcher will be checked so that each time you patch, the patch routine will check for new expansion files and download them to you.

Attention narrowband users: some patches may be quite large and take significant time to download. Expect heavy patch server load, difficulty connecting and the possibility of unscheduled downtime on the live date and for a few days thereafter.

A valid credit card payment is required to pre-order. You cannot use a game card or Global Collect payment option to pre-order this digital download.


+10089 Platform: PC

Required Specs:

* Windows® 2000/ME/XP
* Pentium® II 400 equivalent or greater
* 256 MB RAM
* ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
* DirectX Compatible Sound Card
* 28.8k + Internet Connection
* 4X Speed CD-ROM
* 500 MB Hard Drive Space
* DirectX 9.0
* EverQuest Classic and a valid EverQuest account

*Note: Not All Direct 3D cards are supported. (Visit our knowledge base for additional information)

Recommended Specs:

* Windows® 2000/ME/XP
* Pentium® III equivalent or greater
* 512 MB RAM
* NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
* DirectX Compatible Sound Card
* 56.6k + Internet Connection
* 16X Speed CD-ROM
* 1.5+ GB Hard Drive Space
* DirectX 9.0
* EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses and you may need to upgrade your current system (or obtain a new system) to play the game over its lifetime.

Internet Play:
EverQuest is an Internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections. Players are responsible for their own Internet connection service and all Internet-related fees. A valid credit card is required to play EverQuest. Additional, recurring subscription fees apply. SOE does not ensure continuous or error-free access or availability of any game content, feature, game-play or server and SOE may change, modify, disable, suspend or remove any such content, feature, game-play or server in its sole discretion.

Rating Pending (RP).
+10090 No text set +10091 ORDER EVERQUEST® THE BURIED SEA™ DIGITAL DOWNLOAD - Available Only Via Digital Download

Order your digital download copy now for the price of $29.99 (plus tax, if applicable. In addition to the fees described above, if you are a resident of a European Union country, you will also be charged a VAT tax equal to 17.5% of the applicable fee).

Throngs of undead trample the earth both night and day as Norrath's sun withers. With each passing hour, the growing numbers of creatures of the night rising from crypt and grave seem part of a grand design to overwhelm the lands.

Trouble also lurks deep beneath the Buried Sea off the coast of Odus in a city named Katta Castrum which has remained undiscovered for hundreds of years. It is a city built to sustain the beloved leader of the Combine Empire named Tsaph Katta who was poisoned by General Seru. Generations of Combine Loyalists have tried to cure and awaken Katta while they house threatened populations of Kedge, Shissar, and Sphinx. But in recent times, the artifact that powers and protects their city has weakened. Without it, the city will be crushed under the pressure of the sea. Only the most intrepid Norrathians have the power to save them.


+10092 Feature Set:

* Ship-to-Ship Combat - Cross the plank and fight for your life on the open seas as you raid pirate vessels!

* Two Paths of Advancement - Battle pirates on the open seas or dive deep beneath the sea to Katta Castrum, lost stronghold of the Combine Empire.

* New Missions - Take your group through more than 60 challenging new missions ranging from defending merchant vessels against marauding pirates to uncovering the secrets behind the Combine city and the danger that threatens it!

* Guild Banners - Design a guild emblem and display it with pride! Upgrade your banner to grant your guild special abilities and plant it on the field of battle so your fellow guild members can teleport directly to it!

* Fellowships - Get together with a group of your closest friends and start your own fellowship! You can join in a common chat channel, gain the ability to create a campfire that can help you in your adventures, and get a token that will let you quickly travel to your other fellowship members.

* Energeian Items - Utilizing ancient Combine technology, gain access to a new inventory slot that can be fitted with an Energeian power source and armor that can tap into the energy held within! The armor gains power based on the type of energy in the power source, so you can quickly customize the effects of your armor by changing the power source!


+10093 Original EverQuest game required.

This game is an expansion pack. The full version of EverQuest is required to play.

Digital download is software-only; SOE will not send you anything. The complete software necessary to play will need to be downloaded to your computer, but no physical box, disks or other materials will be provided to you. You must have purchased the software for each account you wish to be enabled; you must download the software to each machine you wish to play these games.

A valid credit card or Globalcollect payment is required to order. You cannot use a game card payment option to order this digital download.


+10094 Platform: PC

Required Specs:

* Windows® 2000/ME/XP
* Pentium® II 400 equivalent or greater
* 256 MB RAM
* ATI Radeon 7500/NVidia GeForce 1 equivalent or greater
* DirectX Compatible Sound Card
* 28.8k + Internet Connection
* 4X Speed CD-ROM
* 500 MB Hard Drive Space
* DirectX 9.0
* EverQuest Classic and a valid EverQuest account

*Note: Not All Direct 3D cards are supported. (Visit our knowledge base for additional information)

Recommended Specs:

* Windows® 2000/ME/XP
* Pentium® III equivalent or greater
* 512 MB RAM
* NVidia GeForce 3/ATI Radeon 8500 equivalent or greater
* DirectX Compatible Sound Card
* 56.6k + Internet Connection
* 16X Speed CD-ROM
* 1.5+ GB Hard Drive Space
* DirectX 9.0
* EverQuest Classic and a valid EverQuest account

System requirements subject to change as the game progresses and you may need to upgrade your current system (or obtain a new system) to play the game over its lifetime.

Internet Play:
EverQuest is an Internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections. Players are responsible for their own Internet connection service and all Internet-related fees. A valid credit card is required to play EverQuest. Additional, recurring subscription fees apply. SOE does not ensure continuous or error-free access or availability of any game content, feature, game-play or server and SOE may change, modify, disable, suspend or remove any such content, feature, game-play or server in its sole discretion.

Rated T (for Teen) with Blood & Gore, Suggestive Themes, Use of Alcohol, and Violence.
+10095 No text set +10096 Pre-Order and Purchase the new Compilation Pack and Receive a Unique Item-Gnomish Steamfists*

Includes EverQuest Classic and all previous expansions!

The mechanical armies of the evil gnomish necromancer Meldrath the Malignant gather in the Steamfont Mountains. The launch of his great air fortress Mechanotus has torn open the earth, exposing new paths into unexplored regions of the ancient continent of Faydwer.

Adventure awaits in the nearby Loping Plains, home to the soul eating wereorcs of Bloodmoon Keep. Strive to end the torment of humans and elves cursed for centuries in the Hills of Shade. All the while, an ancient menace stirs east of the Dragonscale Hills, where the prismatic dragon Kerafyrm the Awakened plans his revenge.


+10097 * Level Cap Increase - Players can now achieve level 80! New high level item sets, new Alternate Advancement ability lines and new spells await!

* 15 New Zones - New realms for adventurers to explore, including: Meldrath's mechanical fortress Mechanotus, the new lands of the Loping Plains and Kerafyrm's lair Crystallos.

* Amazing Heroic Items - New heroic attribute levels for Agility, Stamina, Strength, Charisma, Dexterity, Intelligence, and Wisdom. Increase stats above current caps!

For more information visit www.everquest.com.

* In game items are included with valid pre-order and purchase, are limited to one per account and are no-drop/non-transferable.

Pre-orders: We will charge your credit card no earlier than 12:01 a.m. PST on the date the product goes live. If you change your mind and want to cancel your pre-order before that time, go to the Station Store and cancel your pre-order. As of 12:01 a.m. PST on the live date and thereafter, all sales are final. The expected live date is November 13, 2007, so PRE-ORDER NOW!

+10098 The expected live date is subject to change, in which case we will post a new anticipated live date on our website and extend the deadline for pre-order cancellations until 12:01 a.m. PST on the new live date. On November 13, 2007, all pre-orders that fail to be converted into orders on the first attempt will be re-submitted for conversion. After November 12, 2007 at 11:59PM PST, orders cannot be cancelled, voided or refunded once submitted.

Pre-orders and orders are subject to sales tax, VAT and other taxes where applicable. Valid Station Account, credit card and email address required for processing. Consumer is solely responsible for any and all false, incomplete or incorrect information, including misspelled words and incorrect numbers. Pre-order information may be changed by canceling your pre-order and submitting a new pre-order prior to November 12, 2007 at 11:59PM PST.

Digital Download T&C:
Digital download is a software-only purchase; SOE will not send you anything. This software will need to be downloaded to your computer, but no physical box, discs or other materials will be provided to you. You must have this software for each account on which you wish it to be enabled; you must download the game's files to each machine on which you wish to play these games. A valid credit card is required to pre-order. You cannot use a GameCard or Global Collect payment option to pre-order this digital download.

The download and use of this game is subject to the EverQuest User Agreement and Software License, EverQuest Rules of Conduct, SOE's Terms of Service, and SOE's Privacy Policy.


+10099 Platform:
PC
System Requirements:
Required Specs:
Windows® 2000/ME/XP | Pentium® II 400 equivalent or greater | 256 MB RAM | ATI Radeon 7500/NVidia GeForce 1 equivalent or greater* | DirectX Compatible Sound Card | 28K + Internet Connection | 4X Speed DVD-ROM | 500 MB Hard Drive Space - 5.65GB Available Hard Drive Space (depending on how many expansions are installed) | DirectX 9.0 | Classic EverQuest and a valid EverQuest Subscription are Required

Recommended Specs:
Windows® 2000/ME/XP | Pentium® 4 equivalent or greater | 512 MB RAM | NVidia GeForce 3/ATI Radeon 8500 equivalent or greater* | DirectX compatible Sound Card | 56.6K + Internet Connection | 8X DVD-ROM* | 10.0+ GB Available Hard Drive Space | DirectX 9.0

*Note: All Direct 3D cards not supported. DirectX 9.0b or greater is required for all Win98/ME/2000/XP.

System requirements subject to change as the game progresses and you may need to upgrade your current system (or obtain a new system) to play the game over its lifetime.

Internet Play:
EverQuest is an internet-only game, requiring players to connect to Sony Online Entertainment servers via their own Internet connections. Players are responsible for their own internet connection service and all internet-related fees. A valid credit card is required to play EverQuest. Additional, recurring subscription fees apply.

Sony Online Entertainment does not ensure continuous or error-free access, use or availability of any game content, feature, game-play or server and may change, modify, disable, suspend or remove any such content, feature, game-play or server in its sole discretion. +10100 No text set +10101 Rediscover Faydwer in the fourteenth EverQuest expansion pack. With 15 new zones, new level cap at 80, new AA ability lines and new raid content, this expansion is a must-have for existing players. Purchase of this expansion includes a Worg mount and Nimbus of the Storm Lord!

*In game items are included with valid purchase, are limited to one per account and are no-drop/non-transferable.

Terms and Conditions
Digital Download T&C:
Digital download is a software-only purchase; SOE will not send you anything. This software will need to be downloaded to your computer, but no physical box, discs or other materials will be provided to you. You must have this software for each account on which you wish it to be enabled; you must download the game's files to each machine on which you wish to play these games. A valid credit card or Global Collect is required to order. You cannot use a GameCard payment option to order this digital download.

The download and use of this game is subject to the EverQuest User Agreement and Software License, SOE's Terms of Service, and SOE's Privacy Policy. +10102

+10103 Internet Play:
This is an Internet-only game which requires players to connect to Sony Online Entertainment servers via their own Internet connections. Players are responsible for their own Internet connection service and all Internet-related fees. A valid credit card is required to play this game and additional, recurring subscription fees apply.

Sony Online Entertainment does not ensure continuous or error-free access, use or availability of any game content, feature, game-play or server and may change, modify, disable, suspend or remove any such content, feature, game-play or server in its sole discretion.

+10104 System Requirements:
Required Specs:
Windows® 2000/ME/XP | Pentium® II 400 equivalent or greater | 256 MB RAM | ATI Radeon 7500/NVidia GeForce 1 equivalent or greater* | DirectX Compatible Sound Card | 28K + Internet Connection | 4X Speed DVD-ROM | 500 MB Hard Drive Space - 5.65GB Available Hard Drive Space (depending on how many expansions are installed) | DirectX 9.0 | Classic EverQuest and a valid EverQuest Subscription are Required

Recommended Specs:
Windows® 2000/ME/XP | Pentium® 4 equivalent or greater | 512 MB RAM | NVidia GeForce 3/ATI Radeon 8500 equivalent or greater* | DirectX compatible Sound Card | 56.6K + Internet Connection | 8X DVD-ROM* | 10.0+ GB Available Hard Drive Space | DirectX 9.0

*Note: All Direct 3D cards not supported. DirectX 9.0b or greater is required for all Win98/ME/2000/XP.

System requirements subject to change as the game progresses and you may need to upgrade your current system (or obtain a new system) to play the game over its lifetime. +10105 Act now to prevent the cataclysm and save Norrath from the forces of Discord! Pre-order and purchase ensures players have access to all the content and bonus items in the EverQuest Seeds of Destruction All-In-One pack, including:

• The pre-order exclusive Qeynos Shield of Foundation, as well as other amazing promotional items from past expansions.

• 20 new zones, including the eerie wasteland of the Void, the battle of Bloody Kithicor and the sinister heart of the Plane of Discord!

• The all-new Mercenary NPCs. Need some extra muscle or a healer archetype for PvE support? Hire a Mercenary for your party and crush the opposition!

• New level cap at 85! New spells, AAs and items await!

• The EverQuest Seeds of Destruction All-In-One pack contains all features and content from the 14 previous expansion packs.

• Legends of Norrath™ digital card game client, including a starter deck, booster pack and a “Familiar of the Hooded Scrykin†loot card! +10106 No text set +10107 The cataclysm is here! Blast into Norrath’s past to defeat the forces of Discord!

Order today to ensure access to all the content and bonus items in the EverQuest Seeds of Destruction All-In-One pack, including:

• 20 new zones, including the eerie wasteland of the Void, Firiona Vie and Lanys T’vyl’s epic showdown in Bloody Kithicor and the sinister heart of the Plane of Discord!

• The all-new Mercenary NPCs. Need some extra muscle or a healer archetype for PvE support? Hire a Mercenary for your party and crush the opposition!

• New level cap at 85! New spells, new AAs and new items await! +10108
Pre-Order Underfoot Today!

Journey into the undiscovered depths with EverQuest® Underfoot™!

At a time when the ancient gods laid their claim to Norrath, Brell Serilis, the Duke of Below, turned his focus to the Plane of Underfoot and claimed it for his own. Here, Brell sealed Underfoot off from the world's prying eyes, filling it with amazing creatures sculpted by his own hands and discarding those that didn't meet his flawless standards. The plane itself is a network of glowing caverns, living caves and burning lava flows twisting and turning deep into the world. Now, a sinister figure is growing in power and threatens to overthrow Brell and disrupt the perfect world he's created.

Enter the underground lair of Brell Serilis, one of the most fabled and mysterious beings in all of Norrath, uncover the epic challenges around every corner and solve the mystery behind the silhouette lurking in the shadows.

Massive amount of content - Includes the new expansion pack and all 15 previous expansions and content

Amazing new zones - Dig into 12 new zones throughout the realm of Brell Serilis

New AAs - Optimize your character's power and strength with all new alternate advancement abilities

New weapons and armor - Outfit your character with some of the hundreds of new options

Master your tradeskilling - Create powerful new weapons, armor and more with thousands of new recipes

Extended Target Window - Track friends and foes with greater accuracy

Achievement System - Display and manage your progress through the world of Norrath

Mark of Brell in-game item - Teleport directly into the Underfoot zone (one per account, non-tradable)

Legends of Norrathâ„¢ - Includes digital card game client and game scenario

Gain Early Access to Underfoot
Don’t forget to participate in the Road to Underfoot events and get a taste of what’s to come. Participate* in all of the Road to Underfoot events and pre-order and purchase the Underfoot expansion by December 1, 2009 and you'll be one of the first to experience Underfoot!

*Check out www.roadtounderfoot.com for more details, new screenshots and the latest information on the Road to Underfoot events! +10109 No text set +10110
Get EverQuest Underfoot Today!

Journey into the undiscovered depths with EverQuest® Underfoot™!

At a time when the ancient gods laid their claim to Norrath, Brell Serilis, the Duke of Below, turned his focus to the Plane of Underfoot and claimed it for his own. Here, Brell sealed Underfoot off from the world's prying eyes, filling it with amazing creatures sculpted by his own hands and discarding those that didn't meet his flawless standards. The plane itself is a network of glowing caverns, living caves and burning lava flows twisting and turning deep into the world. Now, a sinister figure is growing in power and threatens to overthrow Brell and disrupt the perfect world he's created.

Enter the underground lair of Brell Serilis, one of the most fabled and mysterious beings in all of Norrath, uncover the epic challenges around every corner and solve the mystery behind the silhouette lurking in the shadows.

Massive amount of content - Includes the new expansion pack and all 15 previous expansions and content

Amazing new zones - Dig into 12 new zones throughout the realm of Brell Serilis

New AAs - Optimize your character's power and strength with all new alternate advancement abilities

New weapons and armor - Outfit your character with some of the hundreds of new options

Master your tradeskilling - Create powerful new weapons, armor and more with thousands of new recipes

Extended Target Window - Track friends and foes with greater accuracy

Achievement System - Display and manage your progress through the world of Norrath

Mark of Brell in-game item - Teleport directly into the Underfoot zone (one per account, non-tradable)

Legends of Norrathâ„¢ - Includes digital card game client and game scenario +10111
Pre-Order EverQuest® House of Thule Station Store Digital Download or Collector’s Edition!

The seventeenth expansion of the groundbreaking EverQuest franchise continues to add immersive gameplay, captivating storytelling and exciting worlds to the EverQuest legacy, set in a never-before-seen dreamland full of mystery and adventure. House of Thule offers an expansion rich in content and packed with game-changing features including a level cap increase and the addition of player housing, which new players, veterans and MMO fans will relish.

New House of Thule Game Features:
* Go from 85 to 90 – Achieve a new max level of 90
* More than 800 AAs – Elevate your power and abilities beyond the norm
* In-game Housing Addition – Make your permanent mark on the world!
* New Housing Trophy System – Display your trophies and receive statistical benefits
* Hundreds of New Housing Items - Decorate your house to your own style
* 18 Raids – Collect valuable rewards from all new adventures
* 13 Zones – Be the first to discover untouched lands of Norrath
* 450+ Spells – Exponentially add to your caster’s arsenal
* 17 Missions – Experience intriguing lore and immersive Missions
* 120+ Quests – Challenge your skills and gather useful loot
* Inventory Increase – Indulge the packrat in you and collect even more game goodies
* Legends of Norrathâ„¢ - 5 Digital Booster Packs

For a full list of bonus in-game items included with the expansion, visit www.EQPlayers.com +10112
Purchase EverQuest® House of Thule Station Store Digital Download or Collector’s Edition!

The seventeenth expansion of the groundbreaking EverQuest franchise continues to add immersive gameplay, captivating storytelling and exciting worlds to the EverQuest legacy, set in a never-before-seen dreamland full of mystery and adventure. House of Thule offers an expansion rich in content and packed with game-changing features including a level cap increase and the addition of player housing, which new players, veterans and MMO fans will relish.

New House of Thule Game Features:
* Go from 85 to 90 – Achieve a new max level of 90
* More than 800 AAs – Elevate your power and abilities beyond the norm
* In-game Housing Addition – Make your permanent mark on the world!
* New Housing Trophy System – Display your trophies and receive statistical benefits
* Hundreds of New Housing Items - Decorate your house to your own style
* 18 Raids – Collect valuable rewards from all new adventures
* 13 Zones – Be the first to discover untouched lands of Norrath
* 450+ Spells – Exponentially add to your caster’s arsenal
* 17 Missions – Experience intriguing lore and immersive Missions
* 120+ Quests – Challenge your skills and gather useful loot
* Inventory Increase – Indulge the packrat in you and collect even more game goodies
* Legends of Norrathâ„¢ - 5 Digital Booster Packs

For a full list of bonus in-game items included with the expansion, visit www.EQPlayers.com +10113
Pre-order EverQuest® Veil of Alaris™ Station Store Digital Download or Collector’s Edition! Take advantage of the in-game items only available with pre-order:

* Resplendent Sword Ornamentation
* Painting: Original EverQuest Box Art

This expansion is the eighteenth expansion of the groundbreaking EverQuest franchise. Now in its unprecedented thirteenth year, Veil of Alaris continues to add immersive gameplay, captivating storytelling and exciting worlds to the EverQuest legacy, now set in a never-before-seen land full of mystery and adventure. Veil of Alaris offers an expansion rich in content with an entirely new continent to explore. Don’t miss out on the Guild Halls that you can use in your housing neighborhoods, brand new to this expansion.

New Veil of Alaris Game Features:
- Go from 90 to 95 – Achieve a New Max Level of 95 and set a new standard of gameplay
- Improved Hotbars! – Have better control of your characters experience with a revamp of the Hotbar system including the ability to display more hotbars with more buttons; assign icons to individual buttons; link and click on items from your hotbar instead of hot-swappping; and cool-down timers!
- Parcel & Coin Delivery system – Mail items and coin to your friends while they are offline; share profits from your adventures with your friends and receive items from them easier than ever before!
- New Guild Halls – Take Guild Halls to new heights with an integration of Tools and Functionality derived from EverQuest’s robust Housing System. Customize and place your guild hall in one of our housing zones including multiple exterior and interiors.
- New Guild Rank-Based permission system – Personalize your Guilds with namable ranks and customizable permissions
- New Guild Trophies with varying bonuses!
- More than 800 AAs – Elevate your power and abilities beyond the norm
- 13 Raids – Collect valuable rewards from all new adventures
- 12 Zones – Be the first to discover untouched lands of Norrath
- 500+ Spells – Exponentially add to your spell arsenal
- 20 Missions – Experience intriguing lore and immersive Missions
- 110+ Quests – Challenge your skills and gather useful loot
- Legends of Norrathâ„¢ - 5 Digital Booster Packs +10114
Purchase EverQuest® Veil of Alaris™ Station Store Digital Download or Collector’s Edition!
This expansion is the eighteenth expansion of the groundbreaking EverQuest franchise. Now in its unprecedented thirteenth year, Veil of Alaris continues to add immersive gameplay, captivating storytelling and exciting worlds to the EverQuest legacy, now set in a never-before-seen land full of mystery and adventure. Veil of Alaris offers an expansion rich in content with an entirely new continent to explore. Don’t miss out on the Guild Halls that you can use in your housing neighborhoods, brand new to this expansion.

New Veil of Alaris Game Features:
- Go from 90 to 95 – Achieve a New Max Level of 95 and set a new standard of gameplay
- Improved Hotbars! – Have better control of your characters experience with a revamp of the Hotbar system including the ability to display more hotbars with more buttons; assign icons to individual buttons; link and click on items from your hotbar instead of hot-swappping; and cool-down timers!
- Parcel & Coin Delivery system – Mail items and coin to your friends while they are offline; share profits from your adventures with your friends and receive items from them easier than ever before!
- New Guild Halls – Take Guild Halls to new heights with an integration of Tools and Functionality derived from EverQuest’s robust Housing System. Customize and place your guild hall in one of our housing zones including multiple exterior and interiors.
- New Guild Rank-Based permission system – Personalize your Guilds with namable ranks and customizable permissions
- New Guild Trophies with varying bonuses!
- More than 800 AAs – Elevate your power and abilities beyond the norm
- 13 Raids – Collect valuable rewards from all new adventures
- 12 Zones – Be the first to discover untouched lands of Norrath
- 500+ Spells – Exponentially add to your spell arsenal
- 20 Missions – Experience intriguing lore and immersive Missions
- 110+ Quests – Challenge your skills and gather useful loot
- Legends of Norrathâ„¢ - 5 Digital Booster Packs +10115
Purchase EverQuest® Rain of Fear™ Station Store Digital Download or Collector's Edition!
This is the nineteenth expansion of the groundbreaking EverQuest franchise, now in an unprecedented fourteenth year of development. The story that started with House of Thule and the death of Cazic-Thule, takes on a new twist with Rain of Fear. EverQuest Rain of Fear delivers new content to explore as well as exciting new features and must-have items. Don't miss out on reaching the new level cap of 100!

New Rain of Fear Game Features:
- Go from 95 to 100 - Achieve a New Max Level Cap of 100 and set a new standard of gameplay
- Slayer System - Gain special rewards and titles for defeating large number of foes
- Aggro Meter - A brand new tool to help better manage your agro. You can now see your agro level relative to your group
- Collection System - Discover items throughout Norrath and collect sets for exciting rewards and titles
- Improved Brokering System - Sell items in the Bazaar while being offline! More flexibility as a buyer to search and purchase from anywhere in the world.
- New Linear Item Progression - Stats on armor collected will increase as you move up from one tier to another
- Customization with non-visible armor - All non-visible armor in Rain of Fear can be worn by all. You'll be able to customize your stats for every encounter.
- Class-specific stat distribution - Collect items that are designed specifically for each class' abilities
- More than 1800 New Spells (Ranks 1, 2 & 3) - Exponentially add to your spell arsenal
- More than 550 AAs - Elevate your power and abilities like never before
- More than 3500 New Items - Create your own identity with thousands of new items
- More than 110 Quests - Challenge your skills and gather useful loot
- 13 Raids - Collect valuable rewards from all new adventures
- 9 Zones - Be the first to discover untouched lands of Norrath
- 19 Missions - Experience intriguing lore and immersive Missions
- Continued opportunity to kill off Halflings
- Legends of Norrathâ„¢ - 5 Digital Booster Packs diff --git a/client_files/login/rof/uifiles/default/EQLSUI.xml b/client_files/login/rof/uifiles/default/EQLSUI.xml new file mode 100644 index 0000000000..9823a3b30a --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI.xml @@ -0,0 +1,32 @@ + + + + + + + + + SIDL.xml + EQLSUI_Animations.xml + EQLSUI_Templates.xml + EQLSUI_EulaWnd.xml + EQLSUI_SOESplashWnd.xml + EQLSUI_ESRBSplashWnd.xml + EQLSUI_MainWnd.xml + EQLSUI_ConnectWnd.xml + EQLSUI_ServerSelectWnd.xml + EQLSUI_ChatWnd.xml + EQLSUI_ChatOptionsDialog.xml + EQLSUI_ColorPickerWnd.xml + EQLSUI_CreditsWnd.xml + EQLSUI_NewsWnd.xml + EQLSUI_HelpWnd.xml + EQLSUI_OKDialog.xml + EQLSUI_YesNoDialog.xml + EQLSUI_PollWnd.xml + EQLSUI_OrderExpansionWnd.xml + EQLSUI_WebOrderWnd.xml + EQLSUI_SplashExWnd.xml + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_AVATAR.xml b/client_files/login/rof/uifiles/default/EQLSUI_AVATAR.xml new file mode 100644 index 0000000000..580d449940 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_AVATAR.xml @@ -0,0 +1,33 @@ + + + + + + + + + SIDL.xml + EQLSUI_Animations.xml + EQLSUI_Templates.xml + EQLSUI_EulaWnd.xml + EQLSUI_SOESplashWnd.xml + EQLSUI_ESRBSplashWnd.xml + EQLSUI_MainWnd.xml + EQLSUI_ConnectWnd.xml + EQLSUI_ServerSelectWnd.xml + EQLSUI_ChatWnd.xml + EQLSUI_ChatOptionsDialog.xml + EQLSUI_ColorPickerWnd.xml + EQLSUI_CreditsWnd.xml + EQLSUI_NewsWnd.xml + EQLSUI_HelpWnd.xml + EQLSUI_OKDialog.xml + EQLSUI_YesNoDialog.xml + EQLSUI_PollWnd.xml + EQLSUI_OrderExpansionWnd.xml + EQLSUI_AVATAR_MacroEditorDialog.xml + EQLSUI_WebOrderWnd.xml + EQLSUI_SplashExWnd.xml + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_AVATAR_MacroEditorDialog.xml b/client_files/login/rof/uifiles/default/EQLSUI_AVATAR_MacroEditorDialog.xml new file mode 100644 index 0000000000..0a7da2a13a --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_AVATAR_MacroEditorDialog.xml @@ -0,0 +1,340 @@ + + + + + + MacroList + 4 + WDT_EQLS_Def_Bordered + true + + 10 + 10 + + + 480 + 200 + + true + false + true + + 50 + ID: + + + 150 + Name: + + + 3000 + Macro: + + + + + + + IDEdit + 4 + WDT_EQLS_Def_Bordered + true + true + + 80 + 220 + + + 300 + 35 + + + 255 + 255 + 255 + + + + + NameEdit + 4 + WDT_EQLS_Def_Bordered + true + true + + 80 + 260 + + + 300 + 35 + + + 255 + 255 + 255 + + + + + MacroEdit + 4 + WDT_EQLS_Def_Bordered + true + true + + 80 + 300 + + + 300 + 35 + + + 255 + 255 + 255 + + + + + + + + + + + + + Window + true + + 40 + 40 + + + 540 + 400 + + Macro Editor + false + false + false + + WDT_EQLS_Def_Bordered + false + false + false + true + false + MACRO_OKButton + MACRO_CancelButton + MACRO_MacroList + MACRO_IDLabel + MACRO_IDEdit + MACRO_NameLabel + MACRO_NameEdit + MACRO_MacroLabel + MACRO_MacroEdit + MACRO_AddButton + MACRO_UseButton + + + + + true + + 0 + 0 + + + 640 + 480 + + + + false + false + false + + WDT_Def + false + false + false + false + false + MACRO_Window + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_Animations.xml b/client_files/login/rof/uifiles/default/EQLSUI_Animations.xml new file mode 100644 index 0000000000..4bd0292f3f --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_Animations.xml @@ -0,0 +1,4112 @@ + + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + + 256 + 256 + + + + + 256 + 256 + + + + + + 16 + 16 + + + + + 32 + 32 + + + + + + true + + EQLS_background_01.tga + + 0 + 0 + + + 256 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_background_02.tga + + 0 + 0 + + + 256 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_background_03.tga + + 0 + 0 + + + 128 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_background_04.tga + + 0 + 0 + + + 256 + 224 + + + 0 + 0 + + 1000 + + + + true + + EQLS_background_05.tga + + 0 + 0 + + + 256 + 224 + + + 0 + 0 + + 1000 + + + + true + + EQLS_background_06.tga + + 0 + 0 + + + 128 + 224 + + + 0 + 0 + + 1000 + + + + + + true + + EQLS_WndBorder_01.tga + + 0 + 0 + + + 256 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_WndBorder_02.tga + + 0 + 0 + + + 256 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_WndBorder_03.tga + + 0 + 0 + + + 128 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_WndBorder_04.tga + + 0 + 0 + + + 256 + 224 + + + 0 + 0 + + 1000 + + + + true + + EQLS_WndBorder_05.tga + + 0 + 0 + + + 256 + 224 + + + 0 + 0 + + 1000 + + + + true + + EQLS_WndBorder_06.tga + + 0 + 0 + + + 128 + 224 + + + 0 + 0 + + 1000 + + + + + + + MainBG01 + true + + 0 + 0 + + + 256 + 256 + + A_MainBG01 + + + MainBG02 + true + + 255 + 0 + + + 256 + 256 + + A_MainBG02 + + + MainBG03 + true + + 510 + 0 + + + 128 + 256 + + A_MainBG03 + + + MainBG04 + true + + 0 + 255 + + + 256 + 224 + + A_MainBG04 + + + MainBG05 + true + + 255 + 255 + + + 256 + 224 + + A_MainBG05 + + + MainBG06 + true + + 510 + 255 + + + 128 + 224 + + A_MainBG06 + + + + + AltBG01 + true + + 0 + 0 + + + 256 + 256 + + A_AltBG01 + + + AltBG02 + true + + 255 + 0 + + + 256 + 256 + + A_AltBG02 + + + AltBG03 + true + + 510 + 0 + + + 128 + 256 + + A_AltBG03 + + + AltBG04 + true + + 0 + 255 + + + 256 + 224 + + A_AltBG04 + + + AltBG05 + true + + 255 + 255 + + + 256 + 224 + + A_AltBG05 + + + AltBG06 + true + + 510 + 255 + + + 128 + 224 + + A_AltBG06 + + + + + true + + EQLS_window_pieces_01.tga + + 0 + 34 + + + 244 + 31 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 0 + 65 + + + 244 + 31 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 0 + 96 + + + 244 + 31 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 0 + 158 + + + 244 + 31 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 0 + 158 + + + 244 + 31 + + + 0 + 0 + + 1000 + + + + + + true + + EQLS_window_pieces_01.tga + + 0 + 189 + + + 115 + 31 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 115 + 189 + + + 115 + 31 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 0 + 220 + + + 115 + 31 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 115 + 220 + + + 115 + 31 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 0 + 0 + + + 115 + 31 + + + 0 + 0 + + 1000 + + + + + + true + + EQLS_window_pieces_02.tga + + 83 + 31 + + + 23 + 19 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 106 + 31 + + + 23 + 19 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 83 + 50 + + + 23 + 19 + + + 0 + 0 + + 1000 + + + + + + true + + EQLS_window_pieces_02.tga + + 0 + 31 + + + 23 + 19 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 23 + 31 + + + 23 + 19 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 46 + 31 + + + 23 + 19 + + + 0 + 0 + + 1000 + + + + + true + + EQLS_window_pieces_02.tga + + 0 + 50 + + + 23 + 19 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 23 + 50 + + + 23 + 19 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 46 + 50 + + + 23 + 19 + + + 0 + 0 + + 1000 + + + + + true + + EQLS_window_pieces_02.tga + + 116 + 0 + + + 23 + 6 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 116 + 6 + + + 23 + 11 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 116 + 17 + + + 23 + 6 + + + 0 + 0 + + 1000 + + + + + true + + EQLS_window_pieces_02.tga + + 0 + 69 + + + 19 + 23 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 19 + 69 + + + 19 + 23 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 38 + 69 + + + 19 + 23 + + + 0 + 0 + + 1000 + + + + + true + + EQLS_window_pieces_02.tga + + 0 + 92 + + + 19 + 23 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 19 + 92 + + + 19 + 23 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 38 + 92 + + + 19 + 23 + + + 0 + 0 + + 1000 + + + + + true + + EQLS_window_pieces_02.tga + + 116 + 0 + + + 6 + 23 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 122 + 0 + + + 11 + 23 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_02.tga + + 132 + 0 + + + 6 + 23 + + + 0 + 0 + + 1000 + + + + + + true + + EQLS_window_pieces_01.tga + + 0 + 0 + + + 16 + 11 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 18 + 0 + + + 12 + 11 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 226 + 0 + + + 16 + 11 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 0 + 14 + + + 16 + 7 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 226 + 14 + + + 16 + 7 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 0 + 23 + + + 16 + 11 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 18 + 23 + + + 12 + 11 + + + 0 + 0 + + 1000 + + + + true + + EQLS_window_pieces_01.tga + + 226 + 23 + + + 16 + 11 + + + 0 + 0 + + 1000 + + + + + + + + + + + + + true + + window_pieces01.tga + + 230 + 40 + + + 22 + 22 + + + 4 + 1 + + 1000 + + + + true + + window_pieces01.tga + + 40 + 220 + + + 22 + 22 + + + 11 + 11 + + 1000 + + + + true + + window_pieces01.tga + + 10 + 220 + + + 22 + 22 + + + 11 + 11 + + 1000 + + + + true + + window_pieces01.tga + + 70 + 190 + + + 22 + 22 + + + 11 + 11 + + 1000 + + + + true + + window_pieces01.tga + + 40 + 190 + + + 22 + 22 + + + 11 + 11 + + 1000 + + + + true + + window_pieces01.tga + + 100 + 190 + + + 22 + 22 + + + 11 + 11 + + 1000 + + + + + + true + + window_pieces01.tga + + 100 + 90 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 124 + 90 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 112 + 90 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 100 + 90 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 124 + 90 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 171 + 236 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 195 + 236 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 183 + 236 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 171 + 236 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 195 + 236 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces01.tga + + 136 + 91 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 160 + 91 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 148 + 91 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 136 + 91 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 160 + 91 + + + 12 + 12 + + + 0 + 0 + + 1000 + + + + + + + + true + + window_pieces01.tga + + 30 + 20 + + + 4 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 30 + 20 + + + 4 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 30 + 20 + + + 4 + 16 + + + 0 + 0 + + 1000 + + + + + + true + + wnd_bg_light_rock.tga + + 0 + 0 + + + 256 + 30 + + + 0 + 0 + + 1000 + + + + true + + wnd_bg_light_rock.tga + + 0 + 30 + + + 30 + 256 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces01.tga + + 10 + 10 + + + 16 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 30 + 10 + + + 2 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 40 + 10 + + + 16 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 10 + 40 + + + 6 + 38 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 20 + 40 + + + 6 + 38 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 30 + 40 + + + 6 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 40 + 40 + + + 6 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 30 + 50 + + + 6 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 40 + 50 + + + 6 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 10 + 80 + + + 20 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 40 + 80 + + + 2 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 50 + 80 + + + 30 + 8 + + + 0 + 0 + + 1000 + + + + + + + + true + + window_pieces01.tga + + 10 + 20 + + + 12 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 30 + 20 + + + 4 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 40 + 20 + + + 12 + 16 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces01.tga + + 10 + 20 + + + 0 + 0 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 30 + 20 + + + 0 + 0 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 40 + 20 + + + 0 + 0 + + + 0 + 0 + + 1000 + + + + + + + true + + window_pieces03.tga + + 0 + 0 + + + 100 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 0 + 48 + + + 100 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 0 + 24 + + + 100 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 0 + 72 + + + 100 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 0 + 96 + + + 100 + 24 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces03.tga + + 200 + 120 + + + 48 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 200 + 168 + + + 48 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 200 + 144 + + + 48 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 200 + 192 + + + 48 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 200 + 216 + + + 48 + 24 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces03.tga + + 100 + 0 + + + 120 + 24 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces03.tga + + 100 + 48 + + + 120 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 100 + 24 + + + 120 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 100 + 72 + + + 120 + 24 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 100 + 96 + + + 120 + 24 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces03.tga + + 0 + 120 + + + 40 + 40 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 80 + 120 + + + 40 + 40 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 40 + 120 + + + 40 + 40 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 120 + 120 + + + 40 + 40 + + + 0 + 0 + + 1000 + + + + true + + window_pieces03.tga + + 160 + 120 + + + 40 + 40 + + + 0 + 0 + + 1000 + + + + + + + + true + + window_pieces01.tga + + 60 + 170 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 70 + 170 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 65 + 170 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 60 + 175 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 70 + 175 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 60 + 180 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 70 + 180 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 65 + 180 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + + + + true + + window_pieces01.tga + + 180 + 160 + + + 10 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 191 + 160 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 196 + 160 + + + 10 + 4 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces01.tga + + 207 + 160 + + + 4 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 207 + 169 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 207 + 174 + + + 4 + 6 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces01.tga + + 195 + 182 + + + 10 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 190 + 182 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 180 + 182 + + + 8 + 4 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces01.tga + + 180 + 177 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 180 + 172 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 180 + 165 + + + 4 + 6 + + + 0 + 0 + + 1000 + + + + + + + true + + window_pieces01.tga + + 99 + 110 + + + 17 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 117 + 110 + + + 2 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 120 + 110 + + + 16 + 2 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces01.tga + + 103 + 113 + + + 13 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 117 + 113 + + + 2 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 120 + 113 + + + 13 + 16 + + + 0 + 0 + + 1000 + + + + + true + + window_pieces01.tga + + 99 + 113 + + + 4 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 133 + 113 + + + 4 + 16 + + + 0 + 0 + + 1000 + + + + + + + true + + window_pieces01.tga + + 180 + 110 + + + 41 + 41 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 100 + 220 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 114 + 220 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 128 + 220 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 142 + 220 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 156 + 220 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 100 + 236 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 114 + 236 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 128 + 236 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 142 + 236 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 156 + 236 + + + 14 + 16 + + + 0 + 0 + + 1000 + + + + + + + + + + + true + + window_pieces01.tga + + 110 + 10 + + + 100 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 110 + 20 + + + 100 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 110 + 30 + + + 100 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 110 + 40 + + + 100 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 216 + 20 + + + 4 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 212 + 10 + + + 4 + 8 + + + 0 + 0 + + 1000 + + + + + + + + true + + window_pieces01.tga + + 80 + 10 + + + 2 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 60 + 10 + + + 4 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 70 + 10 + + + 4 + 12 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 91 + 10 + + + 9 + 18 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 92 + 50 + + + 9 + 18 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 91 + 30 + + + 9 + 18 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 81 + 30 + + + 9 + 18 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 82 + 50 + + + 9 + 18 + + + 0 + 0 + + 1000 + + + + + + + + + + + + + + + + + true + + window_pieces01.tga + + 154 + 110 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 159 + 110 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + + + + true + + window_pieces01.tga + + 154 + 110 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 159 + 111 + + + 4 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 140 + 110 + + + 10 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 151 + 110 + + + 2 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 164 + 111 + + + 10 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 140 + 115 + + + 4 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 170 + 115 + + + 4 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 140 + 124 + + + 4 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 179 + 124 + + + 4 + 2 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 140 + 127 + + + 4 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 170 + 127 + + + 4 + 8 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 140 + 136 + + + 10 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 151 + 136 + + + 2 + 4 + + + 0 + 0 + + 1000 + + + + true + + window_pieces01.tga + + 164 + 136 + + + 10 + 4 + + + 0 + 0 + + 1000 + + + + + + + + + + window_pieces02.tga + + 52 + 120 + + + 26 + 26 + + + 0 + 0 + + + + + + window_pieces02.tga + + 52 + 146 + + + 26 + 26 + + + 0 + 0 + + + + + + window_pieces02.tga + + 52 + 172 + + + 26 + 26 + + + 0 + 0 + + + + + + window_pieces02.tga + + 52 + 198 + + + 26 + 26 + + + 0 + 0 + + + + + + + window_pieces01.tga + + 70 + 90 + + + 11 + 11 + + + 0 + 0 + + + + + + + window_pieces01.tga + + 82 + 90 + + + 11 + 11 + + + 0 + 0 + + + + + + + + + + + window_pieces01.tga + + 80 + 170 + + + 4 + 4 + + + + + + window_pieces01.tga + + 80 + 175 + + + 4 + 4 + + + + + + window_pieces01.tga + + 80 + 180 + + + 4 + 4 + + + + + + + window_pieces01.tga + + 90 + 90 + + + 1 + 1 + + + + + + true + + window_pieces03.tga + + 0 + 96 + + + 100 + 24 + + + 0 + 0 + + 1000 + + + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_ChatOptionsDialog.xml b/client_files/login/rof/uifiles/default/EQLSUI_ChatOptionsDialog.xml new file mode 100644 index 0000000000..7e4017f488 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_ChatOptionsDialog.xml @@ -0,0 +1,525 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CHATOPTIONS_Box + true + true + 110 + 120 + 110 + 120 + true + false + false + true + + Confirmation + false + false + false + + WDT_EQLS_Def_Bordered + false + false + false + true + false + + CHATOPTIONS_AdminNameButton + CHATOPTIONS_AdminChatButton + CHATOPTIONS_GuideNameButton + CHATOPTIONS_GuideChatButton + CHATOPTIONS_PlayerNameButton + CHATOPTIONS_PlayerChatButton + CHATOPTIONS_TellButton + CHATOPTIONS_SystemButton + CHATOPTIONS_CommandButton + CHATOPTIONS_FontLabel + CHATOPTIONS_FontLeftButton + CHATOPTIONS_FontSizeLabel + CHATOPTIONS_FontRightButton + CHATOPTIONS_RestoreDefaultsButton + CHATOPTIONS_OKButton + CHATOPTIONS_CancelButton + + + + + + + true + + 0 + 0 + + + 640 + 480 + + Chat + false + false + false + + WDT_Def + false + false + false + false + false + CHATOPTIONS_Box + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_ChatWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_ChatWnd.xml new file mode 100644 index 0000000000..a013bbf68a --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_ChatWnd.xml @@ -0,0 +1,441 @@ + + + + + + + + + + + + + + + + + + + BannerWnd + true + + true + 30 + 0 + 30 + 40 + true + true + false + true + + Chat + false + false + false + WDT_EQLS_Def_Bordered + false + false + false + true + false + CHAT_BannerLabel + + + + + + ChatOutput + 3 + WDT_EQLS_Def_Bordered + true + true + true + + true + 0 + 45 + 180 + 85 + true + false + false + true + + true + false + + + + + RoomList + 3 + WDT_EQLS_Def_Bordered + true + + true + 170 + 45 + 0 + 215 + true + true + false + false + + Rooms + true + true + false + + 200 + Rooms + + + 0 + + + + + + RoomListBackground + true + + true + 170 + 45 + 0 + 215 + true + true + false + false + + + false + false + false + WDT_EQLS_Def_NoFrame + false + false + false + false + false + + + PlayerList + 3 + WDT_EQLS_Def_Bordered + true + + true + 170 + 220 + 0 + 45 + true + false + false + false + + true + true + false + + 100 + Players + + + 0 + + + + + + PlayerListBackground + true + + true + 170 + 220 + 0 + 45 + true + false + false + false + + + false + false + false + WDT_EQLS_Def_NoFrame + false + false + false + false + false + + + + + + ChatEdit + 3 + WDT_EQLS_Def_Bordered + true + true + + true + 0 + 80 + 180 + 45 + false + false + false + true + + + 255 + 255 + 255 + + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + Chat + false + false + false + + WDT_EQLS_Def_Bordered + false + false + false + true + true + CHAT_OptionsButton + CHAT_ExitButton + CHAT_HelpButton + CHAT_TechButton + CHAT_ServersButton + CHAT_ChatSTMLBox + CHAT_ChatEdit + CHAT_WndLabel + CHAT_BannerWindow + Screen:CHAT_RoomListBackground + CHAT_RoomList + Screen:CHAT_PlayerListBackground + CHAT_PlayerList + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_ColorPickerWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_ColorPickerWnd.xml new file mode 100644 index 0000000000..20a1d26710 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_ColorPickerWnd.xml @@ -0,0 +1,741 @@ + + + + + + + + + + + + + + + + + + + + + + CPW_RedSliderInput + WDT_EQLS_Def_NoFrame + true + true + + 5 + 70 + + + 35 + 20 + + + 200 + 0 + 0 + + + + + CPW_RedSlider + true + + 40 + 70 + + + 85 + 20 + + SDT_DefSlider + + + + CPW_GreenSliderInput + WDT_EQLS_Def_NoFrame + true + true + + 5 + 90 + + + 35 + 20 + + + 0 + 200 + 0 + + + + + CPW_GreenSlider + true + + 40 + 90 + + + 85 + 20 + + SDT_DefSlider + + + + CPW_BlueSliderInput + WDT_EQLS_Def_NoFrame + true + true + + 5 + 110 + + + 35 + 20 + + + 0 + 0 + 200 + + + + + CPW_BlueSlider + true + + 40 + 110 + + + 85 + 20 + + SDT_DefSlider + + + + + + + + false + + 260 + 140 + + + 160 + 210 + + Choose a color + false + + WDT_EQLS_Def_Bordered + true + true + false + true + false + CPW_TC0Button + CPW_TC1Button + CPW_TC2Button + CPW_TC3Button + CPW_TC4Button + CPW_TC5Button + CPW_TC6Button + CPW_TC7Button + CPW_TC8Button + CPW_TC9Button + CPW_TC10Button + CPW_TC11Button + CPW_TC12Button + CPW_TC13Button + CPW_TC14Button + CPW_RedSliderInput + CPW_RedSlider + CPW_GreenSliderInput + CPW_GreenSlider + CPW_BlueSliderInput + CPW_BlueSlider + CPW_TC15Button + CPW_Accept_Button + + + \ No newline at end of file diff --git a/client_files/login/rof/uifiles/default/EQLSUI_ConnectWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_ConnectWnd.xml new file mode 100644 index 0000000000..322e3c2bc1 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_ConnectWnd.xml @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + UsernameEdit + 4 + WDT_EQLS_Def_Bordered + true + true + + 325 + 165 + + + 250 + 38 + + + 255 + 255 + 255 + + + + PasswordEdit + 4 + WDT_EQLS_Def_Bordered + true + true + + 325 + 228 + + + 250 + 38 + + + 255 + 255 + 255 + + + + + + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + Login + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_MainBG01 + EQLS_MainBG02 + EQLS_MainBG03 + EQLS_MainBG04 + EQLS_MainBG05 + EQLS_MainBG06 + LOGIN_ConnectButton + LOGIN_CancelButton + LOGIN_ChatButton + LOGIN_UsernameEdit + LOGIN_PasswordEdit + LOGIN_UsernameLabel + LOGIN_PasswordLabel + LOGIN_QuickConnectToLabel + LOGIN_QuickConnectButton + LOGIN_Trademark1Label + LOGIN_Trademark2Label + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_CreditsWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_CreditsWnd.xml new file mode 100644 index 0000000000..5ff57e3951 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_CreditsWnd.xml @@ -0,0 +1,694 @@ + + + + + + + + + + + Credits_Classic + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Classic_Page + true + + false + false + false + Original EverQuest + WDT_EQLS_Def_Bordered + EQ + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Classic + + + + Credits_Kunark + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Kunark_Page + true + + false + false + false + Ruins of Kunark + WDT_EQLS_Def_Bordered + Kunark + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Kunark + + + + Credits_Velious + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Velious_Page + true + + false + false + false + Scars of Velious + WDT_EQLS_Def_Bordered + Velious + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Velious + + + + Credits_Luclin + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Luclin_Page + true + + false + false + false + Shadows of Luclin + WDT_EQLS_Def_Bordered + Luclin + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Luclin + + + + Credits_PoP + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_PoP_Page + true + + false + false + false + Planes of Power + WDT_EQLS_Def_Bordered + PoP + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_PoP + + + + Credits_LoY + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_LoY_Page + true + + false + false + false + Legacy of Ykesha + WDT_EQLS_Def_Bordered + LoY + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_LoY + + + + Credits_LDoN + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_LDoN_Page + true + + false + false + false + Lost Dungeons of Norrath + WDT_EQLS_Def_Bordered + LDoN + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_LDoN + + + + Credits_Gates + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Gates_Page + true + + false + false + false + Gates of Discord + WDT_EQLS_Def_Bordered + GoD + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Gates + + + + Credits_Omens + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Omens_Page + true + + false + false + false + Omens of War + WDT_EQLS_Def_Bordered + OoW + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Omens + + + + Credits_Dragons + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Dragons_Page + true + + false + false + false + Dragons of Norrath + WDT_EQLS_Def_Bordered + DoN + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Dragons + + + + Credits_Depths + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Depths_Page + true + + false + false + false + Depths of Darkhollow + WDT_EQLS_Def_Bordered + DoD + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Depths + + + + Credits_Prophecy + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Prophecy_Page + true + + false + false + false + Prophecy of Ro + WDT_EQLS_Def_Bordered + PoR + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Prophecy + + + + Credits_Serpent + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_Serpent_Page + true + + false + false + false + The Serpent's Spine + WDT_EQLS_Def_Bordered + TSS + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_Serpent + + + + + Credits_BuriedSea + WDT_EQLS_Def_NoFrame + true + true + true + 4 + 4 + 4 + 4 + true + false + false + true + false + + + Credits_BuriedSea_Page + true + + false + false + false + The Buried Sea + WDT_EQLS_Def_Bordered + TBS + + 255 + 255 + 255 + + + 255 + 255 + 0 + + true + Credits_BuriedSea + + + + + Credits_TabWnd + WDT_EQLS_Def_NoFrame + true + false + true + 40 + 70 + 40 + 60 + true + false + false + true + true + + FT_DefTabBorder + FT_DefPageBorder + Credits_Classic_Page + Credits_Kunark_Page + Credits_Velious_Page + Credits_Luclin_Page + Credits_PoP_Page + Credits_LoY_Page + Credits_LDoN_Page + Credits_Gates_Page + Credits_Omens_Page + Credits_Dragons_Page + Credits_Depths_Page + Credits_Prophecy_Page + Credits_Serpent_Page + Credits_BuriedSea_Page + + + + + true + + 0 + 0 + + + 640 + 480 + + + News + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + Credits_OKButton + Credits_TabWnd + Credits_WndLabel + + + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_ESRBSplashWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_ESRBSplashWnd.xml new file mode 100644 index 0000000000..23180f9610 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_ESRBSplashWnd.xml @@ -0,0 +1,268 @@ + + + + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 128 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 128 + 256 + + + + + true + + EQLS_ESRBSplash01.tga + + 0 + 0 + + + 256 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_ESRBSplash02.tga + + 0 + 0 + + + 256 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_ESRBSplash03.tga + + 0 + 0 + + + 128 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_ESRBSplash04.tga + + 0 + 0 + + + 256 + 224 + + + 0 + 0 + + 1000 + + + + true + + EQLS_ESRBSplash05.tga + + 0 + 0 + + + 256 + 224 + + + 0 + 0 + + 1000 + + + + true + + EQLS_ESRBSplash06.tga + + 0 + 0 + + + 128 + 224 + + + 0 + 0 + + 1000 + + + + + SPLASH_Background1 + true + + 0 + 0 + + + 256 + 256 + + A_ESRBSplash01 + + + SPLASH_Background2 + true + + 256 + 0 + + + 256 + 256 + + A_ESRBSplash02 + + + SPLASH_Background3 + true + + 512 + 0 + + + 128 + 256 + + A_ESRBSplash03 + + + SPLASH_Background4 + true + + 0 + 256 + + + 256 + 224 + + A_ESRBSplash04 + + + SPLASH_Background5 + true + + 256 + 256 + + + 256 + 224 + + A_ESRBSplash05 + + + SPLASH_Background6 + true + + 512 + 256 + + + 128 + 224 + + A_ESRBSplash06 + + + + + + + true + + 0 + 0 + + + 640 + 480 + + + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + ESRB_Background1 + ESRB_Background2 + ESRB_Background3 + ESRB_Background4 + ESRB_Background5 + ESRB_Background6 + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_EulaWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_EulaWnd.xml new file mode 100644 index 0000000000..2e56e83441 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_EulaWnd.xml @@ -0,0 +1,144 @@ + + + + + + + + + Display + 4 + WDT_EQLS_Def_Bordered + true + true + true + 40 + 70 + 40 + 75 + true + false + false + true + true + + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + 5 + EULA + + 231 + 252 + 82 + + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + EULA_AcceptButton + EULA_DeclineButton + EULA_Display + EULA_WndLabel + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_HelpWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_HelpWnd.xml new file mode 100644 index 0000000000..5670ccb84f --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_HelpWnd.xml @@ -0,0 +1,250 @@ + + + + + + + + Display + WDT_EQLS_Def_Bordered + true + true + true + 40 + 70 + 40 + 75 + true + false + false + true + true + + + + + true + + 0 + 0 + + + 640 + 480 + + + Help + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + HELP_OKButton + HELP_Display + HELP_WndLabel + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + + Warning + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + HELP_OKButton + HELP_Display + SHELP_WndLabel + + + + + + + + + + Display + WDT_EQLS_Def_Bordered + true + true + + 300 + 148 + + + 300 + 260 + + true + + + + true + + 0 + 0 + + + 640 + 480 + + + Help + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_MainBG01 + EQLS_MainBG02 + EQLS_MainBG03 + EQLS_MainBG04 + EQLS_MainBG05 + EQLS_MainBG06 + MAINHELP_OKButton + MAINHELP_Display + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_MainWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_MainWnd.xml new file mode 100644 index 0000000000..2c44089e21 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_MainWnd.xml @@ -0,0 +1,259 @@ + + + + + + + + + + + + + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + Main + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_MainBG01 + EQLS_MainBG02 + EQLS_MainBG03 + EQLS_MainBG04 + EQLS_MainBG05 + EQLS_MainBG06 + MAIN_ConnectButton + MAIN_AccountButton + MAIN_HelpButton + MAIN_OptionsButton + MAIN_ExitButton + MAIN_EQWebpageButton + MAIN_Trademark1Label + MAIN_Trademark2Label + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_NewsWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_NewsWnd.xml new file mode 100644 index 0000000000..13e6dd768c --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_NewsWnd.xml @@ -0,0 +1,111 @@ + + + + + + + + Display + WDT_EQLS_Def_Bordered + true + true + true + 40 + 70 + 40 + 75 + true + false + false + true + true + + + + + + true + + 0 + 0 + + + 640 + 480 + + + News + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + NEWS_OKButton + NEWS_Display + NEWS_WndLabel + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_OKDialog.xml b/client_files/login/rof/uifiles/default/EQLSUI_OKDialog.xml new file mode 100644 index 0000000000..e9c3dca6ad --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_OKDialog.xml @@ -0,0 +1,105 @@ + + + + + + + + Display + WDT_EQLS_Def_Bordered + true + true + true + 2 + 2 + 2 + 35 + true + false + false + true + true + + + + Box + true + true + 130 + 130 + 130 + 130 + true + false + false + true + + Information + false + false + false + + WDT_EQLS_Def_Bordered + false + false + false + true + false + OK_OKButton + OK_Display + + + + + true + + 0 + 0 + + + 640 + 480 + + + + false + false + false + + WDT_Def + false + false + false + false + false + OK_Box + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_OrderExpansionWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_OrderExpansionWnd.xml new file mode 100644 index 0000000000..09c54dcb62 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_OrderExpansionWnd.xml @@ -0,0 +1,144 @@ + + + + + + + + + OrderExp_Display + 4 + WDT_EQLS_Def_Bordered + true + true + true + 40 + 70 + 40 + 75 + true + false + false + true + true + + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + 5 + Expansion Upgrade + + 231 + 252 + 82 + + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + OrderExp_AcceptButton + OrderExp_DeclineButton + OrderExp_Display + OrderExp_WndLabel + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_PollWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_PollWnd.xml new file mode 100644 index 0000000000..aec6057782 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_PollWnd.xml @@ -0,0 +1,279 @@ + + + + + + + EditTemplate + 4 + WDT_EQLS_Def_Bordered + true + + 320 + 280 + + + 250 + 30 + + + 255 + 255 + 255 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PollArea + 4 + WDT_EQLS_Def_Bordered + true + + 40 + 70 + + + 560 + 345 + + + false + true + true + POLL_QuestionLabel + POLL_ChoicesLabel + + + + + + + true + + 0 + 0 + + + 640 + 480 + + + Poll + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + POLL_WorkingArea + POLL_WndLabel + POLL_CheckButton + POLL_LabelTemplate + POLL_SkipButton + POLL_SubmitButton + POLL_EditTemplate + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_SOESplashWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_SOESplashWnd.xml new file mode 100644 index 0000000000..cc95e447c4 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_SOESplashWnd.xml @@ -0,0 +1,291 @@ + + + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 128 + 256 + + + + + 256 + 256 + + + + + 256 + 256 + + + + + 128 + 256 + + + + + true + + EQLS_SOESplash01.tga + + 0 + 0 + + + 256 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_SOESplash02.tga + + 0 + 0 + + + 256 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_SOESplash03.tga + + 0 + 0 + + + 128 + 256 + + + 0 + 0 + + 1000 + + + + true + + EQLS_SOESplash04.tga + + 0 + 0 + + + 256 + 224 + + + 0 + 0 + + 1000 + + + + true + + EQLS_SOESplash05.tga + + 0 + 0 + + + 256 + 224 + + + 0 + 0 + + 1000 + + + + true + + EQLS_SOESplash06.tga + + 0 + 0 + + + 128 + 224 + + + 0 + 0 + + 1000 + + + + + SOE_Background1 + true + + 0 + 0 + + + 256 + 256 + + A_SOESplash01 + + + SOE_Background2 + true + + 256 + 0 + + + 256 + 256 + + A_SOESplash02 + + + SOE_Background3 + true + + 512 + 0 + + + 128 + 256 + + A_SOESplash03 + + + SOE_Background4 + true + + 0 + 256 + + + 256 + 224 + + A_SOESplash04 + + + SOE_Background5 + true + + 256 + 256 + + + 256 + 224 + + A_SOESplash05 + + + SOE_Background6 + true + + 512 + 256 + + + 128 + 224 + + A_SOESplash06 + + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + SOE_Background1 + SOE_Background2 + SOE_Background3 + SOE_Background4 + SOE_Background5 + SOE_Background6 + SOESplash_TrademarkEdit + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_ServerSelectWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_ServerSelectWnd.xml new file mode 100644 index 0000000000..23f68817df --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_ServerSelectWnd.xml @@ -0,0 +1,397 @@ + + + + + + + + + + + + + + + + + + + ExpansionsWindow + true + + 160 + 342 + + + 440 + 36 + + + false + false + false + WDT_EQLS_Def_Bordered + false + false + false + true + false + SERVERSELECT_ExpansionsLabel + + + + + + + + ServerList + 4 + WDT_EQLS_Def_Bordered + true + + true + 40 + 70 + 40 + 140 + true + false + true + false + + true + false + true + + 400 + Server: + + + 100 + Status: + + + + + + ServerListBackground + true + true + 45 + 75 + 45 + 145 + true + false + true + false + + false + false + false + WDT_EQLS_Def_NoFrame + false + false + false + false + false + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + Server Select + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + SERVERSELECT_NewsButton + SERVERSELECT_ExitButton + SERVERSELECT_ChatButton + SERVERSELECT_CreditsButton + SERVERSELECT_PlayButton + SERVERSELECT_OrderExpansionButton + SERVERSELECT_ExpansionsWindow + SERVERSELECT_ServerListBackground + SERVERSELECT_ServerList + SERVERSELECT_ServerListLabel + SERVERSELECT_LastServerLabel + SERVERSELECT_PlayLastServerButton + + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_SplashExWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_SplashExWnd.xml new file mode 100644 index 0000000000..6d944ea793 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_SplashExWnd.xml @@ -0,0 +1,115 @@ + + + + + + + + SplashEx_Display + 4 + WDT_EQLS_Def_Bordered + true + true + true + 40 + 70 + 40 + 75 + true + false + false + true + true + + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + 5 + Notice + + 231 + 252 + 82 + + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + SplashEx_OKButton + SplashEx_Display + SplashEx_WndLabel + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_Templates.xml b/client_files/login/rof/uifiles/default/EQLSUI_Templates.xml new file mode 100644 index 0000000000..182b39831c --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_Templates.xml @@ -0,0 +1,328 @@ + + + + + EQLS_BlackFill.tga + + + A_EQLS_VSBUpNormal + A_EQLS_VSBUpPressed + A_EQLS_VSBUpDisabled + + + A_EQLS_VSBDownNormal + A_EQLS_VSBDownPressed + A_EQLS_VSBDownDisabled + + + A_EQLS_VSBThumbTop + A_EQLS_VSBThumbBottom + A_EQLS_VSBThumbMiddle + 0 + 0 + 0 + 0 + + EQLS_scrollbar_gutter.tga + + 255 + 128 + 128 + 128 + + + + + A_EQLS_HSBLeftNormal + A_EQLS_HSBLeftPressed + A_EQLS_HSBLeftDisabled + + + A_EQLS_HSBRightNormal + A_EQLS_HSBRightPressed + A_EQLS_HSBRightDisabled + + + A_EQLS_HSBThumbRight + A_EQLS_HSBThumbLeft + A_EQLS_HSBThumbMiddle + 0 + 0 + 0 + 0 + + EQLS_scrollbar_gutter.tga + + 255 + 128 + 128 + 128 + + + + + + + + + + + EQLS_BlackFill.tga + + + A_EQLS_VSBUpNormal + A_EQLS_VSBUpPressed + A_EQLS_VSBUpDisabled + + + A_EQLS_VSBDownNormal + A_EQLS_VSBDownPressed + A_EQLS_VSBDownDisabled + + + A_EQLS_VSBThumbTop + A_EQLS_VSBThumbBottom + A_EQLS_VSBThumbMiddle + 0 + 0 + 0 + 0 + + EQLS_BlackFill.tga + + 255 + 128 + 128 + 128 + + + + + A_EQLS_HSBLeftNormal + A_EQLS_HSBLeftPressed + A_EQLS_HSBLeftDisabled + + + A_EQLS_HSBRightNormal + A_EQLS_HSBRightPressed + A_EQLS_HSBRightDisabled + + + A_EQLS_HSBThumbRight + A_EQLS_HSBThumbLeft + A_EQLS_HSBThumbMiddle + 0 + 0 + 0 + 0 + + EQLS_scrollbar_gutter.tga + + 255 + 128 + 128 + 128 + + + + + + + + + + + + A_EQLS_BorderFrameTopLeft + A_EQLS_BorderFrameTop + A_EQLS_BorderFrameTopRight + A_EQLS_BorderFrameRightTop + A_EQLS_BorderFrameRight + A_EQLS_BorderFrameRight + A_EQLS_BorderFrameBottomRight + A_EQLS_BorderFrameBottom + A_EQLS_BorderFrameBottomLeft + A_EQLS_BorderFrameLeftTop + A_EQLS_BorderFrameLeft + A_EQLS_BorderFrameLeft + 0 + 0 + 0 + 0 + + + A_WindowTitleRight + A_WindowTitleLeft + A_WindowTitleMiddle + 0 + 0 + 0 + 0 + + + + + + + + + + + + wnd_bg_light_rock.tga + + + A_EQLS_VSBUpNormal + A_EQLS_VSBUpPressed + A_EQLS_VSBUpDisabled + + + A_EQLS_VSBDownNormal + A_EQLS_VSBDownPressed + A_EQLS_VSBDownDisabled + + + A_EQLS_VSBThumbTop + A_EQLS_VSBThumbBottom + A_EQLS_VSBThumbMiddle + 0 + 0 + 0 + 0 + + EQLS_scrollbar_gutter.tga + + 255 + 128 + 128 + 128 + + + + + A_EQLS_HSBLeftNormal + A_EQLS_HSBLeftPressed + A_EQLS_HSBLeftDisabled + + + A_EQLS_HSBRightNormal + A_EQLS_HSBRightPressed + A_EQLS_HSBRightDisabled + + + A_EQLS_HSBThumbRight + A_EQLS_HSBThumbLeft + A_EQLS_HSBThumbMiddle + 0 + 0 + 0 + 0 + + EQLS_scrollbar_gutter.tga + + 255 + 128 + 128 + 128 + + + + A_CloseBtnNormal + A_CloseBtnPressed + A_CloseBtnFlyby + A_CloseBtnDisabled + A_CloseBtnPressedFlyby + + + A_QMarkBtnNormal + A_QMarkBtnPressed + A_QMarkBtnFlyby + A_QMarkBtnDisabled + A_QMarkBtnPressedFlyby + + + A_MinimizeBtnNormal + A_MinimizeBtnPressed + A_MinimizeBtnFlyby + A_MinimizeBtnDisabled + A_MinimizeBtnPressedFlyby + + + + + A_EQLS_BorderFrameTopLeft + A_EQLS_BorderFrameTop + A_EQLS_BorderFrameTopRight + A_EQLS_BorderFrameRightTop + A_EQLS_BorderFrameRight + A_EQLS_BorderFrameRight + A_EQLS_BorderFrameBottomRight + A_EQLS_BorderFrameBottom + A_EQLS_BorderFrameBottomLeft + A_EQLS_BorderFrameLeftTop + A_EQLS_BorderFrameLeft + A_EQLS_BorderFrameLeft + 0 + 0 + 0 + 0 + + + A_WindowTitleRight + A_WindowTitleLeft + A_WindowTitleMiddle + 0 + 0 + 0 + 0 + + + + + + A_SliderThumbNormal + A_SliderThumbPressed + A_SliderThumbFlyby + A_SliderThumbDisabled + A_SliderThumbPressedFlyby + + A_SliderBackground + A_SliderEndCapRight + A_SliderEndCapLeft + + + + + A_TabFrameTopLeft + A_TabFrameTop + A_TabFrameTopRight + A_TabFrameRightTop + A_TabFrameRight + A_TabRightBottom + A_TabFrameLeftTop + A_TabFrameLeft + A_TabLeftBottom + 0 + 0 + 0 + 0 + + + A_TabFrameTopLeft + A_TabFrameTop + A_TabFrameTopRight + A_TabFrameRightTop + A_TabFrameRight + A_TabFrameRightBottom + A_TabFrameBottomRight + A_TabFrameBottom + A_TabFrameBottomLeft + A_TabFrameLeftTop + A_TabFrameLeft + A_TabFrameLeftBottom + 0 + 0 + 0 + 0 + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_WebOrderWnd.xml b/client_files/login/rof/uifiles/default/EQLSUI_WebOrderWnd.xml new file mode 100644 index 0000000000..9b41b53ad3 --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_WebOrderWnd.xml @@ -0,0 +1,144 @@ + + + + + + + + + Order_Display + 4 + WDT_EQLS_Def_Bordered + true + true + true + 40 + 70 + 40 + 75 + true + false + false + true + true + + + + + + + + + true + + 0 + 0 + + + 640 + 480 + + 5 + Vote For EverQuest + + 231 + 252 + 82 + + false + false + false + + WDT_EQLS_Def_NoFrame + false + false + false + false + false + EQLS_AltBG01 + EQLS_AltBG02 + EQLS_AltBG03 + EQLS_AltBG04 + EQLS_AltBG05 + EQLS_AltBG06 + Order_AcceptButton + Order_DeclineButton + Order_Display + Order_WndLabel + + diff --git a/client_files/login/rof/uifiles/default/EQLSUI_YesNoDialog.xml b/client_files/login/rof/uifiles/default/EQLSUI_YesNoDialog.xml new file mode 100644 index 0000000000..2d3a070b4e --- /dev/null +++ b/client_files/login/rof/uifiles/default/EQLSUI_YesNoDialog.xml @@ -0,0 +1,133 @@ + + + + + + + + + Display + WDT_EQLS_Def_Bordered + true + true + true + 2 + 2 + 2 + 35 + true + false + false + true + true + + + + Box + true + true + 130 + 130 + 130 + 130 + true + false + false + true + + Confirmation + false + false + false + + WDT_EQLS_Def_Bordered + false + false + false + true + false + YESNO_YesButton + YESNO_NoButton + YESNO_Display + + + + + true + + 0 + 0 + + + 640 + 480 + + + + false + false + false + + WDT_Def + false + false + false + false + false + YESNO_Box + + diff --git a/client_files/login/rof/uifiles/default/EQLS_BlackFill.tga b/client_files/login/rof/uifiles/default/EQLS_BlackFill.tga new file mode 100644 index 0000000000..e368ea4967 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_BlackFill.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_ESRBSplash01.tga b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash01.tga new file mode 100644 index 0000000000..b52a705d0f Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash01.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_ESRBSplash02.tga b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash02.tga new file mode 100644 index 0000000000..60307f49d8 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash02.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_ESRBSplash03.tga b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash03.tga new file mode 100644 index 0000000000..b1fa5ff636 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash03.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_ESRBSplash04.tga b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash04.tga new file mode 100644 index 0000000000..aea9d75eac Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash04.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_ESRBSplash05.tga b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash05.tga new file mode 100644 index 0000000000..390d45191c Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash05.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_ESRBSplash06.tga b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash06.tga new file mode 100644 index 0000000000..40bc311931 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_ESRBSplash06.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_SOESplash01.tga b/client_files/login/rof/uifiles/default/EQLS_SOESplash01.tga new file mode 100644 index 0000000000..ae521554b0 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_SOESplash01.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_SOESplash02.tga b/client_files/login/rof/uifiles/default/EQLS_SOESplash02.tga new file mode 100644 index 0000000000..2cfa42383b Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_SOESplash02.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_SOESplash03.tga b/client_files/login/rof/uifiles/default/EQLS_SOESplash03.tga new file mode 100644 index 0000000000..b1fa5ff636 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_SOESplash03.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_SOESplash04.tga b/client_files/login/rof/uifiles/default/EQLS_SOESplash04.tga new file mode 100644 index 0000000000..0b4f0b9acf Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_SOESplash04.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_SOESplash05.tga b/client_files/login/rof/uifiles/default/EQLS_SOESplash05.tga new file mode 100644 index 0000000000..a4a8db8c1e Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_SOESplash05.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_SOESplash06.tga b/client_files/login/rof/uifiles/default/EQLS_SOESplash06.tga new file mode 100644 index 0000000000..b1fa5ff636 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_SOESplash06.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_WndBorder_01.tga b/client_files/login/rof/uifiles/default/EQLS_WndBorder_01.tga new file mode 100644 index 0000000000..89db18db46 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_WndBorder_01.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_WndBorder_02.tga b/client_files/login/rof/uifiles/default/EQLS_WndBorder_02.tga new file mode 100644 index 0000000000..015224407e Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_WndBorder_02.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_WndBorder_03.tga b/client_files/login/rof/uifiles/default/EQLS_WndBorder_03.tga new file mode 100644 index 0000000000..c544b96e0d Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_WndBorder_03.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_WndBorder_04.tga b/client_files/login/rof/uifiles/default/EQLS_WndBorder_04.tga new file mode 100644 index 0000000000..f1853c7efc Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_WndBorder_04.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_WndBorder_05.tga b/client_files/login/rof/uifiles/default/EQLS_WndBorder_05.tga new file mode 100644 index 0000000000..f6f5ff4716 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_WndBorder_05.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_WndBorder_06.tga b/client_files/login/rof/uifiles/default/EQLS_WndBorder_06.tga new file mode 100644 index 0000000000..b0625344b9 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_WndBorder_06.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_background_01.tga b/client_files/login/rof/uifiles/default/EQLS_background_01.tga new file mode 100644 index 0000000000..4910aa3d00 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_background_01.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_background_02.tga b/client_files/login/rof/uifiles/default/EQLS_background_02.tga new file mode 100644 index 0000000000..c1ee1d072e Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_background_02.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_background_03.tga b/client_files/login/rof/uifiles/default/EQLS_background_03.tga new file mode 100644 index 0000000000..59ea5e81f1 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_background_03.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_background_04.tga b/client_files/login/rof/uifiles/default/EQLS_background_04.tga new file mode 100644 index 0000000000..e413cfe352 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_background_04.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_background_05.tga b/client_files/login/rof/uifiles/default/EQLS_background_05.tga new file mode 100644 index 0000000000..62a83fc15b Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_background_05.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_background_06.tga b/client_files/login/rof/uifiles/default/EQLS_background_06.tga new file mode 100644 index 0000000000..efe21b6ec0 Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_background_06.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_scrollbar_gutter.tga b/client_files/login/rof/uifiles/default/EQLS_scrollbar_gutter.tga new file mode 100644 index 0000000000..0bb6a7955a Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_scrollbar_gutter.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_window_pieces_01.tga b/client_files/login/rof/uifiles/default/EQLS_window_pieces_01.tga new file mode 100644 index 0000000000..c13f54a21d Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_window_pieces_01.tga differ diff --git a/client_files/login/rof/uifiles/default/EQLS_window_pieces_02.tga b/client_files/login/rof/uifiles/default/EQLS_window_pieces_02.tga new file mode 100644 index 0000000000..a84bb5084e Binary files /dev/null and b/client_files/login/rof/uifiles/default/EQLS_window_pieces_02.tga differ diff --git a/client_files/native_autoloot/README.md b/client_files/native_autoloot/README.md new file mode 100644 index 0000000000..47023e372c --- /dev/null +++ b/client_files/native_autoloot/README.md @@ -0,0 +1,79 @@ +# Native Client Runtime + +This folder contains the current client-side native runtime for the custom EQEmu feature set. + +It supports the native EQ UI windows and transport lines for: + +- AutoLoot: `AUTOLOOT|...` +- Live Items / Item Forge: `LIVEITEM|...` +- Live Spells / Spell Forge: `LIVESPELL|...` +- Achievements: `ACH|...` + +## Install + +Copy the prebuilt DLL to the root of the EverQuest client folder: + +```text +client_files/native_autoloot/eq-core-dll/bin/dinput8.dll +``` + +Copy the native UI XML files to the client's default UI folder: + +```text +client_files/native_autoloot/ui/EQUI_NativeAutoLootWnd.xml +client_files/native_autoloot/ui/EQUI_NativeItemForgeWnd.xml +client_files/native_autoloot/ui/EQUI_NativeSpellForgeWnd.xml +client_files/native_autoloot/ui/EQUI_NativeAchievementWnd.xml +``` + +Destination example: + +```text +EverQuest/dinput8.dll +EverQuest/uifiles/default/EQUI_NativeAutoLootWnd.xml +EverQuest/uifiles/default/EQUI_NativeItemForgeWnd.xml +EverQuest/uifiles/default/EQUI_NativeSpellForgeWnd.xml +EverQuest/uifiles/default/EQUI_NativeAchievementWnd.xml +``` + +Only load one patched client folder at a time. + +## In Game + +Useful reopen commands: + +```text +#autoloot native show +#itemforge dialog +#livespell dialog +#ach window +``` + +The server remains authoritative. The DLL creates native windows, parses server transport lines, and sends normal server commands back to the zone. + +## Current Shape + +This is a monolithic native runtime. The feature-specific code currently lives mostly in: + +```text +client_files/native_autoloot/eq-core-dll/src/core_autoloot_native.h +``` + +The old `EQUI_AoTAutoLootWnd.xml` combined prototype window is intentionally not included. AutoLoot uses `EQUI_NativeAutoLootWnd.xml`. + +The surrounding DLL project still contains older MacroQuest-derived scaffolding because the current hooks were built on that client-side base. That is separate from the removed Lua/MQ AutoLoot UI path. + +## Build + +Open one of these solutions in Visual Studio: + +```text +client_files/native_autoloot/eq-core-dll/eq-core-dll-visualstudio2022.sln +client_files/native_autoloot/eq-core-dll/eq-core-dll-visualstudio2019.sln +``` + +Build `Release|Win32`. The output is: + +```text +client_files/native_autoloot/eq-core-dll/bin/dinput8.dll +``` diff --git a/client_files/native_autoloot/config/native_interface.ini b/client_files/native_autoloot/config/native_interface.ini new file mode 100644 index 0000000000..d8fb66aeeb --- /dev/null +++ b/client_files/native_autoloot/config/native_interface.ini @@ -0,0 +1,26 @@ +[Map] +Enabled=1 +ShowNPCs=1 +ShowPlayers=0 +ShowCorpses=0 +ChainEQLabels=1 +UseConColor=1 +ShowTarget=1 +TargetLine=1 +MaxLabels=0 +RefreshMs=1000 +NameFilter= +HideFilter= +Ground=0 +Vector=0 +Named=0 +XTargets=1 +XTargetLabels=1 +Custom=1 +TargetRadius=0 +CastRadius=0 +SpellRadius=0 + +[Inspect] +Items=1 +Spells=1 diff --git a/client_files/native_autoloot/eq-core-dll/.editorconfig b/client_files/native_autoloot/eq-core-dll/.editorconfig new file mode 100644 index 0000000000..163988705d --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/.editorconfig @@ -0,0 +1,59 @@ +[*] +cpp_indent_braces=false +cpp_indent_multi_line_relative_to=innermost_parenthesis +cpp_indent_within_parentheses=indent +cpp_indent_preserve_within_parentheses=false +cpp_indent_case_labels=false +cpp_indent_case_contents=true +cpp_indent_case_contents_when_block=false +cpp_indent_lambda_braces_when_parameter=true +cpp_indent_goto_labels=one_left +cpp_indent_preprocessor=leftmost_column +cpp_indent_access_specifiers=false +cpp_indent_namespace_contents=true +cpp_indent_preserve_comments=false +cpp_new_line_before_open_brace_namespace=ignore +cpp_new_line_before_open_brace_type=ignore +cpp_new_line_before_open_brace_function=ignore +cpp_new_line_before_open_brace_block=ignore +cpp_new_line_before_open_brace_lambda=ignore +cpp_new_line_scope_braces_on_separate_lines=false +cpp_new_line_close_brace_same_line_empty_type=false +cpp_new_line_close_brace_same_line_empty_function=false +cpp_new_line_before_catch=true +cpp_new_line_before_else=true +cpp_new_line_before_while_in_do_while=false +cpp_space_before_function_open_parenthesis=remove +cpp_space_within_parameter_list_parentheses=false +cpp_space_between_empty_parameter_list_parentheses=false +cpp_space_after_keywords_in_control_flow_statements=true +cpp_space_within_control_flow_statement_parentheses=false +cpp_space_before_lambda_open_parenthesis=false +cpp_space_within_cast_parentheses=false +cpp_space_after_cast_close_parenthesis=false +cpp_space_within_expression_parentheses=false +cpp_space_before_block_open_brace=true +cpp_space_between_empty_braces=false +cpp_space_before_initializer_list_open_brace=false +cpp_space_within_initializer_list_braces=true +cpp_space_preserve_in_initializer_list=true +cpp_space_before_open_square_bracket=false +cpp_space_within_square_brackets=false +cpp_space_before_empty_square_brackets=false +cpp_space_between_empty_square_brackets=false +cpp_space_group_square_brackets=true +cpp_space_within_lambda_brackets=false +cpp_space_between_empty_lambda_brackets=false +cpp_space_before_comma=false +cpp_space_after_comma=true +cpp_space_remove_around_member_operators=true +cpp_space_before_inheritance_colon=true +cpp_space_before_constructor_colon=true +cpp_space_remove_before_semicolon=true +cpp_space_after_semicolon=false +cpp_space_remove_around_unary_operator=true +cpp_space_around_binary_operator=insert +cpp_space_around_assignment_operator=insert +cpp_space_pointer_reference_alignment=left +cpp_space_around_ternary_operator=insert +cpp_wrap_preserve_blocks=one_liners diff --git a/client_files/native_autoloot/eq-core-dll/.gitattributes b/client_files/native_autoloot/eq-core-dll/.gitattributes new file mode 100644 index 0000000000..dfe0770424 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/client_files/native_autoloot/eq-core-dll/.gitignore b/client_files/native_autoloot/eq-core-dll/.gitignore new file mode 100644 index 0000000000..20734fccbb --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/.gitignore @@ -0,0 +1,45 @@ +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +.vs/ +build/ +enc_temp_folder/ +bin/ +!bin/ +bin/* +!bin/dinput8.dll +Debug/ +Release/ +*.aps +*.suo +*.user diff --git a/client_files/native_autoloot/eq-core-dll/.vscode/settings.json b/client_files/native_autoloot/eq-core-dll/.vscode/settings.json new file mode 100644 index 0000000000..a965a608ff --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "[cpp]":{ + "editor.wordBasedSuggestions": "off", + "editor.suggest.insertMode": "replace", + "editor.semanticHighlighting.enabled": true, + } +} \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/Blech/Blech.h b/client_files/native_autoloot/eq-core-dll/Blech/Blech.h new file mode 100644 index 0000000000..be57f8c6eb --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/Blech/Blech.h @@ -0,0 +1,1345 @@ +/***************************************************************************** + Blech.h + Lax/Blech + Copyright (C) 2004-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +/***************************************************************************** +About Blech: + Blech is a text parser API. It uses callback system to allow it to retrieve + current values of variables from your program, and to initiate an event from + a successful match. Events are added, text is fed through it, and hopefully + you get what you want.... + + Blech uses a B-Tree implementation where each node can have n nodes. The + data stored by each node is a portion of a string. Nodes are split when a + sibling is being added that begins with the same data as an existing one. + Example: + existing child of a node: "blech"-(possibly existing children) + insert child to node: "bleach" + + resulting nodes: "ch"-(possibly existing children) + "ble"< + "ach" + The end result using this implementation is a way to compare a given string to + many strings with possibly variable portions, where a hash/map/binary tree will + fail. + +Using Blech: + *Initialize the Blech class: + Blech MyBlech('#'); // Use only a variable "scan" + Blech MyBlech('#','|',VariableValue); // Use a variable "scan" and a variable "print" + + *Add events: + MyBlech.AddEvent("Text with #variable# portion",MyEvent,0); + + *Create event callback: + void __stdcall MyEvent(unsigned long ID, void * pData, PBLECHVALUE pValues) + { + printf("MyEvent(%d,%X,%X)",ID,pData,pValues); + while(pValues) + { + printf("'%s'=>'%s'",pValues->Name,pValues->Value); + pValues=pValues->pNext; + } + } + + *Feed Blech: + MyBlech.Feed("Text with some portion"); + + *Examine output: + MyEvent(1,0,(pointer)) + 'variable'=>'some' + +******************************************************************************/ + +#pragma once +#pragma warning(disable : 4996) + +#define BLECHVERSION "Lax/Blech 1.7.2" + +#include +#include + +//#ifdef WIN32 + +#ifdef BLECH_DEBUG_FULL +#define BLECH_DEBUG +#define BlechDebugFull BlechDebug +#else +#define BlechDebugFull +#endif + +#ifdef BLECH_DEBUG +//#pragma message(BLECHVERSION) +//#pragma message("Blech: Debug Mode") +#include +#define BLECHASSERT(x) if (!(x)) {BlechDebug("Blech Assertion failure: %s",#x); __asm{int 3};} +static void BlechDebug(char *szFormat, ...) +{ + char szOutput[4096] = {0}; + va_list vaList; + + va_start( vaList, szFormat ); + vsprintf(szOutput,szFormat, vaList); + OutputDebugString(szOutput); + OutputDebugString("\n"); +} +#define BlechTry(x) BlechDebug("Trying %s",#x);x;BlechDebug("%s complete",#x) +#else +#define BLECHASSERT(x) +#define BlechTry(x) x +#define BlechDebug +#endif + +#ifdef BLECH_CASE_SENSITIVE +//#pragma message("Blech: Case Sensitive") +#define STRCMP(A,B) strcmp(A,B) +#define STRNCMP(A,B,LENGTH) strncmp(A,B,LENGTH) +#define STRFIND(HAYSTACK,NEEDLE) strstr(HAYSTACK,NEEDLE) +#else +//#pragma message("Blech: Case Insensitive") +#define STRCMP(A,B) stricmp(A,B) +#define STRNCMP(A,B,LENGTH) strnicmp(A,B,LENGTH) +#define STRFIND(HAYSTACK,NEEDLE) stristr(HAYSTACK,NEEDLE) +#endif +//#else +//#error Non-Win32 defines not yet available +//#endif + + +enum eBlechStringType +{ + BST_NORMAL=0, + BST_PRINTVAR=1, + BST_SCANVAR=2, +}; + + +typedef struct _BLECHVALUE { + char * Name; + char * Value; + struct _BLECHVALUE *pNext; +} BLECHVALUE, *PBLECHVALUE; + +typedef struct _BLECHLISTNODE { + class BlechNode *pNode; + struct _BLECHLISTNODE *pNext; +} BLECHLISTNODE, *PBLECHLISTNODE; + + +typedef unsigned long (__stdcall *fBlechVariableValue)(char * VarName, char * Value); +typedef void (__stdcall *fBlechCallback)(unsigned long ID, void * pData, PBLECHVALUE pValues); + +typedef struct _BLECHEVENT { + unsigned long ID; + void * pData; + char * OriginalString; + fBlechCallback Callback; + + class BlechNode *pBlechNode; +} BLECHEVENT, *PBLECHEVENT; + +typedef struct _BLECHEXECUTE { + unsigned long ID; + void * pData; + + fBlechCallback Callback; + struct _BLECHVALUE *pValues; + struct _BLECHEXECUTE *pNext; +} BLECHEXECUTE, *PBLECHEXECUTE; + +typedef std::map BLECHEVENTMAP; + +typedef struct _BLECHEVENTNODE { + PBLECHEVENT pEvent; + + struct _BLECHEVENTNODE *pNext; + struct _BLECHEVENTNODE *pPrev; +} BLECHEVENTNODE, *PBLECHEVENTNODE; + +static unsigned long Equalness(char *StringA, char *StringB) +{ + BlechDebugFull("Equalness(%s,%s)",StringA,StringB); + char *pPos=StringA; + while(1) + { + if (*pPos!=*StringB) + { +#ifndef BLECH_CASE_SENSITIVE + if (*pPos>='a' && *pPos<='z') + { + if ((*pPos)-32==*StringB) + { + ++pPos; + ++StringB; + continue; + } + } + else if (*pPos>='A' && *pPos<='Z') + { + if ((*pPos)+32==*StringB) + { + ++pPos; + ++StringB; + continue; + } + } +#endif + unsigned long Ret=(unsigned long)(pPos-StringA); + BlechDebugFull("Equalness returning %d",Ret); + return Ret; + } + else + { + if (!*pPos) + { + unsigned long Ret=(unsigned long)(pPos-StringA); + BlechDebugFull("Equalness returning %d",Ret); + return Ret; + } + } + ++pPos; + ++StringB; + } +} + +class BlechNode +{ +public: + BlechNode(BlechNode *Parent, BlechNode **Root, char * String, eBlechStringType NewStringType=BST_NORMAL) + { + BlechDebug("BlechNode(%X,%X,%s,%d)",Parent,Root,String,NewStringType); + BLECHASSERT(String && *String); + BLECHASSERT(Root); + StringType=NewStringType; + if (StringType==BST_NORMAL) + Length=(unsigned long)strlen(String); + else + Length=0; + pString=strdup(String); + pParent=Parent; + ppRoot=Root; + pChildren=0; + pNext=0; + pPrev=0; + pEvents=0; + } + + ~BlechNode() + { + BlechDebug("~BlechNode()"); + // clean out chillins + while(pChildren) + { + BlechNode *pNext=pChildren->pNext; + delete pChildren; + pChildren=pNext; + } + // clean out events + while(pEvents) + { + pEvents->pEvent->pBlechNode=0; + PBLECHEVENTNODE pNext=pEvents->pNext; + delete pEvents; + pEvents=pNext; + } + // remove me from my siblings + if (pPrev) + pPrev->pNext=pNext; + else + { + // set parent's first child / root + if (pParent) + pParent->pChildren=pNext; + else + { + if (*ppRoot==this) + *ppRoot=pNext; + } + } + if (pNext) + pNext->pPrev=pPrev; + + // free string + free(pString); + } + + BlechNode *AddChild(char *NewString, eBlechStringType NewStringType) + { + BlechDebug("AddChild(%s,%d)",NewString,NewStringType); + BLECHASSERT(NewString); + + BlechNode *pChild = pChildren; + while(pChild) + { + if (pChild->StringType==NewStringType) + { + if (NewStringType==BST_NORMAL) + { + if (unsigned long Eq=Equalness(pChild->pString,NewString)) + { + unsigned long Len=(unsigned long)strlen(NewString); + if (Len==Eq) + { + if (Eq==pChild->Length) + { + return pChild; + } + // old child needs to be child of new child! + + // make new child, redo pChild as child of new child... + BlechNode *pNode = new BlechNode(this,ppRoot,NewString,NewStringType); + BLECHASSERT(pNode); + if (pNode->pNext=pChild->pNext) + pNode->pNext->pPrev=pNode; + if (pNode->pPrev=pChild->pPrev) + pNode->pPrev->pNext=pNode; + else + pChildren=pNode; + pChild->pNext=0; + pChild->pPrev=0; + + pChild->pParent=pNode; + pNode->pChildren=pChild; + memmove(pChild->pString,&pChild->pString[Eq],pChild->Length-Eq+1); + pChild->Length-=Eq; + + return pNode; + // and return that new child + } + else if (Eq==pChild->Length) + { + // easy one + return pChild->AddChild(&NewString[Eq],NewStringType); + } + // both children (new and old) need to be children of a new child + + // make new child, redo pChild as child of new child... + char Temp=pChild->pString[Eq]; + pChild->pString[Eq]=0; + BlechNode *pNode = new BlechNode(this,ppRoot,pChild->pString,NewStringType); + pChild->pString[Eq]=Temp; + BLECHASSERT(pNode); + if (pNode->pNext=pChild->pNext) + pNode->pNext->pPrev=pNode; + if (pNode->pPrev=pChild->pPrev) + pNode->pPrev->pNext=pNode; + else + pChildren=pNode; + pChild->pNext=0; + pChild->pPrev=0; + + + pChild->pParent=pNode; + pNode->pChildren=pChild; + + memmove(pChild->pString,&pChild->pString[Eq],pChild->Length-Eq+1); + pChild->Length-=Eq; + return pNode->AddChild(&NewString[Eq],NewStringType); + // and return a very new child! + } + } + else + { + if (!strcmp(pChild->pString,NewString)) + return pChild; + } + } + pChild=pChild->pNext; + } + + + BlechNode *pNode = new BlechNode(this,ppRoot,NewString,NewStringType); + BLECHASSERT(pNode); + pNode->pNext=pChildren; + if (pChildren) + pChildren->pPrev=pNode; + pChildren=pNode; + return pChildren; + } + + inline bool IsEmpty() + { + return (!pChildren && !pEvents); + } + + inline void AddEvent(PBLECHEVENT pEvent) + { + BlechDebug("AddEvent(%X)",pEvent); + BLECHASSERT(pEvent); + + PBLECHEVENTNODE pNode=new BLECHEVENTNODE; + pNode->pEvent=pEvent; + pNode->pNext=pEvents; + if (pEvents) + pEvents->pPrev=pNode; + pNode->pPrev=0; + pEvent->pBlechNode=this; + pEvents=pNode; + } + + eBlechStringType StringType; + char * pString; + unsigned long Length; + BlechNode *pParent; + BlechNode **ppRoot; + BlechNode *pChildren; + BlechNode *pNext; + BlechNode *pPrev; + + PBLECHEVENTNODE pEvents; +}; + +class Blech +{ +public: + Blech(char ScanDelimiter,char PrintDelimiter,fBlechVariableValue PrintRetriever) + { + BlechDebug("Blech(%c,%c,%X)",ScanDelimiter,PrintDelimiter,PrintRetriever); + BLECHASSERT(PrintDelimiter); + BLECHASSERT(PrintRetriever); + PrintVarDelimiter=PrintDelimiter; + ScanVarDelimiter=ScanDelimiter; + VariableValue=PrintRetriever; + Initialize(); + } + Blech(char ScanDelimiter=0) + { + BlechDebug("Blech(%c)",ScanDelimiter); + ScanVarDelimiter=ScanDelimiter; + PrintVarDelimiter=0; + VariableValue=0; + Initialize(); + } + + static char *stristr(char *haystack,char *needle) + { + BlechDebugFull("stristr(%s,%s)",haystack,needle); + BLECHASSERT(haystack!=0); + BLECHASSERT(needle!=0); + if (!needle[0]) + return haystack; + + static bool bInitialized=false; + static char ToUpper[256]; + if (!bInitialized) + { + bInitialized=true; + ToUpper[0]=0; + for(unsigned long iliketmpvars = 1 ; iliketmpvars < 128 ; iliketmpvars++) + ToUpper[iliketmpvars]=(char)toupper(iliketmpvars); + for (unsigned long iliketmpvarsmore = 128 ; iliketmpvarsmore < 256 ; iliketmpvarsmore++) + { + ToUpper[iliketmpvarsmore]=(char)iliketmpvarsmore; + } + } + + char *originalneedle=needle; + do + { + char c=*haystack; + if (!c) + return 0; + if (ToUpper[c]==ToUpper[*needle]) + { + char *start=haystack; + do + { + needle++; + c=*needle; + if (!c) + return start; + haystack++; + char d=*haystack; + if (!d) + { + return 0; + } + + if (ToUpper[c]!=ToUpper[d]) + break; + } + while(1); + + haystack=start+1; + needle=originalneedle; + continue; + } + haystack++; + } + while(1); + + + + return 0; + } + + + + void Reset() + { + Cleanup(); + Event.clear(); +// ExactMatch.clear(); + Initialize(); + } + + ~Blech(void) + { + BlechDebug("~Blech()"); + Cleanup(); + } + + unsigned long Feed(char * Input) + { + BlechDebug("Feed(%s)",Input); + if (!Input || !Input[0]) + return 0; + unsigned long Root=(unsigned char)Input[0]; +#ifndef BLECH_CASE_SENSITIVE + if (Root>='a' && Root<='z') + Root-=32; +#endif + return Chew(Tree[Root],Input)+Chew(Tree[0],Input)/*+Swallow(Input)/**/; + } + + inline bool IsExact(char *Text) + { + if (!strchr(Text,ScanVarDelimiter) && (!PrintVarDelimiter || !strchr(Text,PrintVarDelimiter))) + return true; + return false; + } + + unsigned long AddEvent(char *Text,fBlechCallback Callback,void *pData=0) + { + BlechDebug("AddEvent(%s,%X,%X)",Text,Callback,pData); + BLECHASSERT(Text); + BLECHASSERT(Callback); + char *pText=Text; + char *Part=Text; + eBlechStringType StringType=BST_NORMAL; + BlechNode *pNode=0; + while(*pText) + { + if (*pText==ScanVarDelimiter) + { + if (Part!=pText) + pNode=AddNode(pNode,Part,pText,StringType); + Part=&pText[1]; + if (StringType==BST_SCANVAR) + StringType=BST_NORMAL; + else + StringType=BST_SCANVAR; + } + else + if (*pText==PrintVarDelimiter) + { + if (Part!=pText) + pNode=AddNode(pNode,Part,pText,StringType); + Part=&pText[1]; + if (StringType==BST_PRINTVAR) + StringType=BST_NORMAL; + else + StringType=BST_PRINTVAR; + } + pText++; + } + if (*Part) + { + pNode=AddNode(pNode,Part,pText,StringType); + } + // add event to node + BLECHASSERT(pNode); + PBLECHEVENT pEvent = new BLECHEVENT; + pEvent->Callback=Callback; + pEvent->pData=pData; + pEvent->ID=++LastID; + pEvent->pBlechNode=pNode; + pEvent->OriginalString=strdup(Text); + pNode->AddEvent(pEvent); + Event[pEvent->ID]=pEvent; + return pEvent->ID; + } + + bool RemoveEvent(unsigned long ID) + { + BlechDebug("RemoveEvent(%d)",ID); + PBLECHEVENT pEvent = Event[ID]; + if (!pEvent) + return false; + Event.erase(ID); + { + free(pEvent->OriginalString); + + + BlechNode *pNode=pEvent->pBlechNode; + // find the PBLECHEVENTNODE for this event and remove it + PBLECHEVENTNODE pEventNode = pNode->pEvents; + while(pEventNode) + { + if (pEvent==pEventNode->pEvent) + { + if (pEventNode->pNext) + pEventNode->pNext->pPrev=pEventNode->pPrev; + if (pEventNode->pPrev) + pEventNode->pPrev->pNext=pEventNode->pNext; + else + pNode->pEvents=pEventNode->pNext; + break; + } + pEventNode=pEventNode->pNext; + } + + while(pNode && pNode->IsEmpty()) + { + BlechNode *pNext=pNode->pParent; + delete pNode; + pNode=pNext; + } + + delete pEvent; + } + return true; + } + + char Version[32]; + +private: + inline void FreeExecution(PBLECHEXECUTE pExecute) + { + PBLECHVALUE pValue=pExecute->pValues; + while (pValue) + { + PBLECHVALUE pNext=pValue->pNext; + free(pValue->Value); + free(pValue->Name); + delete pValue; + pValue=pNext; + } + delete pExecute; + } + + void ClearExecutionList() + { + while(pExecuteList) + { + PBLECHEXECUTE pExecuteNext=pExecuteList->pNext; + FreeExecution(pExecuteList); + pExecuteList=pExecuteNext; + } + } + + unsigned long ProcessExecutionList() + { + unsigned long n=0; + while(pExecuteList) + { + n++; + PBLECHEXECUTE pExecuteNext=pExecuteList->pNext; + pExecuteList->Callback(pExecuteList->ID,pExecuteList->pData,pExecuteList->pValues); + FreeExecution(pExecuteList); + pExecuteList=pExecuteNext; + } + return n; + } + + inline void Cleanup() + { + for (unsigned long N = 0 ; N < 256 ; N++) + { + delete Tree[N]; + Tree[N]=0; + } + for (BLECHEVENTMAP::iterator i=Event.begin(); i != Event.end(); i++) + { + if (PBLECHEVENT pEvent=i->second) + { + BLECHASSERT(pEvent); + BlechTry(free(pEvent->OriginalString)); + delete pEvent; + Event[i->first]=0; + } + } + ClearExecutionList(); + } + + + void QueueEvent(PBLECHEVENT pEvent, PBLECHVALUE pValues) + { + BlechDebug("QueueEvent(%X,%X)",pEvent,pValues); + BLECHASSERT(pEvent); + + PBLECHEXECUTE pNew=new BLECHEXECUTE; + pNew->Callback=pEvent->Callback; + pNew->ID=pEvent->ID; + pNew->pData=pEvent->pData; + // make a COPY of values + if (pValues) + { + PBLECHVALUE pNewValueTail=0; + pNew->pValues=0; + while(pValues) + { + PBLECHVALUE pNewValue=new BLECHVALUE; + pNewValue->Name=strdup(pValues->Name); + pNewValue->Value=strdup(pValues->Value); + pNewValue->pNext=0; + if (pNew->pValues) + { + pNewValueTail->pNext=pNewValue; + pNewValueTail=pNewValue; + } + else + { + pNewValueTail=pNew->pValues=pNewValue; + + } + pValues=pValues->pNext; + } + } + else + pNew->pValues=0; + + pNew->pNext=pExecuteList; + pExecuteList=pNew; + } + + void QueueEvents(BlechNode *pNode, char *Input, unsigned long InputLength) + { + PBLECHEVENTNODE pEventNode; + BlechDebug("QueueEvents(%X,%s,%d)",pNode,Input,InputLength); + BLECHASSERT(pNode); + BLECHASSERT(Input); + BLECHASSERT(InputLength); + // ASSUME we have a complete match + + // Get forward traversal list (reverse the links, into a new list) + PBLECHLISTNODE pList=0; + BlechNode *pCurrent=pNode; + int nVariableNodes=0; + while(pCurrent) + { + PBLECHLISTNODE pNewHead=new BLECHLISTNODE; + pNewHead->pNext=pList; + pNewHead->pNode=pCurrent; + pList=pNewHead; + if (pCurrent->StringType==BST_SCANVAR) + nVariableNodes++; + pCurrent=pCurrent->pParent; + } + + if (!nVariableNodes) + { + BlechDebugFull("No variable nodes"); + // if there's no variable nodes, just make sure the lengths match + unsigned long TestLength=0; + pCurrent=pNode; + while(pCurrent) + { + TestLength+=pCurrent->Length; + pCurrent=pCurrent->pParent; + } + if (TestLength==InputLength) + { + PBLECHEVENTNODE pEventNode=pNode->pEvents; + while(pEventNode) + { + QueueEvent(pEventNode->pEvent,0); + pEventNode=pEventNode->pNext; + } + } + + // cleanup + while(pList) + { + PBLECHLISTNODE pNext=pList->pNext; + delete pList; + pList=pNext; + } + return; + } + + // now do it forward, filling in the values. we KNOW they exist. + + char NonVariable[16384]; + char VarData[4096]; + NonVariable[0]=0; + char *Pos=Input; + + PBLECHVALUE pValues=0; + PBLECHVALUE pValuesTail=0; + + BlechNode *pCurrentScanVar=0; + while(pList) + { + pCurrent=pList->pNode; + switch(pCurrent->StringType) + { + case BST_NORMAL: + strcat(NonVariable,pCurrent->pString); + break; + case BST_PRINTVAR: + VarData[0]=0; + BlechTry(VariableValue(pCurrent->pString,VarData)); + strcat(NonVariable,VarData); + break; + case BST_SCANVAR: + if (pCurrentScanVar) + { + if (NonVariable[0]) + { + char *End=STRFIND(Pos,NonVariable); + if (End) + { + PBLECHVALUE pNewValue = new BLECHVALUE; + pNewValue->Name=strdup(pCurrentScanVar->pString); + + unsigned long Length=End-Pos; + pNewValue->Value=(char*)malloc(Length+1); + memcpy(pNewValue->Value,Pos,Length); + pNewValue->Value[Length]=0; + pNewValue->pNext=0; + if (pValues) + { + pValuesTail->pNext=pNewValue; + pValuesTail=pNewValue; + } + else + { + pValuesTail=pValues=pNewValue; + } + + Pos=End+strlen(NonVariable); + NonVariable[0]=0; + } + else + { + // not a real match. goodbye! + // NOTE: this can be relatively normal, it is not a direct indication of an error + goto queueeventscleanup; + } + } + else + { + PBLECHVALUE pNewValue = new BLECHVALUE; + pNewValue->Name=strdup(pCurrentScanVar->pString); + pNewValue->Value=(char*)malloc(1); + pNewValue->Value[0]=0; + pNewValue->pNext=0; + if (pValues) + { + pValuesTail->pNext=pNewValue; + pValuesTail=pNewValue; + } + else + { + pValuesTail=pValues=pNewValue; + } + } + } + else + { + unsigned long NonVariableLength=strlen(NonVariable); + if (STRNCMP(NonVariable,Pos,NonVariableLength)) + { + // not a real match. goodbye! + // NOTE: this can be relatively normal, it is not a direct indication of an error + goto queueeventscleanup; + } + Pos+=NonVariableLength; + NonVariable[0]=0; + } + pCurrentScanVar=pCurrent; + break; + } + + + PBLECHLISTNODE pNext=pList->pNext; + delete pList; + pList=pNext; + } + + if (pCurrentScanVar) + { + if (NonVariable[0]) + { + char *End=&Input[InputLength]-strlen(NonVariable); + unsigned long Length=End-Pos; + if (STRCMP(&Pos[Length],NonVariable)) + { + goto queueeventscleanup; + } + + PBLECHVALUE pNewValue = new BLECHVALUE; + pNewValue->Name=strdup(pCurrentScanVar->pString); + + pNewValue->Value=(char*)malloc(Length+1); + memcpy(pNewValue->Value,Pos,Length); + pNewValue->Value[Length]=0; + pNewValue->pNext=0; + + if (pValues) + { + pValuesTail->pNext=pNewValue; + pValuesTail=pNewValue; + } + else + { + pValuesTail=pValues=pNewValue; + } + + Pos=End; + NonVariable[0]=0; + } + else + { + PBLECHVALUE pNewValue = new BLECHVALUE; + pNewValue->Name=strdup(pCurrentScanVar->pString); + pNewValue->Value=strdup(Pos); + pNewValue->pNext=0; + if (pValues) + { + pValuesTail->pNext=pNewValue; + pValuesTail=pNewValue; + } + else + { + pValuesTail=pValues=pNewValue; + } + } + } + else if (NonVariable[0]) + { + if (STRCMP(NonVariable,Pos)) + { + // not a real match. goodbye! + // NOTE: this can be relatively normal, it is not a direct indication of an error + goto queueeventscleanup; + } + } + + // add to execution list + pEventNode=pNode->pEvents; + while(pEventNode) + { + QueueEvent(pEventNode->pEvent,pValues); + pEventNode=pEventNode->pNext; + } + + // cleanup +queueeventscleanup: + while(pValues) + { + PBLECHVALUE pNext=pValues->pNext; + free(pValues->Name); + free(pValues->Value); + delete pValues; + pValues=pNext; + } + + while(pList) + { + PBLECHLISTNODE pNext=pList->pNext; + delete pList; + pList=pNext; + } + } + + struct MatchPos + { + char *Pos; + BlechNode *pNode; + }; + + unsigned long Chew(BlechNode *pNode,char * Input) + { + BlechDebug("Chew(%X,%s)",pNode,Input); + BLECHASSERT(Input); + if (!pNode) + return 0; + unsigned long Length=(unsigned long)strlen(Input); + char *pEnd=&Input[Length]; + char VarData[4096]; + +#define Push() { BLECHASSERT(PLP<99) CurrentPos.pNode=pNode;MatchStack[PLP]=CurrentPos; PLP++; } +#define Pop() { BLECHASSERT(PLP>0);PLP--; CurrentPos=MatchStack[PLP];pNode=CurrentPos.pNode; } +#define Peek() { if (!PLP) goto chewcomplete; CurrentPos=MatchStack[PLP-1]; } + + MatchPos MatchStack[100]; + MatchPos CurrentPos; + unsigned char PLP=0; + memset(&MatchStack[0],0,sizeof(MatchStack)); + + CurrentPos.Pos=Input; + Push(); + CurrentPos.pNode=pNode; + + while(pNode) + { + BLECHASSERT(PLP>0); + BlechDebugFull("PLP=%d",PLP); + BlechDebugFull("CurrentPos='%s', pNode=%X",CurrentPos.Pos,CurrentPos.pNode); + // determine match + { + switch(pNode->StringType) + { + case BST_NORMAL: + BlechDebugFull("BST_NORMAL"); + if (CurrentPos.Pos+pNode->LengthpString)) + { // what if we find this multiple times? need to find the right one, depending on the children + CurrentPos.Pos=&pFound[pNode->Length]; + if (!CurrentPos.Pos[0]) + { + goto feedermatchdoevents; + } + goto feedermatchnoevent; + } + } + else if (CurrentPos.Pos+pNode->Length==pEnd && !STRNCMP(pNode->pString,CurrentPos.Pos,pNode->Length)) + { + // match. do events? + CurrentPos.Pos+=pNode->Length; + if (!CurrentPos.Pos[0]) + { + goto feedermatchdoevents; + } + goto feedermatchnoevent; + } + BlechDebugFull("BST_NORMAL => NO MATCH"); + goto feedernomatch; + case BST_PRINTVAR: + BlechDebugFull("BST_PRINTVAR"); + // variable data of unknown size + BlechTry(pNode->Length=VariableValue(pNode->pString,VarData)); + BlechDebugFull("Variable value '%s' length %d",VarData,pNode->Length); + if (!pNode->Length) + { + // implied match + MatchStack[PLP+1].pNode=0; + if (!pNode->pChildren || pNode->pEvents) + { + goto feedermatchdoevents; + } + goto feedermatchnoevent; + } + BLECHASSERT(VarData[0]); + if (CurrentPos.Pos+pNode->LengthLength]; + if (!CurrentPos.Pos[0]) + { + goto feedermatchdoevents; + } + goto feedermatchnoevent; + } + } + else if (CurrentPos.Pos+pNode->Length==pEnd && !STRNCMP(VarData,CurrentPos.Pos,pNode->Length)) + { + // match. do events? + CurrentPos.Pos+=pNode->Length; + if (!CurrentPos.Pos[0]) + { + goto feedermatchdoevents; + } + goto feedermatchnoevent; + } + BlechDebugFull("BST_PRINTVAR => NO MATCH"); + goto feedernomatch; + case BST_SCANVAR: + BlechDebugFull("BST_SCANVAR"); + // implied match + MatchStack[PLP+1].pNode=0; + if (!pNode->pChildren || pNode->pEvents) + { + goto feedermatchdoevents; + } + goto feedermatchnoevent; + } + } +feedermatchdoevents: + { + BlechDebug("feedermatchdoevents"); + QueueEvents(pNode,Input,Length); + } +feedermatchnoevent: + { + BlechDebugFull("feedermatchnoevent"); + // MATCH, ALREADY EXECUTED ANY NECESSARY EVENTS + // continue walking tree + if (pNode->pChildren) + { + Push(); + pNode=pNode->pChildren; + } + else if (pNode->pNext) + { + // restore from stack +// Pop(); + Peek(); + pNode=pNode->pNext; + } + else + { + Pop(); + Peek(); + while(1) + { + if (pNode->pNext) + { + pNode=pNode->pNext; + break; + } + + if (PLP>1) + { + Pop(); + Peek(); + } + else + { + pNode=0; + break; + } + } + + } + CurrentPos.pNode=pNode; + continue; + } +feedernomatch: + { + // NO MATCH + + // continue walking tree + if (pNode->pNext) + { + BlechDebugFull("SAME LEVEL, NEXT"); + // position remains the same +// Pop(); + Peek(); + pNode=pNode->pNext; + } + else + { + BlechDebugFull("PREVIOUS LEVEL, NEXT"); + // Pos goes down a level - dont reprocess the same child + Pop(); + Peek(); + while(1) + { + if (pNode->pNext) + { + pNode=pNode->pNext; + break; + } + if (PLP>1) + { + Pop(); + Peek(); + } + else + { + pNode=0; + break; + } + } + } + CurrentPos.pNode=pNode; + } + } +chewcomplete: + // execute any queued events + unsigned long Count=ProcessExecutionList(); + + BlechDebug("Chew returns %d",Count); + return Count; +#undef Push +#undef Pop +#undef Peek + } + + BlechNode *AddNode(unsigned long nRoot, char *String, eBlechStringType StringType) + { + BlechDebug("AddNode(%d,%s,%d)",nRoot,String,StringType); + BLECHASSERT(nRoot<256); + BLECHASSERT(String); + + + BlechNode *pChild = Tree[nRoot]; + while(pChild) + { + if (pChild->StringType==StringType) + { + if (StringType==BST_NORMAL) + { + if (unsigned long Eq=Equalness(pChild->pString,String)) + { + unsigned long Len=(unsigned long)strlen(String); + if (Len==Eq) + { + if (Eq==pChild->Length) + { + return pChild; + } + // old child needs to be child of new child! + + // make new child, redo pChild as child of new child... + BlechNode *pNode = new BlechNode(0,&Tree[nRoot],String,StringType); + BLECHASSERT(pNode); + if (pNode->pNext=pChild->pNext) + pNode->pNext->pPrev=pNode; + if (pNode->pPrev=pChild->pPrev) + pNode->pPrev->pNext=pNode; + else + Tree[nRoot]=pNode; + pChild->pNext=0; + pChild->pPrev=0; + + pChild->pParent=pNode; + pNode->pChildren=pChild; + memmove(pChild->pString,&pChild->pString[Eq],pChild->Length-Eq+1); + pChild->Length-=Eq; + + return pNode; + // and return that new child + } + else if (Eq==pChild->Length) + { + // easy one + return pChild->AddChild(&String[Eq],StringType); + } + // both children (new and old) need to be children of a new child + + // make new child, redo pChild as child of new child... + char Temp=pChild->pString[Eq]; + pChild->pString[Eq]=0; + BlechNode *pNode = new BlechNode(0,&Tree[nRoot],pChild->pString,StringType); + pChild->pString[Eq]=Temp; + BLECHASSERT(pNode); + if (pNode->pNext=pChild->pNext) + pNode->pNext->pPrev=pNode; + if (pNode->pPrev=pChild->pPrev) + pNode->pPrev->pNext=pNode; + else + Tree[nRoot]=pNode; + pChild->pNext=0; + pChild->pPrev=0; + + + pChild->pParent=pNode; + pNode->pChildren=pChild; + + memmove(pChild->pString,&pChild->pString[Eq],pChild->Length-Eq+1); + pChild->Length-=Eq; + return pNode->AddChild(&String[Eq],StringType); + // and return a very new child! + } + } + else + { + if (!strcmp(pChild->pString,String)) + return pChild; + } + } + pChild=pChild->pNext; + } + + + + BlechNode *pNode = new BlechNode(0,&Tree[nRoot],String,StringType); + BLECHASSERT(pNode); + + pNode->pNext=Tree[nRoot]; + if (Tree[nRoot]) + Tree[nRoot]->pPrev=pNode; + Tree[nRoot]=pNode; + + return pNode; + } + + BlechNode *AddNode(BlechNode *pNode, char *StringBegin, char *StringEnd, eBlechStringType StringType) + { + BlechDebug("AddNode(%X,%s,%X,%d)",pNode,StringBegin,StringEnd,StringType); + BLECHASSERT(StringBegin && *StringBegin); + BLECHASSERT(StringEnd); + + unsigned long Len=(unsigned long)(StringEnd-StringBegin); + char *String=(char*)malloc(Len+1); + memcpy(String,StringBegin,Len); + String[Len]=0; + + if (!pNode) + { + // find and/or create new root + unsigned long Root; + if (StringType!=BST_NORMAL) + Root=0; + else + { + Root=(unsigned char)*String; +#ifndef BLECH_CASE_SENSITIVE + if (Root>='a' && Root<='z') + Root-=32; +#endif + } + +// if (BlechNode *pFound=FindNode(Root,String,StringType)) +// return pFound; + BlechNode *pNew=AddNode(Root,String,StringType); + free(String); + return pNew; + } + else + { + // attach to this node + + // create new + BlechNode *pNew=pNode->AddChild(String,StringType); + free(String); + return pNew; + } + } + + inline void Initialize() + { + BlechDebugFull("Initialize()"); + strcpy(Version,BLECHVERSION); // store version string always + BlechDebug(Version); + LastID=0; + pExecuteList=0; + for (unsigned long N = 0 ; N < 256 ; N++) + { + Tree[N]=0; + } + } + + BlechNode *Tree[256]; + +// std::map ExactMatch; + + BLECHEVENTMAP Event; + + unsigned long LastID; + + char PrintVarDelimiter; + char ScanVarDelimiter; + + fBlechVariableValue VariableValue; + PBLECHEXECUTE pExecuteList; +}; + + diff --git a/client_files/native_autoloot/eq-core-dll/README.md b/client_files/native_autoloot/eq-core-dll/README.md new file mode 100644 index 0000000000..31a7541d86 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/README.md @@ -0,0 +1,15 @@ +# eq-core-dll +Core DLL for EverQuest to do patching, opt in to features + +## Requirements +- Visual Studio 2022 or 2019 (2017 in theory could work but attempting was a lot of linker errors not worth fixing) +- Windows 10 SDK (You can find it via the Visual Studio Installer program, modify, individual components, if you get an error about it on compile) + +## Usage + +- Fork this repo (or clone, and make your copy private) +- Open the eq-core-dll-visualstudio20##.sln file (based on version you have installed) +- Click Build, verify success +- Find src/_options.h, and set values to true where you want enabled, or follow instructions for custom values +- Click Build again, verify success +- Copy bin/dinput8.dll to your eq client directory \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/bin/dinput8.dll b/client_files/native_autoloot/eq-core-dll/bin/dinput8.dll new file mode 100644 index 0000000000..086534fab9 Binary files /dev/null and b/client_files/native_autoloot/eq-core-dll/bin/dinput8.dll differ diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/.gitignore b/client_files/native_autoloot/eq-core-dll/dependencies/.gitignore new file mode 100644 index 0000000000..cd108f176c --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/.gitignore @@ -0,0 +1 @@ +!*.lib \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/detours/inc/detours.h b/client_files/native_autoloot/eq-core-dll/dependencies/detours/inc/detours.h new file mode 100644 index 0000000000..e9acca5926 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/detours/inc/detours.h @@ -0,0 +1,616 @@ +////////////////////////////////////////////////////////////////////////////// +// +// File: detours.h +// Module: detours.lib +// +// Detours for binary functions. Version 1.5 (Build 46) +// +// Copyright 1995-2001, Microsoft Corporation +// + +#pragma once +#ifndef _DETOURS_H_ +#define _DETOURS_H_ + +#pragma comment(lib, "detours") + +////////////////////////////////////////////////////////////////////////////// +// +#ifndef GUID_DEFINED +#define GUID_DEFINED +typedef struct _GUID +{ + DWORD Data1; + WORD Data2; + WORD Data3; + BYTE Data4[ 8 ]; +} GUID; +#endif // !GUID_DEFINED + +#if defined(__cplusplus) +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID & +#endif // !_REFGUID_DEFINED +#else // !__cplusplus +#ifndef _REFGUID_DEFINED +#define _REFGUID_DEFINED +#define REFGUID const GUID * const +#endif // !_REFGUID_DEFINED +#endif // !__cplusplus +// +////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +/////////////////////////////////////////////////// Instruction Target Macros. +// +#define DETOUR_INSTRUCTION_TARGET_NONE ((PBYTE)0) +#define DETOUR_INSTRUCTION_TARGET_DYNAMIC ((PBYTE)~0ul) + +/////////////////////////////////////////////////////////// Trampoline Macros. +// +// DETOUR_TRAMPOLINE(trampoline_prototype, target_name) +// +// The naked trampoline must be at least DETOUR_TRAMPOLINE_SIZE bytes. +// +#define DETOUR_TRAMPOLINE_SIZE 32 +#define DETOUR_SECTION_HEADER_SIGNATURE 0x00727444 // "Dtr\0" + +#define DETOUR_TRAMPOLINE(trampoline,target) \ +static PVOID __fastcall _Detours_GetVA_##target(VOID) \ +{ \ + return ⌖ \ +} \ +\ +__declspec(naked) trampoline \ +{ \ + __asm { nop };\ + __asm { nop };\ + __asm { call _Detours_GetVA_##target };\ + __asm { jmp eax };\ + __asm { ret };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ +} + +#define DETOUR_TRAMPOLINE_EMPTY(trampoline) \ +__declspec(naked) trampoline \ +{ \ + __asm { nop };\ + __asm { nop };\ + __asm { xor eax, eax };\ + __asm { mov eax, [eax] };\ + __asm { ret };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ + __asm { nop };\ +} + +/////////////////////////////////////////////////////////// Binary Structures. +// +#pragma pack(push, 8) +typedef struct _DETOUR_SECTION_HEADER +{ + DWORD cbHeaderSize; + DWORD nSignature; + DWORD nDataOffset; + DWORD cbDataSize; + + DWORD nOriginalImportVirtualAddress; + DWORD nOriginalImportSize; + DWORD nOriginalBoundImportVirtualAddress; + DWORD nOriginalBoundImportSize; + + DWORD nOriginalIatVirtualAddress; + DWORD nOriginalIatSize; + DWORD nOriginalSizeOfImage; + DWORD nReserve; +} DETOUR_SECTION_HEADER, *PDETOUR_SECTION_HEADER; + +typedef struct _DETOUR_SECTION_RECORD +{ + DWORD cbBytes; + DWORD nReserved; + GUID guid; +} DETOUR_SECTION_RECORD, *PDETOUR_SECTION_RECORD; +#pragma pack(pop) + +#define DETOUR_SECTION_HEADER_DECLARE(cbSectionSize) \ +{ \ + sizeof(DETOUR_SECTION_HEADER),\ + DETOUR_SECTION_HEADER_SIGNATURE,\ + sizeof(DETOUR_SECTION_HEADER),\ + (cbSectionSize),\ + \ + 0,\ + 0,\ + 0,\ + 0,\ + \ + 0,\ + 0,\ + 0,\ + 0,\ +} + +///////////////////////////////////////////////////////////// Binary Typedefs. +// +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_BYWAY_CALLBACK)(PVOID pContext, + PCHAR pszFile, + PCHAR *ppszOutFile); +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FILE_CALLBACK)(PVOID pContext, + PCHAR pszOrigFile, + PCHAR pszFile, + PCHAR *ppszOutFile); +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_SYMBOL_CALLBACK)(PVOID pContext, + DWORD nOrdinal, + PCHAR pszOrigSymbol, + PCHAR pszSymbol, + PCHAR *ppszOutSymbol); +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_FINAL_CALLBACK)(PVOID pContext); +typedef BOOL (CALLBACK *PF_DETOUR_BINARY_EXPORT_CALLBACK)(PVOID pContext, + DWORD nOrdinal, + PCHAR pszName, + PBYTE pbCode); + +typedef VOID * PDETOUR_BINARY; +typedef VOID * PDETOUR_LOADED_BINARY; + +//////////////////////////////////////////////////////// Trampoline Functions. +// +PBYTE WINAPI DetourFunction(PBYTE pbTargetFunction, + PBYTE pbDetourFunction); + +BOOL WINAPI DetourFunctionWithEmptyTrampoline(PBYTE pbTrampoline, + PBYTE pbTarget, + PBYTE pbDetour); + +BOOL WINAPI DetourFunctionWithEmptyTrampolineEx(PBYTE pbTrampoline, + PBYTE pbTarget, + PBYTE pbDetour, + PBYTE *ppbRealTrampoline, + PBYTE *ppbRealTarget, + PBYTE *ppbRealDetour); + +BOOL WINAPI DetourFunctionWithTrampoline(PBYTE pbTrampoline, + PBYTE pbDetour); + +BOOL WINAPI DetourFunctionWithTrampolineEx(PBYTE pbTrampoline, + PBYTE pbDetour, + PBYTE *ppbRealTrampoline, + PBYTE *ppbRealTarget); + +BOOL WINAPI DetourRemove(PBYTE pbTrampoline, PBYTE pbDetour); + +////////////////////////////////////////////////////////////// Code Functions. +// +PBYTE WINAPI DetourFindFunction(PCHAR pszModule, PCHAR pszFunction); +PBYTE WINAPI DetourGetFinalCode(PBYTE pbCode, BOOL fSkipJmp); + +PBYTE WINAPI DetourCopyInstruction(PBYTE pbDst, PBYTE pbSrc, PBYTE *ppbTarget); +PBYTE WINAPI DetourCopyInstructionEx(PBYTE pbDst, + PBYTE pbSrc, + PBYTE *ppbTarget, + LONG *plExtra); + +///////////////////////////////////////////////////// Loaded Binary Functions. +// +HMODULE WINAPI DetourEnumerateModules(HMODULE hModuleLast); +PBYTE WINAPI DetourGetEntryPoint(HMODULE hModule); +BOOL WINAPI DetourEnumerateExports(HMODULE hModule, + PVOID pContext, + PF_DETOUR_BINARY_EXPORT_CALLBACK pfExport); + +PBYTE WINAPI DetourFindPayload(HMODULE hModule, REFGUID rguid, DWORD *pcbData); +DWORD WINAPI DetourGetSizeOfPayloads(HMODULE hModule); + +///////////////////////////////////////////////// Persistent Binary Functions. +// +BOOL WINAPI DetourBinaryBindA(PCHAR pszFile, PCHAR pszDll, PCHAR pszPath); +BOOL WINAPI DetourBinaryBindW(PWCHAR pwzFile, PWCHAR pwzDll, PWCHAR pwzPath); +#ifdef UNICODE +#define DetourBinaryBind DetourBinaryBindW +#else +#define DetourBinaryBind DetourBinaryBindA +#endif // !UNICODE + +PDETOUR_BINARY WINAPI DetourBinaryOpen(HANDLE hFile); +PBYTE WINAPI DetourBinaryEnumeratePayloads(PDETOUR_BINARY pBinary, + GUID *pGuid, + DWORD *pcbData, + DWORD *pnIterator); +PBYTE WINAPI DetourBinaryFindPayload(PDETOUR_BINARY pBinary, + REFGUID rguid, + DWORD *pcbData); +PBYTE WINAPI DetourBinarySetPayload(PDETOUR_BINARY pBinary, + REFGUID rguid, + PBYTE pbData, + DWORD cbData); +BOOL WINAPI DetourBinaryDeletePayload(PDETOUR_BINARY pBinary, REFGUID rguid); +BOOL WINAPI DetourBinaryPurgePayloads(PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryResetImports(PDETOUR_BINARY pBinary); +BOOL WINAPI DetourBinaryEditImports(PDETOUR_BINARY pBinary, + PVOID pContext, + PF_DETOUR_BINARY_BYWAY_CALLBACK pfByway, + PF_DETOUR_BINARY_FILE_CALLBACK pfFile, + PF_DETOUR_BINARY_SYMBOL_CALLBACK pfSymbol, + PF_DETOUR_BINARY_FINAL_CALLBACK pfFinal); +BOOL WINAPI DetourBinaryWrite(PDETOUR_BINARY pBinary, HANDLE hFile); +BOOL WINAPI DetourBinaryClose(PDETOUR_BINARY pBinary); + +/////////////////////////////////////////////// First Chance Exception Filter. +// +LPTOP_LEVEL_EXCEPTION_FILTER WINAPI +DetourFirstChanceExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelFilter); + +///////////////////////////////////////////////// Create Process & Inject Dll. +// +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEA) + (LPCSTR lpApplicationName, + LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation); + +typedef BOOL (WINAPI *PDETOUR_CREATE_PROCESS_ROUTINEW) + (LPCWSTR lpApplicationName, + LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation); + +BOOL WINAPI DetourCreateProcessWithDllA(LPCSTR lpApplicationName, + LPSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCSTR lpCurrentDirectory, + LPSTARTUPINFOA lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation, + LPCSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEA + pfCreateProcessA); + +BOOL WINAPI DetourCreateProcessWithDllW(LPCWSTR lpApplicationName, + LPWSTR lpCommandLine, + LPSECURITY_ATTRIBUTES lpProcessAttributes, + LPSECURITY_ATTRIBUTES lpThreadAttributes, + BOOL bInheritHandles, + DWORD dwCreationFlags, + LPVOID lpEnvironment, + LPCWSTR lpCurrentDirectory, + LPSTARTUPINFOW lpStartupInfo, + LPPROCESS_INFORMATION lpProcessInformation, + LPCWSTR lpDllName, + PDETOUR_CREATE_PROCESS_ROUTINEW + pfCreateProcessW); + +#ifdef UNICODE +#define DetourCreateProcessWithDll DetourCreateProcessWithDllW +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEW +#else +#define DetourCreateProcessWithDll DetourCreateProcessWithDllA +#define PDETOUR_CREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINEA +#endif // !UNICODE + +BOOL WINAPI DetourContinueProcessWithDllA(HANDLE hProcess, LPCSTR lpDllName); +BOOL WINAPI DetourContinueProcessWithDllW(HANDLE hProcess, LPCWSTR lpDllName); + +#ifdef UNICODE +#define DetourContinueProcessWithDll DetourContinueProcessWithDllW +#else +#define DetourContinueProcessWithDll DetourContinueProcessWithDllA +#endif // !UNICODE +// +////////////////////////////////////////////////////////////////////////////// +#ifdef __cplusplus +} +#endif // __cplusplus + +/////////////////////////////////////////////////////////////////// Old Names. +// +#define ContinueProcessWithDll DetourContinueProcessWithDll +#define ContinueProcessWithDllA DetourContinueProcessWithDllA +#define ContinueProcessWithDllW DetourContinueProcessWithDllW +#define CreateProcessWithDll DetourCreateProcessWithDll +#define CreateProcessWithDllA DetourCreateProcessWithDllA +#define CreateProcessWithDllW DetourCreateProcessWithDllW +#define DETOUR_TRAMPOLINE_WO_TARGET DETOUR_TRAMPOLINE_EMPTY +#define DetourBinaryPurgePayload DetourBinaryPurgePayloads +#define DetourEnumerateExportsForInstance DetourEnumerateExports +#define DetourEnumerateInstances DetourEnumerateModules +#define DetourFindEntryPointForInstance DetourGetEntryPoint +#define DetourFindFinalCode DetourGetFinalCode +#define DetourFindPayloadInBinary DetourFindPayload +#define DetourGetSizeOfBinary DetourGetSizeOfPayloads +#define DetourRemoveWithTrampoline DetourRemove +#define PCREATE_PROCESS_ROUTINE PDETOUR_CREATE_PROCESS_ROUTINE +#define PCREATE_PROCESS_ROUTINEA PDETOUR_CREATE_PROCESS_ROUTINEA +#define PCREATE_PROCESS_ROUTINEW PDETOUR_CREATE_PROCESS_ROUTINEW +// + +//////////////////////////////////////////////// Detours Internal Definitions. +// +#ifdef __cplusplus +#ifdef DETOURS_INTERNAL + +////////////////////////////////////////////////////////////////////////////// +// +#ifdef IMAGEAPI // defined by IMAGEHLP.H +typedef LPAPI_VERSION (NTAPI *PF_ImagehlpApiVersionEx)(LPAPI_VERSION AppVersion); + +typedef BOOL (NTAPI *PF_SymInitialize)(IN HANDLE hProcess, + IN LPSTR UserSearchPath, + IN BOOL fInvadeProcess); +typedef DWORD (NTAPI *PF_SymSetOptions)(IN DWORD SymOptions); +typedef DWORD (NTAPI *PF_SymGetOptions)(VOID); +typedef BOOL (NTAPI *PF_SymLoadModule)(IN HANDLE hProcess, + IN HANDLE hFile, + IN PSTR ImageName, + IN PSTR ModuleName, + IN DWORD BaseOfDll, + IN DWORD SizeOfDll); +typedef BOOL (NTAPI *PF_SymGetModuleInfo)(IN HANDLE hProcess, + IN DWORD dwAddr, + OUT PIMAGEHLP_MODULE ModuleInfo); +typedef BOOL (NTAPI *PF_SymGetSymFromName)(IN HANDLE hProcess, + IN LPSTR Name, + OUT PIMAGEHLP_SYMBOL Symbol); +typedef BOOL (NTAPI *PF_BindImage)(IN LPSTR pszImageName, + IN LPSTR pszDllPath, + IN LPSTR pszSymbolPath); + +typedef struct _DETOUR_SYM_INFO +{ + HANDLE hProcess; + HMODULE hImageHlp; + PF_ImagehlpApiVersionEx pfImagehlpApiVersionEx; + PF_SymInitialize pfSymInitialize; + PF_SymSetOptions pfSymSetOptions; + PF_SymGetOptions pfSymGetOptions; + PF_SymLoadModule pfSymLoadModule; + PF_SymGetModuleInfo pfSymGetModuleInfo; + PF_SymGetSymFromName pfSymGetSymFromName; + PF_BindImage pfBindImage; +} DETOUR_SYM_INFO, *PDETOUR_SYM_INFO; + +PDETOUR_SYM_INFO DetourLoadImageHlp(VOID); + +#endif // IMAGEAPI + +////////////////////////////////////////////////////////////////////////////// +// +class CDetourEnableWriteOnCodePage +{ +public: + CDetourEnableWriteOnCodePage(PBYTE pbCode, LONG cbCode = DETOUR_TRAMPOLINE_SIZE) + { + m_pbCode = pbCode; + m_cbCode = cbCode; + m_dwOldPerm = 0; + m_hProcess = GetCurrentProcess(); + + if (m_pbCode && m_cbCode) { + if (!FlushInstructionCache(m_hProcess, pbCode, cbCode)) { + return; + } + if (!VirtualProtect(pbCode, + cbCode, + PAGE_EXECUTE_READWRITE, + &m_dwOldPerm)) { + return; + } + } + } + + ~CDetourEnableWriteOnCodePage() + { + if (m_dwOldPerm && m_pbCode && m_cbCode) { + DWORD dwTemp = 0; + if (!FlushInstructionCache(m_hProcess, m_pbCode, m_cbCode)) { + return; + } + if (!VirtualProtect(m_pbCode, m_cbCode, m_dwOldPerm, &dwTemp)) { + return; + } + } + } + + BOOL SetPermission(DWORD dwPerms) + { + if (m_dwOldPerm && m_pbCode && m_cbCode) { + m_dwOldPerm = dwPerms; + return TRUE; + } + return FALSE; + } + + BOOL IsValid(VOID) + { + return m_pbCode && m_cbCode && m_dwOldPerm; + } + +private: + HANDLE m_hProcess; + PBYTE m_pbCode; + LONG m_cbCode; + DWORD m_dwOldPerm; +}; + +////////////////////////////////////////////////////////////////////////////// +// +inline PBYTE DetourGenMovEax(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xB8; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEbx(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBB; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEcx(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xB9; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEdx(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBA; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEsi(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBE; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEdi(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBF; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEbp(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBD; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenMovEsp(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0xBC; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenPush(PBYTE pbCode, UINT32 nValue) +{ + *pbCode++ = 0x68; + *((UINT32*&)pbCode)++ = nValue; + return pbCode; +} + +inline PBYTE DetourGenPushad(PBYTE pbCode) +{ + *pbCode++ = 0x60; + return pbCode; +} + +inline PBYTE DetourGenPopad(PBYTE pbCode) +{ + *pbCode++ = 0x61; + return pbCode; +} + +inline PBYTE DetourGenJmp(PBYTE pbCode, PBYTE pbJmpDst, PBYTE pbJmpSrc = 0) +{ + if (pbJmpSrc == 0) { + pbJmpSrc = pbCode; + } + *pbCode++ = 0xE9; + *((INT32*&)pbCode)++ = pbJmpDst - (pbJmpSrc + 5); + return pbCode; +} + +inline PBYTE DetourGenCall(PBYTE pbCode, PBYTE pbJmpDst, PBYTE pbJmpSrc = 0) +{ + if (pbJmpSrc == 0) { + pbJmpSrc = pbCode; + } + *pbCode++ = 0xE8; + *((INT32*&)pbCode)++ = pbJmpDst - (pbJmpSrc + 5); + return pbCode; +} + +inline PBYTE DetourGenBreak(PBYTE pbCode) +{ + *pbCode++ = 0xcc; + return pbCode; +} + +inline PBYTE DetourGenRet(PBYTE pbCode) +{ + *pbCode++ = 0xc3; + return pbCode; +} + +inline PBYTE DetourGenNop(PBYTE pbCode) +{ + *pbCode++ = 0x90; + return pbCode; +} +#endif DETOURS_INTERAL +#endif // __cplusplus + +#endif // _DETOURS_H_ +// +//////////////////////////////////////////////////////////////// End of File. diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/detours/lib/detours.lib b/client_files/native_autoloot/eq-core-dll/dependencies/detours/lib/detours.lib new file mode 100644 index 0000000000..e728db400d Binary files /dev/null and b/client_files/native_autoloot/eq-core-dll/dependencies/detours/lib/detours.lib differ diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3d9.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3d9.h new file mode 100644 index 0000000000..880e43525d --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3d9.h @@ -0,0 +1,2582 @@ +/*==========================================================================; + * + * Copyright (C) Microsoft Corporation. All Rights Reserved. + * + * File: d3d9.h + * Content: Direct3D include file + * + ****************************************************************************/ + +#ifndef _D3D9_H_ +#define _D3D9_H_ + +#ifndef DIRECT3D_VERSION +#define DIRECT3D_VERSION 0x0900 +#endif //DIRECT3D_VERSION + +// include this file content only if compiling for DX9 interfaces +#if(DIRECT3D_VERSION >= 0x0900) + + +/* This identifier is passed to Direct3DCreate9 in order to ensure that an + * application was built against the correct header files. This number is + * incremented whenever a header (or other) change would require applications + * to be rebuilt. If the version doesn't match, Direct3DCreate9 will fail. + * (The number itself has no meaning.)*/ + +#ifdef D3D_DEBUG_INFO +#define D3D_SDK_VERSION (32 | 0x80000000) +#define D3D9b_SDK_VERSION (31 | 0x80000000) + +#else +#define D3D_SDK_VERSION 32 +#define D3D9b_SDK_VERSION 31 +#endif + + +#include + +#define COM_NO_WINDOWS_H +#include + +#include + +#if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500) + #define HMONITOR_DECLARED + DECLARE_HANDLE(HMONITOR); +#endif + +#define D3DAPI WINAPI + +/* + * Interface IID's + */ +#if defined( _WIN32 ) && !defined( _NO_COM) + +/* IID_IDirect3D9 */ +/* {81BDCBCA-64D4-426d-AE8D-AD0147F4275C} */ +DEFINE_GUID(IID_IDirect3D9, 0x81bdcbca, 0x64d4, 0x426d, 0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c); + +/* IID_IDirect3DDevice9 */ +// {D0223B96-BF7A-43fd-92BD-A43B0D82B9EB} */ +DEFINE_GUID(IID_IDirect3DDevice9, 0xd0223b96, 0xbf7a, 0x43fd, 0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb); + +/* IID_IDirect3DResource9 */ +// {05EEC05D-8F7D-4362-B999-D1BAF357C704} +DEFINE_GUID(IID_IDirect3DResource9, 0x5eec05d, 0x8f7d, 0x4362, 0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x4); + +/* IID_IDirect3DBaseTexture9 */ +/* {580CA87E-1D3C-4d54-991D-B7D3E3C298CE} */ +DEFINE_GUID(IID_IDirect3DBaseTexture9, 0x580ca87e, 0x1d3c, 0x4d54, 0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce); + +/* IID_IDirect3DTexture9 */ +/* {85C31227-3DE5-4f00-9B3A-F11AC38C18B5} */ +DEFINE_GUID(IID_IDirect3DTexture9, 0x85c31227, 0x3de5, 0x4f00, 0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5); + +/* IID_IDirect3DCubeTexture9 */ +/* {FFF32F81-D953-473a-9223-93D652ABA93F} */ +DEFINE_GUID(IID_IDirect3DCubeTexture9, 0xfff32f81, 0xd953, 0x473a, 0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f); + +/* IID_IDirect3DVolumeTexture9 */ +/* {2518526C-E789-4111-A7B9-47EF328D13E6} */ +DEFINE_GUID(IID_IDirect3DVolumeTexture9, 0x2518526c, 0xe789, 0x4111, 0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6); + +/* IID_IDirect3DVertexBuffer9 */ +/* {B64BB1B5-FD70-4df6-BF91-19D0A12455E3} */ +DEFINE_GUID(IID_IDirect3DVertexBuffer9, 0xb64bb1b5, 0xfd70, 0x4df6, 0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3); + +/* IID_IDirect3DIndexBuffer9 */ +/* {7C9DD65E-D3F7-4529-ACEE-785830ACDE35} */ +DEFINE_GUID(IID_IDirect3DIndexBuffer9, 0x7c9dd65e, 0xd3f7, 0x4529, 0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35); + +/* IID_IDirect3DSurface9 */ +/* {0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B} */ +DEFINE_GUID(IID_IDirect3DSurface9, 0xcfbaf3a, 0x9ff6, 0x429a, 0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b); + +/* IID_IDirect3DVolume9 */ +/* {24F416E6-1F67-4aa7-B88E-D33F6F3128A1} */ +DEFINE_GUID(IID_IDirect3DVolume9, 0x24f416e6, 0x1f67, 0x4aa7, 0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1); + +/* IID_IDirect3DSwapChain9 */ +/* {794950F2-ADFC-458a-905E-10A10B0B503B} */ +DEFINE_GUID(IID_IDirect3DSwapChain9, 0x794950f2, 0xadfc, 0x458a, 0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b); + +/* IID_IDirect3DVertexDeclaration9 */ +/* {DD13C59C-36FA-4098-A8FB-C7ED39DC8546} */ +DEFINE_GUID(IID_IDirect3DVertexDeclaration9, 0xdd13c59c, 0x36fa, 0x4098, 0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46); + +/* IID_IDirect3DVertexShader9 */ +/* {EFC5557E-6265-4613-8A94-43857889EB36} */ +DEFINE_GUID(IID_IDirect3DVertexShader9, 0xefc5557e, 0x6265, 0x4613, 0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36); + +/* IID_IDirect3DPixelShader9 */ +/* {6D3BDBDC-5B02-4415-B852-CE5E8BCCB289} */ +DEFINE_GUID(IID_IDirect3DPixelShader9, 0x6d3bdbdc, 0x5b02, 0x4415, 0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89); + +/* IID_IDirect3DStateBlock9 */ +/* {B07C4FE5-310D-4ba8-A23C-4F0F206F218B} */ +DEFINE_GUID(IID_IDirect3DStateBlock9, 0xb07c4fe5, 0x310d, 0x4ba8, 0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b); + +/* IID_IDirect3DQuery9 */ +/* {d9771460-a695-4f26-bbd3-27b840b541cc} */ +DEFINE_GUID(IID_IDirect3DQuery9, 0xd9771460, 0xa695, 0x4f26, 0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc); + + +/* IID_HelperName */ +/* {E4A36723-FDFE-4b22-B146-3C04C07F4CC8} */ +DEFINE_GUID(IID_HelperName, 0xe4a36723, 0xfdfe, 0x4b22, 0xb1, 0x46, 0x3c, 0x4, 0xc0, 0x7f, 0x4c, 0xc8); + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +/* IID_IDirect3D9Ex */ +/* {02177241-69FC-400C-8FF1-93A44DF6861D} */ +DEFINE_GUID(IID_IDirect3D9Ex, 0x02177241, 0x69FC, 0x400C, 0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D); + +/* IID_IDirect3DDevice9Ex */ +// {B18B10CE-2649-405a-870F-95F777D4313A} +DEFINE_GUID(IID_IDirect3DDevice9Ex, 0xb18b10ce, 0x2649, 0x405a, 0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a); + +/* IID_IDirect3DSwapChain9Ex */ +/* {91886CAF-1C3D-4d2e-A0AB-3E4C7D8D3303} */ +DEFINE_GUID(IID_IDirect3DSwapChain9Ex, 0x91886caf, 0x1c3d, 0x4d2e, 0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x3); + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + +#endif + +#ifdef __cplusplus + +#ifndef DECLSPEC_UUID +#if _MSC_VER >= 1100 +#define DECLSPEC_UUID(x) __declspec(uuid(x)) +#else +#define DECLSPEC_UUID(x) +#endif +#endif + +interface DECLSPEC_UUID("81BDCBCA-64D4-426d-AE8D-AD0147F4275C") IDirect3D9; +interface DECLSPEC_UUID("D0223B96-BF7A-43fd-92BD-A43B0D82B9EB") IDirect3DDevice9; + +interface DECLSPEC_UUID("B07C4FE5-310D-4ba8-A23C-4F0F206F218B") IDirect3DStateBlock9; +interface DECLSPEC_UUID("05EEC05D-8F7D-4362-B999-D1BAF357C704") IDirect3DResource9; +interface DECLSPEC_UUID("DD13C59C-36FA-4098-A8FB-C7ED39DC8546") IDirect3DVertexDeclaration9; +interface DECLSPEC_UUID("EFC5557E-6265-4613-8A94-43857889EB36") IDirect3DVertexShader9; +interface DECLSPEC_UUID("6D3BDBDC-5B02-4415-B852-CE5E8BCCB289") IDirect3DPixelShader9; +interface DECLSPEC_UUID("580CA87E-1D3C-4d54-991D-B7D3E3C298CE") IDirect3DBaseTexture9; +interface DECLSPEC_UUID("85C31227-3DE5-4f00-9B3A-F11AC38C18B5") IDirect3DTexture9; +interface DECLSPEC_UUID("2518526C-E789-4111-A7B9-47EF328D13E6") IDirect3DVolumeTexture9; +interface DECLSPEC_UUID("FFF32F81-D953-473a-9223-93D652ABA93F") IDirect3DCubeTexture9; + +interface DECLSPEC_UUID("B64BB1B5-FD70-4df6-BF91-19D0A12455E3") IDirect3DVertexBuffer9; +interface DECLSPEC_UUID("7C9DD65E-D3F7-4529-ACEE-785830ACDE35") IDirect3DIndexBuffer9; + +interface DECLSPEC_UUID("0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B") IDirect3DSurface9; +interface DECLSPEC_UUID("24F416E6-1F67-4aa7-B88E-D33F6F3128A1") IDirect3DVolume9; + +interface DECLSPEC_UUID("794950F2-ADFC-458a-905E-10A10B0B503B") IDirect3DSwapChain9; +interface DECLSPEC_UUID("d9771460-a695-4f26-bbd3-27b840b541cc") IDirect3DQuery9; + + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +interface DECLSPEC_UUID("02177241-69FC-400C-8FF1-93A44DF6861D") IDirect3D9Ex; +interface DECLSPEC_UUID("B18B10CE-2649-405a-870F-95F777D4313A") IDirect3DDevice9Ex; +interface DECLSPEC_UUID("91886CAF-1C3D-4d2e-A0AB-3E4C7D8D3303") IDirect3DSwapChain9Ex; + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + +#if defined(_COM_SMARTPTR_TYPEDEF) +_COM_SMARTPTR_TYPEDEF(IDirect3D9, __uuidof(IDirect3D9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DDevice9, __uuidof(IDirect3DDevice9)); + +_COM_SMARTPTR_TYPEDEF(IDirect3DStateBlock9, __uuidof(IDirect3DStateBlock9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DResource9, __uuidof(IDirect3DResource9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DVertexDeclaration9, __uuidof(IDirect3DVertexDeclaration9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DVertexShader9, __uuidof(IDirect3DVertexShader9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DPixelShader9, __uuidof(IDirect3DPixelShader9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DBaseTexture9, __uuidof(IDirect3DBaseTexture9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DTexture9, __uuidof(IDirect3DTexture9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DVolumeTexture9, __uuidof(IDirect3DVolumeTexture9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DCubeTexture9, __uuidof(IDirect3DCubeTexture9)); + +_COM_SMARTPTR_TYPEDEF(IDirect3DVertexBuffer9, __uuidof(IDirect3DVertexBuffer9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DIndexBuffer9, __uuidof(IDirect3DIndexBuffer9)); + +_COM_SMARTPTR_TYPEDEF(IDirect3DSurface9, __uuidof(IDirect3DSurface9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DVolume9, __uuidof(IDirect3DVolume9)); + +_COM_SMARTPTR_TYPEDEF(IDirect3DSwapChain9, __uuidof(IDirect3DSwapChain9)); +_COM_SMARTPTR_TYPEDEF(IDirect3DQuery9, __uuidof(IDirect3DQuery9)); + + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +_COM_SMARTPTR_TYPEDEF(IDirect3D9Ex, __uuidof(IDirect3D9Ex)); +_COM_SMARTPTR_TYPEDEF(IDirect3DDevice9Ex, __uuidof(IDirect3DDevice9Ex)); +_COM_SMARTPTR_TYPEDEF(IDirect3DSwapChain9Ex, __uuidof(IDirect3DSwapChain9Ex)); + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + +#endif + +#endif + + +typedef interface IDirect3D9 IDirect3D9; +typedef interface IDirect3DDevice9 IDirect3DDevice9; +typedef interface IDirect3DStateBlock9 IDirect3DStateBlock9; +typedef interface IDirect3DVertexDeclaration9 IDirect3DVertexDeclaration9; +typedef interface IDirect3DVertexShader9 IDirect3DVertexShader9; +typedef interface IDirect3DPixelShader9 IDirect3DPixelShader9; +typedef interface IDirect3DResource9 IDirect3DResource9; +typedef interface IDirect3DBaseTexture9 IDirect3DBaseTexture9; +typedef interface IDirect3DTexture9 IDirect3DTexture9; +typedef interface IDirect3DVolumeTexture9 IDirect3DVolumeTexture9; +typedef interface IDirect3DCubeTexture9 IDirect3DCubeTexture9; +typedef interface IDirect3DVertexBuffer9 IDirect3DVertexBuffer9; +typedef interface IDirect3DIndexBuffer9 IDirect3DIndexBuffer9; +typedef interface IDirect3DSurface9 IDirect3DSurface9; +typedef interface IDirect3DVolume9 IDirect3DVolume9; +typedef interface IDirect3DSwapChain9 IDirect3DSwapChain9; +typedef interface IDirect3DQuery9 IDirect3DQuery9; + + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +typedef interface IDirect3D9Ex IDirect3D9Ex; +typedef interface IDirect3DDevice9Ex IDirect3DDevice9Ex; +typedef interface IDirect3DSwapChain9Ex IDirect3DSwapChain9Ex; + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + +#include "d3d9types.h" +#include "d3d9caps.h" + + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * DLL Function for creating a Direct3D9 object. This object supports + * enumeration and allows the creation of Direct3DDevice9 objects. + * Pass the value of the constant D3D_SDK_VERSION to this function, so + * that the run-time can validate that your application was compiled + * against the right headers. + */ + +IDirect3D9 * WINAPI Direct3DCreate9(UINT SDKVersion); + +/* + * Stubs for graphics profiling. + */ + +int WINAPI D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName ); +int WINAPI D3DPERF_EndEvent( void ); +void WINAPI D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName ); +void WINAPI D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName ); +BOOL WINAPI D3DPERF_QueryRepeatFrame( void ); + +void WINAPI D3DPERF_SetOptions( DWORD dwOptions ); +DWORD WINAPI D3DPERF_GetStatus( void ); + +/* + * Direct3D interfaces + */ + + + + + + +#undef INTERFACE +#define INTERFACE IDirect3D9 + +DECLARE_INTERFACE_(IDirect3D9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3D9 methods ***/ + STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE; + STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; + STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) PURE; + STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter,D3DFORMAT Format) PURE; + STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode) PURE; + STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE; // 0x20 + STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE DevType,D3DFORMAT AdapterFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) PURE; + STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE; + STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels) PURE; + STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE; + STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) PURE; + STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps) PURE; + STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; + STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR Version; + #endif +}; + +typedef struct IDirect3D9 *LPDIRECT3D9, *PDIRECT3D9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3D9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3D9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3D9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->lpVtbl->RegisterSoftwareDevice(p,a) +#define IDirect3D9_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) +#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) +#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b) +#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d) +#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) +#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) +#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) +#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f) +#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) +#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d) +#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) +#define IDirect3D9_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) +#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) +#else +#define IDirect3D9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3D9_AddRef(p) (p)->AddRef() +#define IDirect3D9_Release(p) (p)->Release() +#define IDirect3D9_RegisterSoftwareDevice(p,a) (p)->RegisterSoftwareDevice(a) +#define IDirect3D9_GetAdapterCount(p) (p)->GetAdapterCount() +#define IDirect3D9_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) +#define IDirect3D9_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b) +#define IDirect3D9_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d) +#define IDirect3D9_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) +#define IDirect3D9_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) +#define IDirect3D9_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) +#define IDirect3D9_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f) +#define IDirect3D9_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) +#define IDirect3D9_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d) +#define IDirect3D9_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) +#define IDirect3D9_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) +#define IDirect3D9_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) +#endif + + + + + + + +/* SwapChain */ + + + + + + + + + + + + + + + +#undef INTERFACE +#define INTERFACE IDirect3DDevice9 + +DECLARE_INTERFACE_(IDirect3DDevice9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DDevice9 methods ***/ + STDMETHOD(TestCooperativeLevel)(THIS) PURE; + STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; // 0x10 + STDMETHOD(EvictManagedResources)(THIS) PURE; + STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE; + STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE; + STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain,D3DDISPLAYMODE* pMode) PURE; // 0x20 + STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE; + STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,IDirect3DSurface9* pCursorBitmap) PURE; + STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags) PURE; + STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE; // 0x30 + STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain9** pSwapChain) PURE; + STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain,IDirect3DSwapChain9** pSwapChain) PURE; + STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE; + STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; // 0x40 + STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE; + STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE; + STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain,D3DRASTER_STATUS* pRasterStatus) PURE; + STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE; // 0x50 + STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain,DWORD Flags,CONST D3DGAMMARAMP* pRamp) PURE; + STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain,D3DGAMMARAMP* pRamp) PURE; + STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture9** ppTexture,HANDLE* pSharedHandle) PURE; + STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture9** ppVolumeTexture,HANDLE* pSharedHandle) PURE; // 0x60 + STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture9** ppCubeTexture,HANDLE* pSharedHandle) PURE; + STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer9** ppVertexBuffer,HANDLE* pSharedHandle) PURE; // 0x68 + STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer9** ppIndexBuffer,HANDLE* pSharedHandle) PURE; + STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; // 0x70 + STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; + STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestinationSurface,CONST POINT* pDestPoint) PURE; + STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture,IDirect3DBaseTexture9* pDestinationTexture) PURE; + STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget,IDirect3DSurface9* pDestSurface) PURE; // 0x80 + STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain,IDirect3DSurface9* pDestSurface) PURE; + STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestSurface,CONST RECT* pDestRect,D3DTEXTUREFILTERTYPE Filter) PURE; + STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface,CONST RECT* pRect,D3DCOLOR color) PURE; // 0x8c + STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; // 0x90 + STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9* pRenderTarget) PURE; + STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9** ppRenderTarget) PURE; + STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE; + STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE; // 0xa0 + STDMETHOD(BeginScene)(THIS) PURE; + STDMETHOD(EndScene)(THIS) PURE; + STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil) PURE; + STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix) PURE; // 0xb0 + STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix) PURE; // 0xB4 + STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE; + STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE; + STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE; // 0xc0 + STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE; + STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE; + STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT9*) PURE; + STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT9*) PURE; // 0xd0 + STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE; + STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable) PURE; + STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane) PURE; + STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane) PURE; // 0xe0 + STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE; + STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD* pValue) PURE; + STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,IDirect3DStateBlock9** ppSB) PURE; + STDMETHOD(BeginStateBlock)(THIS) PURE; // 0xf0 + STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE; + STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE; + STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE; + STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9** ppTexture) PURE; // 0x100 + STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9* pTexture) PURE; + STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) PURE; + STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE; + STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD* pValue) PURE; // 0x110 + STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD Value) PURE; // 0x114 + STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE; + STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries) PURE; + STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE; // 0x120 + STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE; + STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE; + STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE; + STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE; // 0x130 + STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE; + STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE; + STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE; + STDMETHOD_(float, GetNPatchMode)(THIS) PURE; + STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE; + STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE; // 0x148 + STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; + STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; + STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer9* pDestBuffer,IDirect3DVertexDeclaration9* pVertexDecl,DWORD Flags) PURE; + STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements,IDirect3DVertexDeclaration9** ppDecl) PURE; // 0x158 + STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE; + STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE; // 0x160 + STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; + STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE; + STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction,IDirect3DVertexShader9** ppShader) PURE; + STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE; // 0x170 + STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE; + STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE; + STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE; + STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE; // 0x180 + STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE; + STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT BoolCount) PURE; + STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE; + STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride) PURE; // 0x190 + STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9** ppStreamData,UINT* pOffsetInBytes,UINT* pStride) PURE; + STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT Setting) PURE; + STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT* pSetting) PURE; + STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE; + STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE; + STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,IDirect3DPixelShader9** ppShader) PURE; + STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE; + STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE; + STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE; + STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE; + STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE; + STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE; + STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT BoolCount) PURE; + STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE; + STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE; + STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE; + STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; + STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) PURE; + + #ifdef D3D_DEBUG_INFO + D3DDEVICE_CREATION_PARAMETERS CreationParameters; + D3DPRESENT_PARAMETERS PresentParameters; + D3DDISPLAYMODE DisplayMode; + D3DCAPS9 Caps; + + UINT AvailableTextureMem; + UINT SwapChains; + UINT Textures; + UINT VertexBuffers; + UINT IndexBuffers; + UINT VertexShaders; + UINT PixelShaders; + + D3DVIEWPORT9 Viewport; + D3DMATRIX ProjectionMatrix; + D3DMATRIX ViewMatrix; + D3DMATRIX WorldMatrix; + D3DMATRIX TextureMatrices[8]; + + DWORD FVF; + UINT VertexSize; + DWORD VertexShaderVersion; + DWORD PixelShaderVersion; + BOOL SoftwareVertexProcessing; + + D3DMATERIAL9 Material; + D3DLIGHT9 Lights[16]; + BOOL LightsEnabled[16]; + + D3DGAMMARAMP GammaRamp; + RECT ScissorRect; + BOOL DialogBoxMode; + #endif +}; + +typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9, *PDIRECT3DDEVICE9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DDevice9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DDevice9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) +#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) +#define IDirect3DDevice9_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p) +#define IDirect3DDevice9_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) +#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) +#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b) +#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) +#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) +#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) +#define IDirect3DDevice9_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) +#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) +#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b) +#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p) +#define IDirect3DDevice9_Reset(p,a) (p)->lpVtbl->Reset(p,a) +#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) +#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d) +#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b) +#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a) +#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c) +#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) +#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h) +#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) +#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g) +#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) +#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f) +#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h) +#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) +#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d) +#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) +#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b) +#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b) +#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e) +#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c) +#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f) +#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) +#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b) +#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a) +#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) +#define IDirect3DDevice9_BeginScene(p) (p)->lpVtbl->BeginScene(p) +#define IDirect3DDevice9_EndScene(p) (p)->lpVtbl->EndScene(p) +#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) +#define IDirect3DDevice9_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) +#define IDirect3DDevice9_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) +#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) +#define IDirect3DDevice9_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) +#define IDirect3DDevice9_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) +#define IDirect3DDevice9_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) +#define IDirect3DDevice9_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) +#define IDirect3DDevice9_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) +#define IDirect3DDevice9_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) +#define IDirect3DDevice9_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) +#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) +#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) +#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) +#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) +#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) +#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) +#define IDirect3DDevice9_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) +#define IDirect3DDevice9_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) +#define IDirect3DDevice9_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) +#define IDirect3DDevice9_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) +#define IDirect3DDevice9_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) +#define IDirect3DDevice9_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) +#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) +#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) +#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c) +#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c) +#define IDirect3DDevice9_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) +#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) +#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) +#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) +#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) +#define IDirect3DDevice9_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a) +#define IDirect3DDevice9_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a) +#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a) +#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p) +#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a) +#define IDirect3DDevice9_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p) +#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) +#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f) +#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) +#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) +#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f) +#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b) +#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a) +#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a) +#define IDirect3DDevice9_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a) +#define IDirect3DDevice9_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a) +#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b) +#define IDirect3DDevice9_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) +#define IDirect3DDevice9_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) +#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c) +#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c) +#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c) +#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c) +#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c) +#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c) +#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d) +#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d) +#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b) +#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b) +#define IDirect3DDevice9_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a) +#define IDirect3DDevice9_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a) +#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) +#define IDirect3DDevice9_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) +#define IDirect3DDevice9_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) +#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c) +#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c) +#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c) +#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c) +#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c) +#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c) +#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) +#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) +#define IDirect3DDevice9_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) +#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b) +#else +#define IDirect3DDevice9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DDevice9_AddRef(p) (p)->AddRef() +#define IDirect3DDevice9_Release(p) (p)->Release() +#define IDirect3DDevice9_TestCooperativeLevel(p) (p)->TestCooperativeLevel() +#define IDirect3DDevice9_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() +#define IDirect3DDevice9_EvictManagedResources(p) (p)->EvictManagedResources() +#define IDirect3DDevice9_GetDirect3D(p,a) (p)->GetDirect3D(a) +#define IDirect3DDevice9_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) +#define IDirect3DDevice9_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b) +#define IDirect3DDevice9_GetCreationParameters(p,a) (p)->GetCreationParameters(a) +#define IDirect3DDevice9_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) +#define IDirect3DDevice9_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) +#define IDirect3DDevice9_ShowCursor(p,a) (p)->ShowCursor(a) +#define IDirect3DDevice9_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) +#define IDirect3DDevice9_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b) +#define IDirect3DDevice9_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains() +#define IDirect3DDevice9_Reset(p,a) (p)->Reset(a) +#define IDirect3DDevice9_Present(p,a,b,c,d) (p)->Present(a,b,c,d) +#define IDirect3DDevice9_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d) +#define IDirect3DDevice9_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b) +#define IDirect3DDevice9_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a) +#define IDirect3DDevice9_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c) +#define IDirect3DDevice9_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) +#define IDirect3DDevice9_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h) +#define IDirect3DDevice9_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i) +#define IDirect3DDevice9_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g) +#define IDirect3DDevice9_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f) +#define IDirect3DDevice9_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f) +#define IDirect3DDevice9_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h) +#define IDirect3DDevice9_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h) +#define IDirect3DDevice9_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d) +#define IDirect3DDevice9_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) +#define IDirect3DDevice9_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b) +#define IDirect3DDevice9_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b) +#define IDirect3DDevice9_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e) +#define IDirect3DDevice9_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c) +#define IDirect3DDevice9_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f) +#define IDirect3DDevice9_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) +#define IDirect3DDevice9_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b) +#define IDirect3DDevice9_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a) +#define IDirect3DDevice9_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) +#define IDirect3DDevice9_BeginScene(p) (p)->BeginScene() +#define IDirect3DDevice9_EndScene(p) (p)->EndScene() +#define IDirect3DDevice9_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) +#define IDirect3DDevice9_SetTransform(p,a,b) (p)->SetTransform(a,b) +#define IDirect3DDevice9_GetTransform(p,a,b) (p)->GetTransform(a,b) +#define IDirect3DDevice9_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) +#define IDirect3DDevice9_SetViewport(p,a) (p)->SetViewport(a) +#define IDirect3DDevice9_GetViewport(p,a) (p)->GetViewport(a) +#define IDirect3DDevice9_SetMaterial(p,a) (p)->SetMaterial(a) +#define IDirect3DDevice9_GetMaterial(p,a) (p)->GetMaterial(a) +#define IDirect3DDevice9_SetLight(p,a,b) (p)->SetLight(a,b) +#define IDirect3DDevice9_GetLight(p,a,b) (p)->GetLight(a,b) +#define IDirect3DDevice9_LightEnable(p,a,b) (p)->LightEnable(a,b) +#define IDirect3DDevice9_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) +#define IDirect3DDevice9_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) +#define IDirect3DDevice9_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) +#define IDirect3DDevice9_SetRenderState(p,a,b) (p)->SetRenderState(a,b) +#define IDirect3DDevice9_GetRenderState(p,a,b) (p)->GetRenderState(a,b) +#define IDirect3DDevice9_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) +#define IDirect3DDevice9_BeginStateBlock(p) (p)->BeginStateBlock() +#define IDirect3DDevice9_EndStateBlock(p,a) (p)->EndStateBlock(a) +#define IDirect3DDevice9_SetClipStatus(p,a) (p)->SetClipStatus(a) +#define IDirect3DDevice9_GetClipStatus(p,a) (p)->GetClipStatus(a) +#define IDirect3DDevice9_GetTexture(p,a,b) (p)->GetTexture(a,b) +#define IDirect3DDevice9_SetTexture(p,a,b) (p)->SetTexture(a,b) +#define IDirect3DDevice9_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) +#define IDirect3DDevice9_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) +#define IDirect3DDevice9_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c) +#define IDirect3DDevice9_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c) +#define IDirect3DDevice9_ValidateDevice(p,a) (p)->ValidateDevice(a) +#define IDirect3DDevice9_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) +#define IDirect3DDevice9_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) +#define IDirect3DDevice9_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) +#define IDirect3DDevice9_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) +#define IDirect3DDevice9_SetScissorRect(p,a) (p)->SetScissorRect(a) +#define IDirect3DDevice9_GetScissorRect(p,a) (p)->GetScissorRect(a) +#define IDirect3DDevice9_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a) +#define IDirect3DDevice9_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing() +#define IDirect3DDevice9_SetNPatchMode(p,a) (p)->SetNPatchMode(a) +#define IDirect3DDevice9_GetNPatchMode(p) (p)->GetNPatchMode() +#define IDirect3DDevice9_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) +#define IDirect3DDevice9_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f) +#define IDirect3DDevice9_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) +#define IDirect3DDevice9_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) +#define IDirect3DDevice9_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f) +#define IDirect3DDevice9_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b) +#define IDirect3DDevice9_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a) +#define IDirect3DDevice9_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a) +#define IDirect3DDevice9_SetFVF(p,a) (p)->SetFVF(a) +#define IDirect3DDevice9_GetFVF(p,a) (p)->GetFVF(a) +#define IDirect3DDevice9_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b) +#define IDirect3DDevice9_SetVertexShader(p,a) (p)->SetVertexShader(a) +#define IDirect3DDevice9_GetVertexShader(p,a) (p)->GetVertexShader(a) +#define IDirect3DDevice9_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c) +#define IDirect3DDevice9_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c) +#define IDirect3DDevice9_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c) +#define IDirect3DDevice9_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c) +#define IDirect3DDevice9_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c) +#define IDirect3DDevice9_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c) +#define IDirect3DDevice9_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d) +#define IDirect3DDevice9_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d) +#define IDirect3DDevice9_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b) +#define IDirect3DDevice9_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b) +#define IDirect3DDevice9_SetIndices(p,a) (p)->SetIndices(a) +#define IDirect3DDevice9_GetIndices(p,a) (p)->GetIndices(a) +#define IDirect3DDevice9_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) +#define IDirect3DDevice9_SetPixelShader(p,a) (p)->SetPixelShader(a) +#define IDirect3DDevice9_GetPixelShader(p,a) (p)->GetPixelShader(a) +#define IDirect3DDevice9_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c) +#define IDirect3DDevice9_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c) +#define IDirect3DDevice9_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c) +#define IDirect3DDevice9_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c) +#define IDirect3DDevice9_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c) +#define IDirect3DDevice9_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c) +#define IDirect3DDevice9_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) +#define IDirect3DDevice9_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) +#define IDirect3DDevice9_DeletePatch(p,a) (p)->DeletePatch(a) +#define IDirect3DDevice9_CreateQuery(p,a,b) (p)->CreateQuery(a,b) +#endif + + + + + +#undef INTERFACE +#define INTERFACE IDirect3DStateBlock9 + +DECLARE_INTERFACE_(IDirect3DStateBlock9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DStateBlock9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(Capture)(THIS) PURE; + STDMETHOD(Apply)(THIS) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DStateBlock9 *LPDIRECT3DSTATEBLOCK9, *PDIRECT3DSTATEBLOCK9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DStateBlock9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DStateBlock9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DStateBlock9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DStateBlock9_Capture(p) (p)->lpVtbl->Capture(p) +#define IDirect3DStateBlock9_Apply(p) (p)->lpVtbl->Apply(p) +#else +#define IDirect3DStateBlock9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DStateBlock9_AddRef(p) (p)->AddRef() +#define IDirect3DStateBlock9_Release(p) (p)->Release() +#define IDirect3DStateBlock9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DStateBlock9_Capture(p) (p)->Capture() +#define IDirect3DStateBlock9_Apply(p) (p)->Apply() +#endif + + + + +#undef INTERFACE +#define INTERFACE IDirect3DSwapChain9 + +DECLARE_INTERFACE_(IDirect3DSwapChain9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DSwapChain9 methods ***/ + STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE; + STDMETHOD(GetFrontBufferData)(THIS_ IDirect3DSurface9* pDestSurface) PURE; + STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE; + STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE; + STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE; + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; + + #ifdef D3D_DEBUG_INFO + D3DPRESENT_PARAMETERS PresentParameters; + D3DDISPLAYMODE DisplayMode; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DSwapChain9 *LPDIRECT3DSWAPCHAIN9, *PDIRECT3DSWAPCHAIN9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DSwapChain9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DSwapChain9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e) +#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a) +#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) +#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a) +#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) +#define IDirect3DSwapChain9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a) +#else +#define IDirect3DSwapChain9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DSwapChain9_AddRef(p) (p)->AddRef() +#define IDirect3DSwapChain9_Release(p) (p)->Release() +#define IDirect3DSwapChain9_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e) +#define IDirect3DSwapChain9_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a) +#define IDirect3DSwapChain9_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) +#define IDirect3DSwapChain9_GetRasterStatus(p,a) (p)->GetRasterStatus(a) +#define IDirect3DSwapChain9_GetDisplayMode(p,a) (p)->GetDisplayMode(a) +#define IDirect3DSwapChain9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DSwapChain9_GetPresentParameters(p,a) (p)->GetPresentParameters(a) +#endif + + + +#undef INTERFACE +#define INTERFACE IDirect3DResource9 + +DECLARE_INTERFACE_(IDirect3DResource9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DResource9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; + STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; + STDMETHOD_(DWORD, GetPriority)(THIS) PURE; + STDMETHOD_(void, PreLoad)(THIS) PURE; + STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; +}; + +typedef struct IDirect3DResource9 *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DResource9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DResource9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DResource9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DResource9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirect3DResource9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirect3DResource9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) +#define IDirect3DResource9_GetPriority(p) (p)->lpVtbl->GetPriority(p) +#define IDirect3DResource9_PreLoad(p) (p)->lpVtbl->PreLoad(p) +#define IDirect3DResource9_GetType(p) (p)->lpVtbl->GetType(p) +#else +#define IDirect3DResource9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DResource9_AddRef(p) (p)->AddRef() +#define IDirect3DResource9_Release(p) (p)->Release() +#define IDirect3DResource9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DResource9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirect3DResource9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirect3DResource9_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirect3DResource9_SetPriority(p,a) (p)->SetPriority(a) +#define IDirect3DResource9_GetPriority(p) (p)->GetPriority() +#define IDirect3DResource9_PreLoad(p) (p)->PreLoad() +#define IDirect3DResource9_GetType(p) (p)->GetType() +#endif + + + + +#undef INTERFACE +#define INTERFACE IDirect3DVertexDeclaration9 + +DECLARE_INTERFACE_(IDirect3DVertexDeclaration9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DVertexDeclaration9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9* pElement,UINT* pNumElements) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DVertexDeclaration9 *LPDIRECT3DVERTEXDECLARATION9, *PDIRECT3DVERTEXDECLARATION9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DVertexDeclaration9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DVertexDeclaration9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->lpVtbl->GetDeclaration(p,a,b) +#else +#define IDirect3DVertexDeclaration9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DVertexDeclaration9_AddRef(p) (p)->AddRef() +#define IDirect3DVertexDeclaration9_Release(p) (p)->Release() +#define IDirect3DVertexDeclaration9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DVertexDeclaration9_GetDeclaration(p,a,b) (p)->GetDeclaration(a,b) +#endif + + + + +#undef INTERFACE +#define INTERFACE IDirect3DVertexShader9 + +DECLARE_INTERFACE_(IDirect3DVertexShader9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DVertexShader9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(GetFunction)(THIS_ void*,UINT* pSizeOfData) PURE; + + #ifdef D3D_DEBUG_INFO + DWORD Version; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DVertexShader9 *LPDIRECT3DVERTEXSHADER9, *PDIRECT3DVERTEXSHADER9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DVertexShader9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DVertexShader9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DVertexShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b) +#else +#define IDirect3DVertexShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DVertexShader9_AddRef(p) (p)->AddRef() +#define IDirect3DVertexShader9_Release(p) (p)->Release() +#define IDirect3DVertexShader9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DVertexShader9_GetFunction(p,a,b) (p)->GetFunction(a,b) +#endif + + + + +#undef INTERFACE +#define INTERFACE IDirect3DPixelShader9 + +DECLARE_INTERFACE_(IDirect3DPixelShader9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DPixelShader9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(GetFunction)(THIS_ void*,UINT* pSizeOfData) PURE; + + #ifdef D3D_DEBUG_INFO + DWORD Version; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DPixelShader9 *LPDIRECT3DPIXELSHADER9, *PDIRECT3DPIXELSHADER9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DPixelShader9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DPixelShader9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DPixelShader9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->lpVtbl->GetFunction(p,a,b) +#else +#define IDirect3DPixelShader9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DPixelShader9_AddRef(p) (p)->AddRef() +#define IDirect3DPixelShader9_Release(p) (p)->Release() +#define IDirect3DPixelShader9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DPixelShader9_GetFunction(p,a,b) (p)->GetFunction(a,b) +#endif + + + + +#undef INTERFACE +#define INTERFACE IDirect3DBaseTexture9 + +DECLARE_INTERFACE_(IDirect3DBaseTexture9, IDirect3DResource9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DResource9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; + STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; + STDMETHOD_(DWORD, GetPriority)(THIS) PURE; + STDMETHOD_(void, PreLoad)(THIS) PURE; + STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; + STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; + STDMETHOD_(DWORD, GetLOD)(THIS) PURE; + STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; + STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; + STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; + STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; +}; + +typedef struct IDirect3DBaseTexture9 *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DBaseTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DBaseTexture9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) +#define IDirect3DBaseTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) +#define IDirect3DBaseTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) +#define IDirect3DBaseTexture9_GetType(p) (p)->lpVtbl->GetType(p) +#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) +#define IDirect3DBaseTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) +#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) +#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) +#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) +#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) +#else +#define IDirect3DBaseTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DBaseTexture9_AddRef(p) (p)->AddRef() +#define IDirect3DBaseTexture9_Release(p) (p)->Release() +#define IDirect3DBaseTexture9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DBaseTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirect3DBaseTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirect3DBaseTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirect3DBaseTexture9_SetPriority(p,a) (p)->SetPriority(a) +#define IDirect3DBaseTexture9_GetPriority(p) (p)->GetPriority() +#define IDirect3DBaseTexture9_PreLoad(p) (p)->PreLoad() +#define IDirect3DBaseTexture9_GetType(p) (p)->GetType() +#define IDirect3DBaseTexture9_SetLOD(p,a) (p)->SetLOD(a) +#define IDirect3DBaseTexture9_GetLOD(p) (p)->GetLOD() +#define IDirect3DBaseTexture9_GetLevelCount(p) (p)->GetLevelCount() +#define IDirect3DBaseTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) +#define IDirect3DBaseTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() +#define IDirect3DBaseTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() +#endif + + + + + +#undef INTERFACE +#define INTERFACE IDirect3DTexture9 + +DECLARE_INTERFACE_(IDirect3DTexture9, IDirect3DBaseTexture9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DBaseTexture9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; + STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; + STDMETHOD_(DWORD, GetPriority)(THIS) PURE; + STDMETHOD_(void, PreLoad)(THIS) PURE; + STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; + STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; + STDMETHOD_(DWORD, GetLOD)(THIS) PURE; + STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; + STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; + STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; + STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; + STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE; + STDMETHOD(GetSurfaceLevel)(THIS_ UINT Level,IDirect3DSurface9** ppSurfaceLevel) PURE; + STDMETHOD(LockRect)(THIS_ UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE; + STDMETHOD(UnlockRect)(THIS_ UINT Level) PURE; + STDMETHOD(AddDirtyRect)(THIS_ CONST RECT* pDirtyRect) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR Name; + UINT Width; + UINT Height; + UINT Levels; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + DWORD Priority; + DWORD LOD; + D3DTEXTUREFILTERTYPE FilterType; + UINT LockCount; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DTexture9 *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DTexture9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirect3DTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirect3DTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) +#define IDirect3DTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) +#define IDirect3DTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) +#define IDirect3DTexture9_GetType(p) (p)->lpVtbl->GetType(p) +#define IDirect3DTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) +#define IDirect3DTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) +#define IDirect3DTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) +#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) +#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) +#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) +#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) +#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->lpVtbl->GetSurfaceLevel(p,a,b) +#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->lpVtbl->LockRect(p,a,b,c,d) +#define IDirect3DTexture9_UnlockRect(p,a) (p)->lpVtbl->UnlockRect(p,a) +#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->lpVtbl->AddDirtyRect(p,a) +#else +#define IDirect3DTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DTexture9_AddRef(p) (p)->AddRef() +#define IDirect3DTexture9_Release(p) (p)->Release() +#define IDirect3DTexture9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirect3DTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirect3DTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirect3DTexture9_SetPriority(p,a) (p)->SetPriority(a) +#define IDirect3DTexture9_GetPriority(p) (p)->GetPriority() +#define IDirect3DTexture9_PreLoad(p) (p)->PreLoad() +#define IDirect3DTexture9_GetType(p) (p)->GetType() +#define IDirect3DTexture9_SetLOD(p,a) (p)->SetLOD(a) +#define IDirect3DTexture9_GetLOD(p) (p)->GetLOD() +#define IDirect3DTexture9_GetLevelCount(p) (p)->GetLevelCount() +#define IDirect3DTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) +#define IDirect3DTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() +#define IDirect3DTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() +#define IDirect3DTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) +#define IDirect3DTexture9_GetSurfaceLevel(p,a,b) (p)->GetSurfaceLevel(a,b) +#define IDirect3DTexture9_LockRect(p,a,b,c,d) (p)->LockRect(a,b,c,d) +#define IDirect3DTexture9_UnlockRect(p,a) (p)->UnlockRect(a) +#define IDirect3DTexture9_AddDirtyRect(p,a) (p)->AddDirtyRect(a) +#endif + + + + + +#undef INTERFACE +#define INTERFACE IDirect3DVolumeTexture9 + +DECLARE_INTERFACE_(IDirect3DVolumeTexture9, IDirect3DBaseTexture9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DBaseTexture9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; + STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; + STDMETHOD_(DWORD, GetPriority)(THIS) PURE; + STDMETHOD_(void, PreLoad)(THIS) PURE; + STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; + STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; + STDMETHOD_(DWORD, GetLOD)(THIS) PURE; + STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; + STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; + STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; + STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; + STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DVOLUME_DESC *pDesc) PURE; + STDMETHOD(GetVolumeLevel)(THIS_ UINT Level,IDirect3DVolume9** ppVolumeLevel) PURE; + STDMETHOD(LockBox)(THIS_ UINT Level,D3DLOCKED_BOX* pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE; + STDMETHOD(UnlockBox)(THIS_ UINT Level) PURE; + STDMETHOD(AddDirtyBox)(THIS_ CONST D3DBOX* pDirtyBox) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR Name; + UINT Width; + UINT Height; + UINT Depth; + UINT Levels; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + DWORD Priority; + DWORD LOD; + D3DTEXTUREFILTERTYPE FilterType; + UINT LockCount; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DVolumeTexture9 *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DVolumeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DVolumeTexture9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) +#define IDirect3DVolumeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) +#define IDirect3DVolumeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) +#define IDirect3DVolumeTexture9_GetType(p) (p)->lpVtbl->GetType(p) +#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) +#define IDirect3DVolumeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) +#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) +#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) +#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) +#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) +#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) +#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->lpVtbl->GetVolumeLevel(p,a,b) +#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->lpVtbl->LockBox(p,a,b,c,d) +#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->lpVtbl->UnlockBox(p,a) +#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->lpVtbl->AddDirtyBox(p,a) +#else +#define IDirect3DVolumeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DVolumeTexture9_AddRef(p) (p)->AddRef() +#define IDirect3DVolumeTexture9_Release(p) (p)->Release() +#define IDirect3DVolumeTexture9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DVolumeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirect3DVolumeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirect3DVolumeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirect3DVolumeTexture9_SetPriority(p,a) (p)->SetPriority(a) +#define IDirect3DVolumeTexture9_GetPriority(p) (p)->GetPriority() +#define IDirect3DVolumeTexture9_PreLoad(p) (p)->PreLoad() +#define IDirect3DVolumeTexture9_GetType(p) (p)->GetType() +#define IDirect3DVolumeTexture9_SetLOD(p,a) (p)->SetLOD(a) +#define IDirect3DVolumeTexture9_GetLOD(p) (p)->GetLOD() +#define IDirect3DVolumeTexture9_GetLevelCount(p) (p)->GetLevelCount() +#define IDirect3DVolumeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) +#define IDirect3DVolumeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() +#define IDirect3DVolumeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() +#define IDirect3DVolumeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) +#define IDirect3DVolumeTexture9_GetVolumeLevel(p,a,b) (p)->GetVolumeLevel(a,b) +#define IDirect3DVolumeTexture9_LockBox(p,a,b,c,d) (p)->LockBox(a,b,c,d) +#define IDirect3DVolumeTexture9_UnlockBox(p,a) (p)->UnlockBox(a) +#define IDirect3DVolumeTexture9_AddDirtyBox(p,a) (p)->AddDirtyBox(a) +#endif + + + + + +#undef INTERFACE +#define INTERFACE IDirect3DCubeTexture9 + +DECLARE_INTERFACE_(IDirect3DCubeTexture9, IDirect3DBaseTexture9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DBaseTexture9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; + STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; + STDMETHOD_(DWORD, GetPriority)(THIS) PURE; + STDMETHOD_(void, PreLoad)(THIS) PURE; + STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; + STDMETHOD_(DWORD, SetLOD)(THIS_ DWORD LODNew) PURE; + STDMETHOD_(DWORD, GetLOD)(THIS) PURE; + STDMETHOD_(DWORD, GetLevelCount)(THIS) PURE; + STDMETHOD(SetAutoGenFilterType)(THIS_ D3DTEXTUREFILTERTYPE FilterType) PURE; + STDMETHOD_(D3DTEXTUREFILTERTYPE, GetAutoGenFilterType)(THIS) PURE; + STDMETHOD_(void, GenerateMipSubLevels)(THIS) PURE; + STDMETHOD(GetLevelDesc)(THIS_ UINT Level,D3DSURFACE_DESC *pDesc) PURE; + STDMETHOD(GetCubeMapSurface)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,IDirect3DSurface9** ppCubeMapSurface) PURE; + STDMETHOD(LockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE; + STDMETHOD(UnlockRect)(THIS_ D3DCUBEMAP_FACES FaceType,UINT Level) PURE; + STDMETHOD(AddDirtyRect)(THIS_ D3DCUBEMAP_FACES FaceType,CONST RECT* pDirtyRect) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR Name; + UINT Width; + UINT Height; + UINT Levels; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + DWORD Priority; + DWORD LOD; + D3DTEXTUREFILTERTYPE FilterType; + UINT LockCount; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DCubeTexture9 *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCUBETEXTURE9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DCubeTexture9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DCubeTexture9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) +#define IDirect3DCubeTexture9_GetPriority(p) (p)->lpVtbl->GetPriority(p) +#define IDirect3DCubeTexture9_PreLoad(p) (p)->lpVtbl->PreLoad(p) +#define IDirect3DCubeTexture9_GetType(p) (p)->lpVtbl->GetType(p) +#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->lpVtbl->SetLOD(p,a) +#define IDirect3DCubeTexture9_GetLOD(p) (p)->lpVtbl->GetLOD(p) +#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->lpVtbl->GetLevelCount(p) +#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->lpVtbl->SetAutoGenFilterType(p,a) +#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->lpVtbl->GetAutoGenFilterType(p) +#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->lpVtbl->GenerateMipSubLevels(p) +#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->lpVtbl->GetLevelDesc(p,a,b) +#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->lpVtbl->GetCubeMapSurface(p,a,b,c) +#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->lpVtbl->LockRect(p,a,b,c,d,e) +#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->lpVtbl->UnlockRect(p,a,b) +#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->lpVtbl->AddDirtyRect(p,a,b) +#else +#define IDirect3DCubeTexture9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DCubeTexture9_AddRef(p) (p)->AddRef() +#define IDirect3DCubeTexture9_Release(p) (p)->Release() +#define IDirect3DCubeTexture9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DCubeTexture9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirect3DCubeTexture9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirect3DCubeTexture9_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirect3DCubeTexture9_SetPriority(p,a) (p)->SetPriority(a) +#define IDirect3DCubeTexture9_GetPriority(p) (p)->GetPriority() +#define IDirect3DCubeTexture9_PreLoad(p) (p)->PreLoad() +#define IDirect3DCubeTexture9_GetType(p) (p)->GetType() +#define IDirect3DCubeTexture9_SetLOD(p,a) (p)->SetLOD(a) +#define IDirect3DCubeTexture9_GetLOD(p) (p)->GetLOD() +#define IDirect3DCubeTexture9_GetLevelCount(p) (p)->GetLevelCount() +#define IDirect3DCubeTexture9_SetAutoGenFilterType(p,a) (p)->SetAutoGenFilterType(a) +#define IDirect3DCubeTexture9_GetAutoGenFilterType(p) (p)->GetAutoGenFilterType() +#define IDirect3DCubeTexture9_GenerateMipSubLevels(p) (p)->GenerateMipSubLevels() +#define IDirect3DCubeTexture9_GetLevelDesc(p,a,b) (p)->GetLevelDesc(a,b) +#define IDirect3DCubeTexture9_GetCubeMapSurface(p,a,b,c) (p)->GetCubeMapSurface(a,b,c) +#define IDirect3DCubeTexture9_LockRect(p,a,b,c,d,e) (p)->LockRect(a,b,c,d,e) +#define IDirect3DCubeTexture9_UnlockRect(p,a,b) (p)->UnlockRect(a,b) +#define IDirect3DCubeTexture9_AddDirtyRect(p,a,b) (p)->AddDirtyRect(a,b) +#endif + + + + +#undef INTERFACE +#define INTERFACE IDirect3DVertexBuffer9 + +DECLARE_INTERFACE_(IDirect3DVertexBuffer9, IDirect3DResource9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DResource9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; + STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; + STDMETHOD_(DWORD, GetPriority)(THIS) PURE; + STDMETHOD_(void, PreLoad)(THIS) PURE; + STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; + STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD Flags) PURE; + STDMETHOD(Unlock)(THIS) PURE; + STDMETHOD(GetDesc)(THIS_ D3DVERTEXBUFFER_DESC *pDesc) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR Name; + UINT Length; + DWORD Usage; + DWORD FVF; + D3DPOOL Pool; + DWORD Priority; + UINT LockCount; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DVertexBuffer9 *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DVertexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DVertexBuffer9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) +#define IDirect3DVertexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p) +#define IDirect3DVertexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p) +#define IDirect3DVertexBuffer9_GetType(p) (p)->lpVtbl->GetType(p) +#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) +#define IDirect3DVertexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p) +#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) +#else +#define IDirect3DVertexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DVertexBuffer9_AddRef(p) (p)->AddRef() +#define IDirect3DVertexBuffer9_Release(p) (p)->Release() +#define IDirect3DVertexBuffer9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DVertexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirect3DVertexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirect3DVertexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirect3DVertexBuffer9_SetPriority(p,a) (p)->SetPriority(a) +#define IDirect3DVertexBuffer9_GetPriority(p) (p)->GetPriority() +#define IDirect3DVertexBuffer9_PreLoad(p) (p)->PreLoad() +#define IDirect3DVertexBuffer9_GetType(p) (p)->GetType() +#define IDirect3DVertexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) +#define IDirect3DVertexBuffer9_Unlock(p) (p)->Unlock() +#define IDirect3DVertexBuffer9_GetDesc(p,a) (p)->GetDesc(a) +#endif + + + + +#undef INTERFACE +#define INTERFACE IDirect3DIndexBuffer9 + +DECLARE_INTERFACE_(IDirect3DIndexBuffer9, IDirect3DResource9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DResource9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; + STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; + STDMETHOD_(DWORD, GetPriority)(THIS) PURE; + STDMETHOD_(void, PreLoad)(THIS) PURE; + STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; + STDMETHOD(Lock)(THIS_ UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD Flags) PURE; + STDMETHOD(Unlock)(THIS) PURE; + STDMETHOD(GetDesc)(THIS_ D3DINDEXBUFFER_DESC *pDesc) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR Name; + UINT Length; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + DWORD Priority; + UINT LockCount; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DIndexBuffer9 *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DIndexBuffer9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DIndexBuffer9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) +#define IDirect3DIndexBuffer9_GetPriority(p) (p)->lpVtbl->GetPriority(p) +#define IDirect3DIndexBuffer9_PreLoad(p) (p)->lpVtbl->PreLoad(p) +#define IDirect3DIndexBuffer9_GetType(p) (p)->lpVtbl->GetType(p) +#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->lpVtbl->Lock(p,a,b,c,d) +#define IDirect3DIndexBuffer9_Unlock(p) (p)->lpVtbl->Unlock(p) +#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) +#else +#define IDirect3DIndexBuffer9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DIndexBuffer9_AddRef(p) (p)->AddRef() +#define IDirect3DIndexBuffer9_Release(p) (p)->Release() +#define IDirect3DIndexBuffer9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DIndexBuffer9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirect3DIndexBuffer9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirect3DIndexBuffer9_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirect3DIndexBuffer9_SetPriority(p,a) (p)->SetPriority(a) +#define IDirect3DIndexBuffer9_GetPriority(p) (p)->GetPriority() +#define IDirect3DIndexBuffer9_PreLoad(p) (p)->PreLoad() +#define IDirect3DIndexBuffer9_GetType(p) (p)->GetType() +#define IDirect3DIndexBuffer9_Lock(p,a,b,c,d) (p)->Lock(a,b,c,d) +#define IDirect3DIndexBuffer9_Unlock(p) (p)->Unlock() +#define IDirect3DIndexBuffer9_GetDesc(p,a) (p)->GetDesc(a) +#endif + + + + +#undef INTERFACE +#define INTERFACE IDirect3DSurface9 + +DECLARE_INTERFACE_(IDirect3DSurface9, IDirect3DResource9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DResource9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; + STDMETHOD_(DWORD, SetPriority)(THIS_ DWORD PriorityNew) PURE; + STDMETHOD_(DWORD, GetPriority)(THIS) PURE; + STDMETHOD_(void, PreLoad)(THIS) PURE; + STDMETHOD_(D3DRESOURCETYPE, GetType)(THIS) PURE; + STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE; + STDMETHOD(GetDesc)(THIS_ D3DSURFACE_DESC *pDesc) PURE; + STDMETHOD(LockRect)(THIS_ D3DLOCKED_RECT* pLockedRect,CONST RECT* pRect,DWORD Flags) PURE; + STDMETHOD(UnlockRect)(THIS) PURE; + STDMETHOD(GetDC)(THIS_ HDC *phdc) PURE; + STDMETHOD(ReleaseDC)(THIS_ HDC hdc) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR Name; + UINT Width; + UINT Height; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + D3DMULTISAMPLE_TYPE MultiSampleType; + DWORD MultiSampleQuality; + DWORD Priority; + UINT LockCount; + UINT DCCount; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DSurface9 *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DSurface9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DSurface9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DSurface9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirect3DSurface9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirect3DSurface9_SetPriority(p,a) (p)->lpVtbl->SetPriority(p,a) +#define IDirect3DSurface9_GetPriority(p) (p)->lpVtbl->GetPriority(p) +#define IDirect3DSurface9_PreLoad(p) (p)->lpVtbl->PreLoad(p) +#define IDirect3DSurface9_GetType(p) (p)->lpVtbl->GetType(p) +#define IDirect3DSurface9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) +#define IDirect3DSurface9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) +#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->lpVtbl->LockRect(p,a,b,c) +#define IDirect3DSurface9_UnlockRect(p) (p)->lpVtbl->UnlockRect(p) +#define IDirect3DSurface9_GetDC(p,a) (p)->lpVtbl->GetDC(p,a) +#define IDirect3DSurface9_ReleaseDC(p,a) (p)->lpVtbl->ReleaseDC(p,a) +#else +#define IDirect3DSurface9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DSurface9_AddRef(p) (p)->AddRef() +#define IDirect3DSurface9_Release(p) (p)->Release() +#define IDirect3DSurface9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DSurface9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirect3DSurface9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirect3DSurface9_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirect3DSurface9_SetPriority(p,a) (p)->SetPriority(a) +#define IDirect3DSurface9_GetPriority(p) (p)->GetPriority() +#define IDirect3DSurface9_PreLoad(p) (p)->PreLoad() +#define IDirect3DSurface9_GetType(p) (p)->GetType() +#define IDirect3DSurface9_GetContainer(p,a,b) (p)->GetContainer(a,b) +#define IDirect3DSurface9_GetDesc(p,a) (p)->GetDesc(a) +#define IDirect3DSurface9_LockRect(p,a,b,c) (p)->LockRect(a,b,c) +#define IDirect3DSurface9_UnlockRect(p) (p)->UnlockRect() +#define IDirect3DSurface9_GetDC(p,a) (p)->GetDC(a) +#define IDirect3DSurface9_ReleaseDC(p,a) (p)->ReleaseDC(a) +#endif + + + + + +#undef INTERFACE +#define INTERFACE IDirect3DVolume9 + +DECLARE_INTERFACE_(IDirect3DVolume9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DVolume9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(SetPrivateData)(THIS_ REFGUID refguid,CONST void* pData,DWORD SizeOfData,DWORD Flags) PURE; + STDMETHOD(GetPrivateData)(THIS_ REFGUID refguid,void* pData,DWORD* pSizeOfData) PURE; + STDMETHOD(FreePrivateData)(THIS_ REFGUID refguid) PURE; + STDMETHOD(GetContainer)(THIS_ REFIID riid,void** ppContainer) PURE; + STDMETHOD(GetDesc)(THIS_ D3DVOLUME_DESC *pDesc) PURE; + STDMETHOD(LockBox)(THIS_ D3DLOCKED_BOX * pLockedVolume,CONST D3DBOX* pBox,DWORD Flags) PURE; + STDMETHOD(UnlockBox)(THIS) PURE; + + #ifdef D3D_DEBUG_INFO + LPCWSTR Name; + UINT Width; + UINT Height; + UINT Depth; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + UINT LockCount; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DVolume9 *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DVolume9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DVolume9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DVolume9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->lpVtbl->SetPrivateData(p,a,b,c,d) +#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->lpVtbl->GetPrivateData(p,a,b,c) +#define IDirect3DVolume9_FreePrivateData(p,a) (p)->lpVtbl->FreePrivateData(p,a) +#define IDirect3DVolume9_GetContainer(p,a,b) (p)->lpVtbl->GetContainer(p,a,b) +#define IDirect3DVolume9_GetDesc(p,a) (p)->lpVtbl->GetDesc(p,a) +#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->lpVtbl->LockBox(p,a,b,c) +#define IDirect3DVolume9_UnlockBox(p) (p)->lpVtbl->UnlockBox(p) +#else +#define IDirect3DVolume9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DVolume9_AddRef(p) (p)->AddRef() +#define IDirect3DVolume9_Release(p) (p)->Release() +#define IDirect3DVolume9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DVolume9_SetPrivateData(p,a,b,c,d) (p)->SetPrivateData(a,b,c,d) +#define IDirect3DVolume9_GetPrivateData(p,a,b,c) (p)->GetPrivateData(a,b,c) +#define IDirect3DVolume9_FreePrivateData(p,a) (p)->FreePrivateData(a) +#define IDirect3DVolume9_GetContainer(p,a,b) (p)->GetContainer(a,b) +#define IDirect3DVolume9_GetDesc(p,a) (p)->GetDesc(a) +#define IDirect3DVolume9_LockBox(p,a,b,c) (p)->LockBox(a,b,c) +#define IDirect3DVolume9_UnlockBox(p) (p)->UnlockBox() +#endif + + + + +#undef INTERFACE +#define INTERFACE IDirect3DQuery9 + +DECLARE_INTERFACE_(IDirect3DQuery9, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DQuery9 methods ***/ + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD_(D3DQUERYTYPE, GetType)(THIS) PURE; + STDMETHOD_(DWORD, GetDataSize)(THIS) PURE; + STDMETHOD(Issue)(THIS_ DWORD dwIssueFlags) PURE; + STDMETHOD(GetData)(THIS_ void* pData,DWORD dwSize,DWORD dwGetDataFlags) PURE; + + #ifdef D3D_DEBUG_INFO + D3DQUERYTYPE Type; + DWORD DataSize; + LPCWSTR CreationCallStack; + #endif +}; + +typedef struct IDirect3DQuery9 *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DQuery9_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DQuery9_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DQuery9_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DQuery9_GetType(p) (p)->lpVtbl->GetType(p) +#define IDirect3DQuery9_GetDataSize(p) (p)->lpVtbl->GetDataSize(p) +#define IDirect3DQuery9_Issue(p,a) (p)->lpVtbl->Issue(p,a) +#define IDirect3DQuery9_GetData(p,a,b,c) (p)->lpVtbl->GetData(p,a,b,c) +#else +#define IDirect3DQuery9_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DQuery9_AddRef(p) (p)->AddRef() +#define IDirect3DQuery9_Release(p) (p)->Release() +#define IDirect3DQuery9_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DQuery9_GetType(p) (p)->GetType() +#define IDirect3DQuery9_GetDataSize(p) (p)->GetDataSize() +#define IDirect3DQuery9_Issue(p,a) (p)->Issue(a) +#define IDirect3DQuery9_GetData(p,a,b,c) (p)->GetData(a,b,c) +#endif + + +/**************************************************************************** + * Flags for SetPrivateData method on all D3D9 interfaces + * + * The passed pointer is an IUnknown ptr. The SizeOfData argument to SetPrivateData + * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this + * pointer and Release when the private data is destroyed. The data will be + * destroyed when another SetPrivateData with the same GUID is set, when + * FreePrivateData is called, or when the D3D9 object is freed. + ****************************************************************************/ +#define D3DSPD_IUNKNOWN 0x00000001L + +/**************************************************************************** + * + * Flags for IDirect3D9::CreateDevice's BehaviorFlags + * + ****************************************************************************/ + +#define D3DCREATE_FPU_PRESERVE 0x00000002L +#define D3DCREATE_MULTITHREADED 0x00000004L + +#define D3DCREATE_PUREDEVICE 0x00000010L +#define D3DCREATE_SOFTWARE_VERTEXPROCESSING 0x00000020L +#define D3DCREATE_HARDWARE_VERTEXPROCESSING 0x00000040L +#define D3DCREATE_MIXED_VERTEXPROCESSING 0x00000080L + +#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT 0x00000100L +#define D3DCREATE_ADAPTERGROUP_DEVICE 0x00000200L +#define D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX 0x00000400L + +// This flag causes the D3D runtime not to alter the focus +// window in any way. Use with caution- the burden of supporting +// focus management events (alt-tab, etc.) falls on the +// application, and appropriate responses (switching display +// mode, etc.) should be coded. +#define D3DCREATE_NOWINDOWCHANGES 0x00000800L + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +// Disable multithreading for software vertex processing +#define D3DCREATE_DISABLE_PSGP_THREADING 0x00002000L +// This flag enables present statistics on device. +#define D3DCREATE_ENABLE_PRESENTSTATS 0x00004000L +// This flag disables printscreen support in the runtime for this device +#define D3DCREATE_DISABLE_PRINTSCREEN 0x00008000L + +#define D3DCREATE_SCREENSAVER 0x10000000L + + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + + + +/**************************************************************************** + * + * Parameter for IDirect3D9::CreateDevice's Adapter argument + * + ****************************************************************************/ + +#define D3DADAPTER_DEFAULT 0 + +/**************************************************************************** + * + * Flags for IDirect3D9::EnumAdapters + * + ****************************************************************************/ + +/* + * The D3DENUM_WHQL_LEVEL value has been retired for 9Ex and future versions, + * but it needs to be defined here for compatibility with DX9 and earlier versions. + * See the DirectX SDK for sample code on discovering driver signatures. + */ +#define D3DENUM_WHQL_LEVEL 0x00000002L + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +/* NO_DRIVERVERSION will not fill out the DriverVersion field, nor will the + DriverVersion be incorporated into the DeviceIdentifier GUID. WINNT only */ +#define D3DENUM_NO_DRIVERVERSION 0x00000004L + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + + +/**************************************************************************** + * + * Maximum number of back-buffers supported in DX9 + * + ****************************************************************************/ + +#define D3DPRESENT_BACK_BUFFERS_MAX 3L + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +/**************************************************************************** + * + * Maximum number of back-buffers supported when apps use CreateDeviceEx + * + ****************************************************************************/ + +#define D3DPRESENT_BACK_BUFFERS_MAX_EX 30L + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + +/**************************************************************************** + * + * Flags for IDirect3DDevice9::SetGammaRamp + * + ****************************************************************************/ + +#define D3DSGR_NO_CALIBRATION 0x00000000L +#define D3DSGR_CALIBRATE 0x00000001L + +/**************************************************************************** + * + * Flags for IDirect3DDevice9::SetCursorPosition + * + ****************************************************************************/ + +#define D3DCURSOR_IMMEDIATE_UPDATE 0x00000001L + +/**************************************************************************** + * + * Flags for IDirect3DSwapChain9::Present + * + ****************************************************************************/ + +#define D3DPRESENT_DONOTWAIT 0x00000001L +#define D3DPRESENT_LINEAR_CONTENT 0x00000002L + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +#define D3DPRESENT_DONOTFLIP 0x00000004L +#define D3DPRESENT_FLIPRESTART 0x00000008L +#define D3DPRESENT_VIDEO_RESTRICT_TO_MONITOR 0x00000010L + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + + +/**************************************************************************** + * + * Flags for DrawPrimitive/DrawIndexedPrimitive + * Also valid for Begin/BeginIndexed + * Also valid for VertexBuffer::CreateVertexBuffer + ****************************************************************************/ + + +/* + * DirectDraw error codes + */ +#define _FACD3D 0x876 +#define MAKE_D3DHRESULT( code ) MAKE_HRESULT( 1, _FACD3D, code ) +#define MAKE_D3DSTATUS( code ) MAKE_HRESULT( 0, _FACD3D, code ) + +/* + * Direct3D Errors + */ +#define D3D_OK S_OK + +#define D3DERR_WRONGTEXTUREFORMAT MAKE_D3DHRESULT(2072) +#define D3DERR_UNSUPPORTEDCOLOROPERATION MAKE_D3DHRESULT(2073) +#define D3DERR_UNSUPPORTEDCOLORARG MAKE_D3DHRESULT(2074) +#define D3DERR_UNSUPPORTEDALPHAOPERATION MAKE_D3DHRESULT(2075) +#define D3DERR_UNSUPPORTEDALPHAARG MAKE_D3DHRESULT(2076) +#define D3DERR_TOOMANYOPERATIONS MAKE_D3DHRESULT(2077) +#define D3DERR_CONFLICTINGTEXTUREFILTER MAKE_D3DHRESULT(2078) +#define D3DERR_UNSUPPORTEDFACTORVALUE MAKE_D3DHRESULT(2079) +#define D3DERR_CONFLICTINGRENDERSTATE MAKE_D3DHRESULT(2081) +#define D3DERR_UNSUPPORTEDTEXTUREFILTER MAKE_D3DHRESULT(2082) +#define D3DERR_CONFLICTINGTEXTUREPALETTE MAKE_D3DHRESULT(2086) +#define D3DERR_DRIVERINTERNALERROR MAKE_D3DHRESULT(2087) + +#define D3DERR_NOTFOUND MAKE_D3DHRESULT(2150) +#define D3DERR_MOREDATA MAKE_D3DHRESULT(2151) +#define D3DERR_DEVICELOST MAKE_D3DHRESULT(2152) +#define D3DERR_DEVICENOTRESET MAKE_D3DHRESULT(2153) +#define D3DERR_NOTAVAILABLE MAKE_D3DHRESULT(2154) +#define D3DERR_OUTOFVIDEOMEMORY MAKE_D3DHRESULT(380) +#define D3DERR_INVALIDDEVICE MAKE_D3DHRESULT(2155) +#define D3DERR_INVALIDCALL MAKE_D3DHRESULT(2156) +#define D3DERR_DRIVERINVALIDCALL MAKE_D3DHRESULT(2157) +#define D3DERR_WASSTILLDRAWING MAKE_D3DHRESULT(540) +#define D3DOK_NOAUTOGEN MAKE_D3DSTATUS(2159) + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + + +#define D3DERR_DEVICEREMOVED MAKE_D3DHRESULT(2160) +#define S_NOT_RESIDENT MAKE_D3DSTATUS(2165) +#define S_RESIDENT_IN_SHARED_MEMORY MAKE_D3DSTATUS(2166) +#define S_PRESENT_MODE_CHANGED MAKE_D3DSTATUS(2167) +#define S_PRESENT_OCCLUDED MAKE_D3DSTATUS(2168) +#define D3DERR_DEVICEHUNG MAKE_D3DHRESULT(2164) + + +/********************* +/* D3D9Ex interfaces +/*********************/ + +HRESULT WINAPI Direct3DCreate9Ex(UINT SDKVersion, IDirect3D9Ex**); + + + + +#undef INTERFACE +#define INTERFACE IDirect3D9Ex + +DECLARE_INTERFACE_(IDirect3D9Ex, IDirect3D9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3D9 methods ***/ + STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE; + STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) PURE; + STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter,D3DFORMAT Format) PURE; + STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode) PURE; + STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE; + STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE DevType,D3DFORMAT AdapterFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) PURE; + STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE; + STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels) PURE; + STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE; + STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) PURE; + STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps) PURE; + STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE; + STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) PURE; + STDMETHOD_(UINT, GetAdapterModeCountEx)(THIS_ UINT Adapter,CONST D3DDISPLAYMODEFILTER* pFilter ) PURE; + STDMETHOD(EnumAdapterModesEx)(THIS_ UINT Adapter,CONST D3DDISPLAYMODEFILTER* pFilter,UINT Mode,D3DDISPLAYMODEEX* pMode) PURE; + STDMETHOD(GetAdapterDisplayModeEx)(THIS_ UINT Adapter,D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE; + STDMETHOD(CreateDeviceEx)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,D3DDISPLAYMODEEX* pFullscreenDisplayMode,IDirect3DDevice9Ex** ppReturnedDeviceInterface) PURE; + STDMETHOD(GetAdapterLUID)(THIS_ UINT Adapter,LUID * pLUID) PURE; +}; + +typedef struct IDirect3D9Ex *LPDIRECT3D9EX, *PDIRECT3D9EX; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3D9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3D9Ex_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3D9Ex_GetAdapterCount(p) (p)->lpVtbl->GetAdapterCount(p) +#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->lpVtbl->GetAdapterIdentifier(p,a,b,c) +#define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->lpVtbl->GetAdapterModeCount(p,a,b) +#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModes(p,a,b,c,d) +#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->lpVtbl->GetAdapterDisplayMode(p,a,b) +#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->lpVtbl->CheckDeviceType(p,a,b,c,d,e) +#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceFormat(p,a,b,c,d,e,f) +#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->lpVtbl->CheckDeviceMultiSampleType(p,a,b,c,d,e,f) +#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->lpVtbl->CheckDepthStencilMatch(p,a,b,c,d,e) +#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->lpVtbl->CheckDeviceFormatConversion(p,a,b,c,d) +#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->lpVtbl->GetDeviceCaps(p,a,b,c) +#define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->lpVtbl->GetAdapterMonitor(p,a) +#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->lpVtbl->CreateDevice(p,a,b,c,d,e,f) +#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->lpVtbl->GetAdapterModeCountEx(p,a,b) +#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->lpVtbl->EnumAdapterModesEx(p,a,b,c,d) +#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetAdapterDisplayModeEx(p,a,b,c) +#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d,e,f,g) +#define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->lpVtbl->GetAdapterLUID(p,a,b) +#else +#define IDirect3D9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3D9Ex_AddRef(p) (p)->AddRef() +#define IDirect3D9Ex_Release(p) (p)->Release() +#define IDirect3D9Ex_GetAdapterCount(p) (p)->GetAdapterCount() +#define IDirect3D9Ex_GetAdapterIdentifier(p,a,b,c) (p)->GetAdapterIdentifier(a,b,c) +#define IDirect3D9Ex_GetAdapterModeCount(p,a,b) (p)->GetAdapterModeCount(a,b) +#define IDirect3D9Ex_EnumAdapterModes(p,a,b,c,d) (p)->EnumAdapterModes(a,b,c,d) +#define IDirect3D9Ex_GetAdapterDisplayMode(p,a,b) (p)->GetAdapterDisplayMode(a,b) +#define IDirect3D9Ex_CheckDeviceType(p,a,b,c,d,e) (p)->CheckDeviceType(a,b,c,d,e) +#define IDirect3D9Ex_CheckDeviceFormat(p,a,b,c,d,e,f) (p)->CheckDeviceFormat(a,b,c,d,e,f) +#define IDirect3D9Ex_CheckDeviceMultiSampleType(p,a,b,c,d,e,f) (p)->CheckDeviceMultiSampleType(a,b,c,d,e,f) +#define IDirect3D9Ex_CheckDepthStencilMatch(p,a,b,c,d,e) (p)->CheckDepthStencilMatch(a,b,c,d,e) +#define IDirect3D9Ex_CheckDeviceFormatConversion(p,a,b,c,d) (p)->CheckDeviceFormatConversion(a,b,c,d) +#define IDirect3D9Ex_GetDeviceCaps(p,a,b,c) (p)->GetDeviceCaps(a,b,c) +#define IDirect3D9Ex_GetAdapterMonitor(p,a) (p)->GetAdapterMonitor(a) +#define IDirect3D9Ex_CreateDevice(p,a,b,c,d,e,f) (p)->CreateDevice(a,b,c,d,e,f) +#define IDirect3D9Ex_GetAdapterModeCountEx(p,a,b) (p)->GetAdapterModeCountEx(a,b) +#define IDirect3D9Ex_EnumAdapterModesEx(p,a,b,c,d) (p)->EnumAdapterModesEx(a,b,c,d) +#define IDirect3D9Ex_GetAdapterDisplayModeEx(p,a,b,c) (p)->GetAdapterDisplayModeEx(a,b,c) +#define IDirect3D9Ex_CreateDeviceEx(p,a,b,c,d,e,f,g) (p)->CreateDeviceEx(a,b,c,d,e,f,g) +#define IDirect3D9Ex_GetAdapterLUID(p,a,b) (p)->GetAdapterLUID(a,b) +#endif + + + + + + + + + + + + + + + + + + + + + + + + +#undef INTERFACE +#define INTERFACE IDirect3DDevice9Ex + +DECLARE_INTERFACE_(IDirect3DDevice9Ex, IDirect3DDevice9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DDevice9 methods ***/ + STDMETHOD(TestCooperativeLevel)(THIS) PURE; + STDMETHOD_(UINT, GetAvailableTextureMem)(THIS) PURE; + STDMETHOD(EvictManagedResources)(THIS) PURE; + STDMETHOD(GetDirect3D)(THIS_ IDirect3D9** ppD3D9) PURE; + STDMETHOD(GetDeviceCaps)(THIS_ D3DCAPS9* pCaps) PURE; + STDMETHOD(GetDisplayMode)(THIS_ UINT iSwapChain,D3DDISPLAYMODE* pMode) PURE; + STDMETHOD(GetCreationParameters)(THIS_ D3DDEVICE_CREATION_PARAMETERS *pParameters) PURE; + STDMETHOD(SetCursorProperties)(THIS_ UINT XHotSpot,UINT YHotSpot,IDirect3DSurface9* pCursorBitmap) PURE; + STDMETHOD_(void, SetCursorPosition)(THIS_ int X,int Y,DWORD Flags) PURE; + STDMETHOD_(BOOL, ShowCursor)(THIS_ BOOL bShow) PURE; + STDMETHOD(CreateAdditionalSwapChain)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DSwapChain9** pSwapChain) PURE; + STDMETHOD(GetSwapChain)(THIS_ UINT iSwapChain,IDirect3DSwapChain9** pSwapChain) PURE; + STDMETHOD_(UINT, GetNumberOfSwapChains)(THIS) PURE; + STDMETHOD(Reset)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; + STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion) PURE; + STDMETHOD(GetBackBuffer)(THIS_ UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE; + STDMETHOD(GetRasterStatus)(THIS_ UINT iSwapChain,D3DRASTER_STATUS* pRasterStatus) PURE; + STDMETHOD(SetDialogBoxMode)(THIS_ BOOL bEnableDialogs) PURE; + STDMETHOD_(void, SetGammaRamp)(THIS_ UINT iSwapChain,DWORD Flags,CONST D3DGAMMARAMP* pRamp) PURE; + STDMETHOD_(void, GetGammaRamp)(THIS_ UINT iSwapChain,D3DGAMMARAMP* pRamp) PURE; + STDMETHOD(CreateTexture)(THIS_ UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DTexture9** ppTexture,HANDLE* pSharedHandle) PURE; + STDMETHOD(CreateVolumeTexture)(THIS_ UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DVolumeTexture9** ppVolumeTexture,HANDLE* pSharedHandle) PURE; + STDMETHOD(CreateCubeTexture)(THIS_ UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DCubeTexture9** ppCubeTexture,HANDLE* pSharedHandle) PURE; + STDMETHOD(CreateVertexBuffer)(THIS_ UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,IDirect3DVertexBuffer9** ppVertexBuffer,HANDLE* pSharedHandle) PURE; + STDMETHOD(CreateIndexBuffer)(THIS_ UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,IDirect3DIndexBuffer9** ppIndexBuffer,HANDLE* pSharedHandle) PURE; + STDMETHOD(CreateRenderTarget)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; + STDMETHOD(CreateDepthStencilSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; + STDMETHOD(UpdateSurface)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestinationSurface,CONST POINT* pDestPoint) PURE; + STDMETHOD(UpdateTexture)(THIS_ IDirect3DBaseTexture9* pSourceTexture,IDirect3DBaseTexture9* pDestinationTexture) PURE; + STDMETHOD(GetRenderTargetData)(THIS_ IDirect3DSurface9* pRenderTarget,IDirect3DSurface9* pDestSurface) PURE; + STDMETHOD(GetFrontBufferData)(THIS_ UINT iSwapChain,IDirect3DSurface9* pDestSurface) PURE; + STDMETHOD(StretchRect)(THIS_ IDirect3DSurface9* pSourceSurface,CONST RECT* pSourceRect,IDirect3DSurface9* pDestSurface,CONST RECT* pDestRect,D3DTEXTUREFILTERTYPE Filter) PURE; + STDMETHOD(ColorFill)(THIS_ IDirect3DSurface9* pSurface,CONST RECT* pRect,D3DCOLOR color) PURE; + STDMETHOD(CreateOffscreenPlainSurface)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle) PURE; + STDMETHOD(SetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9* pRenderTarget) PURE; + STDMETHOD(GetRenderTarget)(THIS_ DWORD RenderTargetIndex,IDirect3DSurface9** ppRenderTarget) PURE; + STDMETHOD(SetDepthStencilSurface)(THIS_ IDirect3DSurface9* pNewZStencil) PURE; + STDMETHOD(GetDepthStencilSurface)(THIS_ IDirect3DSurface9** ppZStencilSurface) PURE; + STDMETHOD(BeginScene)(THIS) PURE; + STDMETHOD(EndScene)(THIS) PURE; + STDMETHOD(Clear)(THIS_ DWORD Count,CONST D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil) PURE; + STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,CONST D3DMATRIX* pMatrix) PURE; + STDMETHOD(GetTransform)(THIS_ D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix) PURE; + STDMETHOD(MultiplyTransform)(THIS_ D3DTRANSFORMSTATETYPE,CONST D3DMATRIX*) PURE; + STDMETHOD(SetViewport)(THIS_ CONST D3DVIEWPORT9* pViewport) PURE; + STDMETHOD(GetViewport)(THIS_ D3DVIEWPORT9* pViewport) PURE; + STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9* pMaterial) PURE; + STDMETHOD(GetMaterial)(THIS_ D3DMATERIAL9* pMaterial) PURE; + STDMETHOD(SetLight)(THIS_ DWORD Index,CONST D3DLIGHT9*) PURE; + STDMETHOD(GetLight)(THIS_ DWORD Index,D3DLIGHT9*) PURE; + STDMETHOD(LightEnable)(THIS_ DWORD Index,BOOL Enable) PURE; + STDMETHOD(GetLightEnable)(THIS_ DWORD Index,BOOL* pEnable) PURE; + STDMETHOD(SetClipPlane)(THIS_ DWORD Index,CONST float* pPlane) PURE; + STDMETHOD(GetClipPlane)(THIS_ DWORD Index,float* pPlane) PURE; + STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD Value) PURE; + STDMETHOD(GetRenderState)(THIS_ D3DRENDERSTATETYPE State,DWORD* pValue) PURE; + STDMETHOD(CreateStateBlock)(THIS_ D3DSTATEBLOCKTYPE Type,IDirect3DStateBlock9** ppSB) PURE; + STDMETHOD(BeginStateBlock)(THIS) PURE; + STDMETHOD(EndStateBlock)(THIS_ IDirect3DStateBlock9** ppSB) PURE; + STDMETHOD(SetClipStatus)(THIS_ CONST D3DCLIPSTATUS9* pClipStatus) PURE; + STDMETHOD(GetClipStatus)(THIS_ D3DCLIPSTATUS9* pClipStatus) PURE; + STDMETHOD(GetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9** ppTexture) PURE; + STDMETHOD(SetTexture)(THIS_ DWORD Stage,IDirect3DBaseTexture9* pTexture) PURE; + STDMETHOD(GetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue) PURE; + STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value) PURE; + STDMETHOD(GetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD* pValue) PURE; + STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD Value) PURE; + STDMETHOD(ValidateDevice)(THIS_ DWORD* pNumPasses) PURE; + STDMETHOD(SetPaletteEntries)(THIS_ UINT PaletteNumber,CONST PALETTEENTRY* pEntries) PURE; + STDMETHOD(GetPaletteEntries)(THIS_ UINT PaletteNumber,PALETTEENTRY* pEntries) PURE; + STDMETHOD(SetCurrentTexturePalette)(THIS_ UINT PaletteNumber) PURE; + STDMETHOD(GetCurrentTexturePalette)(THIS_ UINT *PaletteNumber) PURE; + STDMETHOD(SetScissorRect)(THIS_ CONST RECT* pRect) PURE; + STDMETHOD(GetScissorRect)(THIS_ RECT* pRect) PURE; + STDMETHOD(SetSoftwareVertexProcessing)(THIS_ BOOL bSoftware) PURE; + STDMETHOD_(BOOL, GetSoftwareVertexProcessing)(THIS) PURE; + STDMETHOD(SetNPatchMode)(THIS_ float nSegments) PURE; + STDMETHOD_(float, GetNPatchMode)(THIS) PURE; + STDMETHOD(DrawPrimitive)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount) PURE; + STDMETHOD(DrawIndexedPrimitive)(THIS_ D3DPRIMITIVETYPE,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount) PURE; + STDMETHOD(DrawPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; + STDMETHOD(DrawIndexedPrimitiveUP)(THIS_ D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertices,UINT PrimitiveCount,CONST void* pIndexData,D3DFORMAT IndexDataFormat,CONST void* pVertexStreamZeroData,UINT VertexStreamZeroStride) PURE; + STDMETHOD(ProcessVertices)(THIS_ UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,IDirect3DVertexBuffer9* pDestBuffer,IDirect3DVertexDeclaration9* pVertexDecl,DWORD Flags) PURE; + STDMETHOD(CreateVertexDeclaration)(THIS_ CONST D3DVERTEXELEMENT9* pVertexElements,IDirect3DVertexDeclaration9** ppDecl) PURE; + STDMETHOD(SetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9* pDecl) PURE; + STDMETHOD(GetVertexDeclaration)(THIS_ IDirect3DVertexDeclaration9** ppDecl) PURE; + STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; + STDMETHOD(GetFVF)(THIS_ DWORD* pFVF) PURE; + STDMETHOD(CreateVertexShader)(THIS_ CONST DWORD* pFunction,IDirect3DVertexShader9** ppShader) PURE; + STDMETHOD(SetVertexShader)(THIS_ IDirect3DVertexShader9* pShader) PURE; + STDMETHOD(GetVertexShader)(THIS_ IDirect3DVertexShader9** ppShader) PURE; + STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE; + STDMETHOD(GetVertexShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE; + STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE; + STDMETHOD(GetVertexShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE; + STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT BoolCount) PURE; + STDMETHOD(GetVertexShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE; + STDMETHOD(SetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9* pStreamData,UINT OffsetInBytes,UINT Stride) PURE; + STDMETHOD(GetStreamSource)(THIS_ UINT StreamNumber,IDirect3DVertexBuffer9** ppStreamData,UINT* pOffsetInBytes,UINT* pStride) PURE; + STDMETHOD(SetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT Setting) PURE; + STDMETHOD(GetStreamSourceFreq)(THIS_ UINT StreamNumber,UINT* pSetting) PURE; + STDMETHOD(SetIndices)(THIS_ IDirect3DIndexBuffer9* pIndexData) PURE; + STDMETHOD(GetIndices)(THIS_ IDirect3DIndexBuffer9** ppIndexData) PURE; + STDMETHOD(CreatePixelShader)(THIS_ CONST DWORD* pFunction,IDirect3DPixelShader9** ppShader) PURE; + STDMETHOD(SetPixelShader)(THIS_ IDirect3DPixelShader9* pShader) PURE; + STDMETHOD(GetPixelShader)(THIS_ IDirect3DPixelShader9** ppShader) PURE; + STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT StartRegister,CONST float* pConstantData,UINT Vector4fCount) PURE; + STDMETHOD(GetPixelShaderConstantF)(THIS_ UINT StartRegister,float* pConstantData,UINT Vector4fCount) PURE; + STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT StartRegister,CONST int* pConstantData,UINT Vector4iCount) PURE; + STDMETHOD(GetPixelShaderConstantI)(THIS_ UINT StartRegister,int* pConstantData,UINT Vector4iCount) PURE; + STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT StartRegister,CONST BOOL* pConstantData,UINT BoolCount) PURE; + STDMETHOD(GetPixelShaderConstantB)(THIS_ UINT StartRegister,BOOL* pConstantData,UINT BoolCount) PURE; + STDMETHOD(DrawRectPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DRECTPATCH_INFO* pRectPatchInfo) PURE; + STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE; + STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE; + STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) PURE; + STDMETHOD(SetConvolutionMonoKernel)(THIS_ UINT width,UINT height,float* rows,float* columns) PURE; + STDMETHOD(ComposeRects)(THIS_ IDirect3DSurface9* pSrc,IDirect3DSurface9* pDst,IDirect3DVertexBuffer9* pSrcRectDescs,UINT NumRects,IDirect3DVertexBuffer9* pDstRectDescs,D3DCOMPOSERECTSOP Operation,int Xoffset,int Yoffset) PURE; + STDMETHOD(PresentEx)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE; + STDMETHOD(GetGPUThreadPriority)(THIS_ INT* pPriority) PURE; + STDMETHOD(SetGPUThreadPriority)(THIS_ INT Priority) PURE; + STDMETHOD(WaitForVBlank)(THIS_ UINT iSwapChain) PURE; + STDMETHOD(CheckResourceResidency)(THIS_ IDirect3DResource9** pResourceArray,UINT32 NumResources) PURE; + STDMETHOD(SetMaximumFrameLatency)(THIS_ UINT MaxLatency) PURE; + STDMETHOD(GetMaximumFrameLatency)(THIS_ UINT* pMaxLatency) PURE; + STDMETHOD(CheckDeviceState)(THIS_ HWND hDestinationWindow) PURE; + STDMETHOD(CreateRenderTargetEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE; + STDMETHOD(CreateOffscreenPlainSurfaceEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE; + STDMETHOD(CreateDepthStencilSurfaceEx)(THIS_ UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,IDirect3DSurface9** ppSurface,HANDLE* pSharedHandle,DWORD Usage) PURE; + STDMETHOD(ResetEx)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters,D3DDISPLAYMODEEX *pFullscreenDisplayMode) PURE; + STDMETHOD(GetDisplayModeEx)(THIS_ UINT iSwapChain,D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE; +}; + +typedef struct IDirect3DDevice9Ex *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DDevice9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DDevice9Ex_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->lpVtbl->TestCooperativeLevel(p) +#define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->lpVtbl->GetAvailableTextureMem(p) +#define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->lpVtbl->EvictManagedResources(p) +#define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->lpVtbl->GetDirect3D(p,a) +#define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->lpVtbl->GetDeviceCaps(p,a) +#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->lpVtbl->GetDisplayMode(p,a,b) +#define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->lpVtbl->GetCreationParameters(p,a) +#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->lpVtbl->SetCursorProperties(p,a,b,c) +#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->lpVtbl->SetCursorPosition(p,a,b,c) +#define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->lpVtbl->ShowCursor(p,a) +#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->lpVtbl->CreateAdditionalSwapChain(p,a,b) +#define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->lpVtbl->GetSwapChain(p,a,b) +#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->lpVtbl->GetNumberOfSwapChains(p) +#define IDirect3DDevice9Ex_Reset(p,a) (p)->lpVtbl->Reset(p,a) +#define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->lpVtbl->Present(p,a,b,c,d) +#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->lpVtbl->GetBackBuffer(p,a,b,c,d) +#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->lpVtbl->GetRasterStatus(p,a,b) +#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->lpVtbl->SetDialogBoxMode(p,a) +#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->lpVtbl->SetGammaRamp(p,a,b,c) +#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->lpVtbl->GetGammaRamp(p,a,b) +#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateTexture(p,a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) +#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateCubeTexture(p,a,b,c,d,e,f,g) +#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateVertexBuffer(p,a,b,c,d,e,f) +#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->lpVtbl->CreateIndexBuffer(p,a,b,c,d,e,f) +#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateRenderTarget(p,a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->lpVtbl->UpdateSurface(p,a,b,c,d) +#define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->lpVtbl->UpdateTexture(p,a,b) +#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->lpVtbl->GetRenderTargetData(p,a,b) +#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->lpVtbl->GetFrontBufferData(p,a,b) +#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->lpVtbl->StretchRect(p,a,b,c,d,e) +#define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->lpVtbl->ColorFill(p,a,b,c) +#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->lpVtbl->CreateOffscreenPlainSurface(p,a,b,c,d,e,f) +#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->lpVtbl->SetRenderTarget(p,a,b) +#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->lpVtbl->GetRenderTarget(p,a,b) +#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->lpVtbl->SetDepthStencilSurface(p,a) +#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->lpVtbl->GetDepthStencilSurface(p,a) +#define IDirect3DDevice9Ex_BeginScene(p) (p)->lpVtbl->BeginScene(p) +#define IDirect3DDevice9Ex_EndScene(p) (p)->lpVtbl->EndScene(p) +#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->lpVtbl->Clear(p,a,b,c,d,e,f) +#define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->lpVtbl->SetTransform(p,a,b) +#define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->lpVtbl->GetTransform(p,a,b) +#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->lpVtbl->MultiplyTransform(p,a,b) +#define IDirect3DDevice9Ex_SetViewport(p,a) (p)->lpVtbl->SetViewport(p,a) +#define IDirect3DDevice9Ex_GetViewport(p,a) (p)->lpVtbl->GetViewport(p,a) +#define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->lpVtbl->SetMaterial(p,a) +#define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->lpVtbl->GetMaterial(p,a) +#define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->lpVtbl->SetLight(p,a,b) +#define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->lpVtbl->GetLight(p,a,b) +#define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->lpVtbl->LightEnable(p,a,b) +#define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->lpVtbl->GetLightEnable(p,a,b) +#define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->lpVtbl->SetClipPlane(p,a,b) +#define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->lpVtbl->GetClipPlane(p,a,b) +#define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->lpVtbl->SetRenderState(p,a,b) +#define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->lpVtbl->GetRenderState(p,a,b) +#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->lpVtbl->CreateStateBlock(p,a,b) +#define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->lpVtbl->BeginStateBlock(p) +#define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->lpVtbl->EndStateBlock(p,a) +#define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->lpVtbl->SetClipStatus(p,a) +#define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->lpVtbl->GetClipStatus(p,a) +#define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->lpVtbl->GetTexture(p,a,b) +#define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->lpVtbl->SetTexture(p,a,b) +#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->lpVtbl->GetTextureStageState(p,a,b,c) +#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->lpVtbl->SetTextureStageState(p,a,b,c) +#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->lpVtbl->GetSamplerState(p,a,b,c) +#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->lpVtbl->SetSamplerState(p,a,b,c) +#define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->lpVtbl->ValidateDevice(p,a) +#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->lpVtbl->SetPaletteEntries(p,a,b) +#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->lpVtbl->GetPaletteEntries(p,a,b) +#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->lpVtbl->SetCurrentTexturePalette(p,a) +#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->lpVtbl->GetCurrentTexturePalette(p,a) +#define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->lpVtbl->SetScissorRect(p,a) +#define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->lpVtbl->GetScissorRect(p,a) +#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->lpVtbl->SetSoftwareVertexProcessing(p,a) +#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->lpVtbl->GetSoftwareVertexProcessing(p) +#define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->lpVtbl->SetNPatchMode(p,a) +#define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->lpVtbl->GetNPatchMode(p) +#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->lpVtbl->DrawPrimitive(p,a,b,c) +#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f) +#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d) +#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->lpVtbl->ProcessVertices(p,a,b,c,d,e,f) +#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->lpVtbl->CreateVertexDeclaration(p,a,b) +#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->lpVtbl->SetVertexDeclaration(p,a) +#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->lpVtbl->GetVertexDeclaration(p,a) +#define IDirect3DDevice9Ex_SetFVF(p,a) (p)->lpVtbl->SetFVF(p,a) +#define IDirect3DDevice9Ex_GetFVF(p,a) (p)->lpVtbl->GetFVF(p,a) +#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->lpVtbl->CreateVertexShader(p,a,b) +#define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->lpVtbl->SetVertexShader(p,a) +#define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->lpVtbl->GetVertexShader(p,a) +#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantF(p,a,b,c) +#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantF(p,a,b,c) +#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantI(p,a,b,c) +#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantI(p,a,b,c) +#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->SetVertexShaderConstantB(p,a,b,c) +#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->lpVtbl->GetVertexShaderConstantB(p,a,b,c) +#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->lpVtbl->SetStreamSource(p,a,b,c,d) +#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->lpVtbl->GetStreamSource(p,a,b,c,d) +#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->lpVtbl->SetStreamSourceFreq(p,a,b) +#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->lpVtbl->GetStreamSourceFreq(p,a,b) +#define IDirect3DDevice9Ex_SetIndices(p,a) (p)->lpVtbl->SetIndices(p,a) +#define IDirect3DDevice9Ex_GetIndices(p,a) (p)->lpVtbl->GetIndices(p,a) +#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->lpVtbl->CreatePixelShader(p,a,b) +#define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->lpVtbl->SetPixelShader(p,a) +#define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->lpVtbl->GetPixelShader(p,a) +#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantF(p,a,b,c) +#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantF(p,a,b,c) +#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantI(p,a,b,c) +#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantI(p,a,b,c) +#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->SetPixelShaderConstantB(p,a,b,c) +#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->lpVtbl->GetPixelShaderConstantB(p,a,b,c) +#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c) +#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c) +#define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a) +#define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->lpVtbl->CreateQuery(p,a,b) +#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->lpVtbl->SetConvolutionMonoKernel(p,a,b,c,d) +#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->ComposeRects(p,a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->lpVtbl->PresentEx(p,a,b,c,d,e) +#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->lpVtbl->GetGPUThreadPriority(p,a) +#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->lpVtbl->SetGPUThreadPriority(p,a) +#define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->lpVtbl->WaitForVBlank(p,a) +#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->lpVtbl->CheckResourceResidency(p,a,b) +#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->lpVtbl->SetMaximumFrameLatency(p,a) +#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->lpVtbl->GetMaximumFrameLatency(p,a) +#define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->lpVtbl->CheckDeviceState(p,a) +#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) +#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) (p)->lpVtbl->CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) +#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) (p)->lpVtbl->CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) +#define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->lpVtbl->ResetEx(p,a,b) +#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->lpVtbl->GetDisplayModeEx(p,a,b,c) +#else +#define IDirect3DDevice9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DDevice9Ex_AddRef(p) (p)->AddRef() +#define IDirect3DDevice9Ex_Release(p) (p)->Release() +#define IDirect3DDevice9Ex_TestCooperativeLevel(p) (p)->TestCooperativeLevel() +#define IDirect3DDevice9Ex_GetAvailableTextureMem(p) (p)->GetAvailableTextureMem() +#define IDirect3DDevice9Ex_EvictManagedResources(p) (p)->EvictManagedResources() +#define IDirect3DDevice9Ex_GetDirect3D(p,a) (p)->GetDirect3D(a) +#define IDirect3DDevice9Ex_GetDeviceCaps(p,a) (p)->GetDeviceCaps(a) +#define IDirect3DDevice9Ex_GetDisplayMode(p,a,b) (p)->GetDisplayMode(a,b) +#define IDirect3DDevice9Ex_GetCreationParameters(p,a) (p)->GetCreationParameters(a) +#define IDirect3DDevice9Ex_SetCursorProperties(p,a,b,c) (p)->SetCursorProperties(a,b,c) +#define IDirect3DDevice9Ex_SetCursorPosition(p,a,b,c) (p)->SetCursorPosition(a,b,c) +#define IDirect3DDevice9Ex_ShowCursor(p,a) (p)->ShowCursor(a) +#define IDirect3DDevice9Ex_CreateAdditionalSwapChain(p,a,b) (p)->CreateAdditionalSwapChain(a,b) +#define IDirect3DDevice9Ex_GetSwapChain(p,a,b) (p)->GetSwapChain(a,b) +#define IDirect3DDevice9Ex_GetNumberOfSwapChains(p) (p)->GetNumberOfSwapChains() +#define IDirect3DDevice9Ex_Reset(p,a) (p)->Reset(a) +#define IDirect3DDevice9Ex_Present(p,a,b,c,d) (p)->Present(a,b,c,d) +#define IDirect3DDevice9Ex_GetBackBuffer(p,a,b,c,d) (p)->GetBackBuffer(a,b,c,d) +#define IDirect3DDevice9Ex_GetRasterStatus(p,a,b) (p)->GetRasterStatus(a,b) +#define IDirect3DDevice9Ex_SetDialogBoxMode(p,a) (p)->SetDialogBoxMode(a) +#define IDirect3DDevice9Ex_SetGammaRamp(p,a,b,c) (p)->SetGammaRamp(a,b,c) +#define IDirect3DDevice9Ex_GetGammaRamp(p,a,b) (p)->GetGammaRamp(a,b) +#define IDirect3DDevice9Ex_CreateTexture(p,a,b,c,d,e,f,g,h) (p)->CreateTexture(a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_CreateVolumeTexture(p,a,b,c,d,e,f,g,h,i) (p)->CreateVolumeTexture(a,b,c,d,e,f,g,h,i) +#define IDirect3DDevice9Ex_CreateCubeTexture(p,a,b,c,d,e,f,g) (p)->CreateCubeTexture(a,b,c,d,e,f,g) +#define IDirect3DDevice9Ex_CreateVertexBuffer(p,a,b,c,d,e,f) (p)->CreateVertexBuffer(a,b,c,d,e,f) +#define IDirect3DDevice9Ex_CreateIndexBuffer(p,a,b,c,d,e,f) (p)->CreateIndexBuffer(a,b,c,d,e,f) +#define IDirect3DDevice9Ex_CreateRenderTarget(p,a,b,c,d,e,f,g,h) (p)->CreateRenderTarget(a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_CreateDepthStencilSurface(p,a,b,c,d,e,f,g,h) (p)->CreateDepthStencilSurface(a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_UpdateSurface(p,a,b,c,d) (p)->UpdateSurface(a,b,c,d) +#define IDirect3DDevice9Ex_UpdateTexture(p,a,b) (p)->UpdateTexture(a,b) +#define IDirect3DDevice9Ex_GetRenderTargetData(p,a,b) (p)->GetRenderTargetData(a,b) +#define IDirect3DDevice9Ex_GetFrontBufferData(p,a,b) (p)->GetFrontBufferData(a,b) +#define IDirect3DDevice9Ex_StretchRect(p,a,b,c,d,e) (p)->StretchRect(a,b,c,d,e) +#define IDirect3DDevice9Ex_ColorFill(p,a,b,c) (p)->ColorFill(a,b,c) +#define IDirect3DDevice9Ex_CreateOffscreenPlainSurface(p,a,b,c,d,e,f) (p)->CreateOffscreenPlainSurface(a,b,c,d,e,f) +#define IDirect3DDevice9Ex_SetRenderTarget(p,a,b) (p)->SetRenderTarget(a,b) +#define IDirect3DDevice9Ex_GetRenderTarget(p,a,b) (p)->GetRenderTarget(a,b) +#define IDirect3DDevice9Ex_SetDepthStencilSurface(p,a) (p)->SetDepthStencilSurface(a) +#define IDirect3DDevice9Ex_GetDepthStencilSurface(p,a) (p)->GetDepthStencilSurface(a) +#define IDirect3DDevice9Ex_BeginScene(p) (p)->BeginScene() +#define IDirect3DDevice9Ex_EndScene(p) (p)->EndScene() +#define IDirect3DDevice9Ex_Clear(p,a,b,c,d,e,f) (p)->Clear(a,b,c,d,e,f) +#define IDirect3DDevice9Ex_SetTransform(p,a,b) (p)->SetTransform(a,b) +#define IDirect3DDevice9Ex_GetTransform(p,a,b) (p)->GetTransform(a,b) +#define IDirect3DDevice9Ex_MultiplyTransform(p,a,b) (p)->MultiplyTransform(a,b) +#define IDirect3DDevice9Ex_SetViewport(p,a) (p)->SetViewport(a) +#define IDirect3DDevice9Ex_GetViewport(p,a) (p)->GetViewport(a) +#define IDirect3DDevice9Ex_SetMaterial(p,a) (p)->SetMaterial(a) +#define IDirect3DDevice9Ex_GetMaterial(p,a) (p)->GetMaterial(a) +#define IDirect3DDevice9Ex_SetLight(p,a,b) (p)->SetLight(a,b) +#define IDirect3DDevice9Ex_GetLight(p,a,b) (p)->GetLight(a,b) +#define IDirect3DDevice9Ex_LightEnable(p,a,b) (p)->LightEnable(a,b) +#define IDirect3DDevice9Ex_GetLightEnable(p,a,b) (p)->GetLightEnable(a,b) +#define IDirect3DDevice9Ex_SetClipPlane(p,a,b) (p)->SetClipPlane(a,b) +#define IDirect3DDevice9Ex_GetClipPlane(p,a,b) (p)->GetClipPlane(a,b) +#define IDirect3DDevice9Ex_SetRenderState(p,a,b) (p)->SetRenderState(a,b) +#define IDirect3DDevice9Ex_GetRenderState(p,a,b) (p)->GetRenderState(a,b) +#define IDirect3DDevice9Ex_CreateStateBlock(p,a,b) (p)->CreateStateBlock(a,b) +#define IDirect3DDevice9Ex_BeginStateBlock(p) (p)->BeginStateBlock() +#define IDirect3DDevice9Ex_EndStateBlock(p,a) (p)->EndStateBlock(a) +#define IDirect3DDevice9Ex_SetClipStatus(p,a) (p)->SetClipStatus(a) +#define IDirect3DDevice9Ex_GetClipStatus(p,a) (p)->GetClipStatus(a) +#define IDirect3DDevice9Ex_GetTexture(p,a,b) (p)->GetTexture(a,b) +#define IDirect3DDevice9Ex_SetTexture(p,a,b) (p)->SetTexture(a,b) +#define IDirect3DDevice9Ex_GetTextureStageState(p,a,b,c) (p)->GetTextureStageState(a,b,c) +#define IDirect3DDevice9Ex_SetTextureStageState(p,a,b,c) (p)->SetTextureStageState(a,b,c) +#define IDirect3DDevice9Ex_GetSamplerState(p,a,b,c) (p)->GetSamplerState(a,b,c) +#define IDirect3DDevice9Ex_SetSamplerState(p,a,b,c) (p)->SetSamplerState(a,b,c) +#define IDirect3DDevice9Ex_ValidateDevice(p,a) (p)->ValidateDevice(a) +#define IDirect3DDevice9Ex_SetPaletteEntries(p,a,b) (p)->SetPaletteEntries(a,b) +#define IDirect3DDevice9Ex_GetPaletteEntries(p,a,b) (p)->GetPaletteEntries(a,b) +#define IDirect3DDevice9Ex_SetCurrentTexturePalette(p,a) (p)->SetCurrentTexturePalette(a) +#define IDirect3DDevice9Ex_GetCurrentTexturePalette(p,a) (p)->GetCurrentTexturePalette(a) +#define IDirect3DDevice9Ex_SetScissorRect(p,a) (p)->SetScissorRect(a) +#define IDirect3DDevice9Ex_GetScissorRect(p,a) (p)->GetScissorRect(a) +#define IDirect3DDevice9Ex_SetSoftwareVertexProcessing(p,a) (p)->SetSoftwareVertexProcessing(a) +#define IDirect3DDevice9Ex_GetSoftwareVertexProcessing(p) (p)->GetSoftwareVertexProcessing() +#define IDirect3DDevice9Ex_SetNPatchMode(p,a) (p)->SetNPatchMode(a) +#define IDirect3DDevice9Ex_GetNPatchMode(p) (p)->GetNPatchMode() +#define IDirect3DDevice9Ex_DrawPrimitive(p,a,b,c) (p)->DrawPrimitive(a,b,c) +#define IDirect3DDevice9Ex_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->DrawIndexedPrimitive(a,b,c,d,e,f) +#define IDirect3DDevice9Ex_DrawPrimitiveUP(p,a,b,c,d) (p)->DrawPrimitiveUP(a,b,c,d) +#define IDirect3DDevice9Ex_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->DrawIndexedPrimitiveUP(a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_ProcessVertices(p,a,b,c,d,e,f) (p)->ProcessVertices(a,b,c,d,e,f) +#define IDirect3DDevice9Ex_CreateVertexDeclaration(p,a,b) (p)->CreateVertexDeclaration(a,b) +#define IDirect3DDevice9Ex_SetVertexDeclaration(p,a) (p)->SetVertexDeclaration(a) +#define IDirect3DDevice9Ex_GetVertexDeclaration(p,a) (p)->GetVertexDeclaration(a) +#define IDirect3DDevice9Ex_SetFVF(p,a) (p)->SetFVF(a) +#define IDirect3DDevice9Ex_GetFVF(p,a) (p)->GetFVF(a) +#define IDirect3DDevice9Ex_CreateVertexShader(p,a,b) (p)->CreateVertexShader(a,b) +#define IDirect3DDevice9Ex_SetVertexShader(p,a) (p)->SetVertexShader(a) +#define IDirect3DDevice9Ex_GetVertexShader(p,a) (p)->GetVertexShader(a) +#define IDirect3DDevice9Ex_SetVertexShaderConstantF(p,a,b,c) (p)->SetVertexShaderConstantF(a,b,c) +#define IDirect3DDevice9Ex_GetVertexShaderConstantF(p,a,b,c) (p)->GetVertexShaderConstantF(a,b,c) +#define IDirect3DDevice9Ex_SetVertexShaderConstantI(p,a,b,c) (p)->SetVertexShaderConstantI(a,b,c) +#define IDirect3DDevice9Ex_GetVertexShaderConstantI(p,a,b,c) (p)->GetVertexShaderConstantI(a,b,c) +#define IDirect3DDevice9Ex_SetVertexShaderConstantB(p,a,b,c) (p)->SetVertexShaderConstantB(a,b,c) +#define IDirect3DDevice9Ex_GetVertexShaderConstantB(p,a,b,c) (p)->GetVertexShaderConstantB(a,b,c) +#define IDirect3DDevice9Ex_SetStreamSource(p,a,b,c,d) (p)->SetStreamSource(a,b,c,d) +#define IDirect3DDevice9Ex_GetStreamSource(p,a,b,c,d) (p)->GetStreamSource(a,b,c,d) +#define IDirect3DDevice9Ex_SetStreamSourceFreq(p,a,b) (p)->SetStreamSourceFreq(a,b) +#define IDirect3DDevice9Ex_GetStreamSourceFreq(p,a,b) (p)->GetStreamSourceFreq(a,b) +#define IDirect3DDevice9Ex_SetIndices(p,a) (p)->SetIndices(a) +#define IDirect3DDevice9Ex_GetIndices(p,a) (p)->GetIndices(a) +#define IDirect3DDevice9Ex_CreatePixelShader(p,a,b) (p)->CreatePixelShader(a,b) +#define IDirect3DDevice9Ex_SetPixelShader(p,a) (p)->SetPixelShader(a) +#define IDirect3DDevice9Ex_GetPixelShader(p,a) (p)->GetPixelShader(a) +#define IDirect3DDevice9Ex_SetPixelShaderConstantF(p,a,b,c) (p)->SetPixelShaderConstantF(a,b,c) +#define IDirect3DDevice9Ex_GetPixelShaderConstantF(p,a,b,c) (p)->GetPixelShaderConstantF(a,b,c) +#define IDirect3DDevice9Ex_SetPixelShaderConstantI(p,a,b,c) (p)->SetPixelShaderConstantI(a,b,c) +#define IDirect3DDevice9Ex_GetPixelShaderConstantI(p,a,b,c) (p)->GetPixelShaderConstantI(a,b,c) +#define IDirect3DDevice9Ex_SetPixelShaderConstantB(p,a,b,c) (p)->SetPixelShaderConstantB(a,b,c) +#define IDirect3DDevice9Ex_GetPixelShaderConstantB(p,a,b,c) (p)->GetPixelShaderConstantB(a,b,c) +#define IDirect3DDevice9Ex_DrawRectPatch(p,a,b,c) (p)->DrawRectPatch(a,b,c) +#define IDirect3DDevice9Ex_DrawTriPatch(p,a,b,c) (p)->DrawTriPatch(a,b,c) +#define IDirect3DDevice9Ex_DeletePatch(p,a) (p)->DeletePatch(a) +#define IDirect3DDevice9Ex_CreateQuery(p,a,b) (p)->CreateQuery(a,b) +#define IDirect3DDevice9Ex_SetConvolutionMonoKernel(p,a,b,c,d) (p)->SetConvolutionMonoKernel(a,b,c,d) +#define IDirect3DDevice9Ex_ComposeRects(p,a,b,c,d,e,f,g,h) (p)->ComposeRects(a,b,c,d,e,f,g,h) +#define IDirect3DDevice9Ex_PresentEx(p,a,b,c,d,e) (p)->PresentEx(a,b,c,d,e) +#define IDirect3DDevice9Ex_GetGPUThreadPriority(p,a) (p)->GetGPUThreadPriority(a) +#define IDirect3DDevice9Ex_SetGPUThreadPriority(p,a) (p)->SetGPUThreadPriority(a) +#define IDirect3DDevice9Ex_WaitForVBlank(p,a) (p)->WaitForVBlank(a) +#define IDirect3DDevice9Ex_CheckResourceResidency(p,a,b) (p)->CheckResourceResidency(a,b) +#define IDirect3DDevice9Ex_SetMaximumFrameLatency(p,a) (p)->SetMaximumFrameLatency(a) +#define IDirect3DDevice9Ex_GetMaximumFrameLatency(p,a) (p)->GetMaximumFrameLatency(a) +#define IDirect3DDevice9Ex_CheckDeviceState(p,a) (p)->CheckDeviceState(a) +#define IDirect3DDevice9Ex_CreateRenderTargetEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateRenderTargetEx(a,b,c,d,e,f,g,h,i) +#define IDirect3DDevice9Ex_CreateOffscreenPlainSurfaceEx(p,a,b,c,d,e,f,g) (p)->CreateOffscreenPlainSurfaceEx(a,b,c,d,e,f,g) +#define IDirect3DDevice9Ex_CreateDepthStencilSurfaceEx(p,a,b,c,d,e,f,g,h,i) (p)->CreateDepthStencilSurfaceEx(a,b,c,d,e,f,g,h,i) +#define IDirect3DDevice9Ex_ResetEx(p,a,b) (p)->ResetEx(a,b) +#define IDirect3DDevice9Ex_GetDisplayModeEx(p,a,b,c) (p)->GetDisplayModeEx(a,b,c) +#endif + + + +#undef INTERFACE +#define INTERFACE IDirect3DSwapChain9Ex + +DECLARE_INTERFACE_(IDirect3DSwapChain9Ex, IDirect3DSwapChain9) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirect3DSwapChain9 methods ***/ + STDMETHOD(Present)(THIS_ CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA* pDirtyRegion,DWORD dwFlags) PURE; + STDMETHOD(GetFrontBufferData)(THIS_ IDirect3DSurface9* pDestSurface) PURE; + STDMETHOD(GetBackBuffer)(THIS_ UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,IDirect3DSurface9** ppBackBuffer) PURE; + STDMETHOD(GetRasterStatus)(THIS_ D3DRASTER_STATUS* pRasterStatus) PURE; + STDMETHOD(GetDisplayMode)(THIS_ D3DDISPLAYMODE* pMode) PURE; + STDMETHOD(GetDevice)(THIS_ IDirect3DDevice9** ppDevice) PURE; + STDMETHOD(GetPresentParameters)(THIS_ D3DPRESENT_PARAMETERS* pPresentationParameters) PURE; + STDMETHOD(GetLastPresentCount)(THIS_ UINT* pLastPresentCount) PURE; + STDMETHOD(GetPresentStats)(THIS_ D3DPRESENTSTATS* pPresentationStatistics) PURE; + STDMETHOD(GetDisplayModeEx)(THIS_ D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation) PURE; +}; + +typedef struct IDirect3DSwapChain9Ex *LPDIRECT3DSWAPCHAIN9EX, *PDIRECT3DSWAPCHAIN9EX; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirect3DSwapChain9Ex_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirect3DSwapChain9Ex_Release(p) (p)->lpVtbl->Release(p) +#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->lpVtbl->Present(p,a,b,c,d,e) +#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->lpVtbl->GetFrontBufferData(p,a) +#define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c) (p)->lpVtbl->GetBackBuffer(p,a,b,c) +#define IDirect3DSwapChain9Ex_GetRasterStatus(p,a) (p)->lpVtbl->GetRasterStatus(p,a) +#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->lpVtbl->GetDisplayMode(p,a) +#define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->lpVtbl->GetDevice(p,a) +#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->lpVtbl->GetPresentParameters(p,a) +#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->lpVtbl->GetLastPresentCount(p,a) +#define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->lpVtbl->GetPresentStats(p,a) +#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->lpVtbl->GetDisplayModeEx(p,a,b) +#else +#define IDirect3DSwapChain9Ex_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirect3DSwapChain9Ex_AddRef(p) (p)->AddRef() +#define IDirect3DSwapChain9Ex_Release(p) (p)->Release() +#define IDirect3DSwapChain9Ex_Present(p,a,b,c,d,e) (p)->Present(a,b,c,d,e) +#define IDirect3DSwapChain9Ex_GetFrontBufferData(p,a) (p)->GetFrontBufferData(a) +#define IDirect3DSwapChain9Ex_GetBackBuffer(p,a,b,c) (p)->GetBackBuffer(a,b,c) +#define IDirect3DSwapChain9Ex_GetRasterStatus(p,a) (p)->GetRasterStatus(a) +#define IDirect3DSwapChain9Ex_GetDisplayMode(p,a) (p)->GetDisplayMode(a) +#define IDirect3DSwapChain9Ex_GetDevice(p,a) (p)->GetDevice(a) +#define IDirect3DSwapChain9Ex_GetPresentParameters(p,a) (p)->GetPresentParameters(a) +#define IDirect3DSwapChain9Ex_GetLastPresentCount(p,a) (p)->GetLastPresentCount(a) +#define IDirect3DSwapChain9Ex_GetPresentStats(p,a) (p)->GetPresentStats(a) +#define IDirect3DSwapChain9Ex_GetDisplayModeEx(p,a,b) (p)->GetDisplayModeEx(a,b) +#endif + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + + + +#ifdef __cplusplus +}; +#endif + +#endif /* (DIRECT3D_VERSION >= 0x0900) */ +#endif /* _D3D_H_ */ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3d9caps.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3d9caps.h new file mode 100644 index 0000000000..a7df08aa13 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3d9caps.h @@ -0,0 +1,512 @@ +/*==========================================================================; + * + * Copyright (C) Microsoft Corporation. All Rights Reserved. + * + * File: d3d9caps.h + * Content: Direct3D capabilities include file + * + ***************************************************************************/ + +#ifndef _d3d9CAPS_H +#define _d3d9CAPS_H + +#ifndef DIRECT3D_VERSION +#define DIRECT3D_VERSION 0x0900 +#endif //DIRECT3D_VERSION + +// include this file content only if compiling for DX9 interfaces +#if(DIRECT3D_VERSION >= 0x0900) + +#if defined(_X86_) || defined(_IA64_) +#pragma pack(4) +#endif + +typedef struct _D3DVSHADERCAPS2_0 +{ + DWORD Caps; + INT DynamicFlowControlDepth; + INT NumTemps; + INT StaticFlowControlDepth; +} D3DVSHADERCAPS2_0; + +#define D3DVS20CAPS_PREDICATION (1<<0) + +#define D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH 24 +#define D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH 0 +#define D3DVS20_MAX_NUMTEMPS 32 +#define D3DVS20_MIN_NUMTEMPS 12 +#define D3DVS20_MAX_STATICFLOWCONTROLDEPTH 4 +#define D3DVS20_MIN_STATICFLOWCONTROLDEPTH 1 + +typedef struct _D3DPSHADERCAPS2_0 +{ + DWORD Caps; + INT DynamicFlowControlDepth; + INT NumTemps; + INT StaticFlowControlDepth; + INT NumInstructionSlots; +} D3DPSHADERCAPS2_0; + +#define D3DPS20CAPS_ARBITRARYSWIZZLE (1<<0) +#define D3DPS20CAPS_GRADIENTINSTRUCTIONS (1<<1) +#define D3DPS20CAPS_PREDICATION (1<<2) +#define D3DPS20CAPS_NODEPENDENTREADLIMIT (1<<3) +#define D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT (1<<4) + +#define D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH 24 +#define D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH 0 +#define D3DPS20_MAX_NUMTEMPS 32 +#define D3DPS20_MIN_NUMTEMPS 12 +#define D3DPS20_MAX_STATICFLOWCONTROLDEPTH 4 +#define D3DPS20_MIN_STATICFLOWCONTROLDEPTH 0 +#define D3DPS20_MAX_NUMINSTRUCTIONSLOTS 512 +#define D3DPS20_MIN_NUMINSTRUCTIONSLOTS 96 + +#define D3DMIN30SHADERINSTRUCTIONS 512 +#define D3DMAX30SHADERINSTRUCTIONS 32768 + +typedef struct _D3DCAPS9 +{ + /* Device Info */ + D3DDEVTYPE DeviceType; + UINT AdapterOrdinal; + + /* Caps from DX7 Draw */ + DWORD Caps; + DWORD Caps2; + DWORD Caps3; + DWORD PresentationIntervals; + + /* Cursor Caps */ + DWORD CursorCaps; + + /* 3D Device Caps */ + DWORD DevCaps; + + DWORD PrimitiveMiscCaps; + DWORD RasterCaps; + DWORD ZCmpCaps; + DWORD SrcBlendCaps; + DWORD DestBlendCaps; + DWORD AlphaCmpCaps; + DWORD ShadeCaps; + DWORD TextureCaps; + DWORD TextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's + DWORD CubeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DCubeTexture9's + DWORD VolumeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DVolumeTexture9's + DWORD TextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DTexture9's + DWORD VolumeTextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DVolumeTexture9's + + DWORD LineCaps; // D3DLINECAPS + + DWORD MaxTextureWidth, MaxTextureHeight; + DWORD MaxVolumeExtent; + + DWORD MaxTextureRepeat; + DWORD MaxTextureAspectRatio; + DWORD MaxAnisotropy; + float MaxVertexW; + + float GuardBandLeft; + float GuardBandTop; + float GuardBandRight; + float GuardBandBottom; + + float ExtentsAdjust; + DWORD StencilCaps; + + DWORD FVFCaps; + DWORD TextureOpCaps; + DWORD MaxTextureBlendStages; + DWORD MaxSimultaneousTextures; + + DWORD VertexProcessingCaps; + DWORD MaxActiveLights; + DWORD MaxUserClipPlanes; + DWORD MaxVertexBlendMatrices; + DWORD MaxVertexBlendMatrixIndex; + + float MaxPointSize; + + DWORD MaxPrimitiveCount; // max number of primitives per DrawPrimitive call + DWORD MaxVertexIndex; + DWORD MaxStreams; + DWORD MaxStreamStride; // max stride for SetStreamSource + + DWORD VertexShaderVersion; + DWORD MaxVertexShaderConst; // number of vertex shader constant registers + + DWORD PixelShaderVersion; + float PixelShader1xMaxValue; // max value storable in registers of ps.1.x shaders + + // Here are the DX9 specific ones + DWORD DevCaps2; + + float MaxNpatchTessellationLevel; + DWORD Reserved5; + + UINT MasterAdapterOrdinal; // ordinal of master adaptor for adapter group + UINT AdapterOrdinalInGroup; // ordinal inside the adapter group + UINT NumberOfAdaptersInGroup; // number of adapters in this adapter group (only if master) + DWORD DeclTypes; // Data types, supported in vertex declarations + DWORD NumSimultaneousRTs; // Will be at least 1 + DWORD StretchRectFilterCaps; // Filter caps supported by StretchRect + D3DVSHADERCAPS2_0 VS20Caps; + D3DPSHADERCAPS2_0 PS20Caps; + DWORD VertexTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's for texture, used in vertex shaders + DWORD MaxVShaderInstructionsExecuted; // maximum number of vertex shader instructions that can be executed + DWORD MaxPShaderInstructionsExecuted; // maximum number of pixel shader instructions that can be executed + DWORD MaxVertexShader30InstructionSlots; + DWORD MaxPixelShader30InstructionSlots; +} D3DCAPS9; + +// +// BIT DEFINES FOR D3DCAPS9 DWORD MEMBERS +// + +// +// Caps +// +#define D3DCAPS_READ_SCANLINE 0x00020000L + +// +// Caps2 +// +#define D3DCAPS2_FULLSCREENGAMMA 0x00020000L +#define D3DCAPS2_CANCALIBRATEGAMMA 0x00100000L +#define D3DCAPS2_RESERVED 0x02000000L +#define D3DCAPS2_CANMANAGERESOURCE 0x10000000L +#define D3DCAPS2_DYNAMICTEXTURES 0x20000000L +#define D3DCAPS2_CANAUTOGENMIPMAP 0x40000000L + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +#define D3DCAPS2_CANSHARERESOURCE 0x80000000L + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + +// +// Caps3 +// +#define D3DCAPS3_RESERVED 0x8000001fL + +// Indicates that the device can respect the ALPHABLENDENABLE render state +// when fullscreen while using the FLIP or DISCARD swap effect. +// COPY and COPYVSYNC swap effects work whether or not this flag is set. +#define D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD 0x00000020L + +// Indicates that the device can perform a gamma correction from +// a windowed back buffer containing linear content to the sRGB desktop. +#define D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION 0x00000080L + +#define D3DCAPS3_COPY_TO_VIDMEM 0x00000100L /* Device can acclerate copies from sysmem to local vidmem */ +#define D3DCAPS3_COPY_TO_SYSTEMMEM 0x00000200L /* Device can acclerate copies from local vidmem to sysmem */ + + +// +// PresentationIntervals +// +#define D3DPRESENT_INTERVAL_DEFAULT 0x00000000L +#define D3DPRESENT_INTERVAL_ONE 0x00000001L +#define D3DPRESENT_INTERVAL_TWO 0x00000002L +#define D3DPRESENT_INTERVAL_THREE 0x00000004L +#define D3DPRESENT_INTERVAL_FOUR 0x00000008L +#define D3DPRESENT_INTERVAL_IMMEDIATE 0x80000000L + +// +// CursorCaps +// +// Driver supports HW color cursor in at least hi-res modes(height >=400) +#define D3DCURSORCAPS_COLOR 0x00000001L +// Driver supports HW cursor also in low-res modes(height < 400) +#define D3DCURSORCAPS_LOWRES 0x00000002L + +// +// DevCaps +// +#define D3DDEVCAPS_EXECUTESYSTEMMEMORY 0x00000010L /* Device can use execute buffers from system memory */ +#define D3DDEVCAPS_EXECUTEVIDEOMEMORY 0x00000020L /* Device can use execute buffers from video memory */ +#define D3DDEVCAPS_TLVERTEXSYSTEMMEMORY 0x00000040L /* Device can use TL buffers from system memory */ +#define D3DDEVCAPS_TLVERTEXVIDEOMEMORY 0x00000080L /* Device can use TL buffers from video memory */ +#define D3DDEVCAPS_TEXTURESYSTEMMEMORY 0x00000100L /* Device can texture from system memory */ +#define D3DDEVCAPS_TEXTUREVIDEOMEMORY 0x00000200L /* Device can texture from device memory */ +#define D3DDEVCAPS_DRAWPRIMTLVERTEX 0x00000400L /* Device can draw TLVERTEX primitives */ +#define D3DDEVCAPS_CANRENDERAFTERFLIP 0x00000800L /* Device can render without waiting for flip to complete */ +#define D3DDEVCAPS_TEXTURENONLOCALVIDMEM 0x00001000L /* Device can texture from nonlocal video memory */ +#define D3DDEVCAPS_DRAWPRIMITIVES2 0x00002000L /* Device can support DrawPrimitives2 */ +#define D3DDEVCAPS_SEPARATETEXTUREMEMORIES 0x00004000L /* Device is texturing from separate memory pools */ +#define D3DDEVCAPS_DRAWPRIMITIVES2EX 0x00008000L /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/ +#define D3DDEVCAPS_HWTRANSFORMANDLIGHT 0x00010000L /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */ +#define D3DDEVCAPS_CANBLTSYSTONONLOCAL 0x00020000L /* Device supports a Tex Blt from system memory to non-local vidmem */ +#define D3DDEVCAPS_HWRASTERIZATION 0x00080000L /* Device has HW acceleration for rasterization */ +#define D3DDEVCAPS_PUREDEVICE 0x00100000L /* Device supports D3DCREATE_PUREDEVICE */ +#define D3DDEVCAPS_QUINTICRTPATCHES 0x00200000L /* Device supports quintic Beziers and BSplines */ +#define D3DDEVCAPS_RTPATCHES 0x00400000L /* Device supports Rect and Tri patches */ +#define D3DDEVCAPS_RTPATCHHANDLEZERO 0x00800000L /* Indicates that RT Patches may be drawn efficiently using handle 0 */ +#define D3DDEVCAPS_NPATCHES 0x01000000L /* Device supports N-Patches */ + +// +// PrimitiveMiscCaps +// +#define D3DPMISCCAPS_MASKZ 0x00000002L +#define D3DPMISCCAPS_CULLNONE 0x00000010L +#define D3DPMISCCAPS_CULLCW 0x00000020L +#define D3DPMISCCAPS_CULLCCW 0x00000040L +#define D3DPMISCCAPS_COLORWRITEENABLE 0x00000080L +#define D3DPMISCCAPS_CLIPPLANESCALEDPOINTS 0x00000100L /* Device correctly clips scaled points to clip planes */ +#define D3DPMISCCAPS_CLIPTLVERTS 0x00000200L /* device will clip post-transformed vertex primitives */ +#define D3DPMISCCAPS_TSSARGTEMP 0x00000400L /* device supports D3DTA_TEMP for temporary register */ +#define D3DPMISCCAPS_BLENDOP 0x00000800L /* device supports D3DRS_BLENDOP */ +#define D3DPMISCCAPS_NULLREFERENCE 0x00001000L /* Reference Device that doesnt render */ +#define D3DPMISCCAPS_INDEPENDENTWRITEMASKS 0x00004000L /* Device supports independent write masks for MET or MRT */ +#define D3DPMISCCAPS_PERSTAGECONSTANT 0x00008000L /* Device supports per-stage constants */ +#define D3DPMISCCAPS_FOGANDSPECULARALPHA 0x00010000L /* Device supports separate fog and specular alpha (many devices + use the specular alpha channel to store fog factor) */ +#define D3DPMISCCAPS_SEPARATEALPHABLEND 0x00020000L /* Device supports separate blend settings for the alpha channel */ +#define D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS 0x00040000L /* Device supports different bit depths for MRT */ +#define D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING 0x00080000L /* Device supports post-pixel shader operations for MRT */ +#define D3DPMISCCAPS_FOGVERTEXCLAMPED 0x00100000L /* Device clamps fog blend factor per vertex */ + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +#define D3DPMISCCAPS_POSTBLENDSRGBCONVERT 0x00200000L /* Indicates device can perform conversion to sRGB after blending. */ + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + + +// +// LineCaps +// +#define D3DLINECAPS_TEXTURE 0x00000001L +#define D3DLINECAPS_ZTEST 0x00000002L +#define D3DLINECAPS_BLEND 0x00000004L +#define D3DLINECAPS_ALPHACMP 0x00000008L +#define D3DLINECAPS_FOG 0x00000010L +#define D3DLINECAPS_ANTIALIAS 0x00000020L + +// +// RasterCaps +// +#define D3DPRASTERCAPS_DITHER 0x00000001L +#define D3DPRASTERCAPS_ZTEST 0x00000010L +#define D3DPRASTERCAPS_FOGVERTEX 0x00000080L +#define D3DPRASTERCAPS_FOGTABLE 0x00000100L +#define D3DPRASTERCAPS_MIPMAPLODBIAS 0x00002000L +#define D3DPRASTERCAPS_ZBUFFERLESSHSR 0x00008000L +#define D3DPRASTERCAPS_FOGRANGE 0x00010000L +#define D3DPRASTERCAPS_ANISOTROPY 0x00020000L +#define D3DPRASTERCAPS_WBUFFER 0x00040000L +#define D3DPRASTERCAPS_WFOG 0x00100000L +#define D3DPRASTERCAPS_ZFOG 0x00200000L +#define D3DPRASTERCAPS_COLORPERSPECTIVE 0x00400000L /* Device iterates colors perspective correct */ +#define D3DPRASTERCAPS_SCISSORTEST 0x01000000L +#define D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS 0x02000000L +#define D3DPRASTERCAPS_DEPTHBIAS 0x04000000L +#define D3DPRASTERCAPS_MULTISAMPLE_TOGGLE 0x08000000L + +// +// ZCmpCaps, AlphaCmpCaps +// +#define D3DPCMPCAPS_NEVER 0x00000001L +#define D3DPCMPCAPS_LESS 0x00000002L +#define D3DPCMPCAPS_EQUAL 0x00000004L +#define D3DPCMPCAPS_LESSEQUAL 0x00000008L +#define D3DPCMPCAPS_GREATER 0x00000010L +#define D3DPCMPCAPS_NOTEQUAL 0x00000020L +#define D3DPCMPCAPS_GREATEREQUAL 0x00000040L +#define D3DPCMPCAPS_ALWAYS 0x00000080L + +// +// SourceBlendCaps, DestBlendCaps +// +#define D3DPBLENDCAPS_ZERO 0x00000001L +#define D3DPBLENDCAPS_ONE 0x00000002L +#define D3DPBLENDCAPS_SRCCOLOR 0x00000004L +#define D3DPBLENDCAPS_INVSRCCOLOR 0x00000008L +#define D3DPBLENDCAPS_SRCALPHA 0x00000010L +#define D3DPBLENDCAPS_INVSRCALPHA 0x00000020L +#define D3DPBLENDCAPS_DESTALPHA 0x00000040L +#define D3DPBLENDCAPS_INVDESTALPHA 0x00000080L +#define D3DPBLENDCAPS_DESTCOLOR 0x00000100L +#define D3DPBLENDCAPS_INVDESTCOLOR 0x00000200L +#define D3DPBLENDCAPS_SRCALPHASAT 0x00000400L +#define D3DPBLENDCAPS_BOTHSRCALPHA 0x00000800L +#define D3DPBLENDCAPS_BOTHINVSRCALPHA 0x00001000L +#define D3DPBLENDCAPS_BLENDFACTOR 0x00002000L /* Supports both D3DBLEND_BLENDFACTOR and D3DBLEND_INVBLENDFACTOR */ + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +#define D3DPBLENDCAPS_SRCCOLOR2 0x00004000L +#define D3DPBLENDCAPS_INVSRCCOLOR2 0x00008000L + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + + +// +// ShadeCaps +// +#define D3DPSHADECAPS_COLORGOURAUDRGB 0x00000008L +#define D3DPSHADECAPS_SPECULARGOURAUDRGB 0x00000200L +#define D3DPSHADECAPS_ALPHAGOURAUDBLEND 0x00004000L +#define D3DPSHADECAPS_FOGGOURAUD 0x00080000L + +// +// TextureCaps +// +#define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001L /* Perspective-correct texturing is supported */ +#define D3DPTEXTURECAPS_POW2 0x00000002L /* Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. */ +#define D3DPTEXTURECAPS_ALPHA 0x00000004L /* Alpha in texture pixels is supported */ +#define D3DPTEXTURECAPS_SQUAREONLY 0x00000020L /* Only square textures are supported */ +#define D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 0x00000040L /* Texture indices are not scaled by the texture size prior to interpolation */ +#define D3DPTEXTURECAPS_ALPHAPALETTE 0x00000080L /* Device can draw alpha from texture palettes */ +// Device can use non-POW2 textures if: +// 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage +// 2) D3DRS_WRAP(N) is zero for this texture's coordinates +// 3) mip mapping is not enabled (use magnification filter only) +#define D3DPTEXTURECAPS_NONPOW2CONDITIONAL 0x00000100L +#define D3DPTEXTURECAPS_PROJECTED 0x00000400L /* Device can do D3DTTFF_PROJECTED */ +#define D3DPTEXTURECAPS_CUBEMAP 0x00000800L /* Device can do cubemap textures */ +#define D3DPTEXTURECAPS_VOLUMEMAP 0x00002000L /* Device can do volume textures */ +#define D3DPTEXTURECAPS_MIPMAP 0x00004000L /* Device can do mipmapped textures */ +#define D3DPTEXTURECAPS_MIPVOLUMEMAP 0x00008000L /* Device can do mipmapped volume textures */ +#define D3DPTEXTURECAPS_MIPCUBEMAP 0x00010000L /* Device can do mipmapped cube maps */ +#define D3DPTEXTURECAPS_CUBEMAP_POW2 0x00020000L /* Device requires that cubemaps be power-of-2 dimension */ +#define D3DPTEXTURECAPS_VOLUMEMAP_POW2 0x00040000L /* Device requires that volume maps be power-of-2 dimension */ +#define D3DPTEXTURECAPS_NOPROJECTEDBUMPENV 0x00200000L /* Device does not support projected bump env lookup operation + in programmable and fixed function pixel shaders */ + +// +// TextureFilterCaps, StretchRectFilterCaps +// +#define D3DPTFILTERCAPS_MINFPOINT 0x00000100L /* Min Filter */ +#define D3DPTFILTERCAPS_MINFLINEAR 0x00000200L +#define D3DPTFILTERCAPS_MINFANISOTROPIC 0x00000400L +#define D3DPTFILTERCAPS_MINFPYRAMIDALQUAD 0x00000800L +#define D3DPTFILTERCAPS_MINFGAUSSIANQUAD 0x00001000L +#define D3DPTFILTERCAPS_MIPFPOINT 0x00010000L /* Mip Filter */ +#define D3DPTFILTERCAPS_MIPFLINEAR 0x00020000L + +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + +#define D3DPTFILTERCAPS_CONVOLUTIONMONO 0x00040000L /* Min and Mag for the convolution mono filter */ + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + +#define D3DPTFILTERCAPS_MAGFPOINT 0x01000000L /* Mag Filter */ +#define D3DPTFILTERCAPS_MAGFLINEAR 0x02000000L +#define D3DPTFILTERCAPS_MAGFANISOTROPIC 0x04000000L +#define D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD 0x08000000L +#define D3DPTFILTERCAPS_MAGFGAUSSIANQUAD 0x10000000L + +// +// TextureAddressCaps +// +#define D3DPTADDRESSCAPS_WRAP 0x00000001L +#define D3DPTADDRESSCAPS_MIRROR 0x00000002L +#define D3DPTADDRESSCAPS_CLAMP 0x00000004L +#define D3DPTADDRESSCAPS_BORDER 0x00000008L +#define D3DPTADDRESSCAPS_INDEPENDENTUV 0x00000010L +#define D3DPTADDRESSCAPS_MIRRORONCE 0x00000020L + +// +// StencilCaps +// +#define D3DSTENCILCAPS_KEEP 0x00000001L +#define D3DSTENCILCAPS_ZERO 0x00000002L +#define D3DSTENCILCAPS_REPLACE 0x00000004L +#define D3DSTENCILCAPS_INCRSAT 0x00000008L +#define D3DSTENCILCAPS_DECRSAT 0x00000010L +#define D3DSTENCILCAPS_INVERT 0x00000020L +#define D3DSTENCILCAPS_INCR 0x00000040L +#define D3DSTENCILCAPS_DECR 0x00000080L +#define D3DSTENCILCAPS_TWOSIDED 0x00000100L + +// +// TextureOpCaps +// +#define D3DTEXOPCAPS_DISABLE 0x00000001L +#define D3DTEXOPCAPS_SELECTARG1 0x00000002L +#define D3DTEXOPCAPS_SELECTARG2 0x00000004L +#define D3DTEXOPCAPS_MODULATE 0x00000008L +#define D3DTEXOPCAPS_MODULATE2X 0x00000010L +#define D3DTEXOPCAPS_MODULATE4X 0x00000020L +#define D3DTEXOPCAPS_ADD 0x00000040L +#define D3DTEXOPCAPS_ADDSIGNED 0x00000080L +#define D3DTEXOPCAPS_ADDSIGNED2X 0x00000100L +#define D3DTEXOPCAPS_SUBTRACT 0x00000200L +#define D3DTEXOPCAPS_ADDSMOOTH 0x00000400L +#define D3DTEXOPCAPS_BLENDDIFFUSEALPHA 0x00000800L +#define D3DTEXOPCAPS_BLENDTEXTUREALPHA 0x00001000L +#define D3DTEXOPCAPS_BLENDFACTORALPHA 0x00002000L +#define D3DTEXOPCAPS_BLENDTEXTUREALPHAPM 0x00004000L +#define D3DTEXOPCAPS_BLENDCURRENTALPHA 0x00008000L +#define D3DTEXOPCAPS_PREMODULATE 0x00010000L +#define D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR 0x00020000L +#define D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA 0x00040000L +#define D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR 0x00080000L +#define D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA 0x00100000L +#define D3DTEXOPCAPS_BUMPENVMAP 0x00200000L +#define D3DTEXOPCAPS_BUMPENVMAPLUMINANCE 0x00400000L +#define D3DTEXOPCAPS_DOTPRODUCT3 0x00800000L +#define D3DTEXOPCAPS_MULTIPLYADD 0x01000000L +#define D3DTEXOPCAPS_LERP 0x02000000L + +// +// FVFCaps +// +#define D3DFVFCAPS_TEXCOORDCOUNTMASK 0x0000ffffL /* mask for texture coordinate count field */ +#define D3DFVFCAPS_DONOTSTRIPELEMENTS 0x00080000L /* Device prefers that vertex elements not be stripped */ +#define D3DFVFCAPS_PSIZE 0x00100000L /* Device can receive point size */ + +// +// VertexProcessingCaps +// +#define D3DVTXPCAPS_TEXGEN 0x00000001L /* device can do texgen */ +#define D3DVTXPCAPS_MATERIALSOURCE7 0x00000002L /* device can do DX7-level colormaterialsource ops */ +#define D3DVTXPCAPS_DIRECTIONALLIGHTS 0x00000008L /* device can do directional lights */ +#define D3DVTXPCAPS_POSITIONALLIGHTS 0x00000010L /* device can do positional lights (includes point and spot) */ +#define D3DVTXPCAPS_LOCALVIEWER 0x00000020L /* device can do local viewer */ +#define D3DVTXPCAPS_TWEENING 0x00000040L /* device can do vertex tweening */ +#define D3DVTXPCAPS_TEXGEN_SPHEREMAP 0x00000100L /* device supports D3DTSS_TCI_SPHEREMAP */ +#define D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER 0x00000200L /* device does not support TexGen in non-local + viewer mode */ + +// +// DevCaps2 +// +#define D3DDEVCAPS2_STREAMOFFSET 0x00000001L /* Device supports offsets in streams. Must be set by DX9 drivers */ +#define D3DDEVCAPS2_DMAPNPATCH 0x00000002L /* Device supports displacement maps for N-Patches*/ +#define D3DDEVCAPS2_ADAPTIVETESSRTPATCH 0x00000004L /* Device supports adaptive tesselation of RT-patches*/ +#define D3DDEVCAPS2_ADAPTIVETESSNPATCH 0x00000008L /* Device supports adaptive tesselation of N-patches*/ +#define D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES 0x00000010L /* Device supports StretchRect calls with a texture as the source*/ +#define D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH 0x00000020L /* Device supports presampled displacement maps for N-Patches */ +#define D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET 0x00000040L /* Vertex elements in a vertex declaration can share the same stream offset */ + +// +// DeclTypes +// +#define D3DDTCAPS_UBYTE4 0x00000001L +#define D3DDTCAPS_UBYTE4N 0x00000002L +#define D3DDTCAPS_SHORT2N 0x00000004L +#define D3DDTCAPS_SHORT4N 0x00000008L +#define D3DDTCAPS_USHORT2N 0x00000010L +#define D3DDTCAPS_USHORT4N 0x00000020L +#define D3DDTCAPS_UDEC3 0x00000040L +#define D3DDTCAPS_DEC3N 0x00000080L +#define D3DDTCAPS_FLOAT16_2 0x00000100L +#define D3DDTCAPS_FLOAT16_4 0x00000200L + + +#pragma pack() + +#endif /* (DIRECT3D_VERSION >= 0x0900) */ +#endif /* _d3d9CAPS_H_ */ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3d9types.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3d9types.h new file mode 100644 index 0000000000..9080e29968 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3d9types.h @@ -0,0 +1,2012 @@ +/*==========================================================================; + * + * Copyright (C) Microsoft Corporation. All Rights Reserved. + * + * File: d3d9types.h + * Content: Direct3D capabilities include file + * + ***************************************************************************/ + +#ifndef _d3d9TYPES_H_ +#define _d3d9TYPES_H_ + +#ifndef DIRECT3D_VERSION +#define DIRECT3D_VERSION 0x0900 +#endif //DIRECT3D_VERSION + +// include this file content only if compiling for DX9 interfaces +#if(DIRECT3D_VERSION >= 0x0900) + +#include + +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning(disable:4201) // anonymous unions warning +#if defined(_X86_) || defined(_IA64_) +#pragma pack(4) +#endif + +// D3DCOLOR is equivalent to D3DFMT_A8R8G8B8 +#ifndef D3DCOLOR_DEFINED +typedef DWORD D3DCOLOR; +#define D3DCOLOR_DEFINED +#endif + +// maps unsigned 8 bits/channel to D3DCOLOR +#define D3DCOLOR_ARGB(a,r,g,b) \ + ((D3DCOLOR)((((a)&0xff)<<24)|(((r)&0xff)<<16)|(((g)&0xff)<<8)|((b)&0xff))) +#define D3DCOLOR_RGBA(r,g,b,a) D3DCOLOR_ARGB(a,r,g,b) +#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b) + +#define D3DCOLOR_XYUV(y,u,v) D3DCOLOR_ARGB(0xff,y,u,v) +#define D3DCOLOR_AYUV(a,y,u,v) D3DCOLOR_ARGB(a,y,u,v) + +// maps floating point channels (0.f to 1.f range) to D3DCOLOR +#define D3DCOLOR_COLORVALUE(r,g,b,a) \ + D3DCOLOR_RGBA((DWORD)((r)*255.f),(DWORD)((g)*255.f),(DWORD)((b)*255.f),(DWORD)((a)*255.f)) + + +#ifndef D3DVECTOR_DEFINED +typedef struct _D3DVECTOR { + float x; + float y; + float z; +} D3DVECTOR; +#define D3DVECTOR_DEFINED +#endif + +#ifndef D3DCOLORVALUE_DEFINED +typedef struct _D3DCOLORVALUE { + float r; + float g; + float b; + float a; +} D3DCOLORVALUE; +#define D3DCOLORVALUE_DEFINED +#endif + +#ifndef D3DRECT_DEFINED +typedef struct _D3DRECT { + LONG x1; + LONG y1; + LONG x2; + LONG y2; +} D3DRECT; +#define D3DRECT_DEFINED +#endif + +#ifndef D3DMATRIX_DEFINED +typedef struct _D3DMATRIX { + union { + struct { + float _11, _12, _13, _14; + float _21, _22, _23, _24; + float _31, _32, _33, _34; + float _41, _42, _43, _44; + + }; + float m[4][4]; + }; +} D3DMATRIX; +#define D3DMATRIX_DEFINED +#endif + +typedef struct _D3DVIEWPORT9 { + DWORD X; + DWORD Y; /* Viewport Top left */ + DWORD Width; + DWORD Height; /* Viewport Dimensions */ + float MinZ; /* Min/max of clip Volume */ + float MaxZ; +} D3DVIEWPORT9; + +/* + * Values for clip fields. + */ + +// Max number of user clipping planes, supported in D3D. +#define D3DMAXUSERCLIPPLANES 32 + +// These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE +// +#define D3DCLIPPLANE0 (1 << 0) +#define D3DCLIPPLANE1 (1 << 1) +#define D3DCLIPPLANE2 (1 << 2) +#define D3DCLIPPLANE3 (1 << 3) +#define D3DCLIPPLANE4 (1 << 4) +#define D3DCLIPPLANE5 (1 << 5) + +// The following bits are used in the ClipUnion and ClipIntersection +// members of the D3DCLIPSTATUS9 +// + +#define D3DCS_LEFT 0x00000001L +#define D3DCS_RIGHT 0x00000002L +#define D3DCS_TOP 0x00000004L +#define D3DCS_BOTTOM 0x00000008L +#define D3DCS_FRONT 0x00000010L +#define D3DCS_BACK 0x00000020L +#define D3DCS_PLANE0 0x00000040L +#define D3DCS_PLANE1 0x00000080L +#define D3DCS_PLANE2 0x00000100L +#define D3DCS_PLANE3 0x00000200L +#define D3DCS_PLANE4 0x00000400L +#define D3DCS_PLANE5 0x00000800L + +#define D3DCS_ALL (D3DCS_LEFT | \ + D3DCS_RIGHT | \ + D3DCS_TOP | \ + D3DCS_BOTTOM | \ + D3DCS_FRONT | \ + D3DCS_BACK | \ + D3DCS_PLANE0 | \ + D3DCS_PLANE1 | \ + D3DCS_PLANE2 | \ + D3DCS_PLANE3 | \ + D3DCS_PLANE4 | \ + D3DCS_PLANE5) + +typedef struct _D3DCLIPSTATUS9 { + DWORD ClipUnion; + DWORD ClipIntersection; +} D3DCLIPSTATUS9; + +typedef struct _D3DMATERIAL9 { + D3DCOLORVALUE Diffuse; /* Diffuse color RGBA */ + D3DCOLORVALUE Ambient; /* Ambient color RGB */ + D3DCOLORVALUE Specular; /* Specular 'shininess' */ + D3DCOLORVALUE Emissive; /* Emissive color RGB */ + float Power; /* Sharpness if specular highlight */ +} D3DMATERIAL9; + +typedef enum _D3DLIGHTTYPE { + D3DLIGHT_POINT = 1, + D3DLIGHT_SPOT = 2, + D3DLIGHT_DIRECTIONAL = 3, + D3DLIGHT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DLIGHTTYPE; + +typedef struct _D3DLIGHT9 { + D3DLIGHTTYPE Type; /* Type of light source */ + D3DCOLORVALUE Diffuse; /* Diffuse color of light */ + D3DCOLORVALUE Specular; /* Specular color of light */ + D3DCOLORVALUE Ambient; /* Ambient color of light */ + D3DVECTOR Position; /* Position in world space */ + D3DVECTOR Direction; /* Direction in world space */ + float Range; /* Cutoff range */ + float Falloff; /* Falloff */ + float Attenuation0; /* Constant attenuation */ + float Attenuation1; /* Linear attenuation */ + float Attenuation2; /* Quadratic attenuation */ + float Theta; /* Inner angle of spotlight cone */ + float Phi; /* Outer angle of spotlight cone */ +} D3DLIGHT9; + +/* + * Options for clearing + */ +#define D3DCLEAR_TARGET 0x00000001l /* Clear target surface */ +#define D3DCLEAR_ZBUFFER 0x00000002l /* Clear target z buffer */ +#define D3DCLEAR_STENCIL 0x00000004l /* Clear stencil planes */ + +/* + * The following defines the rendering states + */ + +typedef enum _D3DSHADEMODE { + D3DSHADE_FLAT = 1, + D3DSHADE_GOURAUD = 2, + D3DSHADE_PHONG = 3, + D3DSHADE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DSHADEMODE; + +typedef enum _D3DFILLMODE { + D3DFILL_POINT = 1, + D3DFILL_WIREFRAME = 2, + D3DFILL_SOLID = 3, + D3DFILL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DFILLMODE; + +typedef enum _D3DBLEND { + D3DBLEND_ZERO = 1, + D3DBLEND_ONE = 2, + D3DBLEND_SRCCOLOR = 3, + D3DBLEND_INVSRCCOLOR = 4, + D3DBLEND_SRCALPHA = 5, + D3DBLEND_INVSRCALPHA = 6, + D3DBLEND_DESTALPHA = 7, + D3DBLEND_INVDESTALPHA = 8, + D3DBLEND_DESTCOLOR = 9, + D3DBLEND_INVDESTCOLOR = 10, + D3DBLEND_SRCALPHASAT = 11, + D3DBLEND_BOTHSRCALPHA = 12, + D3DBLEND_BOTHINVSRCALPHA = 13, + D3DBLEND_BLENDFACTOR = 14, /* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on */ + D3DBLEND_INVBLENDFACTOR = 15, /* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on */ +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + + D3DBLEND_SRCCOLOR2 = 16, + D3DBLEND_INVSRCCOLOR2 = 17, + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + D3DBLEND_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DBLEND; + +typedef enum _D3DBLENDOP { + D3DBLENDOP_ADD = 1, + D3DBLENDOP_SUBTRACT = 2, + D3DBLENDOP_REVSUBTRACT = 3, + D3DBLENDOP_MIN = 4, + D3DBLENDOP_MAX = 5, + D3DBLENDOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DBLENDOP; + +typedef enum _D3DTEXTUREADDRESS { + D3DTADDRESS_WRAP = 1, + D3DTADDRESS_MIRROR = 2, + D3DTADDRESS_CLAMP = 3, + D3DTADDRESS_BORDER = 4, + D3DTADDRESS_MIRRORONCE = 5, + D3DTADDRESS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DTEXTUREADDRESS; + +typedef enum _D3DCULL { + D3DCULL_NONE = 1, + D3DCULL_CW = 2, + D3DCULL_CCW = 3, + D3DCULL_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DCULL; + +typedef enum _D3DCMPFUNC { + D3DCMP_NEVER = 1, + D3DCMP_LESS = 2, + D3DCMP_EQUAL = 3, + D3DCMP_LESSEQUAL = 4, + D3DCMP_GREATER = 5, + D3DCMP_NOTEQUAL = 6, + D3DCMP_GREATEREQUAL = 7, + D3DCMP_ALWAYS = 8, + D3DCMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DCMPFUNC; + +typedef enum _D3DSTENCILOP { + D3DSTENCILOP_KEEP = 1, + D3DSTENCILOP_ZERO = 2, + D3DSTENCILOP_REPLACE = 3, + D3DSTENCILOP_INCRSAT = 4, + D3DSTENCILOP_DECRSAT = 5, + D3DSTENCILOP_INVERT = 6, + D3DSTENCILOP_INCR = 7, + D3DSTENCILOP_DECR = 8, + D3DSTENCILOP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DSTENCILOP; + +typedef enum _D3DFOGMODE { + D3DFOG_NONE = 0, + D3DFOG_EXP = 1, + D3DFOG_EXP2 = 2, + D3DFOG_LINEAR = 3, + D3DFOG_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DFOGMODE; + +typedef enum _D3DZBUFFERTYPE { + D3DZB_FALSE = 0, + D3DZB_TRUE = 1, // Z buffering + D3DZB_USEW = 2, // W buffering + D3DZB_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DZBUFFERTYPE; + +// Primitives supported by draw-primitive API +typedef enum _D3DPRIMITIVETYPE { + D3DPT_POINTLIST = 1, + D3DPT_LINELIST = 2, + D3DPT_LINESTRIP = 3, + D3DPT_TRIANGLELIST = 4, + D3DPT_TRIANGLESTRIP = 5, + D3DPT_TRIANGLEFAN = 6, + D3DPT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DPRIMITIVETYPE; + +typedef enum _D3DTRANSFORMSTATETYPE { + D3DTS_VIEW = 2, + D3DTS_PROJECTION = 3, + D3DTS_TEXTURE0 = 16, + D3DTS_TEXTURE1 = 17, + D3DTS_TEXTURE2 = 18, + D3DTS_TEXTURE3 = 19, + D3DTS_TEXTURE4 = 20, + D3DTS_TEXTURE5 = 21, + D3DTS_TEXTURE6 = 22, + D3DTS_TEXTURE7 = 23, + D3DTS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DTRANSFORMSTATETYPE; + +#define D3DTS_WORLDMATRIX(index) (D3DTRANSFORMSTATETYPE)(index + 256) +#define D3DTS_WORLD D3DTS_WORLDMATRIX(0) +#define D3DTS_WORLD1 D3DTS_WORLDMATRIX(1) +#define D3DTS_WORLD2 D3DTS_WORLDMATRIX(2) +#define D3DTS_WORLD3 D3DTS_WORLDMATRIX(3) + +typedef enum _D3DRENDERSTATETYPE { + D3DRS_ZENABLE = 7, /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */ + D3DRS_FILLMODE = 8, /* D3DFILLMODE */ + D3DRS_SHADEMODE = 9, /* D3DSHADEMODE */ + D3DRS_ZWRITEENABLE = 14, /* TRUE to enable z writes */ + D3DRS_ALPHATESTENABLE = 15, /* TRUE to enable alpha tests */ + D3DRS_LASTPIXEL = 16, /* TRUE for last-pixel on lines */ + D3DRS_SRCBLEND = 19, /* D3DBLEND */ + D3DRS_DESTBLEND = 20, /* D3DBLEND */ + D3DRS_CULLMODE = 22, /* D3DCULL */ + D3DRS_ZFUNC = 23, /* D3DCMPFUNC */ + D3DRS_ALPHAREF = 24, /* D3DFIXED */ + D3DRS_ALPHAFUNC = 25, /* D3DCMPFUNC */ + D3DRS_DITHERENABLE = 26, /* TRUE to enable dithering */ + D3DRS_ALPHABLENDENABLE = 27, /* TRUE to enable alpha blending */ + D3DRS_FOGENABLE = 28, /* TRUE to enable fog blending */ + D3DRS_SPECULARENABLE = 29, /* TRUE to enable specular */ + D3DRS_FOGCOLOR = 34, /* D3DCOLOR */ + D3DRS_FOGTABLEMODE = 35, /* D3DFOGMODE */ + D3DRS_FOGSTART = 36, /* Fog start (for both vertex and pixel fog) */ + D3DRS_FOGEND = 37, /* Fog end */ + D3DRS_FOGDENSITY = 38, /* Fog density */ + D3DRS_RANGEFOGENABLE = 48, /* Enables range-based fog */ + D3DRS_STENCILENABLE = 52, /* BOOL enable/disable stenciling */ + D3DRS_STENCILFAIL = 53, /* D3DSTENCILOP to do if stencil test fails */ + D3DRS_STENCILZFAIL = 54, /* D3DSTENCILOP to do if stencil test passes and Z test fails */ + D3DRS_STENCILPASS = 55, /* D3DSTENCILOP to do if both stencil and Z tests pass */ + D3DRS_STENCILFUNC = 56, /* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */ + D3DRS_STENCILREF = 57, /* Reference value used in stencil test */ + D3DRS_STENCILMASK = 58, /* Mask value used in stencil test */ + D3DRS_STENCILWRITEMASK = 59, /* Write mask applied to values written to stencil buffer */ + D3DRS_TEXTUREFACTOR = 60, /* D3DCOLOR used for multi-texture blend */ + D3DRS_WRAP0 = 128, /* wrap for 1st texture coord. set */ + D3DRS_WRAP1 = 129, /* wrap for 2nd texture coord. set */ + D3DRS_WRAP2 = 130, /* wrap for 3rd texture coord. set */ + D3DRS_WRAP3 = 131, /* wrap for 4th texture coord. set */ + D3DRS_WRAP4 = 132, /* wrap for 5th texture coord. set */ + D3DRS_WRAP5 = 133, /* wrap for 6th texture coord. set */ + D3DRS_WRAP6 = 134, /* wrap for 7th texture coord. set */ + D3DRS_WRAP7 = 135, /* wrap for 8th texture coord. set */ + D3DRS_CLIPPING = 136, + D3DRS_LIGHTING = 137, + D3DRS_AMBIENT = 139, + D3DRS_FOGVERTEXMODE = 140, + D3DRS_COLORVERTEX = 141, + D3DRS_LOCALVIEWER = 142, + D3DRS_NORMALIZENORMALS = 143, + D3DRS_DIFFUSEMATERIALSOURCE = 145, + D3DRS_SPECULARMATERIALSOURCE = 146, + D3DRS_AMBIENTMATERIALSOURCE = 147, + D3DRS_EMISSIVEMATERIALSOURCE = 148, + D3DRS_VERTEXBLEND = 151, + D3DRS_CLIPPLANEENABLE = 152, + D3DRS_POINTSIZE = 154, /* float point size */ + D3DRS_POINTSIZE_MIN = 155, /* float point size min threshold */ + D3DRS_POINTSPRITEENABLE = 156, /* BOOL point texture coord control */ + D3DRS_POINTSCALEENABLE = 157, /* BOOL point size scale enable */ + D3DRS_POINTSCALE_A = 158, /* float point attenuation A value */ + D3DRS_POINTSCALE_B = 159, /* float point attenuation B value */ + D3DRS_POINTSCALE_C = 160, /* float point attenuation C value */ + D3DRS_MULTISAMPLEANTIALIAS = 161, // BOOL - set to do FSAA with multisample buffer + D3DRS_MULTISAMPLEMASK = 162, // DWORD - per-sample enable/disable + D3DRS_PATCHEDGESTYLE = 163, // Sets whether patch edges will use float style tessellation + D3DRS_DEBUGMONITORTOKEN = 165, // DEBUG ONLY - token to debug monitor + D3DRS_POINTSIZE_MAX = 166, /* float point size max threshold */ + D3DRS_INDEXEDVERTEXBLENDENABLE = 167, + D3DRS_COLORWRITEENABLE = 168, // per-channel write enable + D3DRS_TWEENFACTOR = 170, // float tween factor + D3DRS_BLENDOP = 171, // D3DBLENDOP setting + D3DRS_POSITIONDEGREE = 172, // NPatch position interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default) + D3DRS_NORMALDEGREE = 173, // NPatch normal interpolation degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC + D3DRS_SCISSORTESTENABLE = 174, + D3DRS_SLOPESCALEDEPTHBIAS = 175, + D3DRS_ANTIALIASEDLINEENABLE = 176, + D3DRS_MINTESSELLATIONLEVEL = 178, + D3DRS_MAXTESSELLATIONLEVEL = 179, + D3DRS_ADAPTIVETESS_X = 180, + D3DRS_ADAPTIVETESS_Y = 181, + D3DRS_ADAPTIVETESS_Z = 182, + D3DRS_ADAPTIVETESS_W = 183, + D3DRS_ENABLEADAPTIVETESSELLATION = 184, + D3DRS_TWOSIDEDSTENCILMODE = 185, /* BOOL enable/disable 2 sided stenciling */ + D3DRS_CCW_STENCILFAIL = 186, /* D3DSTENCILOP to do if ccw stencil test fails */ + D3DRS_CCW_STENCILZFAIL = 187, /* D3DSTENCILOP to do if ccw stencil test passes and Z test fails */ + D3DRS_CCW_STENCILPASS = 188, /* D3DSTENCILOP to do if both ccw stencil and Z tests pass */ + D3DRS_CCW_STENCILFUNC = 189, /* D3DCMPFUNC fn. ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */ + D3DRS_COLORWRITEENABLE1 = 190, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */ + D3DRS_COLORWRITEENABLE2 = 191, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */ + D3DRS_COLORWRITEENABLE3 = 192, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */ + D3DRS_BLENDFACTOR = 193, /* D3DCOLOR used for a constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR */ + D3DRS_SRGBWRITEENABLE = 194, /* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose D3DUSAGE_QUERY_SRGBWRITE) */ + D3DRS_DEPTHBIAS = 195, + D3DRS_WRAP8 = 198, /* Additional wrap states for vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD */ + D3DRS_WRAP9 = 199, + D3DRS_WRAP10 = 200, + D3DRS_WRAP11 = 201, + D3DRS_WRAP12 = 202, + D3DRS_WRAP13 = 203, + D3DRS_WRAP14 = 204, + D3DRS_WRAP15 = 205, + D3DRS_SEPARATEALPHABLENDENABLE = 206, /* TRUE to enable a separate blending function for the alpha channel */ + D3DRS_SRCBLENDALPHA = 207, /* SRC blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */ + D3DRS_DESTBLENDALPHA = 208, /* DST blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */ + D3DRS_BLENDOPALPHA = 209, /* Blending operation for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */ + + + D3DRS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DRENDERSTATETYPE; + +// Maximum number of simultaneous render targets D3D supports +#define D3D_MAX_SIMULTANEOUS_RENDERTARGETS 4 + +// Values for material source +typedef enum _D3DMATERIALCOLORSOURCE +{ + D3DMCS_MATERIAL = 0, // Color from material is used + D3DMCS_COLOR1 = 1, // Diffuse vertex color is used + D3DMCS_COLOR2 = 2, // Specular vertex color is used + D3DMCS_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum +} D3DMATERIALCOLORSOURCE; + +// Bias to apply to the texture coordinate set to apply a wrap to. +#define D3DRENDERSTATE_WRAPBIAS 128UL + +/* Flags to construct the WRAP render states */ +#define D3DWRAP_U 0x00000001L +#define D3DWRAP_V 0x00000002L +#define D3DWRAP_W 0x00000004L + +/* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */ +#define D3DWRAPCOORD_0 0x00000001L // same as D3DWRAP_U +#define D3DWRAPCOORD_1 0x00000002L // same as D3DWRAP_V +#define D3DWRAPCOORD_2 0x00000004L // same as D3DWRAP_W +#define D3DWRAPCOORD_3 0x00000008L + +/* Flags to construct D3DRS_COLORWRITEENABLE */ +#define D3DCOLORWRITEENABLE_RED (1L<<0) +#define D3DCOLORWRITEENABLE_GREEN (1L<<1) +#define D3DCOLORWRITEENABLE_BLUE (1L<<2) +#define D3DCOLORWRITEENABLE_ALPHA (1L<<3) + +/* + * State enumerants for per-stage processing of fixed function pixel processing + * Two of these affect fixed function vertex processing as well: TEXTURETRANSFORMFLAGS and TEXCOORDINDEX. + */ +typedef enum _D3DTEXTURESTAGESTATETYPE +{ + D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */ + D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */ + D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */ + D3DTSS_ALPHAOP = 4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */ + D3DTSS_ALPHAARG1 = 5, /* D3DTA_* (texture arg) */ + D3DTSS_ALPHAARG2 = 6, /* D3DTA_* (texture arg) */ + D3DTSS_BUMPENVMAT00 = 7, /* float (bump mapping matrix) */ + D3DTSS_BUMPENVMAT01 = 8, /* float (bump mapping matrix) */ + D3DTSS_BUMPENVMAT10 = 9, /* float (bump mapping matrix) */ + D3DTSS_BUMPENVMAT11 = 10, /* float (bump mapping matrix) */ + D3DTSS_TEXCOORDINDEX = 11, /* identifies which set of texture coordinates index this texture */ + D3DTSS_BUMPENVLSCALE = 22, /* float scale for bump map luminance */ + D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */ + D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */ + D3DTSS_COLORARG0 = 26, /* D3DTA_* third arg for triadic ops */ + D3DTSS_ALPHAARG0 = 27, /* D3DTA_* third arg for triadic ops */ + D3DTSS_RESULTARG = 28, /* D3DTA_* arg for result (CURRENT or TEMP) */ + D3DTSS_CONSTANT = 32, /* Per-stage constant D3DTA_CONSTANT */ + + + D3DTSS_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DTEXTURESTAGESTATETYPE; + +/* + * State enumerants for per-sampler texture processing. + */ +typedef enum _D3DSAMPLERSTATETYPE +{ + D3DSAMP_ADDRESSU = 1, /* D3DTEXTUREADDRESS for U coordinate */ + D3DSAMP_ADDRESSV = 2, /* D3DTEXTUREADDRESS for V coordinate */ + D3DSAMP_ADDRESSW = 3, /* D3DTEXTUREADDRESS for W coordinate */ + D3DSAMP_BORDERCOLOR = 4, /* D3DCOLOR */ + D3DSAMP_MAGFILTER = 5, /* D3DTEXTUREFILTER filter to use for magnification */ + D3DSAMP_MINFILTER = 6, /* D3DTEXTUREFILTER filter to use for minification */ + D3DSAMP_MIPFILTER = 7, /* D3DTEXTUREFILTER filter to use between mipmaps during minification */ + D3DSAMP_MIPMAPLODBIAS = 8, /* float Mipmap LOD bias */ + D3DSAMP_MAXMIPLEVEL = 9, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */ + D3DSAMP_MAXANISOTROPY = 10, /* DWORD maximum anisotropy */ + D3DSAMP_SRGBTEXTURE = 11, /* Default = 0 (which means Gamma 1.0, + no correction required.) else correct for + Gamma = 2.2 */ + D3DSAMP_ELEMENTINDEX = 12, /* When multi-element texture is assigned to sampler, this + indicates which element index to use. Default = 0. */ + D3DSAMP_DMAPOFFSET = 13, /* Offset in vertices in the pre-sampled displacement map. + Only valid for D3DDMAPSAMPLER sampler */ + D3DSAMP_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DSAMPLERSTATETYPE; + +/* Special sampler which is used in the tesselator */ +#define D3DDMAPSAMPLER 256 + +// Samplers used in vertex shaders +#define D3DVERTEXTEXTURESAMPLER0 (D3DDMAPSAMPLER+1) +#define D3DVERTEXTEXTURESAMPLER1 (D3DDMAPSAMPLER+2) +#define D3DVERTEXTEXTURESAMPLER2 (D3DDMAPSAMPLER+3) +#define D3DVERTEXTEXTURESAMPLER3 (D3DDMAPSAMPLER+4) + +// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position +// and normal in the camera space) should be taken as texture coordinates +// Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from +// +#define D3DTSS_TCI_PASSTHRU 0x00000000 +#define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000 +#define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000 +#define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000 +#define D3DTSS_TCI_SPHEREMAP 0x00040000 + +/* + * Enumerations for COLOROP and ALPHAOP texture blending operations set in + * texture processing stage controls in D3DTSS. + */ +typedef enum _D3DTEXTUREOP +{ + // Control + D3DTOP_DISABLE = 1, // disables stage + D3DTOP_SELECTARG1 = 2, // the default + D3DTOP_SELECTARG2 = 3, + + // Modulate + D3DTOP_MODULATE = 4, // multiply args together + D3DTOP_MODULATE2X = 5, // multiply and 1 bit + D3DTOP_MODULATE4X = 6, // multiply and 2 bits + + // Add + D3DTOP_ADD = 7, // add arguments together + D3DTOP_ADDSIGNED = 8, // add with -0.5 bias + D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit + D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation + D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product + // Arg1 + Arg2 - Arg1*Arg2 + // = Arg1 + (1-Arg1)*Arg2 + + // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha) + D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha + D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha + D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRS_TEXTUREFACTOR + + // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha) + D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha + D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color + + // Specular mapping + D3DTOP_PREMODULATE = 17, // modulate with next texture before use + D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB + // COLOROP only + D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A + // COLOROP only + D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB + // COLOROP only + D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A + // COLOROP only + + // Bump mapping + D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation + D3DTOP_BUMPENVMAPLUMINANCE = 23, // with luminance channel + + // This can do either diffuse or specular bump mapping with correct input. + // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B) + // where each component has been scaled and offset to make it signed. + // The result is replicated into all four (including alpha) channels. + // This is a valid COLOROP only. + D3DTOP_DOTPRODUCT3 = 24, + + // Triadic ops + D3DTOP_MULTIPLYADD = 25, // Arg0 + Arg1*Arg2 + D3DTOP_LERP = 26, // (Arg0)*Arg1 + (1-Arg0)*Arg2 + + D3DTOP_FORCE_DWORD = 0x7fffffff, +} D3DTEXTUREOP; + +/* + * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending + * operations set in texture processing stage controls in D3DRENDERSTATE. + */ +#define D3DTA_SELECTMASK 0x0000000f // mask for arg selector +#define D3DTA_DIFFUSE 0x00000000 // select diffuse color (read only) +#define D3DTA_CURRENT 0x00000001 // select stage destination register (read/write) +#define D3DTA_TEXTURE 0x00000002 // select texture color (read only) +#define D3DTA_TFACTOR 0x00000003 // select D3DRS_TEXTUREFACTOR (read only) +#define D3DTA_SPECULAR 0x00000004 // select specular color (read only) +#define D3DTA_TEMP 0x00000005 // select temporary register color (read/write) +#define D3DTA_CONSTANT 0x00000006 // select texture stage constant +#define D3DTA_COMPLEMENT 0x00000010 // take 1.0 - x (read modifier) +#define D3DTA_ALPHAREPLICATE 0x00000020 // replicate alpha to color components (read modifier) + +// +// Values for D3DSAMP_***FILTER texture stage states +// +typedef enum _D3DTEXTUREFILTERTYPE +{ + D3DTEXF_NONE = 0, // filtering disabled (valid for mip filter only) + D3DTEXF_POINT = 1, // nearest + D3DTEXF_LINEAR = 2, // linear interpolation + D3DTEXF_ANISOTROPIC = 3, // anisotropic + D3DTEXF_PYRAMIDALQUAD = 6, // 4-sample tent + D3DTEXF_GAUSSIANQUAD = 7, // 4-sample gaussian +/* D3D9Ex only -- */ +#if !defined(D3D_DISABLE_9EX) + + D3DTEXF_CONVOLUTIONMONO = 8, // Convolution filter for monochrome textures + +#endif // !D3D_DISABLE_9EX +/* -- D3D9Ex only */ + D3DTEXF_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum +} D3DTEXTUREFILTERTYPE; + +/* Bits for Flags in ProcessVertices call */ + +#define D3DPV_DONOTCOPYDATA (1 << 0) + +//------------------------------------------------------------------- + +// Flexible vertex format bits +// +#define D3DFVF_RESERVED0 0x001 +#define D3DFVF_POSITION_MASK 0x400E +#define D3DFVF_XYZ 0x002 +#define D3DFVF_XYZRHW 0x004 +#define D3DFVF_XYZB1 0x006 +#define D3DFVF_XYZB2 0x008 +#define D3DFVF_XYZB3 0x00a +#define D3DFVF_XYZB4 0x00c +#define D3DFVF_XYZB5 0x00e +#define D3DFVF_XYZW 0x4002 + +#define D3DFVF_NORMAL 0x010 +#define D3DFVF_PSIZE 0x020 +#define D3DFVF_DIFFUSE 0x040 +#define D3DFVF_SPECULAR 0x080 + +#define D3DFVF_TEXCOUNT_MASK 0xf00 +#define D3DFVF_TEXCOUNT_SHIFT 8 +#define D3DFVF_TEX0 0x000 +#define D3DFVF_TEX1 0x100 +#define D3DFVF_TEX2 0x200 +#define D3DFVF_TEX3 0x300 +#define D3DFVF_TEX4 0x400 +#define D3DFVF_TEX5 0x500 +#define D3DFVF_TEX6 0x600 +#define D3DFVF_TEX7 0x700 +#define D3DFVF_TEX8 0x800 + +#define D3DFVF_LASTBETA_UBYTE4 0x1000 +#define D3DFVF_LASTBETA_D3DCOLOR 0x8000 + +#define D3DFVF_RESERVED2 0x6000 // 2 reserved bits + +//--------------------------------------------------------------------- +// Vertex Shaders +// + +// Vertex shader declaration + +// Vertex element semantics +// +typedef enum _D3DDECLUSAGE +{ + D3DDECLUSAGE_POSITION = 0, + D3DDECLUSAGE_BLENDWEIGHT, // 1 + D3DDECLUSAGE_BLENDINDICES, // 2 + D3DDECLUSAGE_NORMAL, // 3 + D3DDECLUSAGE_PSIZE, // 4 + D3DDECLUSAGE_TEXCOORD, // 5 + D3DDECLUSAGE_TANGENT, // 6 + D3DDECLUSAGE_BINORMAL, // 7 + D3DDECLUSAGE_TESSFACTOR, // 8 + D3DDECLUSAGE_POSITIONT, // 9 + D3DDECLUSAGE_COLOR, // 10 + D3DDECLUSAGE_FOG, // 11 + D3DDECLUSAGE_DEPTH, // 12 + D3DDECLUSAGE_SAMPLE, // 13 +} D3DDECLUSAGE; + +#define MAXD3DDECLUSAGE D3DDECLUSAGE_SAMPLE +#define MAXD3DDECLUSAGEINDEX 15 +#define MAXD3DDECLLENGTH 64 // does not include "end" marker vertex element + +typedef enum _D3DDECLMETHOD +{ + D3DDECLMETHOD_DEFAULT = 0, + D3DDECLMETHOD_PARTIALU, + D3DDECLMETHOD_PARTIALV, + D3DDECLMETHOD_CROSSUV, // Normal + D3DDECLMETHOD_UV, + D3DDECLMETHOD_LOOKUP, // Lookup a displacement map + D3DDECLMETHOD_LOOKUPPRESAMPLED, // Lookup a pre-sampled displacement map +} D3DDECLMETHOD; + +#define MAXD3DDECLMETHOD D3DDECLMETHOD_LOOKUPPRESAMPLED + +// Declarations for _Type fields +// +typedef enum _D3DDECLTYPE +{ + D3DDECLTYPE_FLOAT1 = 0, // 1D float expanded to (value, 0., 0., 1.) + D3DDECLTYPE_FLOAT2 = 1, // 2D float expanded to (value, value, 0., 1.) + D3DDECLTYPE_FLOAT3 = 2, // 3D float expanded to (value, value, value, 1.) + D3DDECLTYPE_FLOAT4 = 3, // 4D float + D3DDECLTYPE_D3DCOLOR = 4, // 4D packed unsigned bytes mapped to 0. to 1. range + // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A) + D3DDECLTYPE_UBYTE4 = 5, // 4D unsigned byte + D3DDECLTYPE_SHORT2 = 6, // 2D signed short expanded to (value, value, 0., 1.) + D3DDECLTYPE_SHORT4 = 7, // 4D signed short + +// The following types are valid only with vertex shaders >= 2.0 + + + D3DDECLTYPE_UBYTE4N = 8, // Each of 4 bytes is normalized by dividing to 255.0 + D3DDECLTYPE_SHORT2N = 9, // 2D signed short normalized (v[0]/32767.0,v[1]/32767.0,0,1) + D3DDECLTYPE_SHORT4N = 10, // 4D signed short normalized (v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0) + D3DDECLTYPE_USHORT2N = 11, // 2D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,0,1) + D3DDECLTYPE_USHORT4N = 12, // 4D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0) + D3DDECLTYPE_UDEC3 = 13, // 3D unsigned 10 10 10 format expanded to (value, value, value, 1) + D3DDECLTYPE_DEC3N = 14, // 3D signed 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1) + D3DDECLTYPE_FLOAT16_2 = 15, // Two 16-bit floating point values, expanded to (value, value, 0, 1) + D3DDECLTYPE_FLOAT16_4 = 16, // Four 16-bit floating point values + D3DDECLTYPE_UNUSED = 17, // When the type field in a decl is unused. +} D3DDECLTYPE; + +#define MAXD3DDECLTYPE D3DDECLTYPE_UNUSED + +typedef struct _D3DVERTEXELEMENT9 +{ + WORD Stream; // Stream index + WORD Offset; // Offset in the stream in bytes + BYTE Type; // Data type + BYTE Method; // Processing method + BYTE Usage; // Semantics + BYTE UsageIndex; // Semantic index +} D3DVERTEXELEMENT9, *LPD3DVERTEXELEMENT9; + +// This is used to initialize the last vertex element in a vertex declaration +// array +// +#define D3DDECL_END() {0xFF,0,D3DDECLTYPE_UNUSED,0,0,0} + +// Maximum supported number of texture coordinate sets +#define D3DDP_MAXTEXCOORD 8 + +//--------------------------------------------------------------------- +// Values for IDirect3DDevice9::SetStreamSourceFreq's Setting parameter +//--------------------------------------------------------------------- +#define D3DSTREAMSOURCE_INDEXEDDATA (1<<30) +#define D3DSTREAMSOURCE_INSTANCEDATA (2<<30) + + + +//--------------------------------------------------------------------- +// +// The internal format of Pixel Shader (PS) & Vertex Shader (VS) +// Instruction Tokens is defined in the Direct3D Device Driver Kit +// +//--------------------------------------------------------------------- + +// +// Instruction Token Bit Definitions +// +#define D3DSI_OPCODE_MASK 0x0000FFFF + +#define D3DSI_INSTLENGTH_MASK 0x0F000000 +#define D3DSI_INSTLENGTH_SHIFT 24 + +typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE +{ + D3DSIO_NOP = 0, + D3DSIO_MOV , + D3DSIO_ADD , + D3DSIO_SUB , + D3DSIO_MAD , + D3DSIO_MUL , + D3DSIO_RCP , + D3DSIO_RSQ , + D3DSIO_DP3 , + D3DSIO_DP4 , + D3DSIO_MIN , + D3DSIO_MAX , + D3DSIO_SLT , + D3DSIO_SGE , + D3DSIO_EXP , + D3DSIO_LOG , + D3DSIO_LIT , + D3DSIO_DST , + D3DSIO_LRP , + D3DSIO_FRC , + D3DSIO_M4x4 , + D3DSIO_M4x3 , + D3DSIO_M3x4 , + D3DSIO_M3x3 , + D3DSIO_M3x2 , + D3DSIO_CALL , + D3DSIO_CALLNZ , + D3DSIO_LOOP , + D3DSIO_RET , + D3DSIO_ENDLOOP , + D3DSIO_LABEL , + D3DSIO_DCL , + D3DSIO_POW , + D3DSIO_CRS , + D3DSIO_SGN , + D3DSIO_ABS , + D3DSIO_NRM , + D3DSIO_SINCOS , + D3DSIO_REP , + D3DSIO_ENDREP , + D3DSIO_IF , + D3DSIO_IFC , + D3DSIO_ELSE , + D3DSIO_ENDIF , + D3DSIO_BREAK , + D3DSIO_BREAKC , + D3DSIO_MOVA , + D3DSIO_DEFB , + D3DSIO_DEFI , + + D3DSIO_TEXCOORD = 64, + D3DSIO_TEXKILL , + D3DSIO_TEX , + D3DSIO_TEXBEM , + D3DSIO_TEXBEML , + D3DSIO_TEXREG2AR , + D3DSIO_TEXREG2GB , + D3DSIO_TEXM3x2PAD , + D3DSIO_TEXM3x2TEX , + D3DSIO_TEXM3x3PAD , + D3DSIO_TEXM3x3TEX , + D3DSIO_RESERVED0 , + D3DSIO_TEXM3x3SPEC , + D3DSIO_TEXM3x3VSPEC , + D3DSIO_EXPP , + D3DSIO_LOGP , + D3DSIO_CND , + D3DSIO_DEF , + D3DSIO_TEXREG2RGB , + D3DSIO_TEXDP3TEX , + D3DSIO_TEXM3x2DEPTH , + D3DSIO_TEXDP3 , + D3DSIO_TEXM3x3 , + D3DSIO_TEXDEPTH , + D3DSIO_CMP , + D3DSIO_BEM , + D3DSIO_DP2ADD , + D3DSIO_DSX , + D3DSIO_DSY , + D3DSIO_TEXLDD , + D3DSIO_SETP , + D3DSIO_TEXLDL , + D3DSIO_BREAKP , + + D3DSIO_PHASE = 0xFFFD, + D3DSIO_COMMENT = 0xFFFE, + D3DSIO_END = 0xFFFF, + + D3DSIO_FORCE_DWORD = 0x7fffffff, // force 32-bit size enum +} D3DSHADER_INSTRUCTION_OPCODE_TYPE; + +//--------------------------------------------------------------------- +// Use these constants with D3DSIO_SINCOS macro as SRC2, SRC3 +// +#define D3DSINCOSCONST1 -1.5500992e-006f, -2.1701389e-005f, 0.0026041667f, 0.00026041668f +#define D3DSINCOSCONST2 -0.020833334f, -0.12500000f, 1.0f, 0.50000000f + +//--------------------------------------------------------------------- +// Co-Issue Instruction Modifier - if set then this instruction is to be +// issued in parallel with the previous instruction(s) for which this bit +// is not set. +// +#define D3DSI_COISSUE 0x40000000 + +//--------------------------------------------------------------------- +// Opcode specific controls + +#define D3DSP_OPCODESPECIFICCONTROL_MASK 0x00ff0000 +#define D3DSP_OPCODESPECIFICCONTROL_SHIFT 16 + +// ps_2_0 texld controls +#define D3DSI_TEXLD_PROJECT (0x01 << D3DSP_OPCODESPECIFICCONTROL_SHIFT) +#define D3DSI_TEXLD_BIAS (0x02 << D3DSP_OPCODESPECIFICCONTROL_SHIFT) + +// Comparison for dynamic conditional instruction opcodes (i.e. if, breakc) +typedef enum _D3DSHADER_COMPARISON +{ + // < = > + D3DSPC_RESERVED0= 0, // 0 0 0 + D3DSPC_GT = 1, // 0 0 1 + D3DSPC_EQ = 2, // 0 1 0 + D3DSPC_GE = 3, // 0 1 1 + D3DSPC_LT = 4, // 1 0 0 + D3DSPC_NE = 5, // 1 0 1 + D3DSPC_LE = 6, // 1 1 0 + D3DSPC_RESERVED1= 7 // 1 1 1 +} D3DSHADER_COMPARISON; + +// Comparison is part of instruction opcode token: +#define D3DSHADER_COMPARISON_SHIFT D3DSP_OPCODESPECIFICCONTROL_SHIFT +#define D3DSHADER_COMPARISON_MASK (0x7<>8)&0xFF) +#define D3DSHADER_VERSION_MINOR(_Version) (((_Version)>>0)&0xFF) + +// destination/source parameter register type +#define D3DSI_COMMENTSIZE_SHIFT 16 +#define D3DSI_COMMENTSIZE_MASK 0x7FFF0000 +#define D3DSHADER_COMMENT(_DWordSize) \ + ((((_DWordSize)<= 1200 +#pragma warning(pop) +#else +#pragma warning(default:4201) +#endif + +#endif /* (DIRECT3D_VERSION >= 0x0900) */ +#endif /* _d3d9TYPES(P)_H_ */ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9.h new file mode 100644 index 0000000000..822f0a8190 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9.h @@ -0,0 +1,76 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Microsoft Corporation. All Rights Reserved. +// +// File: d3dx9.h +// Content: D3DX utility library +// +////////////////////////////////////////////////////////////////////////////// + +#ifdef __D3DX_INTERNAL__ +#error Incorrect D3DX header used +#endif + +#ifndef __D3DX9_H__ +#define __D3DX9_H__ + + +// Defines +#include + +#define D3DX_DEFAULT ((UINT) -1) +#define D3DX_DEFAULT_NONPOW2 ((UINT) -2) +#define D3DX_DEFAULT_FLOAT FLT_MAX +#define D3DX_FROM_FILE ((UINT) -3) +#define D3DFMT_FROM_FILE ((D3DFORMAT) -3) + +#ifndef D3DXINLINE +#ifdef _MSC_VER + #if (_MSC_VER >= 1200) + #define D3DXINLINE __forceinline + #else + #define D3DXINLINE __inline + #endif +#else + #ifdef __cplusplus + #define D3DXINLINE inline + #else + #define D3DXINLINE + #endif +#endif +#endif + + + +// Includes +#include "d3d9.h" +#include "d3dx9math.h" +#include "d3dx9core.h" +#include "d3dx9xof.h" +#include "d3dx9mesh.h" +#include "d3dx9shader.h" +#include "d3dx9effect.h" +#include "d3dx9tex.h" +#include "d3dx9shape.h" +#include "d3dx9anim.h" + + +// Errors +#define _FACDD 0x876 +#define MAKE_DDHRESULT( code ) MAKE_HRESULT( 1, _FACDD, code ) + +enum _D3DXERR { + D3DXERR_CANNOTMODIFYINDEXBUFFER = MAKE_DDHRESULT(2900), + D3DXERR_INVALIDMESH = MAKE_DDHRESULT(2901), + D3DXERR_CANNOTATTRSORT = MAKE_DDHRESULT(2902), + D3DXERR_SKINNINGNOTSUPPORTED = MAKE_DDHRESULT(2903), + D3DXERR_TOOMANYINFLUENCES = MAKE_DDHRESULT(2904), + D3DXERR_INVALIDDATA = MAKE_DDHRESULT(2905), + D3DXERR_LOADEDMESHASNODATA = MAKE_DDHRESULT(2906), + D3DXERR_DUPLICATENAMEDFRAGMENT = MAKE_DDHRESULT(2907), + D3DXERR_CANNOTREMOVELASTITEM = MAKE_DDHRESULT(2908), +}; + + +#endif //__D3DX9_H__ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9anim.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9anim.h new file mode 100644 index 0000000000..fedb1dbec0 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9anim.h @@ -0,0 +1,1114 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Microsoft Corporation. All Rights Reserved. +// +// File: d3dx9anim.h +// Content: D3DX mesh types and functions +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef __D3DX9ANIM_H__ +#define __D3DX9ANIM_H__ + +// {698CFB3F-9289-4d95-9A57-33A94B5A65F9} +DEFINE_GUID(IID_ID3DXAnimationSet, +0x698cfb3f, 0x9289, 0x4d95, 0x9a, 0x57, 0x33, 0xa9, 0x4b, 0x5a, 0x65, 0xf9); + +// {FA4E8E3A-9786-407d-8B4C-5995893764AF} +DEFINE_GUID(IID_ID3DXKeyframedAnimationSet, +0xfa4e8e3a, 0x9786, 0x407d, 0x8b, 0x4c, 0x59, 0x95, 0x89, 0x37, 0x64, 0xaf); + +// {6CC2480D-3808-4739-9F88-DE49FACD8D4C} +DEFINE_GUID(IID_ID3DXCompressedAnimationSet, +0x6cc2480d, 0x3808, 0x4739, 0x9f, 0x88, 0xde, 0x49, 0xfa, 0xcd, 0x8d, 0x4c); + +// {AC8948EC-F86D-43e2-96DE-31FC35F96D9E} +DEFINE_GUID(IID_ID3DXAnimationController, +0xac8948ec, 0xf86d, 0x43e2, 0x96, 0xde, 0x31, 0xfc, 0x35, 0xf9, 0x6d, 0x9e); + + +//---------------------------------------------------------------------------- +// D3DXMESHDATATYPE: +// ----------------- +// This enum defines the type of mesh data present in a MeshData structure. +//---------------------------------------------------------------------------- +typedef enum _D3DXMESHDATATYPE { + D3DXMESHTYPE_MESH = 0x001, // Normal ID3DXMesh data + D3DXMESHTYPE_PMESH = 0x002, // Progressive Mesh - ID3DXPMesh + D3DXMESHTYPE_PATCHMESH = 0x003, // Patch Mesh - ID3DXPatchMesh + + D3DXMESHTYPE_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DXMESHDATATYPE; + +//---------------------------------------------------------------------------- +// D3DXMESHDATA: +// ------------- +// This struct encapsulates a the mesh data that can be present in a mesh +// container. The supported mesh types are pMesh, pPMesh, pPatchMesh. +// The valid way to access this is determined by the Type enum. +//---------------------------------------------------------------------------- +typedef struct _D3DXMESHDATA +{ + D3DXMESHDATATYPE Type; + + // current mesh data interface + union + { + LPD3DXMESH pMesh; + LPD3DXPMESH pPMesh; + LPD3DXPATCHMESH pPatchMesh; + }; +} D3DXMESHDATA, *LPD3DXMESHDATA; + +//---------------------------------------------------------------------------- +// D3DXMESHCONTAINER: +// ------------------ +// This struct encapsulates a mesh object in a transformation frame +// hierarchy. The app can derive from this structure to add other app specific +// data to this. +//---------------------------------------------------------------------------- +typedef struct _D3DXMESHCONTAINER +{ + LPSTR Name; + + D3DXMESHDATA MeshData; + + LPD3DXMATERIAL pMaterials; + LPD3DXEFFECTINSTANCE pEffects; + DWORD NumMaterials; + DWORD *pAdjacency; + + LPD3DXSKININFO pSkinInfo; + + struct _D3DXMESHCONTAINER *pNextMeshContainer; +} D3DXMESHCONTAINER, *LPD3DXMESHCONTAINER; + +//---------------------------------------------------------------------------- +// D3DXFRAME: +// ---------- +// This struct is the encapsulates a transform frame in a transformation frame +// hierarchy. The app can derive from this structure to add other app specific +// data to this +//---------------------------------------------------------------------------- +typedef struct _D3DXFRAME +{ + LPSTR Name; + D3DXMATRIX TransformationMatrix; + + LPD3DXMESHCONTAINER pMeshContainer; + + struct _D3DXFRAME *pFrameSibling; + struct _D3DXFRAME *pFrameFirstChild; +} D3DXFRAME, *LPD3DXFRAME; + + +//---------------------------------------------------------------------------- +// ID3DXAllocateHierarchy: +// ----------------------- +// This interface is implemented by the application to allocate/free frame and +// mesh container objects. Methods on this are called during loading and +// destroying frame hierarchies +//---------------------------------------------------------------------------- +typedef interface ID3DXAllocateHierarchy ID3DXAllocateHierarchy; +typedef interface ID3DXAllocateHierarchy *LPD3DXALLOCATEHIERARCHY; + +#undef INTERFACE +#define INTERFACE ID3DXAllocateHierarchy + +DECLARE_INTERFACE(ID3DXAllocateHierarchy) +{ + // ID3DXAllocateHierarchy + + //------------------------------------------------------------------------ + // CreateFrame: + // ------------ + // Requests allocation of a frame object. + // + // Parameters: + // Name + // Name of the frame to be created + // ppNewFrame + // Returns the created frame object + // + //------------------------------------------------------------------------ + STDMETHOD(CreateFrame)(THIS_ LPCSTR Name, + LPD3DXFRAME *ppNewFrame) PURE; + + //------------------------------------------------------------------------ + // CreateMeshContainer: + // -------------------- + // Requests allocation of a mesh container object. + // + // Parameters: + // Name + // Name of the mesh + // pMesh + // Pointer to the mesh object if basic polygon data found + // pPMesh + // Pointer to the progressive mesh object if progressive mesh data found + // pPatchMesh + // Pointer to the patch mesh object if patch data found + // pMaterials + // Array of materials used in the mesh + // pEffectInstances + // Array of effect instances used in the mesh + // NumMaterials + // Num elements in the pMaterials array + // pAdjacency + // Adjacency array for the mesh + // pSkinInfo + // Pointer to the skininfo object if the mesh is skinned + // pBoneNames + // Array of names, one for each bone in the skinned mesh. + // The numberof bones can be found from the pSkinMesh object + // pBoneOffsetMatrices + // Array of matrices, one for each bone in the skinned mesh. + // + //------------------------------------------------------------------------ + STDMETHOD(CreateMeshContainer)(THIS_ + LPCSTR Name, + CONST D3DXMESHDATA *pMeshData, + CONST D3DXMATERIAL *pMaterials, + CONST D3DXEFFECTINSTANCE *pEffectInstances, + DWORD NumMaterials, + CONST DWORD *pAdjacency, + LPD3DXSKININFO pSkinInfo, + LPD3DXMESHCONTAINER *ppNewMeshContainer) PURE; + + //------------------------------------------------------------------------ + // DestroyFrame: + // ------------- + // Requests de-allocation of a frame object. + // + // Parameters: + // pFrameToFree + // Pointer to the frame to be de-allocated + // + //------------------------------------------------------------------------ + STDMETHOD(DestroyFrame)(THIS_ LPD3DXFRAME pFrameToFree) PURE; + + //------------------------------------------------------------------------ + // DestroyMeshContainer: + // --------------------- + // Requests de-allocation of a mesh container object. + // + // Parameters: + // pMeshContainerToFree + // Pointer to the mesh container object to be de-allocated + // + //------------------------------------------------------------------------ + STDMETHOD(DestroyMeshContainer)(THIS_ LPD3DXMESHCONTAINER pMeshContainerToFree) PURE; +}; + +//---------------------------------------------------------------------------- +// ID3DXLoadUserData: +// ------------------ +// This interface is implemented by the application to load user data in a .X file +// When user data is found, these callbacks will be used to allow the application +// to load the data. +//---------------------------------------------------------------------------- +typedef interface ID3DXLoadUserData ID3DXLoadUserData; +typedef interface ID3DXLoadUserData *LPD3DXLOADUSERDATA; + +#undef INTERFACE +#define INTERFACE ID3DXLoadUserData + +DECLARE_INTERFACE(ID3DXLoadUserData) +{ + STDMETHOD(LoadTopLevelData)(LPD3DXFILEDATA pXofChildData) PURE; + + STDMETHOD(LoadFrameChildData)(LPD3DXFRAME pFrame, + LPD3DXFILEDATA pXofChildData) PURE; + + STDMETHOD(LoadMeshChildData)(LPD3DXMESHCONTAINER pMeshContainer, + LPD3DXFILEDATA pXofChildData) PURE; +}; + +//---------------------------------------------------------------------------- +// ID3DXSaveUserData: +// ------------------ +// This interface is implemented by the application to save user data in a .X file +// The callbacks are called for all data saved. The user can then add any +// child data objects to the object provided to the callback. +//---------------------------------------------------------------------------- +typedef interface ID3DXSaveUserData ID3DXSaveUserData; +typedef interface ID3DXSaveUserData *LPD3DXSAVEUSERDATA; + +#undef INTERFACE +#define INTERFACE ID3DXSaveUserData + +DECLARE_INTERFACE(ID3DXSaveUserData) +{ + STDMETHOD(AddFrameChildData)(CONST D3DXFRAME *pFrame, + LPD3DXFILESAVEOBJECT pXofSave, + LPD3DXFILESAVEDATA pXofFrameData) PURE; + + STDMETHOD(AddMeshChildData)(CONST D3DXMESHCONTAINER *pMeshContainer, + LPD3DXFILESAVEOBJECT pXofSave, + LPD3DXFILESAVEDATA pXofMeshData) PURE; + + // NOTE: this is called once per Save. All top level objects should be added using the + // provided interface. One call adds objects before the frame hierarchy, the other after + STDMETHOD(AddTopLevelDataObjectsPre)(LPD3DXFILESAVEOBJECT pXofSave) PURE; + STDMETHOD(AddTopLevelDataObjectsPost)(LPD3DXFILESAVEOBJECT pXofSave) PURE; + + // callbacks for the user to register and then save templates to the XFile + STDMETHOD(RegisterTemplates)(LPD3DXFILE pXFileApi) PURE; + STDMETHOD(SaveTemplates)(LPD3DXFILESAVEOBJECT pXofSave) PURE; +}; + + +//---------------------------------------------------------------------------- +// D3DXCALLBACK_SEARCH_FLAGS: +// -------------------------- +// Flags that can be passed into ID3DXAnimationSet::GetCallback. +//---------------------------------------------------------------------------- +typedef enum _D3DXCALLBACK_SEARCH_FLAGS +{ + D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION = 0x01, // exclude callbacks at the initial position from the search + D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION = 0x02, // reverse the callback search direction + + D3DXCALLBACK_SEARCH_FORCE_DWORD = 0x7fffffff, +} D3DXCALLBACK_SEARCH_FLAGS; + +//---------------------------------------------------------------------------- +// ID3DXAnimationSet: +// ------------------ +// This interface implements an animation set. +//---------------------------------------------------------------------------- +typedef interface ID3DXAnimationSet ID3DXAnimationSet; +typedef interface ID3DXAnimationSet *LPD3DXANIMATIONSET; + +#undef INTERFACE +#define INTERFACE ID3DXAnimationSet + +DECLARE_INTERFACE_(ID3DXAnimationSet, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Name + STDMETHOD_(LPCSTR, GetName)(THIS) PURE; + + // Period + STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE; + STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE Position) PURE; // Maps position into animation period + + // Animation names + STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE; + STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT Index, LPCSTR *ppName) PURE; + STDMETHOD(GetAnimationIndexByName)(THIS_ LPCSTR pName, UINT *pIndex) PURE; + + // SRT + STDMETHOD(GetSRT)(THIS_ + DOUBLE PeriodicPosition, // Position mapped to period (use GetPeriodicPosition) + UINT Animation, // Animation index + D3DXVECTOR3 *pScale, // Returns the scale + D3DXQUATERNION *pRotation, // Returns the rotation as a quaternion + D3DXVECTOR3 *pTranslation) PURE; // Returns the translation + + // Callbacks + STDMETHOD(GetCallback)(THIS_ + DOUBLE Position, // Position from which to find callbacks + DWORD Flags, // Callback search flags + DOUBLE *pCallbackPosition, // Returns the position of the callback + LPVOID *ppCallbackData) PURE; // Returns the callback data pointer +}; + + +//---------------------------------------------------------------------------- +// D3DXPLAYBACK_TYPE: +// ------------------ +// This enum defines the type of animation set loop modes. +//---------------------------------------------------------------------------- +typedef enum _D3DXPLAYBACK_TYPE +{ + D3DXPLAY_LOOP = 0, + D3DXPLAY_ONCE = 1, + D3DXPLAY_PINGPONG = 2, + + D3DXPLAY_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DXPLAYBACK_TYPE; + + +//---------------------------------------------------------------------------- +// D3DXKEY_VECTOR3: +// ---------------- +// This structure describes a vector key for use in keyframe animation. +// It specifies a vector Value at a given Time. This is used for scale and +// translation keys. +//---------------------------------------------------------------------------- +typedef struct _D3DXKEY_VECTOR3 +{ + FLOAT Time; + D3DXVECTOR3 Value; +} D3DXKEY_VECTOR3, *LPD3DXKEY_VECTOR3; + + +//---------------------------------------------------------------------------- +// D3DXKEY_QUATERNION: +// ------------------- +// This structure describes a quaternion key for use in keyframe animation. +// It specifies a quaternion Value at a given Time. This is used for rotation +// keys. +//---------------------------------------------------------------------------- +typedef struct _D3DXKEY_QUATERNION +{ + FLOAT Time; + D3DXQUATERNION Value; +} D3DXKEY_QUATERNION, *LPD3DXKEY_QUATERNION; + + +//---------------------------------------------------------------------------- +// D3DXKEY_CALLBACK: +// ----------------- +// This structure describes an callback key for use in keyframe animation. +// It specifies a pointer to user data at a given Time. +//---------------------------------------------------------------------------- +typedef struct _D3DXKEY_CALLBACK +{ + FLOAT Time; + LPVOID pCallbackData; +} D3DXKEY_CALLBACK, *LPD3DXKEY_CALLBACK; + + +//---------------------------------------------------------------------------- +// D3DXCOMPRESSION_FLAGS: +// ---------------------- +// Flags that can be passed into ID3DXKeyframedAnimationSet::Compress. +//---------------------------------------------------------------------------- +typedef enum _D3DXCOMPRESSION_FLAGS +{ + D3DXCOMPRESS_DEFAULT = 0x00, + + D3DXCOMPRESS_FORCE_DWORD = 0x7fffffff, +} D3DXCOMPRESSION_FLAGS; + + +//---------------------------------------------------------------------------- +// ID3DXKeyframedAnimationSet: +// --------------------------- +// This interface implements a compressable keyframed animation set. +//---------------------------------------------------------------------------- +typedef interface ID3DXKeyframedAnimationSet ID3DXKeyframedAnimationSet; +typedef interface ID3DXKeyframedAnimationSet *LPD3DXKEYFRAMEDANIMATIONSET; + +#undef INTERFACE +#define INTERFACE ID3DXKeyframedAnimationSet + +DECLARE_INTERFACE_(ID3DXKeyframedAnimationSet, ID3DXAnimationSet) +{ + // ID3DXAnimationSet + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Name + STDMETHOD_(LPCSTR, GetName)(THIS) PURE; + + // Period + STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE; + STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE Position) PURE; // Maps position into animation period + + // Animation names + STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE; + STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT Index, LPCSTR *ppName) PURE; + STDMETHOD(GetAnimationIndexByName)(THIS_ LPCSTR pName, UINT *pIndex) PURE; + + // SRT + STDMETHOD(GetSRT)(THIS_ + DOUBLE PeriodicPosition, // Position mapped to period (use GetPeriodicPosition) + UINT Animation, // Animation index + D3DXVECTOR3 *pScale, // Returns the scale + D3DXQUATERNION *pRotation, // Returns the rotation as a quaternion + D3DXVECTOR3 *pTranslation) PURE; // Returns the translation + + // Callbacks + STDMETHOD(GetCallback)(THIS_ + DOUBLE Position, // Position from which to find callbacks + DWORD Flags, // Callback search flags + DOUBLE *pCallbackPosition, // Returns the position of the callback + LPVOID *ppCallbackData) PURE; // Returns the callback data pointer + + // Playback + STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE; + STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE; + + // Scale keys + STDMETHOD_(UINT, GetNumScaleKeys)(THIS_ UINT Animation) PURE; + STDMETHOD(GetScaleKeys)(THIS_ UINT Animation, LPD3DXKEY_VECTOR3 pScaleKeys) PURE; + STDMETHOD(GetScaleKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pScaleKey) PURE; + STDMETHOD(SetScaleKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pScaleKey) PURE; + + // Rotation keys + STDMETHOD_(UINT, GetNumRotationKeys)(THIS_ UINT Animation) PURE; + STDMETHOD(GetRotationKeys)(THIS_ UINT Animation, LPD3DXKEY_QUATERNION pRotationKeys) PURE; + STDMETHOD(GetRotationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_QUATERNION pRotationKey) PURE; + STDMETHOD(SetRotationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_QUATERNION pRotationKey) PURE; + + // Translation keys + STDMETHOD_(UINT, GetNumTranslationKeys)(THIS_ UINT Animation) PURE; + STDMETHOD(GetTranslationKeys)(THIS_ UINT Animation, LPD3DXKEY_VECTOR3 pTranslationKeys) PURE; + STDMETHOD(GetTranslationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pTranslationKey) PURE; + STDMETHOD(SetTranslationKey)(THIS_ UINT Animation, UINT Key, LPD3DXKEY_VECTOR3 pTranslationKey) PURE; + + // Callback keys + STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE; + STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK pCallbackKeys) PURE; + STDMETHOD(GetCallbackKey)(THIS_ UINT Key, LPD3DXKEY_CALLBACK pCallbackKey) PURE; + STDMETHOD(SetCallbackKey)(THIS_ UINT Key, LPD3DXKEY_CALLBACK pCallbackKey) PURE; + + // Key removal methods. These are slow, and should not be used once the animation starts playing + STDMETHOD(UnregisterScaleKey)(THIS_ UINT Animation, UINT Key) PURE; + STDMETHOD(UnregisterRotationKey)(THIS_ UINT Animation, UINT Key) PURE; + STDMETHOD(UnregisterTranslationKey)(THIS_ UINT Animation, UINT Key) PURE; + + // One-time animaton SRT keyframe registration + STDMETHOD(RegisterAnimationSRTKeys)(THIS_ + LPCSTR pName, // Animation name + UINT NumScaleKeys, // Number of scale keys + UINT NumRotationKeys, // Number of rotation keys + UINT NumTranslationKeys, // Number of translation keys + CONST D3DXKEY_VECTOR3 *pScaleKeys, // Array of scale keys + CONST D3DXKEY_QUATERNION *pRotationKeys, // Array of rotation keys + CONST D3DXKEY_VECTOR3 *pTranslationKeys, // Array of translation keys + DWORD *pAnimationIndex) PURE; // Returns the animation index + + // Compression + STDMETHOD(Compress)(THIS_ + DWORD Flags, // Compression flags (use D3DXCOMPRESS_STRONG for better results) + FLOAT Lossiness, // Compression loss ratio in the [0, 1] range + LPD3DXFRAME pHierarchy, // Frame hierarchy (optional) + LPD3DXBUFFER *ppCompressedData) PURE; // Returns the compressed animation set + + STDMETHOD(UnregisterAnimation)(THIS_ UINT Index) PURE; +}; + + +//---------------------------------------------------------------------------- +// ID3DXCompressedAnimationSet: +// ---------------------------- +// This interface implements a compressed keyframed animation set. +//---------------------------------------------------------------------------- +typedef interface ID3DXCompressedAnimationSet ID3DXCompressedAnimationSet; +typedef interface ID3DXCompressedAnimationSet *LPD3DXCOMPRESSEDANIMATIONSET; + +#undef INTERFACE +#define INTERFACE ID3DXCompressedAnimationSet + +DECLARE_INTERFACE_(ID3DXCompressedAnimationSet, ID3DXAnimationSet) +{ + // ID3DXAnimationSet + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Name + STDMETHOD_(LPCSTR, GetName)(THIS) PURE; + + // Period + STDMETHOD_(DOUBLE, GetPeriod)(THIS) PURE; + STDMETHOD_(DOUBLE, GetPeriodicPosition)(THIS_ DOUBLE Position) PURE; // Maps position into animation period + + // Animation names + STDMETHOD_(UINT, GetNumAnimations)(THIS) PURE; + STDMETHOD(GetAnimationNameByIndex)(THIS_ UINT Index, LPCSTR *ppName) PURE; + STDMETHOD(GetAnimationIndexByName)(THIS_ LPCSTR pName, UINT *pIndex) PURE; + + // SRT + STDMETHOD(GetSRT)(THIS_ + DOUBLE PeriodicPosition, // Position mapped to period (use GetPeriodicPosition) + UINT Animation, // Animation index + D3DXVECTOR3 *pScale, // Returns the scale + D3DXQUATERNION *pRotation, // Returns the rotation as a quaternion + D3DXVECTOR3 *pTranslation) PURE; // Returns the translation + + // Callbacks + STDMETHOD(GetCallback)(THIS_ + DOUBLE Position, // Position from which to find callbacks + DWORD Flags, // Callback search flags + DOUBLE *pCallbackPosition, // Returns the position of the callback + LPVOID *ppCallbackData) PURE; // Returns the callback data pointer + + // Playback + STDMETHOD_(D3DXPLAYBACK_TYPE, GetPlaybackType)(THIS) PURE; + STDMETHOD_(DOUBLE, GetSourceTicksPerSecond)(THIS) PURE; + + // Scale keys + STDMETHOD(GetCompressedData)(THIS_ LPD3DXBUFFER *ppCompressedData) PURE; + + // Callback keys + STDMETHOD_(UINT, GetNumCallbackKeys)(THIS) PURE; + STDMETHOD(GetCallbackKeys)(THIS_ LPD3DXKEY_CALLBACK pCallbackKeys) PURE; +}; + + +//---------------------------------------------------------------------------- +// D3DXPRIORITY_TYPE: +// ------------------ +// This enum defines the type of priority group that a track can be assigned to. +//---------------------------------------------------------------------------- +typedef enum _D3DXPRIORITY_TYPE { + D3DXPRIORITY_LOW = 0, // This track should be blended with all low priority tracks before mixed with the high priority result + D3DXPRIORITY_HIGH = 1, // This track should be blended with all high priority tracks before mixed with the low priority result + + D3DXPRIORITY_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DXPRIORITY_TYPE; + +//---------------------------------------------------------------------------- +// D3DXTRACK_DESC: +// --------------- +// This structure describes the mixing information of an animation track. +// The mixing information consists of the current position, speed, and blending +// weight for the track. The Flags field also specifies whether the track is +// low or high priority. Tracks with the same priority are blended together +// and then the two resulting values are blended using the priority blend factor. +// A track also has an animation set (stored separately) associated with it. +//---------------------------------------------------------------------------- +typedef struct _D3DXTRACK_DESC +{ + D3DXPRIORITY_TYPE Priority; + FLOAT Weight; + FLOAT Speed; + DOUBLE Position; + BOOL Enable; +} D3DXTRACK_DESC, *LPD3DXTRACK_DESC; + +//---------------------------------------------------------------------------- +// D3DXEVENT_TYPE: +// --------------- +// This enum defines the type of events keyable via the animation controller. +//---------------------------------------------------------------------------- +typedef enum _D3DXEVENT_TYPE +{ + D3DXEVENT_TRACKSPEED = 0, + D3DXEVENT_TRACKWEIGHT = 1, + D3DXEVENT_TRACKPOSITION = 2, + D3DXEVENT_TRACKENABLE = 3, + D3DXEVENT_PRIORITYBLEND = 4, + + D3DXEVENT_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DXEVENT_TYPE; + +//---------------------------------------------------------------------------- +// D3DXTRANSITION_TYPE: +// -------------------- +// This enum defines the type of transtion performed on a event that +// transitions from one value to another. +//---------------------------------------------------------------------------- +typedef enum _D3DXTRANSITION_TYPE { + D3DXTRANSITION_LINEAR = 0x000, // Linear transition from one value to the next + D3DXTRANSITION_EASEINEASEOUT = 0x001, // Ease-In Ease-Out spline transtion from one value to the next + + D3DXTRANSITION_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DXTRANSITION_TYPE; + +//---------------------------------------------------------------------------- +// D3DXEVENT_DESC: +// --------------- +// This structure describes a animation controller event. +// It gives the event's type, track (if the event is a track event), global +// start time, duration, transition method, and target value. +//---------------------------------------------------------------------------- +typedef struct _D3DXEVENT_DESC +{ + D3DXEVENT_TYPE Type; + UINT Track; + DOUBLE StartTime; + DOUBLE Duration; + D3DXTRANSITION_TYPE Transition; + union + { + FLOAT Weight; + FLOAT Speed; + DOUBLE Position; + BOOL Enable; + }; +} D3DXEVENT_DESC, *LPD3DXEVENT_DESC; + +//---------------------------------------------------------------------------- +// D3DXEVENTHANDLE: +// ---------------- +// Handle values used to efficiently reference animation controller events. +//---------------------------------------------------------------------------- +typedef DWORD D3DXEVENTHANDLE; +typedef D3DXEVENTHANDLE *LPD3DXEVENTHANDLE; + + +//---------------------------------------------------------------------------- +// ID3DXAnimationCallbackHandler: +// ------------------------------ +// This interface is intended to be implemented by the application, and can +// be used to handle callbacks in animation sets generated when +// ID3DXAnimationController::AdvanceTime() is called. +//---------------------------------------------------------------------------- +typedef interface ID3DXAnimationCallbackHandler ID3DXAnimationCallbackHandler; +typedef interface ID3DXAnimationCallbackHandler *LPD3DXANIMATIONCALLBACKHANDLER; + +#undef INTERFACE +#define INTERFACE ID3DXAnimationCallbackHandler + +DECLARE_INTERFACE(ID3DXAnimationCallbackHandler) +{ + //---------------------------------------------------------------------------- + // ID3DXAnimationCallbackHandler::HandleCallback: + // ---------------------------------------------- + // This method gets called when a callback occurs for an animation set in one + // of the tracks during the ID3DXAnimationController::AdvanceTime() call. + // + // Parameters: + // Track + // Index of the track on which the callback occured. + // pCallbackData + // Pointer to user owned callback data. + // + //---------------------------------------------------------------------------- + STDMETHOD(HandleCallback)(THIS_ UINT Track, LPVOID pCallbackData) PURE; +}; + + +//---------------------------------------------------------------------------- +// ID3DXAnimationController: +// ------------------------- +// This interface implements the main animation functionality. It connects +// animation sets with the transform frames that are being animated. Allows +// mixing multiple animations for blended animations or for transistions +// It adds also has methods to modify blending parameters over time to +// enable smooth transistions and other effects. +//---------------------------------------------------------------------------- +typedef interface ID3DXAnimationController ID3DXAnimationController; +typedef interface ID3DXAnimationController *LPD3DXANIMATIONCONTROLLER; + +#undef INTERFACE +#define INTERFACE ID3DXAnimationController + +DECLARE_INTERFACE_(ID3DXAnimationController, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Max sizes + STDMETHOD_(UINT, GetMaxNumAnimationOutputs)(THIS) PURE; + STDMETHOD_(UINT, GetMaxNumAnimationSets)(THIS) PURE; + STDMETHOD_(UINT, GetMaxNumTracks)(THIS) PURE; + STDMETHOD_(UINT, GetMaxNumEvents)(THIS) PURE; + + // Animation output registration + STDMETHOD(RegisterAnimationOutput)(THIS_ + LPCSTR pName, + D3DXMATRIX *pMatrix, + D3DXVECTOR3 *pScale, + D3DXQUATERNION *pRotation, + D3DXVECTOR3 *pTranslation) PURE; + + // Animation set registration + STDMETHOD(RegisterAnimationSet)(THIS_ LPD3DXANIMATIONSET pAnimSet) PURE; + STDMETHOD(UnregisterAnimationSet)(THIS_ LPD3DXANIMATIONSET pAnimSet) PURE; + + STDMETHOD_(UINT, GetNumAnimationSets)(THIS) PURE; + STDMETHOD(GetAnimationSet)(THIS_ UINT Index, LPD3DXANIMATIONSET *ppAnimationSet) PURE; + STDMETHOD(GetAnimationSetByName)(THIS_ LPCSTR szName, LPD3DXANIMATIONSET *ppAnimationSet) PURE; + + // Global time + STDMETHOD(AdvanceTime)(THIS_ DOUBLE TimeDelta, LPD3DXANIMATIONCALLBACKHANDLER pCallbackHandler) PURE; + STDMETHOD(ResetTime)(THIS) PURE; + STDMETHOD_(DOUBLE, GetTime)(THIS) PURE; + + // Tracks + STDMETHOD(SetTrackAnimationSet)(THIS_ UINT Track, LPD3DXANIMATIONSET pAnimSet) PURE; + STDMETHOD(GetTrackAnimationSet)(THIS_ UINT Track, LPD3DXANIMATIONSET *ppAnimSet) PURE; + + STDMETHOD(SetTrackPriority)(THIS_ UINT Track, D3DXPRIORITY_TYPE Priority) PURE; + + STDMETHOD(SetTrackSpeed)(THIS_ UINT Track, FLOAT Speed) PURE; + STDMETHOD(SetTrackWeight)(THIS_ UINT Track, FLOAT Weight) PURE; + STDMETHOD(SetTrackPosition)(THIS_ UINT Track, DOUBLE Position) PURE; + STDMETHOD(SetTrackEnable)(THIS_ UINT Track, BOOL Enable) PURE; + + STDMETHOD(SetTrackDesc)(THIS_ UINT Track, LPD3DXTRACK_DESC pDesc) PURE; + STDMETHOD(GetTrackDesc)(THIS_ UINT Track, LPD3DXTRACK_DESC pDesc) PURE; + + // Priority blending + STDMETHOD(SetPriorityBlend)(THIS_ FLOAT BlendWeight) PURE; + STDMETHOD_(FLOAT, GetPriorityBlend)(THIS) PURE; + + // Event keying + STDMETHOD_(D3DXEVENTHANDLE, KeyTrackSpeed)(THIS_ UINT Track, FLOAT NewSpeed, DOUBLE StartTime, DOUBLE Duration, D3DXTRANSITION_TYPE Transition) PURE; + STDMETHOD_(D3DXEVENTHANDLE, KeyTrackWeight)(THIS_ UINT Track, FLOAT NewWeight, DOUBLE StartTime, DOUBLE Duration, D3DXTRANSITION_TYPE Transition) PURE; + STDMETHOD_(D3DXEVENTHANDLE, KeyTrackPosition)(THIS_ UINT Track, DOUBLE NewPosition, DOUBLE StartTime) PURE; + STDMETHOD_(D3DXEVENTHANDLE, KeyTrackEnable)(THIS_ UINT Track, BOOL NewEnable, DOUBLE StartTime) PURE; + + STDMETHOD_(D3DXEVENTHANDLE, KeyPriorityBlend)(THIS_ FLOAT NewBlendWeight, DOUBLE StartTime, DOUBLE Duration, D3DXTRANSITION_TYPE Transition) PURE; + + // Event unkeying + STDMETHOD(UnkeyEvent)(THIS_ D3DXEVENTHANDLE hEvent) PURE; + + STDMETHOD(UnkeyAllTrackEvents)(THIS_ UINT Track) PURE; + STDMETHOD(UnkeyAllPriorityBlends)(THIS) PURE; + + // Event enumeration + STDMETHOD_(D3DXEVENTHANDLE, GetCurrentTrackEvent)(THIS_ UINT Track, D3DXEVENT_TYPE EventType) PURE; + STDMETHOD_(D3DXEVENTHANDLE, GetCurrentPriorityBlend)(THIS) PURE; + + STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingTrackEvent)(THIS_ UINT Track, D3DXEVENTHANDLE hEvent) PURE; + STDMETHOD_(D3DXEVENTHANDLE, GetUpcomingPriorityBlend)(THIS_ D3DXEVENTHANDLE hEvent) PURE; + + STDMETHOD(ValidateEvent)(THIS_ D3DXEVENTHANDLE hEvent) PURE; + + STDMETHOD(GetEventDesc)(THIS_ D3DXEVENTHANDLE hEvent, LPD3DXEVENT_DESC pDesc) PURE; + + // Cloning + STDMETHOD(CloneAnimationController)(THIS_ + UINT MaxNumAnimationOutputs, + UINT MaxNumAnimationSets, + UINT MaxNumTracks, + UINT MaxNumEvents, + LPD3DXANIMATIONCONTROLLER *ppAnimController) PURE; +}; + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + + +//---------------------------------------------------------------------------- +// D3DXLoadMeshHierarchyFromX: +// --------------------------- +// Loads the first frame hierarchy in a .X file. +// +// Parameters: +// Filename +// Name of the .X file +// MeshOptions +// Mesh creation options for meshes in the file (see d3dx9mesh.h) +// pD3DDevice +// D3D9 device on which meshes in the file are created in +// pAlloc +// Allocation interface used to allocate nodes of the frame hierarchy +// pUserDataLoader +// Application provided interface to allow loading of user data +// ppFrameHierarchy +// Returns root node pointer of the loaded frame hierarchy +// ppAnimController +// Returns pointer to an animation controller corresponding to animation +// in the .X file. This is created with default max tracks and events +// +//---------------------------------------------------------------------------- +HRESULT WINAPI +D3DXLoadMeshHierarchyFromXA + ( + LPCSTR Filename, + DWORD MeshOptions, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXALLOCATEHIERARCHY pAlloc, + LPD3DXLOADUSERDATA pUserDataLoader, + LPD3DXFRAME *ppFrameHierarchy, + LPD3DXANIMATIONCONTROLLER *ppAnimController + ); + +HRESULT WINAPI +D3DXLoadMeshHierarchyFromXW + ( + LPCWSTR Filename, + DWORD MeshOptions, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXALLOCATEHIERARCHY pAlloc, + LPD3DXLOADUSERDATA pUserDataLoader, + LPD3DXFRAME *ppFrameHierarchy, + LPD3DXANIMATIONCONTROLLER *ppAnimController + ); + +#ifdef UNICODE +#define D3DXLoadMeshHierarchyFromX D3DXLoadMeshHierarchyFromXW +#else +#define D3DXLoadMeshHierarchyFromX D3DXLoadMeshHierarchyFromXA +#endif + +HRESULT WINAPI +D3DXLoadMeshHierarchyFromXInMemory + ( + LPCVOID Memory, + DWORD SizeOfMemory, + DWORD MeshOptions, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXALLOCATEHIERARCHY pAlloc, + LPD3DXLOADUSERDATA pUserDataLoader, + LPD3DXFRAME *ppFrameHierarchy, + LPD3DXANIMATIONCONTROLLER *ppAnimController + ); + +//---------------------------------------------------------------------------- +// D3DXSaveMeshHierarchyToFile: +// ---------------------------- +// Creates a .X file and saves the mesh hierarchy and corresponding animations +// in it +// +// Parameters: +// Filename +// Name of the .X file +// XFormat +// Format of the .X file (text or binary, compressed or not, etc) +// pFrameRoot +// Root node of the hierarchy to be saved +// pAnimController +// The animation controller whose animation sets are to be stored +// pUserDataSaver +// Application provided interface to allow adding of user data to +// data objects saved to .X file +// +//---------------------------------------------------------------------------- +HRESULT WINAPI +D3DXSaveMeshHierarchyToFileA + ( + LPCSTR Filename, + DWORD XFormat, + CONST D3DXFRAME *pFrameRoot, + LPD3DXANIMATIONCONTROLLER pAnimcontroller, + LPD3DXSAVEUSERDATA pUserDataSaver + ); + +HRESULT WINAPI +D3DXSaveMeshHierarchyToFileW + ( + LPCWSTR Filename, + DWORD XFormat, + CONST D3DXFRAME *pFrameRoot, + LPD3DXANIMATIONCONTROLLER pAnimController, + LPD3DXSAVEUSERDATA pUserDataSaver + ); + +#ifdef UNICODE +#define D3DXSaveMeshHierarchyToFile D3DXSaveMeshHierarchyToFileW +#else +#define D3DXSaveMeshHierarchyToFile D3DXSaveMeshHierarchyToFileA +#endif + +//---------------------------------------------------------------------------- +// D3DXFrameDestroy: +// ----------------- +// Destroys the subtree of frames under the root, including the root +// +// Parameters: +// pFrameRoot +// Pointer to the root node +// pAlloc +// Allocation interface used to de-allocate nodes of the frame hierarchy +// +//---------------------------------------------------------------------------- +HRESULT WINAPI +D3DXFrameDestroy + ( + LPD3DXFRAME pFrameRoot, + LPD3DXALLOCATEHIERARCHY pAlloc + ); + +//---------------------------------------------------------------------------- +// D3DXFrameAppendChild: +// --------------------- +// Add a child frame to a frame +// +// Parameters: +// pFrameParent +// Pointer to the parent node +// pFrameChild +// Pointer to the child node +// +//---------------------------------------------------------------------------- +HRESULT WINAPI +D3DXFrameAppendChild + ( + LPD3DXFRAME pFrameParent, + CONST D3DXFRAME *pFrameChild + ); + +//---------------------------------------------------------------------------- +// D3DXFrameFind: +// -------------- +// Finds a frame with the given name. Returns NULL if no frame found. +// +// Parameters: +// pFrameRoot +// Pointer to the root node +// Name +// Name of frame to find +// +//---------------------------------------------------------------------------- +LPD3DXFRAME WINAPI +D3DXFrameFind + ( + CONST D3DXFRAME *pFrameRoot, + LPCSTR Name + ); + +//---------------------------------------------------------------------------- +// D3DXFrameRegisterNamedMatrices: +// ------------------------------- +// Finds all frames that have non-null names and registers each of those frame +// matrices to the given animation controller +// +// Parameters: +// pFrameRoot +// Pointer to the root node +// pAnimController +// Pointer to the animation controller where the matrices are registered +// +//---------------------------------------------------------------------------- +HRESULT WINAPI +D3DXFrameRegisterNamedMatrices + ( + LPD3DXFRAME pFrameRoot, + LPD3DXANIMATIONCONTROLLER pAnimController + ); + +//---------------------------------------------------------------------------- +// D3DXFrameNumNamedMatrices: +// -------------------------- +// Counts number of frames in a subtree that have non-null names +// +// Parameters: +// pFrameRoot +// Pointer to the root node of the subtree +// Return Value: +// Count of frames +// +//---------------------------------------------------------------------------- +UINT WINAPI +D3DXFrameNumNamedMatrices + ( + CONST D3DXFRAME *pFrameRoot + ); + +//---------------------------------------------------------------------------- +// D3DXFrameCalculateBoundingSphere: +// --------------------------------- +// Computes the bounding sphere of all the meshes in the frame hierarchy. +// +// Parameters: +// pFrameRoot +// Pointer to the root node +// pObjectCenter +// Returns the center of the bounding sphere +// pObjectRadius +// Returns the radius of the bounding sphere +// +//---------------------------------------------------------------------------- +HRESULT WINAPI +D3DXFrameCalculateBoundingSphere + ( + CONST D3DXFRAME *pFrameRoot, + LPD3DXVECTOR3 pObjectCenter, + FLOAT *pObjectRadius + ); + + +//---------------------------------------------------------------------------- +// D3DXCreateKeyframedAnimationSet: +// -------------------------------- +// This function creates a compressable keyframed animations set interface. +// +// Parameters: +// pName +// Name of the animation set +// TicksPerSecond +// Number of keyframe ticks that elapse per second +// Playback +// Playback mode of keyframe looping +// NumAnimations +// Number of SRT animations +// NumCallbackKeys +// Number of callback keys +// pCallbackKeys +// Array of callback keys +// ppAnimationSet +// Returns the animation set interface +// +//----------------------------------------------------------------------------- +HRESULT WINAPI +D3DXCreateKeyframedAnimationSet + ( + LPCSTR pName, + DOUBLE TicksPerSecond, + D3DXPLAYBACK_TYPE Playback, + UINT NumAnimations, + UINT NumCallbackKeys, + CONST D3DXKEY_CALLBACK *pCallbackKeys, + LPD3DXKEYFRAMEDANIMATIONSET *ppAnimationSet + ); + + +//---------------------------------------------------------------------------- +// D3DXCreateCompressedAnimationSet: +// -------------------------------- +// This function creates a compressed animations set interface from +// compressed data. +// +// Parameters: +// pName +// Name of the animation set +// TicksPerSecond +// Number of keyframe ticks that elapse per second +// Playback +// Playback mode of keyframe looping +// pCompressedData +// Compressed animation SRT data +// NumCallbackKeys +// Number of callback keys +// pCallbackKeys +// Array of callback keys +// ppAnimationSet +// Returns the animation set interface +// +//----------------------------------------------------------------------------- +HRESULT WINAPI +D3DXCreateCompressedAnimationSet + ( + LPCSTR pName, + DOUBLE TicksPerSecond, + D3DXPLAYBACK_TYPE Playback, + LPD3DXBUFFER pCompressedData, + UINT NumCallbackKeys, + CONST D3DXKEY_CALLBACK *pCallbackKeys, + LPD3DXCOMPRESSEDANIMATIONSET *ppAnimationSet + ); + + +//---------------------------------------------------------------------------- +// D3DXCreateAnimationController: +// ------------------------------ +// This function creates an animation controller object. +// +// Parameters: +// MaxNumMatrices +// Maximum number of matrices that can be animated +// MaxNumAnimationSets +// Maximum number of animation sets that can be played +// MaxNumTracks +// Maximum number of animation sets that can be blended +// MaxNumEvents +// Maximum number of outstanding events that can be scheduled at any given time +// ppAnimController +// Returns the animation controller interface +// +//----------------------------------------------------------------------------- +HRESULT WINAPI +D3DXCreateAnimationController + ( + UINT MaxNumMatrices, + UINT MaxNumAnimationSets, + UINT MaxNumTracks, + UINT MaxNumEvents, + LPD3DXANIMATIONCONTROLLER *ppAnimController + ); + + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif //__D3DX9ANIM_H__ + + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9core.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9core.h new file mode 100644 index 0000000000..8c4a685e4a --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9core.h @@ -0,0 +1,755 @@ +/////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Microsoft Corporation. All Rights Reserved. +// +// File: d3dx9core.h +// Content: D3DX core types and functions +// +/////////////////////////////////////////////////////////////////////////// + +#include "d3dx9.h" + +#ifndef __D3DX9CORE_H__ +#define __D3DX9CORE_H__ + + +/////////////////////////////////////////////////////////////////////////// +// D3DX_SDK_VERSION: +// ----------------- +// This identifier is passed to D3DXCheckVersion in order to ensure that an +// application was built against the correct header files and lib files. +// This number is incremented whenever a header (or other) change would +// require applications to be rebuilt. If the version doesn't match, +// D3DXCheckVersion will return FALSE. (The number itself has no meaning.) +/////////////////////////////////////////////////////////////////////////// + +#define D3DX_VERSION 0x0902 + +#define D3DX_SDK_VERSION 35 + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +BOOL WINAPI + D3DXCheckVersion(UINT D3DSdkVersion, UINT D3DXSdkVersion); + +#ifdef __cplusplus +} +#endif //__cplusplus + + + +/////////////////////////////////////////////////////////////////////////// +// D3DXDebugMute +// Mutes D3DX and D3D debug spew (TRUE - mute, FALSE - not mute) +// +// returns previous mute value +// +/////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +BOOL WINAPI + D3DXDebugMute(BOOL Mute); + +#ifdef __cplusplus +} +#endif //__cplusplus + + +/////////////////////////////////////////////////////////////////////////// +// D3DXGetDriverLevel: +// Returns driver version information: +// +// 700 - DX7 level driver +// 800 - DX8 level driver +// 900 - DX9 level driver +/////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +UINT WINAPI + D3DXGetDriverLevel(LPDIRECT3DDEVICE9 pDevice); + +#ifdef __cplusplus +} +#endif //__cplusplus + + +/////////////////////////////////////////////////////////////////////////// +// ID3DXBuffer: +// ------------ +// The buffer object is used by D3DX to return arbitrary size data. +// +// GetBufferPointer - +// Returns a pointer to the beginning of the buffer. +// +// GetBufferSize - +// Returns the size of the buffer, in bytes. +/////////////////////////////////////////////////////////////////////////// + +typedef interface ID3DXBuffer ID3DXBuffer; +typedef interface ID3DXBuffer *LPD3DXBUFFER; + +// {8BA5FB08-5195-40e2-AC58-0D989C3A0102} +DEFINE_GUID(IID_ID3DXBuffer, +0x8ba5fb08, 0x5195, 0x40e2, 0xac, 0x58, 0xd, 0x98, 0x9c, 0x3a, 0x1, 0x2); + +#undef INTERFACE +#define INTERFACE ID3DXBuffer + +DECLARE_INTERFACE_(ID3DXBuffer, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXBuffer + STDMETHOD_(LPVOID, GetBufferPointer)(THIS) PURE; + STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE; +}; + + + +////////////////////////////////////////////////////////////////////////////// +// D3DXSPRITE flags: +// ----------------- +// D3DXSPRITE_DONOTSAVESTATE +// Specifies device state is not to be saved and restored in Begin/End. +// D3DXSPRITE_DONOTMODIFY_RENDERSTATE +// Specifies device render state is not to be changed in Begin. The device +// is assumed to be in a valid state to draw vertices containing POSITION0, +// TEXCOORD0, and COLOR0 data. +// D3DXSPRITE_OBJECTSPACE +// The WORLD, VIEW, and PROJECTION transforms are NOT modified. The +// transforms currently set to the device are used to transform the sprites +// when the batch is drawn (at Flush or End). If this is not specified, +// WORLD, VIEW, and PROJECTION transforms are modified so that sprites are +// drawn in screenspace coordinates. +// D3DXSPRITE_BILLBOARD +// Rotates each sprite about its center so that it is facing the viewer. +// D3DXSPRITE_ALPHABLEND +// Enables ALPHABLEND(SRCALPHA, INVSRCALPHA) and ALPHATEST(alpha > 0). +// ID3DXFont expects this to be set when drawing text. +// D3DXSPRITE_SORT_TEXTURE +// Sprites are sorted by texture prior to drawing. This is recommended when +// drawing non-overlapping sprites of uniform depth. For example, drawing +// screen-aligned text with ID3DXFont. +// D3DXSPRITE_SORT_DEPTH_FRONTTOBACK +// Sprites are sorted by depth front-to-back prior to drawing. This is +// recommended when drawing opaque sprites of varying depths. +// D3DXSPRITE_SORT_DEPTH_BACKTOFRONT +// Sprites are sorted by depth back-to-front prior to drawing. This is +// recommended when drawing transparent sprites of varying depths. +// D3DXSPRITE_DO_NOT_ADDREF_TEXTURE +// Disables calling AddRef() on every draw, and Release() on Flush() for +// better performance. +////////////////////////////////////////////////////////////////////////////// + +#define D3DXSPRITE_DONOTSAVESTATE (1 << 0) +#define D3DXSPRITE_DONOTMODIFY_RENDERSTATE (1 << 1) +#define D3DXSPRITE_OBJECTSPACE (1 << 2) +#define D3DXSPRITE_BILLBOARD (1 << 3) +#define D3DXSPRITE_ALPHABLEND (1 << 4) +#define D3DXSPRITE_SORT_TEXTURE (1 << 5) +#define D3DXSPRITE_SORT_DEPTH_FRONTTOBACK (1 << 6) +#define D3DXSPRITE_SORT_DEPTH_BACKTOFRONT (1 << 7) +#define D3DXSPRITE_DO_NOT_ADDREF_TEXTURE (1 << 8) + + +////////////////////////////////////////////////////////////////////////////// +// ID3DXSprite: +// ------------ +// This object intends to provide an easy way to drawing sprites using D3D. +// +// Begin - +// Prepares device for drawing sprites. +// +// Draw - +// Draws a sprite. Before transformation, the sprite is the size of +// SrcRect, with its top-left corner specified by Position. The color +// and alpha channels are modulated by Color. +// +// Flush - +// Forces all batched sprites to submitted to the device. +// +// End - +// Restores device state to how it was when Begin was called. +// +// OnLostDevice, OnResetDevice - +// Call OnLostDevice() on this object before calling Reset() on the +// device, so that this object can release any stateblocks and video +// memory resources. After Reset(), the call OnResetDevice(). +////////////////////////////////////////////////////////////////////////////// + +typedef interface ID3DXSprite ID3DXSprite; +typedef interface ID3DXSprite *LPD3DXSPRITE; + + +// {BA0B762D-7D28-43ec-B9DC-2F84443B0614} +DEFINE_GUID(IID_ID3DXSprite, +0xba0b762d, 0x7d28, 0x43ec, 0xb9, 0xdc, 0x2f, 0x84, 0x44, 0x3b, 0x6, 0x14); + + +#undef INTERFACE +#define INTERFACE ID3DXSprite + +DECLARE_INTERFACE_(ID3DXSprite, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXSprite + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + + STDMETHOD(GetTransform)(THIS_ D3DXMATRIX *pTransform) PURE; + STDMETHOD(SetTransform)(THIS_ CONST D3DXMATRIX *pTransform) PURE; + + STDMETHOD(SetWorldViewRH)(THIS_ CONST D3DXMATRIX *pWorld, CONST D3DXMATRIX *pView) PURE; + STDMETHOD(SetWorldViewLH)(THIS_ CONST D3DXMATRIX *pWorld, CONST D3DXMATRIX *pView) PURE; + + STDMETHOD(Begin)(THIS_ DWORD Flags) PURE; + STDMETHOD(Draw)(THIS_ LPDIRECT3DTEXTURE9 pTexture, CONST RECT *pSrcRect, CONST D3DXVECTOR3 *pCenter, CONST D3DXVECTOR3 *pPosition, D3DCOLOR Color) PURE; + STDMETHOD(Flush)(THIS) PURE; + STDMETHOD(End)(THIS) PURE; + + STDMETHOD(OnLostDevice)(THIS) PURE; + STDMETHOD(OnResetDevice)(THIS) PURE; +}; + + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +HRESULT WINAPI + D3DXCreateSprite( + LPDIRECT3DDEVICE9 pDevice, + LPD3DXSPRITE* ppSprite); + +#ifdef __cplusplus +} +#endif //__cplusplus + + + +////////////////////////////////////////////////////////////////////////////// +// ID3DXFont: +// ---------- +// Font objects contain the textures and resources needed to render a specific +// font on a specific device. +// +// GetGlyphData - +// Returns glyph cache data, for a given glyph. +// +// PreloadCharacters/PreloadGlyphs/PreloadText - +// Preloads glyphs into the glyph cache textures. +// +// DrawText - +// Draws formatted text on a D3D device. Some parameters are +// surprisingly similar to those of GDI's DrawText function. See GDI +// documentation for a detailed description of these parameters. +// If pSprite is NULL, an internal sprite object will be used. +// +// OnLostDevice, OnResetDevice - +// Call OnLostDevice() on this object before calling Reset() on the +// device, so that this object can release any stateblocks and video +// memory resources. After Reset(), the call OnResetDevice(). +////////////////////////////////////////////////////////////////////////////// + +typedef struct _D3DXFONT_DESCA +{ + INT Height; + UINT Width; + UINT Weight; + UINT MipLevels; + BOOL Italic; + BYTE CharSet; + BYTE OutputPrecision; + BYTE Quality; + BYTE PitchAndFamily; + CHAR FaceName[LF_FACESIZE]; + +} D3DXFONT_DESCA, *LPD3DXFONT_DESCA; + +typedef struct _D3DXFONT_DESCW +{ + INT Height; + UINT Width; + UINT Weight; + UINT MipLevels; + BOOL Italic; + BYTE CharSet; + BYTE OutputPrecision; + BYTE Quality; + BYTE PitchAndFamily; + WCHAR FaceName[LF_FACESIZE]; + +} D3DXFONT_DESCW, *LPD3DXFONT_DESCW; + +#ifdef UNICODE +typedef D3DXFONT_DESCW D3DXFONT_DESC; +typedef LPD3DXFONT_DESCW LPD3DXFONT_DESC; +#else +typedef D3DXFONT_DESCA D3DXFONT_DESC; +typedef LPD3DXFONT_DESCA LPD3DXFONT_DESC; +#endif + + +typedef interface ID3DXFont ID3DXFont; +typedef interface ID3DXFont *LPD3DXFONT; + + +// {D79DBB70-5F21-4d36-BBC2-FF525C213CDC} +DEFINE_GUID(IID_ID3DXFont, +0xd79dbb70, 0x5f21, 0x4d36, 0xbb, 0xc2, 0xff, 0x52, 0x5c, 0x21, 0x3c, 0xdc); + + +#undef INTERFACE +#define INTERFACE ID3DXFont + +DECLARE_INTERFACE_(ID3DXFont, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXFont + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9 *ppDevice) PURE; + STDMETHOD(GetDescA)(THIS_ D3DXFONT_DESCA *pDesc) PURE; + STDMETHOD(GetDescW)(THIS_ D3DXFONT_DESCW *pDesc) PURE; + STDMETHOD_(BOOL, GetTextMetricsA)(THIS_ TEXTMETRICA *pTextMetrics) PURE; + STDMETHOD_(BOOL, GetTextMetricsW)(THIS_ TEXTMETRICW *pTextMetrics) PURE; + + STDMETHOD_(HDC, GetDC)(THIS) PURE; + STDMETHOD(GetGlyphData)(THIS_ UINT Glyph, LPDIRECT3DTEXTURE9 *ppTexture, RECT *pBlackBox, POINT *pCellInc) PURE; + + STDMETHOD(PreloadCharacters)(THIS_ UINT First, UINT Last) PURE; + STDMETHOD(PreloadGlyphs)(THIS_ UINT First, UINT Last) PURE; + STDMETHOD(PreloadTextA)(THIS_ LPCSTR pString, INT Count) PURE; + STDMETHOD(PreloadTextW)(THIS_ LPCWSTR pString, INT Count) PURE; + + STDMETHOD_(INT, DrawTextA)(THIS_ LPD3DXSPRITE pSprite, LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE; + STDMETHOD_(INT, DrawTextW)(THIS_ LPD3DXSPRITE pSprite, LPCWSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) PURE; + + STDMETHOD(OnLostDevice)(THIS) PURE; + STDMETHOD(OnResetDevice)(THIS) PURE; + +#ifdef __cplusplus +#ifdef UNICODE + HRESULT GetDesc(D3DXFONT_DESCW *pDesc) { return GetDescW(pDesc); } + HRESULT PreloadText(LPCWSTR pString, INT Count) { return PreloadTextW(pString, Count); } +#else + HRESULT GetDesc(ID3DXFont *font, D3DXFONT_DESCA *pDesc) { + }//return GetDescA(pDesc); } + HRESULT PreloadText(ID3DXFont *font, LPCSTR pString, INT Count) { + }//return PreloadTextA(pString, Count); } +#endif +#endif //__cplusplus +}; + +#ifndef GetTextMetrics +#ifdef UNICODE +#define GetTextMetrics GetTextMetricsW +#else +#define GetTextMetrics GetTextMetricsA +#endif +#endif + +#ifndef DrawText +#ifdef UNICODE +#define DrawText DrawTextW +#else +#define DrawText DrawTextA +#endif +#endif + + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + + +HRESULT WINAPI + D3DXCreateFontA( + LPDIRECT3DDEVICE9 pDevice, + INT Height, + UINT Width, + UINT Weight, + UINT MipLevels, + BOOL Italic, + DWORD CharSet, + DWORD OutputPrecision, + DWORD Quality, + DWORD PitchAndFamily, + LPCSTR pFaceName, + LPD3DXFONT* ppFont); + +HRESULT WINAPI + D3DXCreateFontW( + LPDIRECT3DDEVICE9 pDevice, + INT Height, + UINT Width, + UINT Weight, + UINT MipLevels, + BOOL Italic, + DWORD CharSet, + DWORD OutputPrecision, + DWORD Quality, + DWORD PitchAndFamily, + LPCWSTR pFaceName, + LPD3DXFONT* ppFont); + +#ifdef UNICODE +#define D3DXCreateFont D3DXCreateFontW +#else +#define D3DXCreateFont D3DXCreateFontA +#endif + + +HRESULT WINAPI + D3DXCreateFontIndirectA( + LPDIRECT3DDEVICE9 pDevice, + CONST D3DXFONT_DESCA* pDesc, + LPD3DXFONT* ppFont); + +HRESULT WINAPI + D3DXCreateFontIndirectW( + LPDIRECT3DDEVICE9 pDevice, + CONST D3DXFONT_DESCW* pDesc, + LPD3DXFONT* ppFont); + +#ifdef UNICODE +#define D3DXCreateFontIndirect D3DXCreateFontIndirectW +#else +#define D3DXCreateFontIndirect D3DXCreateFontIndirectA +#endif + + +#ifdef __cplusplus +} +#endif //__cplusplus + + + +/////////////////////////////////////////////////////////////////////////// +// ID3DXRenderToSurface: +// --------------------- +// This object abstracts rendering to surfaces. These surfaces do not +// necessarily need to be render targets. If they are not, a compatible +// render target is used, and the result copied into surface at end scene. +// +// BeginScene, EndScene - +// Call BeginScene() and EndScene() at the beginning and ending of your +// scene. These calls will setup and restore render targets, viewports, +// etc.. +// +// OnLostDevice, OnResetDevice - +// Call OnLostDevice() on this object before calling Reset() on the +// device, so that this object can release any stateblocks and video +// memory resources. After Reset(), the call OnResetDevice(). +/////////////////////////////////////////////////////////////////////////// + +typedef struct _D3DXRTS_DESC +{ + UINT Width; + UINT Height; + D3DFORMAT Format; + BOOL DepthStencil; + D3DFORMAT DepthStencilFormat; + +} D3DXRTS_DESC, *LPD3DXRTS_DESC; + + +typedef interface ID3DXRenderToSurface ID3DXRenderToSurface; +typedef interface ID3DXRenderToSurface *LPD3DXRENDERTOSURFACE; + + +// {6985F346-2C3D-43b3-BE8B-DAAE8A03D894} +DEFINE_GUID(IID_ID3DXRenderToSurface, +0x6985f346, 0x2c3d, 0x43b3, 0xbe, 0x8b, 0xda, 0xae, 0x8a, 0x3, 0xd8, 0x94); + + +#undef INTERFACE +#define INTERFACE ID3DXRenderToSurface + +DECLARE_INTERFACE_(ID3DXRenderToSurface, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXRenderToSurface + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + STDMETHOD(GetDesc)(THIS_ D3DXRTS_DESC* pDesc) PURE; + + STDMETHOD(BeginScene)(THIS_ LPDIRECT3DSURFACE9 pSurface, CONST D3DVIEWPORT9* pViewport) PURE; + STDMETHOD(EndScene)(THIS_ DWORD MipFilter) PURE; + + STDMETHOD(OnLostDevice)(THIS) PURE; + STDMETHOD(OnResetDevice)(THIS) PURE; +}; + + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +HRESULT WINAPI + D3DXCreateRenderToSurface( + LPDIRECT3DDEVICE9 pDevice, + UINT Width, + UINT Height, + D3DFORMAT Format, + BOOL DepthStencil, + D3DFORMAT DepthStencilFormat, + LPD3DXRENDERTOSURFACE* ppRenderToSurface); + +#ifdef __cplusplus +} +#endif //__cplusplus + + + +/////////////////////////////////////////////////////////////////////////// +// ID3DXRenderToEnvMap: +// -------------------- +// This object abstracts rendering to environment maps. These surfaces +// do not necessarily need to be render targets. If they are not, a +// compatible render target is used, and the result copied into the +// environment map at end scene. +// +// BeginCube, BeginSphere, BeginHemisphere, BeginParabolic - +// This function initiates the rendering of the environment map. As +// parameters, you pass the textures in which will get filled in with +// the resulting environment map. +// +// Face - +// Call this function to initiate the drawing of each face. For each +// environment map, you will call this six times.. once for each face +// in D3DCUBEMAP_FACES. +// +// End - +// This will restore all render targets, and if needed compose all the +// rendered faces into the environment map surfaces. +// +// OnLostDevice, OnResetDevice - +// Call OnLostDevice() on this object before calling Reset() on the +// device, so that this object can release any stateblocks and video +// memory resources. After Reset(), the call OnResetDevice(). +/////////////////////////////////////////////////////////////////////////// + +typedef struct _D3DXRTE_DESC +{ + UINT Size; + UINT MipLevels; + D3DFORMAT Format; + BOOL DepthStencil; + D3DFORMAT DepthStencilFormat; + +} D3DXRTE_DESC, *LPD3DXRTE_DESC; + + +typedef interface ID3DXRenderToEnvMap ID3DXRenderToEnvMap; +typedef interface ID3DXRenderToEnvMap *LPD3DXRenderToEnvMap; + + +// {313F1B4B-C7B0-4fa2-9D9D-8D380B64385E} +DEFINE_GUID(IID_ID3DXRenderToEnvMap, +0x313f1b4b, 0xc7b0, 0x4fa2, 0x9d, 0x9d, 0x8d, 0x38, 0xb, 0x64, 0x38, 0x5e); + + +#undef INTERFACE +#define INTERFACE ID3DXRenderToEnvMap + +DECLARE_INTERFACE_(ID3DXRenderToEnvMap, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXRenderToEnvMap + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + STDMETHOD(GetDesc)(THIS_ D3DXRTE_DESC* pDesc) PURE; + + STDMETHOD(BeginCube)(THIS_ + LPDIRECT3DCUBETEXTURE9 pCubeTex) PURE; + + STDMETHOD(BeginSphere)(THIS_ + LPDIRECT3DTEXTURE9 pTex) PURE; + + STDMETHOD(BeginHemisphere)(THIS_ + LPDIRECT3DTEXTURE9 pTexZPos, + LPDIRECT3DTEXTURE9 pTexZNeg) PURE; + + STDMETHOD(BeginParabolic)(THIS_ + LPDIRECT3DTEXTURE9 pTexZPos, + LPDIRECT3DTEXTURE9 pTexZNeg) PURE; + + STDMETHOD(Face)(THIS_ D3DCUBEMAP_FACES Face, DWORD MipFilter) PURE; + STDMETHOD(End)(THIS_ DWORD MipFilter) PURE; + + STDMETHOD(OnLostDevice)(THIS) PURE; + STDMETHOD(OnResetDevice)(THIS) PURE; +}; + + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +HRESULT WINAPI + D3DXCreateRenderToEnvMap( + LPDIRECT3DDEVICE9 pDevice, + UINT Size, + UINT MipLevels, + D3DFORMAT Format, + BOOL DepthStencil, + D3DFORMAT DepthStencilFormat, + LPD3DXRenderToEnvMap* ppRenderToEnvMap); + +#ifdef __cplusplus +} +#endif //__cplusplus + + + +/////////////////////////////////////////////////////////////////////////// +// ID3DXLine: +// ------------ +// This object intends to provide an easy way to draw lines using D3D. +// +// Begin - +// Prepares device for drawing lines +// +// Draw - +// Draws a line strip in screen-space. +// Input is in the form of a array defining points on the line strip. of D3DXVECTOR2 +// +// DrawTransform - +// Draws a line in screen-space with a specified input transformation matrix. +// +// End - +// Restores device state to how it was when Begin was called. +// +// SetPattern - +// Applies a stipple pattern to the line. Input is one 32-bit +// DWORD which describes the stipple pattern. 1 is opaque, 0 is +// transparent. +// +// SetPatternScale - +// Stretches the stipple pattern in the u direction. Input is one +// floating-point value. 0.0f is no scaling, whereas 1.0f doubles +// the length of the stipple pattern. +// +// SetWidth - +// Specifies the thickness of the line in the v direction. Input is +// one floating-point value. +// +// SetAntialias - +// Toggles line antialiasing. Input is a BOOL. +// TRUE = Antialiasing on. +// FALSE = Antialiasing off. +// +// SetGLLines - +// Toggles non-antialiased OpenGL line emulation. Input is a BOOL. +// TRUE = OpenGL line emulation on. +// FALSE = OpenGL line emulation off. +// +// OpenGL line: Regular line: +// *\ *\ +// | \ / \ +// | \ *\ \ +// *\ \ \ \ +// \ \ \ \ +// \ * \ * +// \ | \ / +// \| * +// * +// +// OnLostDevice, OnResetDevice - +// Call OnLostDevice() on this object before calling Reset() on the +// device, so that this object can release any stateblocks and video +// memory resources. After Reset(), the call OnResetDevice(). +/////////////////////////////////////////////////////////////////////////// + + +typedef interface ID3DXLine ID3DXLine; +typedef interface ID3DXLine *LPD3DXLINE; + + +// {D379BA7F-9042-4ac4-9F5E-58192A4C6BD8} +DEFINE_GUID(IID_ID3DXLine, +0xd379ba7f, 0x9042, 0x4ac4, 0x9f, 0x5e, 0x58, 0x19, 0x2a, 0x4c, 0x6b, 0xd8); + +#undef INTERFACE +#define INTERFACE ID3DXLine + +DECLARE_INTERFACE_(ID3DXLine, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXLine + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + + STDMETHOD(Begin)(THIS) PURE; + + STDMETHOD(Draw)(THIS_ CONST D3DXVECTOR2 *pVertexList, + DWORD dwVertexListCount, D3DCOLOR Color) PURE; + + STDMETHOD(DrawTransform)(THIS_ CONST D3DXVECTOR3 *pVertexList, + DWORD dwVertexListCount, CONST D3DXMATRIX* pTransform, + D3DCOLOR Color) PURE; + + STDMETHOD(SetPattern)(THIS_ DWORD dwPattern) PURE; + STDMETHOD_(DWORD, GetPattern)(THIS) PURE; + + STDMETHOD(SetPatternScale)(THIS_ FLOAT fPatternScale) PURE; + STDMETHOD_(FLOAT, GetPatternScale)(THIS) PURE; + + STDMETHOD(SetWidth)(THIS_ FLOAT fWidth) PURE; + STDMETHOD_(FLOAT, GetWidth)(THIS) PURE; + + STDMETHOD(SetAntialias)(THIS_ BOOL bAntialias) PURE; + STDMETHOD_(BOOL, GetAntialias)(THIS) PURE; + + STDMETHOD(SetGLLines)(THIS_ BOOL bGLLines) PURE; + STDMETHOD_(BOOL, GetGLLines)(THIS) PURE; + + STDMETHOD(End)(THIS) PURE; + + STDMETHOD(OnLostDevice)(THIS) PURE; + STDMETHOD(OnResetDevice)(THIS) PURE; +}; + + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + + +HRESULT WINAPI + D3DXCreateLine( + LPDIRECT3DDEVICE9 pDevice, + LPD3DXLINE* ppLine); + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif //__D3DX9CORE_H__ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9effect.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9effect.h new file mode 100644 index 0000000000..a3bcd307c6 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9effect.h @@ -0,0 +1,873 @@ + +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// File: d3dx9effect.h +// Content: D3DX effect types and Shaders +// +////////////////////////////////////////////////////////////////////////////// + +#include "d3dx9.h" + +#ifndef __D3DX9EFFECT_H__ +#define __D3DX9EFFECT_H__ + + +//---------------------------------------------------------------------------- +// D3DXFX_DONOTSAVESTATE +// This flag is used as a parameter to ID3DXEffect::Begin(). When this flag +// is specified, device state is not saved or restored in Begin/End. +// D3DXFX_DONOTSAVESHADERSTATE +// This flag is used as a parameter to ID3DXEffect::Begin(). When this flag +// is specified, shader device state is not saved or restored in Begin/End. +// This includes pixel/vertex shaders and shader constants +// D3DXFX_DONOTSAVESAMPLERSTATE +// This flag is used as a parameter to ID3DXEffect::Begin(). When this flag +// is specified, sampler device state is not saved or restored in Begin/End. +// D3DXFX_NOT_CLONEABLE +// This flag is used as a parameter to the D3DXCreateEffect family of APIs. +// When this flag is specified, the effect will be non-cloneable and will not +// contain any shader binary data. +// Furthermore, GetPassDesc will not return shader function pointers. +// Setting this flag reduces effect memory usage by about 50%. +//---------------------------------------------------------------------------- + +#define D3DXFX_DONOTSAVESTATE (1 << 0) +#define D3DXFX_DONOTSAVESHADERSTATE (1 << 1) +#define D3DXFX_DONOTSAVESAMPLERSTATE (1 << 2) + +#define D3DXFX_NOT_CLONEABLE (1 << 11) +#define D3DXFX_LARGEADDRESSAWARE (1 << 17) + +//---------------------------------------------------------------------------- +// D3DX_PARAMETER_SHARED +// Indicates that the value of a parameter will be shared with all effects +// which share the same namespace. Changing the value in one effect will +// change it in all. +// +// D3DX_PARAMETER_LITERAL +// Indicates that the value of this parameter can be treated as literal. +// Literal parameters can be marked when the effect is compiled, and their +// cannot be changed after the effect is compiled. Shared parameters cannot +// be literal. +//---------------------------------------------------------------------------- + +#define D3DX_PARAMETER_SHARED (1 << 0) +#define D3DX_PARAMETER_LITERAL (1 << 1) +#define D3DX_PARAMETER_ANNOTATION (1 << 2) + +//---------------------------------------------------------------------------- +// D3DXEFFECT_DESC: +//---------------------------------------------------------------------------- + +typedef struct _D3DXEFFECT_DESC +{ + LPCSTR Creator; // Creator string + UINT Parameters; // Number of parameters + UINT Techniques; // Number of techniques + UINT Functions; // Number of function entrypoints + +} D3DXEFFECT_DESC; + + +//---------------------------------------------------------------------------- +// D3DXPARAMETER_DESC: +//---------------------------------------------------------------------------- + +typedef struct _D3DXPARAMETER_DESC +{ + LPCSTR Name; // Parameter name + LPCSTR Semantic; // Parameter semantic + D3DXPARAMETER_CLASS Class; // Class + D3DXPARAMETER_TYPE Type; // Component type + UINT Rows; // Number of rows + UINT Columns; // Number of columns + UINT Elements; // Number of array elements + UINT Annotations; // Number of annotations + UINT StructMembers; // Number of structure member sub-parameters + DWORD Flags; // D3DX_PARAMETER_* flags + UINT Bytes; // Parameter size, in bytes + +} D3DXPARAMETER_DESC; + + +//---------------------------------------------------------------------------- +// D3DXTECHNIQUE_DESC: +//---------------------------------------------------------------------------- + +typedef struct _D3DXTECHNIQUE_DESC +{ + LPCSTR Name; // Technique name + UINT Passes; // Number of passes + UINT Annotations; // Number of annotations + +} D3DXTECHNIQUE_DESC; + + +//---------------------------------------------------------------------------- +// D3DXPASS_DESC: +//---------------------------------------------------------------------------- + +typedef struct _D3DXPASS_DESC +{ + LPCSTR Name; // Pass name + UINT Annotations; // Number of annotations + + CONST DWORD *pVertexShaderFunction; // Vertex shader function + CONST DWORD *pPixelShaderFunction; // Pixel shader function + +} D3DXPASS_DESC; + + +//---------------------------------------------------------------------------- +// D3DXFUNCTION_DESC: +//---------------------------------------------------------------------------- + +typedef struct _D3DXFUNCTION_DESC +{ + LPCSTR Name; // Function name + UINT Annotations; // Number of annotations + +} D3DXFUNCTION_DESC; + + + +////////////////////////////////////////////////////////////////////////////// +// ID3DXEffectPool /////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +typedef interface ID3DXEffectPool ID3DXEffectPool; +typedef interface ID3DXEffectPool *LPD3DXEFFECTPOOL; + +// {9537AB04-3250-412e-8213-FCD2F8677933} +DEFINE_GUID(IID_ID3DXEffectPool, +0x9537ab04, 0x3250, 0x412e, 0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33); + + +#undef INTERFACE +#define INTERFACE ID3DXEffectPool + +DECLARE_INTERFACE_(ID3DXEffectPool, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // No public methods +}; + + +////////////////////////////////////////////////////////////////////////////// +// ID3DXBaseEffect /////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +typedef interface ID3DXBaseEffect ID3DXBaseEffect; +typedef interface ID3DXBaseEffect *LPD3DXBASEEFFECT; + +// {017C18AC-103F-4417-8C51-6BF6EF1E56BE} +DEFINE_GUID(IID_ID3DXBaseEffect, +0x17c18ac, 0x103f, 0x4417, 0x8c, 0x51, 0x6b, 0xf6, 0xef, 0x1e, 0x56, 0xbe); + + +#undef INTERFACE +#define INTERFACE ID3DXBaseEffect + +DECLARE_INTERFACE_(ID3DXBaseEffect, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Descs + STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE; + STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE; + STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE; + STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE; + STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE; + + // Handle operations + STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE; + STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE; + + // Get/Set Parameters + STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE; + STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE; + STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE; + STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE; + STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE; + STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE; + STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE; + STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE; + STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE; + STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE; + STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE; + STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE; + STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE; + STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE; + STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE; + STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE; + STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE; + STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE; + STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE; + STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE; + STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE; + STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE; + STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE; + STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE; + + //Set Range of an Array to pass to device + //Useful for sending only a subrange of an array down to the device + STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE hParameter, UINT uStart, UINT uEnd) PURE; + +}; + + +//---------------------------------------------------------------------------- +// ID3DXEffectStateManager: +// ------------------------ +// This is a user implemented interface that can be used to manage device +// state changes made by an Effect. +//---------------------------------------------------------------------------- + +typedef interface ID3DXEffectStateManager ID3DXEffectStateManager; +typedef interface ID3DXEffectStateManager *LPD3DXEFFECTSTATEMANAGER; + +// {79AAB587-6DBC-4fa7-82DE-37FA1781C5CE} +DEFINE_GUID(IID_ID3DXEffectStateManager, +0x79aab587, 0x6dbc, 0x4fa7, 0x82, 0xde, 0x37, 0xfa, 0x17, 0x81, 0xc5, 0xce); + +#undef INTERFACE +#define INTERFACE ID3DXEffectStateManager + +DECLARE_INTERFACE_(ID3DXEffectStateManager, IUnknown) +{ + // The user must correctly implement QueryInterface, AddRef, and Release. + + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // The following methods are called by the Effect when it wants to make + // the corresponding device call. Note that: + // 1. Users manage the state and are therefore responsible for making the + // the corresponding device calls themselves inside their callbacks. + // 2. Effects pay attention to the return values of the callbacks, and so + // users must pay attention to what they return in their callbacks. + + STDMETHOD(SetTransform)(THIS_ D3DTRANSFORMSTATETYPE State, CONST D3DMATRIX *pMatrix) PURE; + STDMETHOD(SetMaterial)(THIS_ CONST D3DMATERIAL9 *pMaterial) PURE; + STDMETHOD(SetLight)(THIS_ DWORD Index, CONST D3DLIGHT9 *pLight) PURE; + STDMETHOD(LightEnable)(THIS_ DWORD Index, BOOL Enable) PURE; + STDMETHOD(SetRenderState)(THIS_ D3DRENDERSTATETYPE State, DWORD Value) PURE; + STDMETHOD(SetTexture)(THIS_ DWORD Stage, LPDIRECT3DBASETEXTURE9 pTexture) PURE; + STDMETHOD(SetTextureStageState)(THIS_ DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) PURE; + STDMETHOD(SetSamplerState)(THIS_ DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) PURE; + STDMETHOD(SetNPatchMode)(THIS_ FLOAT NumSegments) PURE; + STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; + STDMETHOD(SetVertexShader)(THIS_ LPDIRECT3DVERTEXSHADER9 pShader) PURE; + STDMETHOD(SetVertexShaderConstantF)(THIS_ UINT RegisterIndex, CONST FLOAT *pConstantData, UINT RegisterCount) PURE; + STDMETHOD(SetVertexShaderConstantI)(THIS_ UINT RegisterIndex, CONST INT *pConstantData, UINT RegisterCount) PURE; + STDMETHOD(SetVertexShaderConstantB)(THIS_ UINT RegisterIndex, CONST BOOL *pConstantData, UINT RegisterCount) PURE; + STDMETHOD(SetPixelShader)(THIS_ LPDIRECT3DPIXELSHADER9 pShader) PURE; + STDMETHOD(SetPixelShaderConstantF)(THIS_ UINT RegisterIndex, CONST FLOAT *pConstantData, UINT RegisterCount) PURE; + STDMETHOD(SetPixelShaderConstantI)(THIS_ UINT RegisterIndex, CONST INT *pConstantData, UINT RegisterCount) PURE; + STDMETHOD(SetPixelShaderConstantB)(THIS_ UINT RegisterIndex, CONST BOOL *pConstantData, UINT RegisterCount) PURE; +}; + + +////////////////////////////////////////////////////////////////////////////// +// ID3DXEffect /////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +typedef interface ID3DXEffect ID3DXEffect; +typedef interface ID3DXEffect *LPD3DXEFFECT; + +// {F6CEB4B3-4E4C-40dd-B883-8D8DE5EA0CD5} +DEFINE_GUID(IID_ID3DXEffect, +0xf6ceb4b3, 0x4e4c, 0x40dd, 0xb8, 0x83, 0x8d, 0x8d, 0xe5, 0xea, 0xc, 0xd5); + +#undef INTERFACE +#define INTERFACE ID3DXEffect + +DECLARE_INTERFACE_(ID3DXEffect, ID3DXBaseEffect) +{ + // ID3DXBaseEffect + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Descs + STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE; + STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE; + STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE; + STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE; + STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE; + + // Handle operations + STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE; + STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE; + + // Get/Set Parameters + STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE; + STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE; + STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE; + STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE; + STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE; + STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE; + STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE; + STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE; + STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE; + STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE; + STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE; + STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE; + STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE; + STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE; + STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE; + STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE; + STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE; + STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE; + STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE; + STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE; + STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE; + STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE; + STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE; + STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE; + + //Set Range of an Array to pass to device + //Usefull for sending only a subrange of an array down to the device + STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE hParameter, UINT uStart, UINT uEnd) PURE; + // ID3DXBaseEffect + + + // Pool + STDMETHOD(GetPool)(THIS_ LPD3DXEFFECTPOOL* ppPool) PURE; + + // Selecting and setting a technique + STDMETHOD(SetTechnique)(THIS_ D3DXHANDLE hTechnique) PURE; + STDMETHOD_(D3DXHANDLE, GetCurrentTechnique)(THIS) PURE; + STDMETHOD(ValidateTechnique)(THIS_ D3DXHANDLE hTechnique) PURE; + STDMETHOD(FindNextValidTechnique)(THIS_ D3DXHANDLE hTechnique, D3DXHANDLE *pTechnique) PURE; + STDMETHOD_(BOOL, IsParameterUsed)(THIS_ D3DXHANDLE hParameter, D3DXHANDLE hTechnique) PURE; + + // Using current technique + // Begin starts active technique + // BeginPass begins a pass + // CommitChanges updates changes to any set calls in the pass. This should be called before + // any DrawPrimitive call to d3d + // EndPass ends a pass + // End ends active technique + STDMETHOD(Begin)(THIS_ UINT *pPasses, DWORD Flags) PURE; + STDMETHOD(BeginPass)(THIS_ UINT Pass) PURE; + STDMETHOD(CommitChanges)(THIS) PURE; + STDMETHOD(EndPass)(THIS) PURE; + STDMETHOD(End)(THIS) PURE; + + // Managing D3D Device + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + STDMETHOD(OnLostDevice)(THIS) PURE; + STDMETHOD(OnResetDevice)(THIS) PURE; + + // Logging device calls + STDMETHOD(SetStateManager)(THIS_ LPD3DXEFFECTSTATEMANAGER pManager) PURE; + STDMETHOD(GetStateManager)(THIS_ LPD3DXEFFECTSTATEMANAGER *ppManager) PURE; + + // Parameter blocks + STDMETHOD(BeginParameterBlock)(THIS) PURE; + STDMETHOD_(D3DXHANDLE, EndParameterBlock)(THIS) PURE; + STDMETHOD(ApplyParameterBlock)(THIS_ D3DXHANDLE hParameterBlock) PURE; + STDMETHOD(DeleteParameterBlock)(THIS_ D3DXHANDLE hParameterBlock) PURE; + + // Cloning + STDMETHOD(CloneEffect)(THIS_ LPDIRECT3DDEVICE9 pDevice, LPD3DXEFFECT* ppEffect) PURE; + + // Fast path for setting variables directly in ID3DXEffect + STDMETHOD(SetRawValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT ByteOffset, UINT Bytes) PURE; +}; + + +////////////////////////////////////////////////////////////////////////////// +// ID3DXEffectCompiler /////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +typedef interface ID3DXEffectCompiler ID3DXEffectCompiler; +typedef interface ID3DXEffectCompiler *LPD3DXEFFECTCOMPILER; + +// {51B8A949-1A31-47e6-BEA0-4B30DB53F1E0} +DEFINE_GUID(IID_ID3DXEffectCompiler, +0x51b8a949, 0x1a31, 0x47e6, 0xbe, 0xa0, 0x4b, 0x30, 0xdb, 0x53, 0xf1, 0xe0); + + +#undef INTERFACE +#define INTERFACE ID3DXEffectCompiler + +DECLARE_INTERFACE_(ID3DXEffectCompiler, ID3DXBaseEffect) +{ + // ID3DXBaseEffect + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Descs + STDMETHOD(GetDesc)(THIS_ D3DXEFFECT_DESC* pDesc) PURE; + STDMETHOD(GetParameterDesc)(THIS_ D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) PURE; + STDMETHOD(GetTechniqueDesc)(THIS_ D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) PURE; + STDMETHOD(GetPassDesc)(THIS_ D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) PURE; + STDMETHOD(GetFunctionDesc)(THIS_ D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) PURE; + + // Handle operations + STDMETHOD_(D3DXHANDLE, GetParameter)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetParameterByName)(THIS_ D3DXHANDLE hParameter, LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetParameterBySemantic)(THIS_ D3DXHANDLE hParameter, LPCSTR pSemantic) PURE; + STDMETHOD_(D3DXHANDLE, GetParameterElement)(THIS_ D3DXHANDLE hParameter, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetTechnique)(THIS_ UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetTechniqueByName)(THIS_ LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetPass)(THIS_ D3DXHANDLE hTechnique, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetPassByName)(THIS_ D3DXHANDLE hTechnique, LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetFunction)(THIS_ UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetFunctionByName)(THIS_ LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetAnnotation)(THIS_ D3DXHANDLE hObject, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetAnnotationByName)(THIS_ D3DXHANDLE hObject, LPCSTR pName) PURE; + + // Get/Set Parameters + STDMETHOD(SetValue)(THIS_ D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) PURE; + STDMETHOD(GetValue)(THIS_ D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) PURE; + STDMETHOD(SetBool)(THIS_ D3DXHANDLE hParameter, BOOL b) PURE; + STDMETHOD(GetBool)(THIS_ D3DXHANDLE hParameter, BOOL* pb) PURE; + STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hParameter, CONST BOOL* pb, UINT Count) PURE; + STDMETHOD(GetBoolArray)(THIS_ D3DXHANDLE hParameter, BOOL* pb, UINT Count) PURE; + STDMETHOD(SetInt)(THIS_ D3DXHANDLE hParameter, INT n) PURE; + STDMETHOD(GetInt)(THIS_ D3DXHANDLE hParameter, INT* pn) PURE; + STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hParameter, CONST INT* pn, UINT Count) PURE; + STDMETHOD(GetIntArray)(THIS_ D3DXHANDLE hParameter, INT* pn, UINT Count) PURE; + STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT f) PURE; + STDMETHOD(GetFloat)(THIS_ D3DXHANDLE hParameter, FLOAT* pf) PURE; + STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hParameter, CONST FLOAT* pf, UINT Count) PURE; + STDMETHOD(GetFloatArray)(THIS_ D3DXHANDLE hParameter, FLOAT* pf, UINT Count) PURE; + STDMETHOD(SetVector)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector) PURE; + STDMETHOD(GetVector)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector) PURE; + STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXVECTOR4* pVector, UINT Count) PURE; + STDMETHOD(GetVectorArray)(THIS_ D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) PURE; + STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(GetMatrix)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixPointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(GetMatrixTranspose)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixTransposeArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(GetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(SetString)(THIS_ D3DXHANDLE hParameter, LPCSTR pString) PURE; + STDMETHOD(GetString)(THIS_ D3DXHANDLE hParameter, LPCSTR* ppString) PURE; + STDMETHOD(SetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 pTexture) PURE; + STDMETHOD(GetTexture)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DBASETEXTURE9 *ppTexture) PURE; + STDMETHOD(GetPixelShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DPIXELSHADER9 *ppPShader) PURE; + STDMETHOD(GetVertexShader)(THIS_ D3DXHANDLE hParameter, LPDIRECT3DVERTEXSHADER9 *ppVShader) PURE; + + //Set Range of an Array to pass to device + //Usefull for sending only a subrange of an array down to the device + STDMETHOD(SetArrayRange)(THIS_ D3DXHANDLE hParameter, UINT uStart, UINT uEnd) PURE; + // ID3DXBaseEffect + + // Parameter sharing, specialization, and information + STDMETHOD(SetLiteral)(THIS_ D3DXHANDLE hParameter, BOOL Literal) PURE; + STDMETHOD(GetLiteral)(THIS_ D3DXHANDLE hParameter, BOOL *pLiteral) PURE; + + // Compilation + STDMETHOD(CompileEffect)(THIS_ DWORD Flags, + LPD3DXBUFFER* ppEffect, LPD3DXBUFFER* ppErrorMsgs) PURE; + + STDMETHOD(CompileShader)(THIS_ D3DXHANDLE hFunction, LPCSTR pTarget, DWORD Flags, + LPD3DXBUFFER* ppShader, LPD3DXBUFFER* ppErrorMsgs, LPD3DXCONSTANTTABLE* ppConstantTable) PURE; +}; + + +////////////////////////////////////////////////////////////////////////////// +// APIs ////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +//---------------------------------------------------------------------------- +// D3DXCreateEffectPool: +// --------------------- +// Creates an effect pool. Pools are used for sharing parameters between +// multiple effects. For all effects within a pool, shared parameters of the +// same name all share the same value. +// +// Parameters: +// ppPool +// Returns the created pool. +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXCreateEffectPool( + LPD3DXEFFECTPOOL* ppPool); + + +//---------------------------------------------------------------------------- +// D3DXCreateEffect: +// ----------------- +// Creates an effect from an ascii or binary effect description. +// +// Parameters: +// pDevice +// Pointer of the device on which to create the effect +// pSrcFile +// Name of the file containing the effect description +// hSrcModule +// Module handle. if NULL, current module will be used. +// pSrcResource +// Resource name in module +// pSrcData +// Pointer to effect description +// SrcDataSize +// Size of the effect description in bytes +// pDefines +// Optional NULL-terminated array of preprocessor macro definitions. +// Flags +// See D3DXSHADER_xxx flags. +// pSkipConstants +// A list of semi-colon delimited variable names. The effect will +// not set these variables to the device when they are referenced +// by a shader. NOTE: the variables specified here must be +// register bound in the file and must not be used in expressions +// in passes or samplers or the file will not load. +// pInclude +// Optional interface pointer to use for handling #include directives. +// If this parameter is NULL, #includes will be honored when compiling +// from file, and will error when compiling from resource or memory. +// pPool +// Pointer to ID3DXEffectPool object to use for shared parameters. +// If NULL, no parameters will be shared. +// ppEffect +// Returns a buffer containing created effect. +// ppCompilationErrors +// Returns a buffer containing any error messages which occurred during +// compile. Or NULL if you do not care about the error messages. +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXCreateEffectFromFileA( + LPDIRECT3DDEVICE9 pDevice, + LPCSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +HRESULT WINAPI + D3DXCreateEffectFromFileW( + LPDIRECT3DDEVICE9 pDevice, + LPCWSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +#ifdef UNICODE +#define D3DXCreateEffectFromFile D3DXCreateEffectFromFileW +#else +#define D3DXCreateEffectFromFile D3DXCreateEffectFromFileA +#endif + + +HRESULT WINAPI + D3DXCreateEffectFromResourceA( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +HRESULT WINAPI + D3DXCreateEffectFromResourceW( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +#ifdef UNICODE +#define D3DXCreateEffectFromResource D3DXCreateEffectFromResourceW +#else +#define D3DXCreateEffectFromResource D3DXCreateEffectFromResourceA +#endif + + +HRESULT WINAPI + D3DXCreateEffect( + LPDIRECT3DDEVICE9 pDevice, + LPCVOID pSrcData, + UINT SrcDataLen, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +// +// Ex functions that accept pSkipConstants in addition to other parameters +// + +HRESULT WINAPI + D3DXCreateEffectFromFileExA( + LPDIRECT3DDEVICE9 pDevice, + LPCSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pSkipConstants, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +HRESULT WINAPI + D3DXCreateEffectFromFileExW( + LPDIRECT3DDEVICE9 pDevice, + LPCWSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pSkipConstants, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +#ifdef UNICODE +#define D3DXCreateEffectFromFileEx D3DXCreateEffectFromFileExW +#else +#define D3DXCreateEffectFromFileEx D3DXCreateEffectFromFileExA +#endif + + +HRESULT WINAPI + D3DXCreateEffectFromResourceExA( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pSkipConstants, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +HRESULT WINAPI + D3DXCreateEffectFromResourceExW( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pSkipConstants, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +#ifdef UNICODE +#define D3DXCreateEffectFromResourceEx D3DXCreateEffectFromResourceExW +#else +#define D3DXCreateEffectFromResourceEx D3DXCreateEffectFromResourceExA +#endif + + +HRESULT WINAPI + D3DXCreateEffectEx( + LPDIRECT3DDEVICE9 pDevice, + LPCVOID pSrcData, + UINT SrcDataLen, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pSkipConstants, + DWORD Flags, + LPD3DXEFFECTPOOL pPool, + LPD3DXEFFECT* ppEffect, + LPD3DXBUFFER* ppCompilationErrors); + +//---------------------------------------------------------------------------- +// D3DXCreateEffectCompiler: +// ------------------------- +// Creates an effect from an ascii or binary effect description. +// +// Parameters: +// pSrcFile +// Name of the file containing the effect description +// hSrcModule +// Module handle. if NULL, current module will be used. +// pSrcResource +// Resource name in module +// pSrcData +// Pointer to effect description +// SrcDataSize +// Size of the effect description in bytes +// pDefines +// Optional NULL-terminated array of preprocessor macro definitions. +// pInclude +// Optional interface pointer to use for handling #include directives. +// If this parameter is NULL, #includes will be honored when compiling +// from file, and will error when compiling from resource or memory. +// pPool +// Pointer to ID3DXEffectPool object to use for shared parameters. +// If NULL, no parameters will be shared. +// ppCompiler +// Returns a buffer containing created effect compiler. +// ppParseErrors +// Returns a buffer containing any error messages which occurred during +// parse. Or NULL if you do not care about the error messages. +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXCreateEffectCompilerFromFileA( + LPCSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTCOMPILER* ppCompiler, + LPD3DXBUFFER* ppParseErrors); + +HRESULT WINAPI + D3DXCreateEffectCompilerFromFileW( + LPCWSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTCOMPILER* ppCompiler, + LPD3DXBUFFER* ppParseErrors); + +#ifdef UNICODE +#define D3DXCreateEffectCompilerFromFile D3DXCreateEffectCompilerFromFileW +#else +#define D3DXCreateEffectCompilerFromFile D3DXCreateEffectCompilerFromFileA +#endif + + +HRESULT WINAPI + D3DXCreateEffectCompilerFromResourceA( + HMODULE hSrcModule, + LPCSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTCOMPILER* ppCompiler, + LPD3DXBUFFER* ppParseErrors); + +HRESULT WINAPI + D3DXCreateEffectCompilerFromResourceW( + HMODULE hSrcModule, + LPCWSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTCOMPILER* ppCompiler, + LPD3DXBUFFER* ppParseErrors); + +#ifdef UNICODE +#define D3DXCreateEffectCompilerFromResource D3DXCreateEffectCompilerFromResourceW +#else +#define D3DXCreateEffectCompilerFromResource D3DXCreateEffectCompilerFromResourceA +#endif + + +HRESULT WINAPI + D3DXCreateEffectCompiler( + LPCSTR pSrcData, + UINT SrcDataLen, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXEFFECTCOMPILER* ppCompiler, + LPD3DXBUFFER* ppParseErrors); + +//---------------------------------------------------------------------------- +// D3DXDisassembleEffect: +// ----------------------- +// +// Parameters: +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXDisassembleEffect( + LPD3DXEFFECT pEffect, + BOOL EnableColorCode, + LPD3DXBUFFER *ppDisassembly); + + + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif //__D3DX9EFFECT_H__ + + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9math.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9math.h new file mode 100644 index 0000000000..3fda05344a --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9math.h @@ -0,0 +1,1796 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Microsoft Corporation. All Rights Reserved. +// +// File: d3dx9math.h +// Content: D3DX math types and functions +// +////////////////////////////////////////////////////////////////////////////// + +#include "d3dx9.h" + +#ifndef __D3DX9MATH_H__ +#define __D3DX9MATH_H__ + +#include +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning(disable:4201) // anonymous unions warning + + + +//=========================================================================== +// +// General purpose utilities +// +//=========================================================================== +#define D3DX_PI ((FLOAT) 3.141592654f) +#define D3DX_1BYPI ((FLOAT) 0.318309886f) + +#define D3DXToRadian( degree ) ((degree) * (D3DX_PI / 180.0f)) +#define D3DXToDegree( radian ) ((radian) * (180.0f / D3DX_PI)) + + + +//=========================================================================== +// +// 16 bit floating point numbers +// +//=========================================================================== + +#define D3DX_16F_DIG 3 // # of decimal digits of precision +#define D3DX_16F_EPSILON 4.8875809e-4f // smallest such that 1.0 + epsilon != 1.0 +#define D3DX_16F_MANT_DIG 11 // # of bits in mantissa +#define D3DX_16F_MAX 6.550400e+004 // max value +#define D3DX_16F_MAX_10_EXP 4 // max decimal exponent +#define D3DX_16F_MAX_EXP 15 // max binary exponent +#define D3DX_16F_MIN 6.1035156e-5f // min positive value +#define D3DX_16F_MIN_10_EXP (-4) // min decimal exponent +#define D3DX_16F_MIN_EXP (-14) // min binary exponent +#define D3DX_16F_RADIX 2 // exponent radix +#define D3DX_16F_ROUNDS 1 // addition rounding: near + + +typedef struct D3DXFLOAT16 +{ +#ifdef __cplusplus +public: + D3DXFLOAT16() {}; + D3DXFLOAT16( FLOAT ); + D3DXFLOAT16( CONST D3DXFLOAT16& ); + + // casting + operator FLOAT (); + + // binary operators + BOOL operator == ( CONST D3DXFLOAT16& ) const; + BOOL operator != ( CONST D3DXFLOAT16& ) const; + +protected: +#endif //__cplusplus + WORD value; +} D3DXFLOAT16, *LPD3DXFLOAT16; + + + +//=========================================================================== +// +// Vectors +// +//=========================================================================== + + +//-------------------------- +// 2D Vector +//-------------------------- +typedef struct D3DXVECTOR2 +{ +#ifdef __cplusplus +public: + D3DXVECTOR2() {}; + D3DXVECTOR2( CONST FLOAT * ); + D3DXVECTOR2( CONST D3DXFLOAT16 * ); + D3DXVECTOR2( FLOAT x, FLOAT y ); + + // casting + operator FLOAT* (); + operator CONST FLOAT* () const; + + // assignment operators + D3DXVECTOR2& operator += ( CONST D3DXVECTOR2& ); + D3DXVECTOR2& operator -= ( CONST D3DXVECTOR2& ); + D3DXVECTOR2& operator *= ( FLOAT ); + D3DXVECTOR2& operator /= ( FLOAT ); + + // unary operators + D3DXVECTOR2 operator + () const; + D3DXVECTOR2 operator - () const; + + // binary operators + D3DXVECTOR2 operator + ( CONST D3DXVECTOR2& ) const; + D3DXVECTOR2 operator - ( CONST D3DXVECTOR2& ) const; + D3DXVECTOR2 operator * ( FLOAT ) const; + D3DXVECTOR2 operator / ( FLOAT ) const; + + friend D3DXVECTOR2 operator * ( FLOAT, CONST D3DXVECTOR2& ); + + BOOL operator == ( CONST D3DXVECTOR2& ) const; + BOOL operator != ( CONST D3DXVECTOR2& ) const; + + +public: +#endif //__cplusplus + FLOAT x, y; +} D3DXVECTOR2, *LPD3DXVECTOR2; + + + +//-------------------------- +// 2D Vector (16 bit) +//-------------------------- + +typedef struct D3DXVECTOR2_16F +{ +#ifdef __cplusplus +public: + D3DXVECTOR2_16F() {}; + D3DXVECTOR2_16F( CONST FLOAT * ); + D3DXVECTOR2_16F( CONST D3DXFLOAT16 * ); + D3DXVECTOR2_16F( CONST D3DXFLOAT16 &x, CONST D3DXFLOAT16 &y ); + + // casting + operator D3DXFLOAT16* (); + operator CONST D3DXFLOAT16* () const; + + // binary operators + BOOL operator == ( CONST D3DXVECTOR2_16F& ) const; + BOOL operator != ( CONST D3DXVECTOR2_16F& ) const; + +public: +#endif //__cplusplus + D3DXFLOAT16 x, y; + +} D3DXVECTOR2_16F, *LPD3DXVECTOR2_16F; + + + +//-------------------------- +// 3D Vector +//-------------------------- +#ifdef __cplusplus +typedef struct D3DXVECTOR3 : public D3DVECTOR +{ +public: + D3DXVECTOR3() {}; + D3DXVECTOR3( CONST FLOAT * ); + D3DXVECTOR3( CONST D3DVECTOR& ); + D3DXVECTOR3( CONST D3DXFLOAT16 * ); + D3DXVECTOR3( FLOAT x, FLOAT y, FLOAT z ); + + // casting + operator FLOAT* (); + operator CONST FLOAT* () const; + + // assignment operators + D3DXVECTOR3& operator += ( CONST D3DXVECTOR3& ); + D3DXVECTOR3& operator -= ( CONST D3DXVECTOR3& ); + D3DXVECTOR3& operator *= ( FLOAT ); + D3DXVECTOR3& operator /= ( FLOAT ); + + // unary operators + D3DXVECTOR3 operator + () const; + D3DXVECTOR3 operator - () const; + + // binary operators + D3DXVECTOR3 operator + ( CONST D3DXVECTOR3& ) const; + D3DXVECTOR3 operator - ( CONST D3DXVECTOR3& ) const; + D3DXVECTOR3 operator * ( FLOAT ) const; + D3DXVECTOR3 operator / ( FLOAT ) const; + + friend D3DXVECTOR3 operator * ( FLOAT, CONST struct D3DXVECTOR3& ); + + BOOL operator == ( CONST D3DXVECTOR3& ) const; + BOOL operator != ( CONST D3DXVECTOR3& ) const; + +} D3DXVECTOR3, *LPD3DXVECTOR3; + +#else //!__cplusplus +typedef struct _D3DVECTOR D3DXVECTOR3, *LPD3DXVECTOR3; +#endif //!__cplusplus + + + +//-------------------------- +// 3D Vector (16 bit) +//-------------------------- +typedef struct D3DXVECTOR3_16F +{ +#ifdef __cplusplus +public: + D3DXVECTOR3_16F() {}; + D3DXVECTOR3_16F( CONST FLOAT * ); + D3DXVECTOR3_16F( CONST D3DVECTOR& ); + D3DXVECTOR3_16F( CONST D3DXFLOAT16 * ); + D3DXVECTOR3_16F( CONST D3DXFLOAT16 &x, CONST D3DXFLOAT16 &y, CONST D3DXFLOAT16 &z ); + + // casting + operator D3DXFLOAT16* (); + operator CONST D3DXFLOAT16* () const; + + // binary operators + BOOL operator == ( CONST D3DXVECTOR3_16F& ) const; + BOOL operator != ( CONST D3DXVECTOR3_16F& ) const; + +public: +#endif //__cplusplus + D3DXFLOAT16 x, y, z; + +} D3DXVECTOR3_16F, *LPD3DXVECTOR3_16F; + + + +//-------------------------- +// 4D Vector +//-------------------------- +typedef struct D3DXVECTOR4 +{ +#ifdef __cplusplus +public: + D3DXVECTOR4() {}; + D3DXVECTOR4( CONST FLOAT* ); + D3DXVECTOR4( CONST D3DXFLOAT16* ); + D3DXVECTOR4( CONST D3DVECTOR& xyz, FLOAT w ); + D3DXVECTOR4( FLOAT x, FLOAT y, FLOAT z, FLOAT w ); + + // casting + operator FLOAT* (); + operator CONST FLOAT* () const; + + // assignment operators + D3DXVECTOR4& operator += ( CONST D3DXVECTOR4& ); + D3DXVECTOR4& operator -= ( CONST D3DXVECTOR4& ); + D3DXVECTOR4& operator *= ( FLOAT ); + D3DXVECTOR4& operator /= ( FLOAT ); + + // unary operators + D3DXVECTOR4 operator + () const; + D3DXVECTOR4 operator - () const; + + // binary operators + D3DXVECTOR4 operator + ( CONST D3DXVECTOR4& ) const; + D3DXVECTOR4 operator - ( CONST D3DXVECTOR4& ) const; + D3DXVECTOR4 operator * ( FLOAT ) const; + D3DXVECTOR4 operator / ( FLOAT ) const; + + friend D3DXVECTOR4 operator * ( FLOAT, CONST D3DXVECTOR4& ); + + BOOL operator == ( CONST D3DXVECTOR4& ) const; + BOOL operator != ( CONST D3DXVECTOR4& ) const; + +public: +#endif //__cplusplus + FLOAT x, y, z, w; +} D3DXVECTOR4, *LPD3DXVECTOR4; + + +//-------------------------- +// 4D Vector (16 bit) +//-------------------------- +typedef struct D3DXVECTOR4_16F +{ +#ifdef __cplusplus +public: + D3DXVECTOR4_16F() {}; + D3DXVECTOR4_16F( CONST FLOAT * ); + D3DXVECTOR4_16F( CONST D3DXFLOAT16* ); + D3DXVECTOR4_16F( CONST D3DXVECTOR3_16F& xyz, CONST D3DXFLOAT16& w ); + D3DXVECTOR4_16F( CONST D3DXFLOAT16& x, CONST D3DXFLOAT16& y, CONST D3DXFLOAT16& z, CONST D3DXFLOAT16& w ); + + // casting + operator D3DXFLOAT16* (); + operator CONST D3DXFLOAT16* () const; + + // binary operators + BOOL operator == ( CONST D3DXVECTOR4_16F& ) const; + BOOL operator != ( CONST D3DXVECTOR4_16F& ) const; + +public: +#endif //__cplusplus + D3DXFLOAT16 x, y, z, w; + +} D3DXVECTOR4_16F, *LPD3DXVECTOR4_16F; + + + +//=========================================================================== +// +// Matrices +// +//=========================================================================== +#ifdef __cplusplus +typedef struct D3DXMATRIX : public D3DMATRIX +{ +public: + D3DXMATRIX() {}; + D3DXMATRIX( CONST FLOAT * ); + D3DXMATRIX( CONST D3DMATRIX& ); + D3DXMATRIX( CONST D3DXFLOAT16 * ); + D3DXMATRIX( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14, + FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24, + FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34, + FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 ); + + + // access grants + FLOAT& operator () ( UINT Row, UINT Col ); + FLOAT operator () ( UINT Row, UINT Col ) const; + + // casting operators + operator FLOAT* (); + operator CONST FLOAT* () const; + + // assignment operators + D3DXMATRIX& operator *= ( CONST D3DXMATRIX& ); + D3DXMATRIX& operator += ( CONST D3DXMATRIX& ); + D3DXMATRIX& operator -= ( CONST D3DXMATRIX& ); + D3DXMATRIX& operator *= ( FLOAT ); + D3DXMATRIX& operator /= ( FLOAT ); + + // unary operators + D3DXMATRIX operator + () const; + D3DXMATRIX operator - () const; + + // binary operators + D3DXMATRIX operator * ( CONST D3DXMATRIX& ) const; + D3DXMATRIX operator + ( CONST D3DXMATRIX& ) const; + D3DXMATRIX operator - ( CONST D3DXMATRIX& ) const; + D3DXMATRIX operator * ( FLOAT ) const; + D3DXMATRIX operator / ( FLOAT ) const; + + friend D3DXMATRIX operator * ( FLOAT, CONST D3DXMATRIX& ); + + BOOL operator == ( CONST D3DXMATRIX& ) const; + BOOL operator != ( CONST D3DXMATRIX& ) const; + +} D3DXMATRIX, *LPD3DXMATRIX; + +#else //!__cplusplus +typedef struct _D3DMATRIX D3DXMATRIX, *LPD3DXMATRIX; +#endif //!__cplusplus + + +//--------------------------------------------------------------------------- +// Aligned Matrices +// +// This class helps keep matrices 16-byte aligned as preferred by P4 cpus. +// It aligns matrices on the stack and on the heap or in global scope. +// It does this using __declspec(align(16)) which works on VC7 and on VC 6 +// with the processor pack. Unfortunately there is no way to detect the +// latter so this is turned on only on VC7. On other compilers this is the +// the same as D3DXMATRIX. +// +// Using this class on a compiler that does not actually do the alignment +// can be dangerous since it will not expose bugs that ignore alignment. +// E.g if an object of this class in inside a struct or class, and some code +// memcopys data in it assuming tight packing. This could break on a compiler +// that eventually start aligning the matrix. +//--------------------------------------------------------------------------- +#ifdef __cplusplus +typedef struct _D3DXMATRIXA16 : public D3DXMATRIX +{ + _D3DXMATRIXA16() {} + _D3DXMATRIXA16( CONST FLOAT * ); + _D3DXMATRIXA16( CONST D3DMATRIX& ); + _D3DXMATRIXA16( CONST D3DXFLOAT16 * ); + _D3DXMATRIXA16( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14, + FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24, + FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34, + FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 ); + + // new operators + void* operator new ( size_t ); + void* operator new[] ( size_t ); + + // delete operators + void operator delete ( void* ); // These are NOT virtual; Do not + void operator delete[] ( void* ); // cast to D3DXMATRIX and delete. + + // assignment operators + _D3DXMATRIXA16& operator = ( CONST D3DXMATRIX& ); + +} _D3DXMATRIXA16; + +#else //!__cplusplus +typedef D3DXMATRIX _D3DXMATRIXA16; +#endif //!__cplusplus + + + +#if _MSC_VER >= 1300 // VC7 +#define D3DX_ALIGN16 __declspec(align(16)) +#else +#define D3DX_ALIGN16 // Earlier compiler may not understand this, do nothing. +#endif + +typedef D3DX_ALIGN16 _D3DXMATRIXA16 D3DXMATRIXA16, *LPD3DXMATRIXA16; + + + +//=========================================================================== +// +// Quaternions +// +//=========================================================================== +typedef struct D3DXQUATERNION +{ +#ifdef __cplusplus +public: + D3DXQUATERNION() {} + D3DXQUATERNION( CONST FLOAT * ); + D3DXQUATERNION( CONST D3DXFLOAT16 * ); + D3DXQUATERNION( FLOAT x, FLOAT y, FLOAT z, FLOAT w ); + + // casting + operator FLOAT* (); + operator CONST FLOAT* () const; + + // assignment operators + D3DXQUATERNION& operator += ( CONST D3DXQUATERNION& ); + D3DXQUATERNION& operator -= ( CONST D3DXQUATERNION& ); + D3DXQUATERNION& operator *= ( CONST D3DXQUATERNION& ); + D3DXQUATERNION& operator *= ( FLOAT ); + D3DXQUATERNION& operator /= ( FLOAT ); + + // unary operators + D3DXQUATERNION operator + () const; + D3DXQUATERNION operator - () const; + + // binary operators + D3DXQUATERNION operator + ( CONST D3DXQUATERNION& ) const; + D3DXQUATERNION operator - ( CONST D3DXQUATERNION& ) const; + D3DXQUATERNION operator * ( CONST D3DXQUATERNION& ) const; + D3DXQUATERNION operator * ( FLOAT ) const; + D3DXQUATERNION operator / ( FLOAT ) const; + + friend D3DXQUATERNION operator * (FLOAT, CONST D3DXQUATERNION& ); + + BOOL operator == ( CONST D3DXQUATERNION& ) const; + BOOL operator != ( CONST D3DXQUATERNION& ) const; + +#endif //__cplusplus + FLOAT x, y, z, w; +} D3DXQUATERNION, *LPD3DXQUATERNION; + + +//=========================================================================== +// +// Planes +// +//=========================================================================== +typedef struct D3DXPLANE +{ +#ifdef __cplusplus +public: + D3DXPLANE() {} + D3DXPLANE( CONST FLOAT* ); + D3DXPLANE( CONST D3DXFLOAT16* ); + D3DXPLANE( FLOAT a, FLOAT b, FLOAT c, FLOAT d ); + + // casting + operator FLOAT* (); + operator CONST FLOAT* () const; + + // assignment operators + D3DXPLANE& operator *= ( FLOAT ); + D3DXPLANE& operator /= ( FLOAT ); + + // unary operators + D3DXPLANE operator + () const; + D3DXPLANE operator - () const; + + // binary operators + D3DXPLANE operator * ( FLOAT ) const; + D3DXPLANE operator / ( FLOAT ) const; + + friend D3DXPLANE operator * ( FLOAT, CONST D3DXPLANE& ); + + BOOL operator == ( CONST D3DXPLANE& ) const; + BOOL operator != ( CONST D3DXPLANE& ) const; + +#endif //__cplusplus + FLOAT a, b, c, d; +} D3DXPLANE, *LPD3DXPLANE; + + +//=========================================================================== +// +// Colors +// +//=========================================================================== + +typedef struct D3DXCOLOR +{ +#ifdef __cplusplus +public: + D3DXCOLOR() {} + D3DXCOLOR( DWORD argb ); + D3DXCOLOR( CONST FLOAT * ); + D3DXCOLOR( CONST D3DXFLOAT16 * ); + D3DXCOLOR( CONST D3DCOLORVALUE& ); + D3DXCOLOR( FLOAT r, FLOAT g, FLOAT b, FLOAT a ); + + // casting + operator DWORD () const; + + operator FLOAT* (); + operator CONST FLOAT* () const; + + operator D3DCOLORVALUE* (); + operator CONST D3DCOLORVALUE* () const; + + operator D3DCOLORVALUE& (); + operator CONST D3DCOLORVALUE& () const; + + // assignment operators + D3DXCOLOR& operator += ( CONST D3DXCOLOR& ); + D3DXCOLOR& operator -= ( CONST D3DXCOLOR& ); + D3DXCOLOR& operator *= ( FLOAT ); + D3DXCOLOR& operator /= ( FLOAT ); + + // unary operators + D3DXCOLOR operator + () const; + D3DXCOLOR operator - () const; + + // binary operators + D3DXCOLOR operator + ( CONST D3DXCOLOR& ) const; + D3DXCOLOR operator - ( CONST D3DXCOLOR& ) const; + D3DXCOLOR operator * ( FLOAT ) const; + D3DXCOLOR operator / ( FLOAT ) const; + + friend D3DXCOLOR operator * ( FLOAT, CONST D3DXCOLOR& ); + + BOOL operator == ( CONST D3DXCOLOR& ) const; + BOOL operator != ( CONST D3DXCOLOR& ) const; + +#endif //__cplusplus + FLOAT r, g, b, a; +} D3DXCOLOR, *LPD3DXCOLOR; + + + +//=========================================================================== +// +// D3DX math functions: +// +// NOTE: +// * All these functions can take the same object as in and out parameters. +// +// * Out parameters are typically also returned as return values, so that +// the output of one function may be used as a parameter to another. +// +//=========================================================================== + +//-------------------------- +// Float16 +//-------------------------- + +// non-inline +#ifdef __cplusplus +extern "C" { +#endif + +// Converts an array 32-bit floats to 16-bit floats +D3DXFLOAT16* WINAPI D3DXFloat32To16Array + ( D3DXFLOAT16 *pOut, CONST FLOAT *pIn, UINT n ); + +// Converts an array 16-bit floats to 32-bit floats +FLOAT* WINAPI D3DXFloat16To32Array + ( FLOAT *pOut, CONST D3DXFLOAT16 *pIn, UINT n ); + +#ifdef __cplusplus +} +#endif + + +//-------------------------- +// 2D Vector +//-------------------------- + +// inline + +FLOAT D3DXVec2Length + ( CONST D3DXVECTOR2 *pV ); + +FLOAT D3DXVec2LengthSq + ( CONST D3DXVECTOR2 *pV ); + +FLOAT D3DXVec2Dot + ( CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ); + +// Z component of ((x1,y1,0) cross (x2,y2,0)) +FLOAT D3DXVec2CCW + ( CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ); + +D3DXVECTOR2* D3DXVec2Add + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ); + +D3DXVECTOR2* D3DXVec2Subtract + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ); + +// Minimize each component. x = min(x1, x2), y = min(y1, y2) +D3DXVECTOR2* D3DXVec2Minimize + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ); + +// Maximize each component. x = max(x1, x2), y = max(y1, y2) +D3DXVECTOR2* D3DXVec2Maximize + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ); + +D3DXVECTOR2* D3DXVec2Scale + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV, FLOAT s ); + +// Linear interpolation. V1 + s(V2-V1) +D3DXVECTOR2* D3DXVec2Lerp + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2, + FLOAT s ); + +// non-inline +#ifdef __cplusplus +extern "C" { +#endif + +D3DXVECTOR2* WINAPI D3DXVec2Normalize + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV ); + +// Hermite interpolation between position V1, tangent T1 (when s == 0) +// and position V2, tangent T2 (when s == 1). +D3DXVECTOR2* WINAPI D3DXVec2Hermite + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pT1, + CONST D3DXVECTOR2 *pV2, CONST D3DXVECTOR2 *pT2, FLOAT s ); + +// CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1) +D3DXVECTOR2* WINAPI D3DXVec2CatmullRom + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV0, CONST D3DXVECTOR2 *pV1, + CONST D3DXVECTOR2 *pV2, CONST D3DXVECTOR2 *pV3, FLOAT s ); + +// Barycentric coordinates. V1 + f(V2-V1) + g(V3-V1) +D3DXVECTOR2* WINAPI D3DXVec2BaryCentric + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2, + CONST D3DXVECTOR2 *pV3, FLOAT f, FLOAT g); + +// Transform (x, y, 0, 1) by matrix. +D3DXVECTOR4* WINAPI D3DXVec2Transform + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR2 *pV, CONST D3DXMATRIX *pM ); + +// Transform (x, y, 0, 1) by matrix, project result back into w=1. +D3DXVECTOR2* WINAPI D3DXVec2TransformCoord + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV, CONST D3DXMATRIX *pM ); + +// Transform (x, y, 0, 0) by matrix. +D3DXVECTOR2* WINAPI D3DXVec2TransformNormal + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV, CONST D3DXMATRIX *pM ); + +// Transform Array (x, y, 0, 1) by matrix. +D3DXVECTOR4* WINAPI D3DXVec2TransformArray + ( D3DXVECTOR4 *pOut, UINT OutStride, CONST D3DXVECTOR2 *pV, UINT VStride, CONST D3DXMATRIX *pM, UINT n); + +// Transform Array (x, y, 0, 1) by matrix, project result back into w=1. +D3DXVECTOR2* WINAPI D3DXVec2TransformCoordArray + ( D3DXVECTOR2 *pOut, UINT OutStride, CONST D3DXVECTOR2 *pV, UINT VStride, CONST D3DXMATRIX *pM, UINT n ); + +// Transform Array (x, y, 0, 0) by matrix. +D3DXVECTOR2* WINAPI D3DXVec2TransformNormalArray + ( D3DXVECTOR2 *pOut, UINT OutStride, CONST D3DXVECTOR2 *pV, UINT VStride, CONST D3DXMATRIX *pM, UINT n ); + + + +#ifdef __cplusplus +} +#endif + + +//-------------------------- +// 3D Vector +//-------------------------- + +// inline + +FLOAT D3DXVec3Length + ( CONST D3DXVECTOR3 *pV ); + +FLOAT D3DXVec3LengthSq + ( CONST D3DXVECTOR3 *pV ); + +FLOAT D3DXVec3Dot + ( CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ); + +D3DXVECTOR3* D3DXVec3Cross + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ); + +D3DXVECTOR3* D3DXVec3Add + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ); + +D3DXVECTOR3* D3DXVec3Subtract + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ); + +// Minimize each component. x = min(x1, x2), y = min(y1, y2), ... +D3DXVECTOR3* D3DXVec3Minimize + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ); + +// Maximize each component. x = max(x1, x2), y = max(y1, y2), ... +D3DXVECTOR3* D3DXVec3Maximize + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ); + +D3DXVECTOR3* D3DXVec3Scale + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, FLOAT s); + +// Linear interpolation. V1 + s(V2-V1) +D3DXVECTOR3* D3DXVec3Lerp + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2, + FLOAT s ); + +// non-inline +#ifdef __cplusplus +extern "C" { +#endif + +D3DXVECTOR3* WINAPI D3DXVec3Normalize + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV ); + +// Hermite interpolation between position V1, tangent T1 (when s == 0) +// and position V2, tangent T2 (when s == 1). +D3DXVECTOR3* WINAPI D3DXVec3Hermite + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pT1, + CONST D3DXVECTOR3 *pV2, CONST D3DXVECTOR3 *pT2, FLOAT s ); + +// CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1) +D3DXVECTOR3* WINAPI D3DXVec3CatmullRom + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV0, CONST D3DXVECTOR3 *pV1, + CONST D3DXVECTOR3 *pV2, CONST D3DXVECTOR3 *pV3, FLOAT s ); + +// Barycentric coordinates. V1 + f(V2-V1) + g(V3-V1) +D3DXVECTOR3* WINAPI D3DXVec3BaryCentric + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2, + CONST D3DXVECTOR3 *pV3, FLOAT f, FLOAT g); + +// Transform (x, y, z, 1) by matrix. +D3DXVECTOR4* WINAPI D3DXVec3Transform + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DXMATRIX *pM ); + +// Transform (x, y, z, 1) by matrix, project result back into w=1. +D3DXVECTOR3* WINAPI D3DXVec3TransformCoord + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DXMATRIX *pM ); + +// Transform (x, y, z, 0) by matrix. If you transforming a normal by a +// non-affine matrix, the matrix you pass to this function should be the +// transpose of the inverse of the matrix you would use to transform a coord. +D3DXVECTOR3* WINAPI D3DXVec3TransformNormal + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DXMATRIX *pM ); + + +// Transform Array (x, y, z, 1) by matrix. +D3DXVECTOR4* WINAPI D3DXVec3TransformArray + ( D3DXVECTOR4 *pOut, UINT OutStride, CONST D3DXVECTOR3 *pV, UINT VStride, CONST D3DXMATRIX *pM, UINT n ); + +// Transform Array (x, y, z, 1) by matrix, project result back into w=1. +D3DXVECTOR3* WINAPI D3DXVec3TransformCoordArray + ( D3DXVECTOR3 *pOut, UINT OutStride, CONST D3DXVECTOR3 *pV, UINT VStride, CONST D3DXMATRIX *pM, UINT n ); + +// Transform (x, y, z, 0) by matrix. If you transforming a normal by a +// non-affine matrix, the matrix you pass to this function should be the +// transpose of the inverse of the matrix you would use to transform a coord. +D3DXVECTOR3* WINAPI D3DXVec3TransformNormalArray + ( D3DXVECTOR3 *pOut, UINT OutStride, CONST D3DXVECTOR3 *pV, UINT VStride, CONST D3DXMATRIX *pM, UINT n ); + +// Project vector from object space into screen space +D3DXVECTOR3* WINAPI D3DXVec3Project + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DVIEWPORT9 *pViewport, + CONST D3DXMATRIX *pProjection, CONST D3DXMATRIX *pView, CONST D3DXMATRIX *pWorld); + +// Project vector from screen space into object space +D3DXVECTOR3* WINAPI D3DXVec3Unproject + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, CONST D3DVIEWPORT9 *pViewport, + CONST D3DXMATRIX *pProjection, CONST D3DXMATRIX *pView, CONST D3DXMATRIX *pWorld); + +// Project vector Array from object space into screen space +D3DXVECTOR3* WINAPI D3DXVec3ProjectArray + ( D3DXVECTOR3 *pOut, UINT OutStride,CONST D3DXVECTOR3 *pV, UINT VStride,CONST D3DVIEWPORT9 *pViewport, + CONST D3DXMATRIX *pProjection, CONST D3DXMATRIX *pView, CONST D3DXMATRIX *pWorld, UINT n); + +// Project vector Array from screen space into object space +D3DXVECTOR3* WINAPI D3DXVec3UnprojectArray + ( D3DXVECTOR3 *pOut, UINT OutStride, CONST D3DXVECTOR3 *pV, UINT VStride, CONST D3DVIEWPORT9 *pViewport, + CONST D3DXMATRIX *pProjection, CONST D3DXMATRIX *pView, CONST D3DXMATRIX *pWorld, UINT n); + + +#ifdef __cplusplus +} +#endif + + + +//-------------------------- +// 4D Vector +//-------------------------- + +// inline + +FLOAT D3DXVec4Length + ( CONST D3DXVECTOR4 *pV ); + +FLOAT D3DXVec4LengthSq + ( CONST D3DXVECTOR4 *pV ); + +FLOAT D3DXVec4Dot + ( CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2 ); + +D3DXVECTOR4* D3DXVec4Add + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2); + +D3DXVECTOR4* D3DXVec4Subtract + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2); + +// Minimize each component. x = min(x1, x2), y = min(y1, y2), ... +D3DXVECTOR4* D3DXVec4Minimize + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2); + +// Maximize each component. x = max(x1, x2), y = max(y1, y2), ... +D3DXVECTOR4* D3DXVec4Maximize + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2); + +D3DXVECTOR4* D3DXVec4Scale + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV, FLOAT s); + +// Linear interpolation. V1 + s(V2-V1) +D3DXVECTOR4* D3DXVec4Lerp + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2, + FLOAT s ); + +// non-inline +#ifdef __cplusplus +extern "C" { +#endif + +// Cross-product in 4 dimensions. +D3DXVECTOR4* WINAPI D3DXVec4Cross + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2, + CONST D3DXVECTOR4 *pV3); + +D3DXVECTOR4* WINAPI D3DXVec4Normalize + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV ); + +// Hermite interpolation between position V1, tangent T1 (when s == 0) +// and position V2, tangent T2 (when s == 1). +D3DXVECTOR4* WINAPI D3DXVec4Hermite + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pT1, + CONST D3DXVECTOR4 *pV2, CONST D3DXVECTOR4 *pT2, FLOAT s ); + +// CatmullRom interpolation between V1 (when s == 0) and V2 (when s == 1) +D3DXVECTOR4* WINAPI D3DXVec4CatmullRom + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV0, CONST D3DXVECTOR4 *pV1, + CONST D3DXVECTOR4 *pV2, CONST D3DXVECTOR4 *pV3, FLOAT s ); + +// Barycentric coordinates. V1 + f(V2-V1) + g(V3-V1) +D3DXVECTOR4* WINAPI D3DXVec4BaryCentric + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2, + CONST D3DXVECTOR4 *pV3, FLOAT f, FLOAT g); + +// Transform vector by matrix. +D3DXVECTOR4* WINAPI D3DXVec4Transform + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV, CONST D3DXMATRIX *pM ); + +// Transform vector array by matrix. +D3DXVECTOR4* WINAPI D3DXVec4TransformArray + ( D3DXVECTOR4 *pOut, UINT OutStride, CONST D3DXVECTOR4 *pV, UINT VStride, CONST D3DXMATRIX *pM, UINT n ); + +#ifdef __cplusplus +} +#endif + + +//-------------------------- +// 4D Matrix +//-------------------------- + +// inline + +D3DXMATRIX* D3DXMatrixIdentity + ( D3DXMATRIX *pOut ); + +BOOL D3DXMatrixIsIdentity + ( CONST D3DXMATRIX *pM ); + + +// non-inline +#ifdef __cplusplus +extern "C" { +#endif + +FLOAT WINAPI D3DXMatrixDeterminant + ( CONST D3DXMATRIX *pM ); + +HRESULT WINAPI D3DXMatrixDecompose + ( D3DXVECTOR3 *pOutScale, D3DXQUATERNION *pOutRotation, + D3DXVECTOR3 *pOutTranslation, CONST D3DXMATRIX *pM ); + +D3DXMATRIX* WINAPI D3DXMatrixTranspose + ( D3DXMATRIX *pOut, CONST D3DXMATRIX *pM ); + +// Matrix multiplication. The result represents the transformation M2 +// followed by the transformation M1. (Out = M1 * M2) +D3DXMATRIX* WINAPI D3DXMatrixMultiply + ( D3DXMATRIX *pOut, CONST D3DXMATRIX *pM1, CONST D3DXMATRIX *pM2 ); + +// Matrix multiplication, followed by a transpose. (Out = T(M1 * M2)) +D3DXMATRIX* WINAPI D3DXMatrixMultiplyTranspose + ( D3DXMATRIX *pOut, CONST D3DXMATRIX *pM1, CONST D3DXMATRIX *pM2 ); + +// Calculate inverse of matrix. Inversion my fail, in which case NULL will +// be returned. The determinant of pM is also returned it pfDeterminant +// is non-NULL. +D3DXMATRIX* WINAPI D3DXMatrixInverse + ( D3DXMATRIX *pOut, FLOAT *pDeterminant, CONST D3DXMATRIX *pM ); + +// Build a matrix which scales by (sx, sy, sz) +D3DXMATRIX* WINAPI D3DXMatrixScaling + ( D3DXMATRIX *pOut, FLOAT sx, FLOAT sy, FLOAT sz ); + +// Build a matrix which translates by (x, y, z) +D3DXMATRIX* WINAPI D3DXMatrixTranslation + ( D3DXMATRIX *pOut, FLOAT x, FLOAT y, FLOAT z ); + +// Build a matrix which rotates around the X axis +D3DXMATRIX* WINAPI D3DXMatrixRotationX + ( D3DXMATRIX *pOut, FLOAT Angle ); + +// Build a matrix which rotates around the Y axis +D3DXMATRIX* WINAPI D3DXMatrixRotationY + ( D3DXMATRIX *pOut, FLOAT Angle ); + +// Build a matrix which rotates around the Z axis +D3DXMATRIX* WINAPI D3DXMatrixRotationZ + ( D3DXMATRIX *pOut, FLOAT Angle ); + +// Build a matrix which rotates around an arbitrary axis +D3DXMATRIX* WINAPI D3DXMatrixRotationAxis + ( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle ); + +// Build a matrix from a quaternion +D3DXMATRIX* WINAPI D3DXMatrixRotationQuaternion + ( D3DXMATRIX *pOut, CONST D3DXQUATERNION *pQ); + +// Yaw around the Y axis, a pitch around the X axis, +// and a roll around the Z axis. +D3DXMATRIX* WINAPI D3DXMatrixRotationYawPitchRoll + ( D3DXMATRIX *pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll ); + +// Build transformation matrix. NULL arguments are treated as identity. +// Mout = Msc-1 * Msr-1 * Ms * Msr * Msc * Mrc-1 * Mr * Mrc * Mt +D3DXMATRIX* WINAPI D3DXMatrixTransformation + ( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pScalingCenter, + CONST D3DXQUATERNION *pScalingRotation, CONST D3DXVECTOR3 *pScaling, + CONST D3DXVECTOR3 *pRotationCenter, CONST D3DXQUATERNION *pRotation, + CONST D3DXVECTOR3 *pTranslation); + +// Build 2D transformation matrix in XY plane. NULL arguments are treated as identity. +// Mout = Msc-1 * Msr-1 * Ms * Msr * Msc * Mrc-1 * Mr * Mrc * Mt +D3DXMATRIX* WINAPI D3DXMatrixTransformation2D + ( D3DXMATRIX *pOut, CONST D3DXVECTOR2* pScalingCenter, + FLOAT ScalingRotation, CONST D3DXVECTOR2* pScaling, + CONST D3DXVECTOR2* pRotationCenter, FLOAT Rotation, + CONST D3DXVECTOR2* pTranslation); + +// Build affine transformation matrix. NULL arguments are treated as identity. +// Mout = Ms * Mrc-1 * Mr * Mrc * Mt +D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation + ( D3DXMATRIX *pOut, FLOAT Scaling, CONST D3DXVECTOR3 *pRotationCenter, + CONST D3DXQUATERNION *pRotation, CONST D3DXVECTOR3 *pTranslation); + +// Build 2D affine transformation matrix in XY plane. NULL arguments are treated as identity. +// Mout = Ms * Mrc-1 * Mr * Mrc * Mt +D3DXMATRIX* WINAPI D3DXMatrixAffineTransformation2D + ( D3DXMATRIX *pOut, FLOAT Scaling, CONST D3DXVECTOR2* pRotationCenter, + FLOAT Rotation, CONST D3DXVECTOR2* pTranslation); + +// Build a lookat matrix. (right-handed) +D3DXMATRIX* WINAPI D3DXMatrixLookAtRH + ( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pEye, CONST D3DXVECTOR3 *pAt, + CONST D3DXVECTOR3 *pUp ); + +// Build a lookat matrix. (left-handed) +D3DXMATRIX* WINAPI D3DXMatrixLookAtLH + ( D3DXMATRIX *pOut, CONST D3DXVECTOR3 *pEye, CONST D3DXVECTOR3 *pAt, + CONST D3DXVECTOR3 *pUp ); + +// Build a perspective projection matrix. (right-handed) +D3DXMATRIX* WINAPI D3DXMatrixPerspectiveRH + ( D3DXMATRIX *pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf ); + +// Build a perspective projection matrix. (left-handed) +D3DXMATRIX* WINAPI D3DXMatrixPerspectiveLH + ( D3DXMATRIX *pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf ); + +// Build a perspective projection matrix. (right-handed) +D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovRH + ( D3DXMATRIX *pOut, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf ); + +// Build a perspective projection matrix. (left-handed) +D3DXMATRIX* WINAPI D3DXMatrixPerspectiveFovLH + ( D3DXMATRIX *pOut, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf ); + +// Build a perspective projection matrix. (right-handed) +D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterRH + ( D3DXMATRIX *pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, + FLOAT zf ); + +// Build a perspective projection matrix. (left-handed) +D3DXMATRIX* WINAPI D3DXMatrixPerspectiveOffCenterLH + ( D3DXMATRIX *pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, + FLOAT zf ); + +// Build an ortho projection matrix. (right-handed) +D3DXMATRIX* WINAPI D3DXMatrixOrthoRH + ( D3DXMATRIX *pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf ); + +// Build an ortho projection matrix. (left-handed) +D3DXMATRIX* WINAPI D3DXMatrixOrthoLH + ( D3DXMATRIX *pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf ); + +// Build an ortho projection matrix. (right-handed) +D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterRH + ( D3DXMATRIX *pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, + FLOAT zf ); + +// Build an ortho projection matrix. (left-handed) +D3DXMATRIX* WINAPI D3DXMatrixOrthoOffCenterLH + ( D3DXMATRIX *pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, + FLOAT zf ); + +// Build a matrix which flattens geometry into a plane, as if casting +// a shadow from a light. +D3DXMATRIX* WINAPI D3DXMatrixShadow + ( D3DXMATRIX *pOut, CONST D3DXVECTOR4 *pLight, + CONST D3DXPLANE *pPlane ); + +// Build a matrix which reflects the coordinate system about a plane +D3DXMATRIX* WINAPI D3DXMatrixReflect + ( D3DXMATRIX *pOut, CONST D3DXPLANE *pPlane ); + +#ifdef __cplusplus +} +#endif + + +//-------------------------- +// Quaternion +//-------------------------- + +// inline + +FLOAT D3DXQuaternionLength + ( CONST D3DXQUATERNION *pQ ); + +// Length squared, or "norm" +FLOAT D3DXQuaternionLengthSq + ( CONST D3DXQUATERNION *pQ ); + +FLOAT D3DXQuaternionDot + ( CONST D3DXQUATERNION *pQ1, CONST D3DXQUATERNION *pQ2 ); + +// (0, 0, 0, 1) +D3DXQUATERNION* D3DXQuaternionIdentity + ( D3DXQUATERNION *pOut ); + +BOOL D3DXQuaternionIsIdentity + ( CONST D3DXQUATERNION *pQ ); + +// (-x, -y, -z, w) +D3DXQUATERNION* D3DXQuaternionConjugate + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ ); + + +// non-inline +#ifdef __cplusplus +extern "C" { +#endif + +// Compute a quaternin's axis and angle of rotation. Expects unit quaternions. +void WINAPI D3DXQuaternionToAxisAngle + ( CONST D3DXQUATERNION *pQ, D3DXVECTOR3 *pAxis, FLOAT *pAngle ); + +// Build a quaternion from a rotation matrix. +D3DXQUATERNION* WINAPI D3DXQuaternionRotationMatrix + ( D3DXQUATERNION *pOut, CONST D3DXMATRIX *pM); + +// Rotation about arbitrary axis. +D3DXQUATERNION* WINAPI D3DXQuaternionRotationAxis + ( D3DXQUATERNION *pOut, CONST D3DXVECTOR3 *pV, FLOAT Angle ); + +// Yaw around the Y axis, a pitch around the X axis, +// and a roll around the Z axis. +D3DXQUATERNION* WINAPI D3DXQuaternionRotationYawPitchRoll + ( D3DXQUATERNION *pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll ); + +// Quaternion multiplication. The result represents the rotation Q2 +// followed by the rotation Q1. (Out = Q2 * Q1) +D3DXQUATERNION* WINAPI D3DXQuaternionMultiply + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ1, + CONST D3DXQUATERNION *pQ2 ); + +D3DXQUATERNION* WINAPI D3DXQuaternionNormalize + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ ); + +// Conjugate and re-norm +D3DXQUATERNION* WINAPI D3DXQuaternionInverse + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ ); + +// Expects unit quaternions. +// if q = (cos(theta), sin(theta) * v); ln(q) = (0, theta * v) +D3DXQUATERNION* WINAPI D3DXQuaternionLn + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ ); + +// Expects pure quaternions. (w == 0) w is ignored in calculation. +// if q = (0, theta * v); exp(q) = (cos(theta), sin(theta) * v) +D3DXQUATERNION* WINAPI D3DXQuaternionExp + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ ); + +// Spherical linear interpolation between Q1 (t == 0) and Q2 (t == 1). +// Expects unit quaternions. +D3DXQUATERNION* WINAPI D3DXQuaternionSlerp + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ1, + CONST D3DXQUATERNION *pQ2, FLOAT t ); + +// Spherical quadrangle interpolation. +// Slerp(Slerp(Q1, C, t), Slerp(A, B, t), 2t(1-t)) +D3DXQUATERNION* WINAPI D3DXQuaternionSquad + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ1, + CONST D3DXQUATERNION *pA, CONST D3DXQUATERNION *pB, + CONST D3DXQUATERNION *pC, FLOAT t ); + +// Setup control points for spherical quadrangle interpolation +// from Q1 to Q2. The control points are chosen in such a way +// to ensure the continuity of tangents with adjacent segments. +void WINAPI D3DXQuaternionSquadSetup + ( D3DXQUATERNION *pAOut, D3DXQUATERNION *pBOut, D3DXQUATERNION *pCOut, + CONST D3DXQUATERNION *pQ0, CONST D3DXQUATERNION *pQ1, + CONST D3DXQUATERNION *pQ2, CONST D3DXQUATERNION *pQ3 ); + +// Barycentric interpolation. +// Slerp(Slerp(Q1, Q2, f+g), Slerp(Q1, Q3, f+g), g/(f+g)) +D3DXQUATERNION* WINAPI D3DXQuaternionBaryCentric + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ1, + CONST D3DXQUATERNION *pQ2, CONST D3DXQUATERNION *pQ3, + FLOAT f, FLOAT g ); + +#ifdef __cplusplus +} +#endif + + +//-------------------------- +// Plane +//-------------------------- + +// inline + +// ax + by + cz + dw +FLOAT D3DXPlaneDot + ( CONST D3DXPLANE *pP, CONST D3DXVECTOR4 *pV); + +// ax + by + cz + d +FLOAT D3DXPlaneDotCoord + ( CONST D3DXPLANE *pP, CONST D3DXVECTOR3 *pV); + +// ax + by + cz +FLOAT D3DXPlaneDotNormal + ( CONST D3DXPLANE *pP, CONST D3DXVECTOR3 *pV); + +D3DXPLANE* D3DXPlaneScale + (D3DXPLANE *pOut, CONST D3DXPLANE *pP, FLOAT s); + +// non-inline +#ifdef __cplusplus +extern "C" { +#endif + +// Normalize plane (so that |a,b,c| == 1) +D3DXPLANE* WINAPI D3DXPlaneNormalize + ( D3DXPLANE *pOut, CONST D3DXPLANE *pP); + +// Find the intersection between a plane and a line. If the line is +// parallel to the plane, NULL is returned. +D3DXVECTOR3* WINAPI D3DXPlaneIntersectLine + ( D3DXVECTOR3 *pOut, CONST D3DXPLANE *pP, CONST D3DXVECTOR3 *pV1, + CONST D3DXVECTOR3 *pV2); + +// Construct a plane from a point and a normal +D3DXPLANE* WINAPI D3DXPlaneFromPointNormal + ( D3DXPLANE *pOut, CONST D3DXVECTOR3 *pPoint, CONST D3DXVECTOR3 *pNormal); + +// Construct a plane from 3 points +D3DXPLANE* WINAPI D3DXPlaneFromPoints + ( D3DXPLANE *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2, + CONST D3DXVECTOR3 *pV3); + +// Transform a plane by a matrix. The vector (a,b,c) must be normal. +// M should be the inverse transpose of the transformation desired. +D3DXPLANE* WINAPI D3DXPlaneTransform + ( D3DXPLANE *pOut, CONST D3DXPLANE *pP, CONST D3DXMATRIX *pM ); + +// Transform an array of planes by a matrix. The vectors (a,b,c) must be normal. +// M should be the inverse transpose of the transformation desired. +D3DXPLANE* WINAPI D3DXPlaneTransformArray + ( D3DXPLANE *pOut, UINT OutStride, CONST D3DXPLANE *pP, UINT PStride, CONST D3DXMATRIX *pM, UINT n ); + +#ifdef __cplusplus +} +#endif + + +//-------------------------- +// Color +//-------------------------- + +// inline + +// (1-r, 1-g, 1-b, a) +D3DXCOLOR* D3DXColorNegative + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC); + +D3DXCOLOR* D3DXColorAdd + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2); + +D3DXCOLOR* D3DXColorSubtract + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2); + +D3DXCOLOR* D3DXColorScale + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC, FLOAT s); + +// (r1*r2, g1*g2, b1*b2, a1*a2) +D3DXCOLOR* D3DXColorModulate + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2); + +// Linear interpolation of r,g,b, and a. C1 + s(C2-C1) +D3DXCOLOR* D3DXColorLerp + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2, FLOAT s); + +// non-inline +#ifdef __cplusplus +extern "C" { +#endif + +// Interpolate r,g,b between desaturated color and color. +// DesaturatedColor + s(Color - DesaturatedColor) +D3DXCOLOR* WINAPI D3DXColorAdjustSaturation + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC, FLOAT s); + +// Interpolate r,g,b between 50% grey and color. Grey + s(Color - Grey) +D3DXCOLOR* WINAPI D3DXColorAdjustContrast + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC, FLOAT c); + +#ifdef __cplusplus +} +#endif + + + + +//-------------------------- +// Misc +//-------------------------- + +#ifdef __cplusplus +extern "C" { +#endif + +// Calculate Fresnel term given the cosine of theta (likely obtained by +// taking the dot of two normals), and the refraction index of the material. +FLOAT WINAPI D3DXFresnelTerm + (FLOAT CosTheta, FLOAT RefractionIndex); + +#ifdef __cplusplus +} +#endif + + + +//=========================================================================== +// +// Matrix Stack +// +//=========================================================================== + +typedef interface ID3DXMatrixStack ID3DXMatrixStack; +typedef interface ID3DXMatrixStack *LPD3DXMATRIXSTACK; + +// {C7885BA7-F990-4fe7-922D-8515E477DD85} +DEFINE_GUID(IID_ID3DXMatrixStack, +0xc7885ba7, 0xf990, 0x4fe7, 0x92, 0x2d, 0x85, 0x15, 0xe4, 0x77, 0xdd, 0x85); + + +#undef INTERFACE +#define INTERFACE ID3DXMatrixStack + +DECLARE_INTERFACE_(ID3DXMatrixStack, IUnknown) +{ + // + // IUnknown methods + // + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + // + // ID3DXMatrixStack methods + // + + // Pops the top of the stack, returns the current top + // *after* popping the top. + STDMETHOD(Pop)(THIS) PURE; + + // Pushes the stack by one, duplicating the current matrix. + STDMETHOD(Push)(THIS) PURE; + + // Loads identity in the current matrix. + STDMETHOD(LoadIdentity)(THIS) PURE; + + // Loads the given matrix into the current matrix + STDMETHOD(LoadMatrix)(THIS_ CONST D3DXMATRIX* pM ) PURE; + + // Right-Multiplies the given matrix to the current matrix. + // (transformation is about the current world origin) + STDMETHOD(MultMatrix)(THIS_ CONST D3DXMATRIX* pM ) PURE; + + // Left-Multiplies the given matrix to the current matrix + // (transformation is about the local origin of the object) + STDMETHOD(MultMatrixLocal)(THIS_ CONST D3DXMATRIX* pM ) PURE; + + // Right multiply the current matrix with the computed rotation + // matrix, counterclockwise about the given axis with the given angle. + // (rotation is about the current world origin) + STDMETHOD(RotateAxis) + (THIS_ CONST D3DXVECTOR3* pV, FLOAT Angle) PURE; + + // Left multiply the current matrix with the computed rotation + // matrix, counterclockwise about the given axis with the given angle. + // (rotation is about the local origin of the object) + STDMETHOD(RotateAxisLocal) + (THIS_ CONST D3DXVECTOR3* pV, FLOAT Angle) PURE; + + // Right multiply the current matrix with the computed rotation + // matrix. All angles are counterclockwise. (rotation is about the + // current world origin) + + // The rotation is composed of a yaw around the Y axis, a pitch around + // the X axis, and a roll around the Z axis. + STDMETHOD(RotateYawPitchRoll) + (THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE; + + // Left multiply the current matrix with the computed rotation + // matrix. All angles are counterclockwise. (rotation is about the + // local origin of the object) + + // The rotation is composed of a yaw around the Y axis, a pitch around + // the X axis, and a roll around the Z axis. + STDMETHOD(RotateYawPitchRollLocal) + (THIS_ FLOAT Yaw, FLOAT Pitch, FLOAT Roll) PURE; + + // Right multiply the current matrix with the computed scale + // matrix. (transformation is about the current world origin) + STDMETHOD(Scale)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE; + + // Left multiply the current matrix with the computed scale + // matrix. (transformation is about the local origin of the object) + STDMETHOD(ScaleLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE; + + // Right multiply the current matrix with the computed translation + // matrix. (transformation is about the current world origin) + STDMETHOD(Translate)(THIS_ FLOAT x, FLOAT y, FLOAT z ) PURE; + + // Left multiply the current matrix with the computed translation + // matrix. (transformation is about the local origin of the object) + STDMETHOD(TranslateLocal)(THIS_ FLOAT x, FLOAT y, FLOAT z) PURE; + + // Obtain the current matrix at the top of the stack + STDMETHOD_(D3DXMATRIX*, GetTop)(THIS) PURE; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +HRESULT WINAPI + D3DXCreateMatrixStack( + DWORD Flags, + LPD3DXMATRIXSTACK* ppStack); + +#ifdef __cplusplus +} +#endif + +//=========================================================================== +// +// Spherical Harmonic Runtime Routines +// +// NOTE: +// * Most of these functions can take the same object as in and out parameters. +// The exceptions are the rotation functions. +// +// * Out parameters are typically also returned as return values, so that +// the output of one function may be used as a parameter to another. +// +//============================================================================ + + +// non-inline +#ifdef __cplusplus +extern "C" { +#endif + +//============================================================================ +// +// Basic Spherical Harmonic math routines +// +//============================================================================ + +#define D3DXSH_MINORDER 2 +#define D3DXSH_MAXORDER 6 + +//============================================================================ +// +// D3DXSHEvalDirection: +// -------------------- +// Evaluates the Spherical Harmonic basis functions +// +// Parameters: +// pOut +// Output SH coefficients - basis function Ylm is stored at l*l + m+l +// This is the pointer that is returned. +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pDir +// Direction to evaluate in - assumed to be normalized +// +//============================================================================ + +FLOAT* WINAPI D3DXSHEvalDirection + ( FLOAT *pOut, UINT Order, CONST D3DXVECTOR3 *pDir ); + +//============================================================================ +// +// D3DXSHRotate: +// -------------------- +// Rotates SH vector by a rotation matrix +// +// Parameters: +// pOut +// Output SH coefficients - basis function Ylm is stored at l*l + m+l +// This is the pointer that is returned (should not alias with pIn.) +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pMatrix +// Matrix used for rotation - rotation sub matrix should be orthogonal +// and have a unit determinant. +// pIn +// Input SH coeffs (rotated), incorect results if this is also output. +// +//============================================================================ + +FLOAT* WINAPI D3DXSHRotate + ( FLOAT *pOut, UINT Order, CONST D3DXMATRIX *pMatrix, CONST FLOAT *pIn ); + +//============================================================================ +// +// D3DXSHRotateZ: +// -------------------- +// Rotates the SH vector in the Z axis by an angle +// +// Parameters: +// pOut +// Output SH coefficients - basis function Ylm is stored at l*l + m+l +// This is the pointer that is returned (should not alias with pIn.) +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// Angle +// Angle in radians to rotate around the Z axis. +// pIn +// Input SH coeffs (rotated), incorect results if this is also output. +// +//============================================================================ + + +FLOAT* WINAPI D3DXSHRotateZ + ( FLOAT *pOut, UINT Order, FLOAT Angle, CONST FLOAT *pIn ); + +//============================================================================ +// +// D3DXSHAdd: +// -------------------- +// Adds two SH vectors, pOut[i] = pA[i] + pB[i]; +// +// Parameters: +// pOut +// Output SH coefficients - basis function Ylm is stored at l*l + m+l +// This is the pointer that is returned. +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pA +// Input SH coeffs. +// pB +// Input SH coeffs (second vector.) +// +//============================================================================ + +FLOAT* WINAPI D3DXSHAdd + ( FLOAT *pOut, UINT Order, CONST FLOAT *pA, CONST FLOAT *pB ); + +//============================================================================ +// +// D3DXSHScale: +// -------------------- +// Adds two SH vectors, pOut[i] = pA[i]*Scale; +// +// Parameters: +// pOut +// Output SH coefficients - basis function Ylm is stored at l*l + m+l +// This is the pointer that is returned. +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pIn +// Input SH coeffs. +// Scale +// Scale factor. +// +//============================================================================ + +FLOAT* WINAPI D3DXSHScale + ( FLOAT *pOut, UINT Order, CONST FLOAT *pIn, CONST FLOAT Scale ); + +//============================================================================ +// +// D3DXSHDot: +// -------------------- +// Computes the dot product of two SH vectors +// +// Parameters: +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pA +// Input SH coeffs. +// pB +// Second set of input SH coeffs. +// +//============================================================================ + +FLOAT WINAPI D3DXSHDot + ( UINT Order, CONST FLOAT *pA, CONST FLOAT *pB ); + +//============================================================================ +// +// D3DXSHMultiply[O]: +// -------------------- +// Computes the product of two functions represented using SH (f and g), where: +// pOut[i] = int(y_i(s) * f(s) * g(s)), where y_i(s) is the ith SH basis +// function, f(s) and g(s) are SH functions (sum_i(y_i(s)*c_i)). The order O +// determines the lengths of the arrays, where there should always be O^2 +// coefficients. In general the product of two SH functions of order O generates +// and SH function of order 2*O - 1, but we truncate the result. This means +// that the product commutes (f*g == g*f) but doesn't associate +// (f*(g*h) != (f*g)*h. +// +// Parameters: +// pOut +// Output SH coefficients - basis function Ylm is stored at l*l + m+l +// This is the pointer that is returned. +// pF +// Input SH coeffs for first function. +// pG +// Second set of input SH coeffs. +// +//============================================================================ + +FLOAT* WINAPI D3DXSHMultiply2( FLOAT *pOut, CONST FLOAT *pF, CONST FLOAT *pG); +FLOAT* WINAPI D3DXSHMultiply3( FLOAT *pOut, CONST FLOAT *pF, CONST FLOAT *pG); +FLOAT* WINAPI D3DXSHMultiply4( FLOAT *pOut, CONST FLOAT *pF, CONST FLOAT *pG); +FLOAT* WINAPI D3DXSHMultiply5( FLOAT *pOut, CONST FLOAT *pF, CONST FLOAT *pG); +FLOAT* WINAPI D3DXSHMultiply6( FLOAT *pOut, CONST FLOAT *pF, CONST FLOAT *pG); + + +//============================================================================ +// +// Basic Spherical Harmonic lighting routines +// +//============================================================================ + +//============================================================================ +// +// D3DXSHEvalDirectionalLight: +// -------------------- +// Evaluates a directional light and returns spectral SH data. The output +// vector is computed so that if the intensity of R/G/B is unit the resulting +// exit radiance of a point directly under the light on a diffuse object with +// an albedo of 1 would be 1.0. This will compute 3 spectral samples, pROut +// has to be specified, while pGout and pBout are optional. +// +// Parameters: +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pDir +// Direction light is coming from (assumed to be normalized.) +// RIntensity +// Red intensity of light. +// GIntensity +// Green intensity of light. +// BIntensity +// Blue intensity of light. +// pROut +// Output SH vector for Red. +// pGOut +// Output SH vector for Green (optional.) +// pBOut +// Output SH vector for Blue (optional.) +// +//============================================================================ + +HRESULT WINAPI D3DXSHEvalDirectionalLight + ( UINT Order, CONST D3DXVECTOR3 *pDir, + FLOAT RIntensity, FLOAT GIntensity, FLOAT BIntensity, + FLOAT *pROut, FLOAT *pGOut, FLOAT *pBOut ); + +//============================================================================ +// +// D3DXSHEvalSphericalLight: +// -------------------- +// Evaluates a spherical light and returns spectral SH data. There is no +// normalization of the intensity of the light like there is for directional +// lights, care has to be taken when specifiying the intensities. This will +// compute 3 spectral samples, pROut has to be specified, while pGout and +// pBout are optional. +// +// Parameters: +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pPos +// Position of light - reciever is assumed to be at the origin. +// Radius +// Radius of the spherical light source. +// RIntensity +// Red intensity of light. +// GIntensity +// Green intensity of light. +// BIntensity +// Blue intensity of light. +// pROut +// Output SH vector for Red. +// pGOut +// Output SH vector for Green (optional.) +// pBOut +// Output SH vector for Blue (optional.) +// +//============================================================================ + +HRESULT WINAPI D3DXSHEvalSphericalLight + ( UINT Order, CONST D3DXVECTOR3 *pPos, FLOAT Radius, + FLOAT RIntensity, FLOAT GIntensity, FLOAT BIntensity, + FLOAT *pROut, FLOAT *pGOut, FLOAT *pBOut ); + +//============================================================================ +// +// D3DXSHEvalConeLight: +// -------------------- +// Evaluates a light that is a cone of constant intensity and returns spectral +// SH data. The output vector is computed so that if the intensity of R/G/B is +// unit the resulting exit radiance of a point directly under the light oriented +// in the cone direction on a diffuse object with an albedo of 1 would be 1.0. +// This will compute 3 spectral samples, pROut has to be specified, while pGout +// and pBout are optional. +// +// Parameters: +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pDir +// Direction light is coming from (assumed to be normalized.) +// Radius +// Radius of cone in radians. +// RIntensity +// Red intensity of light. +// GIntensity +// Green intensity of light. +// BIntensity +// Blue intensity of light. +// pROut +// Output SH vector for Red. +// pGOut +// Output SH vector for Green (optional.) +// pBOut +// Output SH vector for Blue (optional.) +// +//============================================================================ + +HRESULT WINAPI D3DXSHEvalConeLight + ( UINT Order, CONST D3DXVECTOR3 *pDir, FLOAT Radius, + FLOAT RIntensity, FLOAT GIntensity, FLOAT BIntensity, + FLOAT *pROut, FLOAT *pGOut, FLOAT *pBOut ); + +//============================================================================ +// +// D3DXSHEvalHemisphereLight: +// -------------------- +// Evaluates a light that is a linear interpolant between two colors over the +// sphere. The interpolant is linear along the axis of the two points, not +// over the surface of the sphere (ie: if the axis was (0,0,1) it is linear in +// Z, not in the azimuthal angle.) The resulting spherical lighting function +// is normalized so that a point on a perfectly diffuse surface with no +// shadowing and a normal pointed in the direction pDir would result in exit +// radiance with a value of 1 if the top color was white and the bottom color +// was black. This is a very simple model where Top represents the intensity +// of the "sky" and Bottom represents the intensity of the "ground". +// +// Parameters: +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pDir +// Axis of the hemisphere. +// Top +// Color of the upper hemisphere. +// Bottom +// Color of the lower hemisphere. +// pROut +// Output SH vector for Red. +// pGOut +// Output SH vector for Green +// pBOut +// Output SH vector for Blue +// +//============================================================================ + +HRESULT WINAPI D3DXSHEvalHemisphereLight + ( UINT Order, CONST D3DXVECTOR3 *pDir, D3DXCOLOR Top, D3DXCOLOR Bottom, + FLOAT *pROut, FLOAT *pGOut, FLOAT *pBOut ); + +//============================================================================ +// +// Basic Spherical Harmonic projection routines +// +//============================================================================ + +//============================================================================ +// +// D3DXSHProjectCubeMap: +// -------------------- +// Projects a function represented on a cube map into spherical harmonics. +// +// Parameters: +// Order +// Order of the SH evaluation, generates Order^2 coefs, degree is Order-1 +// pCubeMap +// CubeMap that is going to be projected into spherical harmonics +// pROut +// Output SH vector for Red. +// pGOut +// Output SH vector for Green +// pBOut +// Output SH vector for Blue +// +//============================================================================ + +HRESULT WINAPI D3DXSHProjectCubeMap + ( UINT uOrder, LPDIRECT3DCUBETEXTURE9 pCubeMap, + FLOAT *pROut, FLOAT *pGOut, FLOAT *pBOut ); + + +#ifdef __cplusplus +} +#endif + + +#include "d3dx9math.inl" + +#if _MSC_VER >= 1200 +#pragma warning(pop) +#else +#pragma warning(default:4201) +#endif + +#endif // __D3DX9MATH_H__ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9math.inl b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9math.inl new file mode 100644 index 0000000000..a3652ed450 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9math.inl @@ -0,0 +1,2251 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Microsoft Corporation. All Rights Reserved. +// +// File: d3dx9math.inl +// Content: D3DX math inline functions +// +////////////////////////////////////////////////////////////////////////////// + +#ifndef __D3DX9MATH_INL__ +#define __D3DX9MATH_INL__ + +//=========================================================================== +// +// Inline Class Methods +// +//=========================================================================== + +#ifdef __cplusplus + +//-------------------------- +// Float16 +//-------------------------- + +D3DXINLINE +D3DXFLOAT16::D3DXFLOAT16( FLOAT f ) +{ + D3DXFloat32To16Array(this, &f, 1); +} + +D3DXINLINE +D3DXFLOAT16::D3DXFLOAT16( CONST D3DXFLOAT16& f ) +{ + value = f.value; +} + +// casting +D3DXINLINE +D3DXFLOAT16::operator FLOAT () +{ + FLOAT f; + D3DXFloat16To32Array(&f, this, 1); + return f; +} + +// binary operators +D3DXINLINE BOOL +D3DXFLOAT16::operator == ( CONST D3DXFLOAT16& f ) const +{ + return value == f.value; +} + +D3DXINLINE BOOL +D3DXFLOAT16::operator != ( CONST D3DXFLOAT16& f ) const +{ + return value != f.value; +} + + +//-------------------------- +// 2D Vector +//-------------------------- + +D3DXINLINE +D3DXVECTOR2::D3DXVECTOR2( CONST FLOAT *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + x = pf[0]; + y = pf[1]; +} + +D3DXINLINE +D3DXVECTOR2::D3DXVECTOR2( CONST D3DXFLOAT16 *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat16To32Array(&x, pf, 2); +} + +D3DXINLINE +D3DXVECTOR2::D3DXVECTOR2( FLOAT fx, FLOAT fy ) +{ + x = fx; + y = fy; +} + + +// casting +D3DXINLINE +D3DXVECTOR2::operator FLOAT* () +{ + return (FLOAT *) &x; +} + +D3DXINLINE +D3DXVECTOR2::operator CONST FLOAT* () const +{ + return (CONST FLOAT *) &x; +} + + +// assignment operators +D3DXINLINE D3DXVECTOR2& +D3DXVECTOR2::operator += ( CONST D3DXVECTOR2& v ) +{ + x += v.x; + y += v.y; + return *this; +} + +D3DXINLINE D3DXVECTOR2& +D3DXVECTOR2::operator -= ( CONST D3DXVECTOR2& v ) +{ + x -= v.x; + y -= v.y; + return *this; +} + +D3DXINLINE D3DXVECTOR2& +D3DXVECTOR2::operator *= ( FLOAT f ) +{ + x *= f; + y *= f; + return *this; +} + +D3DXINLINE D3DXVECTOR2& +D3DXVECTOR2::operator /= ( FLOAT f ) +{ + FLOAT fInv = 1.0f / f; + x *= fInv; + y *= fInv; + return *this; +} + + +// unary operators +D3DXINLINE D3DXVECTOR2 +D3DXVECTOR2::operator + () const +{ + return *this; +} + +D3DXINLINE D3DXVECTOR2 +D3DXVECTOR2::operator - () const +{ + return D3DXVECTOR2(-x, -y); +} + + +// binary operators +D3DXINLINE D3DXVECTOR2 +D3DXVECTOR2::operator + ( CONST D3DXVECTOR2& v ) const +{ + return D3DXVECTOR2(x + v.x, y + v.y); +} + +D3DXINLINE D3DXVECTOR2 +D3DXVECTOR2::operator - ( CONST D3DXVECTOR2& v ) const +{ + return D3DXVECTOR2(x - v.x, y - v.y); +} + +D3DXINLINE D3DXVECTOR2 +D3DXVECTOR2::operator * ( FLOAT f ) const +{ + return D3DXVECTOR2(x * f, y * f); +} + +D3DXINLINE D3DXVECTOR2 +D3DXVECTOR2::operator / ( FLOAT f ) const +{ + FLOAT fInv = 1.0f / f; + return D3DXVECTOR2(x * fInv, y * fInv); +} + +D3DXINLINE D3DXVECTOR2 +operator * ( FLOAT f, CONST D3DXVECTOR2& v ) +{ + return D3DXVECTOR2(f * v.x, f * v.y); +} + +D3DXINLINE BOOL +D3DXVECTOR2::operator == ( CONST D3DXVECTOR2& v ) const +{ + return x == v.x && y == v.y; +} + +D3DXINLINE BOOL +D3DXVECTOR2::operator != ( CONST D3DXVECTOR2& v ) const +{ + return x != v.x || y != v.y; +} + + + +//-------------------------- +// 2D Vector (16 bit) +//-------------------------- + +D3DXINLINE +D3DXVECTOR2_16F::D3DXVECTOR2_16F( CONST FLOAT *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat32To16Array(&x, pf, 2); +} + +D3DXINLINE +D3DXVECTOR2_16F::D3DXVECTOR2_16F( CONST D3DXFLOAT16 *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + *((DWORD *) &x) = *((DWORD *) &pf[0]); +} + +D3DXINLINE +D3DXVECTOR2_16F::D3DXVECTOR2_16F( CONST D3DXFLOAT16 &fx, CONST D3DXFLOAT16 &fy ) +{ + x = fx; + y = fy; +} + + +// casting +D3DXINLINE +D3DXVECTOR2_16F::operator D3DXFLOAT16* () +{ + return (D3DXFLOAT16*) &x; +} + +D3DXINLINE +D3DXVECTOR2_16F::operator CONST D3DXFLOAT16* () const +{ + return (CONST D3DXFLOAT16*) &x; +} + + +// binary operators +D3DXINLINE BOOL +D3DXVECTOR2_16F::operator == ( CONST D3DXVECTOR2_16F &v ) const +{ + return *((DWORD *) &x) == *((DWORD *) &v.x); +} + +D3DXINLINE BOOL +D3DXVECTOR2_16F::operator != ( CONST D3DXVECTOR2_16F &v ) const +{ + return *((DWORD *) &x) != *((DWORD *) &v.x); +} + + +//-------------------------- +// 3D Vector +//-------------------------- +D3DXINLINE +D3DXVECTOR3::D3DXVECTOR3( CONST FLOAT *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + x = pf[0]; + y = pf[1]; + z = pf[2]; +} + +D3DXINLINE +D3DXVECTOR3::D3DXVECTOR3( CONST D3DVECTOR& v ) +{ + x = v.x; + y = v.y; + z = v.z; +} + +D3DXINLINE +D3DXVECTOR3::D3DXVECTOR3( CONST D3DXFLOAT16 *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat16To32Array(&x, pf, 3); +} + +D3DXINLINE +D3DXVECTOR3::D3DXVECTOR3( FLOAT fx, FLOAT fy, FLOAT fz ) +{ + x = fx; + y = fy; + z = fz; +} + + +// casting +D3DXINLINE +D3DXVECTOR3::operator FLOAT* () +{ + return (FLOAT *) &x; +} + +D3DXINLINE +D3DXVECTOR3::operator CONST FLOAT* () const +{ + return (CONST FLOAT *) &x; +} + + +// assignment operators +D3DXINLINE D3DXVECTOR3& +D3DXVECTOR3::operator += ( CONST D3DXVECTOR3& v ) +{ + x += v.x; + y += v.y; + z += v.z; + return *this; +} + +D3DXINLINE D3DXVECTOR3& +D3DXVECTOR3::operator -= ( CONST D3DXVECTOR3& v ) +{ + x -= v.x; + y -= v.y; + z -= v.z; + return *this; +} + +D3DXINLINE D3DXVECTOR3& +D3DXVECTOR3::operator *= ( FLOAT f ) +{ + x *= f; + y *= f; + z *= f; + return *this; +} + +D3DXINLINE D3DXVECTOR3& +D3DXVECTOR3::operator /= ( FLOAT f ) +{ + FLOAT fInv = 1.0f / f; + x *= fInv; + y *= fInv; + z *= fInv; + return *this; +} + + +// unary operators +D3DXINLINE D3DXVECTOR3 +D3DXVECTOR3::operator + () const +{ + return *this; +} + +D3DXINLINE D3DXVECTOR3 +D3DXVECTOR3::operator - () const +{ + return D3DXVECTOR3(-x, -y, -z); +} + + +// binary operators +D3DXINLINE D3DXVECTOR3 +D3DXVECTOR3::operator + ( CONST D3DXVECTOR3& v ) const +{ + return D3DXVECTOR3(x + v.x, y + v.y, z + v.z); +} + +D3DXINLINE D3DXVECTOR3 +D3DXVECTOR3::operator - ( CONST D3DXVECTOR3& v ) const +{ + return D3DXVECTOR3(x - v.x, y - v.y, z - v.z); +} + +D3DXINLINE D3DXVECTOR3 +D3DXVECTOR3::operator * ( FLOAT f ) const +{ + return D3DXVECTOR3(x * f, y * f, z * f); +} + +D3DXINLINE D3DXVECTOR3 +D3DXVECTOR3::operator / ( FLOAT f ) const +{ + FLOAT fInv = 1.0f / f; + return D3DXVECTOR3(x * fInv, y * fInv, z * fInv); +} + + +D3DXINLINE D3DXVECTOR3 +operator * ( FLOAT f, CONST struct D3DXVECTOR3& v ) +{ + return D3DXVECTOR3(f * v.x, f * v.y, f * v.z); +} + + +D3DXINLINE BOOL +D3DXVECTOR3::operator == ( CONST D3DXVECTOR3& v ) const +{ + return x == v.x && y == v.y && z == v.z; +} + +D3DXINLINE BOOL +D3DXVECTOR3::operator != ( CONST D3DXVECTOR3& v ) const +{ + return x != v.x || y != v.y || z != v.z; +} + + + +//-------------------------- +// 3D Vector (16 bit) +//-------------------------- + +D3DXINLINE +D3DXVECTOR3_16F::D3DXVECTOR3_16F( CONST FLOAT *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat32To16Array(&x, pf, 3); +} + +D3DXINLINE +D3DXVECTOR3_16F::D3DXVECTOR3_16F( CONST D3DVECTOR& v ) +{ + D3DXFloat32To16Array(&x, &v.x, 1); + D3DXFloat32To16Array(&y, &v.y, 1); + D3DXFloat32To16Array(&z, &v.z, 1); +} + +D3DXINLINE +D3DXVECTOR3_16F::D3DXVECTOR3_16F( CONST D3DXFLOAT16 *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + *((DWORD *) &x) = *((DWORD *) &pf[0]); + *((WORD *) &z) = *((WORD *) &pf[2]); +} + +D3DXINLINE +D3DXVECTOR3_16F::D3DXVECTOR3_16F( CONST D3DXFLOAT16 &fx, CONST D3DXFLOAT16 &fy, CONST D3DXFLOAT16 &fz ) +{ + x = fx; + y = fy; + z = fz; +} + + +// casting +D3DXINLINE +D3DXVECTOR3_16F::operator D3DXFLOAT16* () +{ + return (D3DXFLOAT16*) &x; +} + +D3DXINLINE +D3DXVECTOR3_16F::operator CONST D3DXFLOAT16* () const +{ + return (CONST D3DXFLOAT16*) &x; +} + + +// binary operators +D3DXINLINE BOOL +D3DXVECTOR3_16F::operator == ( CONST D3DXVECTOR3_16F &v ) const +{ + return *((DWORD *) &x) == *((DWORD *) &v.x) && + *((WORD *) &z) == *((WORD *) &v.z); +} + +D3DXINLINE BOOL +D3DXVECTOR3_16F::operator != ( CONST D3DXVECTOR3_16F &v ) const +{ + return *((DWORD *) &x) != *((DWORD *) &v.x) || + *((WORD *) &z) != *((WORD *) &v.z); +} + + +//-------------------------- +// 4D Vector +//-------------------------- +D3DXINLINE +D3DXVECTOR4::D3DXVECTOR4( CONST FLOAT *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + x = pf[0]; + y = pf[1]; + z = pf[2]; + w = pf[3]; +} + +D3DXINLINE +D3DXVECTOR4::D3DXVECTOR4( CONST D3DXFLOAT16 *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat16To32Array(&x, pf, 4); +} + +D3DXINLINE +D3DXVECTOR4::D3DXVECTOR4( CONST D3DVECTOR& v, FLOAT f ) +{ + x = v.x; + y = v.y; + z = v.z; + w = f; +} + +D3DXINLINE +D3DXVECTOR4::D3DXVECTOR4( FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw ) +{ + x = fx; + y = fy; + z = fz; + w = fw; +} + + +// casting +D3DXINLINE +D3DXVECTOR4::operator FLOAT* () +{ + return (FLOAT *) &x; +} + +D3DXINLINE +D3DXVECTOR4::operator CONST FLOAT* () const +{ + return (CONST FLOAT *) &x; +} + + +// assignment operators +D3DXINLINE D3DXVECTOR4& +D3DXVECTOR4::operator += ( CONST D3DXVECTOR4& v ) +{ + x += v.x; + y += v.y; + z += v.z; + w += v.w; + return *this; +} + +D3DXINLINE D3DXVECTOR4& +D3DXVECTOR4::operator -= ( CONST D3DXVECTOR4& v ) +{ + x -= v.x; + y -= v.y; + z -= v.z; + w -= v.w; + return *this; +} + +D3DXINLINE D3DXVECTOR4& +D3DXVECTOR4::operator *= ( FLOAT f ) +{ + x *= f; + y *= f; + z *= f; + w *= f; + return *this; +} + +D3DXINLINE D3DXVECTOR4& +D3DXVECTOR4::operator /= ( FLOAT f ) +{ + FLOAT fInv = 1.0f / f; + x *= fInv; + y *= fInv; + z *= fInv; + w *= fInv; + return *this; +} + + +// unary operators +D3DXINLINE D3DXVECTOR4 +D3DXVECTOR4::operator + () const +{ + return *this; +} + +D3DXINLINE D3DXVECTOR4 +D3DXVECTOR4::operator - () const +{ + return D3DXVECTOR4(-x, -y, -z, -w); +} + + +// binary operators +D3DXINLINE D3DXVECTOR4 +D3DXVECTOR4::operator + ( CONST D3DXVECTOR4& v ) const +{ + return D3DXVECTOR4(x + v.x, y + v.y, z + v.z, w + v.w); +} + +D3DXINLINE D3DXVECTOR4 +D3DXVECTOR4::operator - ( CONST D3DXVECTOR4& v ) const +{ + return D3DXVECTOR4(x - v.x, y - v.y, z - v.z, w - v.w); +} + +D3DXINLINE D3DXVECTOR4 +D3DXVECTOR4::operator * ( FLOAT f ) const +{ + return D3DXVECTOR4(x * f, y * f, z * f, w * f); +} + +D3DXINLINE D3DXVECTOR4 +D3DXVECTOR4::operator / ( FLOAT f ) const +{ + FLOAT fInv = 1.0f / f; + return D3DXVECTOR4(x * fInv, y * fInv, z * fInv, w * fInv); +} + +D3DXINLINE D3DXVECTOR4 +operator * ( FLOAT f, CONST D3DXVECTOR4& v ) +{ + return D3DXVECTOR4(f * v.x, f * v.y, f * v.z, f * v.w); +} + + +D3DXINLINE BOOL +D3DXVECTOR4::operator == ( CONST D3DXVECTOR4& v ) const +{ + return x == v.x && y == v.y && z == v.z && w == v.w; +} + +D3DXINLINE BOOL +D3DXVECTOR4::operator != ( CONST D3DXVECTOR4& v ) const +{ + return x != v.x || y != v.y || z != v.z || w != v.w; +} + + + +//-------------------------- +// 4D Vector (16 bit) +//-------------------------- + +D3DXINLINE +D3DXVECTOR4_16F::D3DXVECTOR4_16F( CONST FLOAT *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat32To16Array(&x, pf, 4); +} + +D3DXINLINE +D3DXVECTOR4_16F::D3DXVECTOR4_16F( CONST D3DXFLOAT16 *pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + *((DWORD *) &x) = *((DWORD *) &pf[0]); + *((DWORD *) &z) = *((DWORD *) &pf[2]); +} + +D3DXINLINE +D3DXVECTOR4_16F::D3DXVECTOR4_16F( CONST D3DXVECTOR3_16F& v, CONST D3DXFLOAT16& f ) +{ + x = v.x; + y = v.y; + z = v.z; + w = f; +} + +D3DXINLINE +D3DXVECTOR4_16F::D3DXVECTOR4_16F( CONST D3DXFLOAT16 &fx, CONST D3DXFLOAT16 &fy, CONST D3DXFLOAT16 &fz, CONST D3DXFLOAT16 &fw ) +{ + x = fx; + y = fy; + z = fz; + w = fw; +} + + +// casting +D3DXINLINE +D3DXVECTOR4_16F::operator D3DXFLOAT16* () +{ + return (D3DXFLOAT16*) &x; +} + +D3DXINLINE +D3DXVECTOR4_16F::operator CONST D3DXFLOAT16* () const +{ + return (CONST D3DXFLOAT16*) &x; +} + + +// binary operators +D3DXINLINE BOOL +D3DXVECTOR4_16F::operator == ( CONST D3DXVECTOR4_16F &v ) const +{ + return *((DWORD *) &x) == *((DWORD *) &v.x) && + *((DWORD *) &z) == *((DWORD *) &v.z); +} + +D3DXINLINE BOOL +D3DXVECTOR4_16F::operator != ( CONST D3DXVECTOR4_16F &v ) const +{ + return *((DWORD *) &x) != *((DWORD *) &v.x) || + *((DWORD *) &z) != *((DWORD *) &v.z); +} + + +//-------------------------- +// Matrix +//-------------------------- +D3DXINLINE +D3DXMATRIX::D3DXMATRIX( CONST FLOAT* pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + memcpy(&_11, pf, sizeof(D3DXMATRIX)); +} + +D3DXINLINE +D3DXMATRIX::D3DXMATRIX( CONST D3DMATRIX& mat ) +{ + memcpy(&_11, &mat, sizeof(D3DXMATRIX)); +} + +D3DXINLINE +D3DXMATRIX::D3DXMATRIX( CONST D3DXFLOAT16* pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat16To32Array(&_11, pf, 16); +} + +D3DXINLINE +D3DXMATRIX::D3DXMATRIX( FLOAT f11, FLOAT f12, FLOAT f13, FLOAT f14, + FLOAT f21, FLOAT f22, FLOAT f23, FLOAT f24, + FLOAT f31, FLOAT f32, FLOAT f33, FLOAT f34, + FLOAT f41, FLOAT f42, FLOAT f43, FLOAT f44 ) +{ + _11 = f11; _12 = f12; _13 = f13; _14 = f14; + _21 = f21; _22 = f22; _23 = f23; _24 = f24; + _31 = f31; _32 = f32; _33 = f33; _34 = f34; + _41 = f41; _42 = f42; _43 = f43; _44 = f44; +} + + + +// access grants +D3DXINLINE FLOAT& +D3DXMATRIX::operator () ( UINT iRow, UINT iCol ) +{ + return m[iRow][iCol]; +} + +D3DXINLINE FLOAT +D3DXMATRIX::operator () ( UINT iRow, UINT iCol ) const +{ + return m[iRow][iCol]; +} + + +// casting operators +D3DXINLINE +D3DXMATRIX::operator FLOAT* () +{ + return (FLOAT *) &_11; +} + +D3DXINLINE +D3DXMATRIX::operator CONST FLOAT* () const +{ + return (CONST FLOAT *) &_11; +} + + +// assignment operators +D3DXINLINE D3DXMATRIX& +D3DXMATRIX::operator *= ( CONST D3DXMATRIX& mat ) +{ + D3DXMatrixMultiply(this, this, &mat); + return *this; +} + +D3DXINLINE D3DXMATRIX& +D3DXMATRIX::operator += ( CONST D3DXMATRIX& mat ) +{ + _11 += mat._11; _12 += mat._12; _13 += mat._13; _14 += mat._14; + _21 += mat._21; _22 += mat._22; _23 += mat._23; _24 += mat._24; + _31 += mat._31; _32 += mat._32; _33 += mat._33; _34 += mat._34; + _41 += mat._41; _42 += mat._42; _43 += mat._43; _44 += mat._44; + return *this; +} + +D3DXINLINE D3DXMATRIX& +D3DXMATRIX::operator -= ( CONST D3DXMATRIX& mat ) +{ + _11 -= mat._11; _12 -= mat._12; _13 -= mat._13; _14 -= mat._14; + _21 -= mat._21; _22 -= mat._22; _23 -= mat._23; _24 -= mat._24; + _31 -= mat._31; _32 -= mat._32; _33 -= mat._33; _34 -= mat._34; + _41 -= mat._41; _42 -= mat._42; _43 -= mat._43; _44 -= mat._44; + return *this; +} + +D3DXINLINE D3DXMATRIX& +D3DXMATRIX::operator *= ( FLOAT f ) +{ + _11 *= f; _12 *= f; _13 *= f; _14 *= f; + _21 *= f; _22 *= f; _23 *= f; _24 *= f; + _31 *= f; _32 *= f; _33 *= f; _34 *= f; + _41 *= f; _42 *= f; _43 *= f; _44 *= f; + return *this; +} + +D3DXINLINE D3DXMATRIX& +D3DXMATRIX::operator /= ( FLOAT f ) +{ + FLOAT fInv = 1.0f / f; + _11 *= fInv; _12 *= fInv; _13 *= fInv; _14 *= fInv; + _21 *= fInv; _22 *= fInv; _23 *= fInv; _24 *= fInv; + _31 *= fInv; _32 *= fInv; _33 *= fInv; _34 *= fInv; + _41 *= fInv; _42 *= fInv; _43 *= fInv; _44 *= fInv; + return *this; +} + + +// unary operators +D3DXINLINE D3DXMATRIX +D3DXMATRIX::operator + () const +{ + return *this; +} + +D3DXINLINE D3DXMATRIX +D3DXMATRIX::operator - () const +{ + return D3DXMATRIX(-_11, -_12, -_13, -_14, + -_21, -_22, -_23, -_24, + -_31, -_32, -_33, -_34, + -_41, -_42, -_43, -_44); +} + + +// binary operators +D3DXINLINE D3DXMATRIX +D3DXMATRIX::operator * ( CONST D3DXMATRIX& mat ) const +{ + D3DXMATRIX matT; + D3DXMatrixMultiply(&matT, this, &mat); + return matT; +} + +D3DXINLINE D3DXMATRIX +D3DXMATRIX::operator + ( CONST D3DXMATRIX& mat ) const +{ + return D3DXMATRIX(_11 + mat._11, _12 + mat._12, _13 + mat._13, _14 + mat._14, + _21 + mat._21, _22 + mat._22, _23 + mat._23, _24 + mat._24, + _31 + mat._31, _32 + mat._32, _33 + mat._33, _34 + mat._34, + _41 + mat._41, _42 + mat._42, _43 + mat._43, _44 + mat._44); +} + +D3DXINLINE D3DXMATRIX +D3DXMATRIX::operator - ( CONST D3DXMATRIX& mat ) const +{ + return D3DXMATRIX(_11 - mat._11, _12 - mat._12, _13 - mat._13, _14 - mat._14, + _21 - mat._21, _22 - mat._22, _23 - mat._23, _24 - mat._24, + _31 - mat._31, _32 - mat._32, _33 - mat._33, _34 - mat._34, + _41 - mat._41, _42 - mat._42, _43 - mat._43, _44 - mat._44); +} + +D3DXINLINE D3DXMATRIX +D3DXMATRIX::operator * ( FLOAT f ) const +{ + return D3DXMATRIX(_11 * f, _12 * f, _13 * f, _14 * f, + _21 * f, _22 * f, _23 * f, _24 * f, + _31 * f, _32 * f, _33 * f, _34 * f, + _41 * f, _42 * f, _43 * f, _44 * f); +} + +D3DXINLINE D3DXMATRIX +D3DXMATRIX::operator / ( FLOAT f ) const +{ + FLOAT fInv = 1.0f / f; + return D3DXMATRIX(_11 * fInv, _12 * fInv, _13 * fInv, _14 * fInv, + _21 * fInv, _22 * fInv, _23 * fInv, _24 * fInv, + _31 * fInv, _32 * fInv, _33 * fInv, _34 * fInv, + _41 * fInv, _42 * fInv, _43 * fInv, _44 * fInv); +} + + +D3DXINLINE D3DXMATRIX +operator * ( FLOAT f, CONST D3DXMATRIX& mat ) +{ + return D3DXMATRIX(f * mat._11, f * mat._12, f * mat._13, f * mat._14, + f * mat._21, f * mat._22, f * mat._23, f * mat._24, + f * mat._31, f * mat._32, f * mat._33, f * mat._34, + f * mat._41, f * mat._42, f * mat._43, f * mat._44); +} + + +D3DXINLINE BOOL +D3DXMATRIX::operator == ( CONST D3DXMATRIX& mat ) const +{ + return 0 == memcmp(this, &mat, sizeof(D3DXMATRIX)); +} + +D3DXINLINE BOOL +D3DXMATRIX::operator != ( CONST D3DXMATRIX& mat ) const +{ + return 0 != memcmp(this, &mat, sizeof(D3DXMATRIX)); +} + + + +//-------------------------- +// Aligned Matrices +//-------------------------- + +D3DXINLINE +_D3DXMATRIXA16::_D3DXMATRIXA16( CONST FLOAT* f ) : + D3DXMATRIX( f ) +{ +} + +D3DXINLINE +_D3DXMATRIXA16::_D3DXMATRIXA16( CONST D3DMATRIX& m ) : + D3DXMATRIX( m ) +{ +} + +D3DXINLINE +_D3DXMATRIXA16::_D3DXMATRIXA16( CONST D3DXFLOAT16* f ) : + D3DXMATRIX( f ) +{ +} + +D3DXINLINE +_D3DXMATRIXA16::_D3DXMATRIXA16( FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14, + FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24, + FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34, + FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44 ) : + D3DXMATRIX(_11, _12, _13, _14, + _21, _22, _23, _24, + _31, _32, _33, _34, + _41, _42, _43, _44) +{ +} + +#ifndef SIZE_MAX +#define SIZE_MAX ((SIZE_T)-1) +#endif + +D3DXINLINE void* +_D3DXMATRIXA16::operator new( size_t s ) +{ + if (s > (SIZE_MAX-16)) + return NULL; + LPBYTE p = ::new BYTE[s + 16]; + if (p) + { + BYTE offset = (BYTE)(16 - ((UINT_PTR)p & 15)); + p += offset; + p[-1] = offset; + } + return p; +} + +D3DXINLINE void* +_D3DXMATRIXA16::operator new[]( size_t s ) +{ + if (s > (SIZE_MAX-16)) + return NULL; + LPBYTE p = ::new BYTE[s + 16]; + if (p) + { + BYTE offset = (BYTE)(16 - ((UINT_PTR)p & 15)); + p += offset; + p[-1] = offset; + } + return p; +} + +D3DXINLINE void +_D3DXMATRIXA16::operator delete(void* p) +{ + if(p) + { + BYTE* pb = static_cast(p); + pb -= pb[-1]; + ::delete [] pb; + } +} + +D3DXINLINE void +_D3DXMATRIXA16::operator delete[](void* p) +{ + if(p) + { + BYTE* pb = static_cast(p); + pb -= pb[-1]; + ::delete [] pb; + } +} + +D3DXINLINE _D3DXMATRIXA16& +_D3DXMATRIXA16::operator=(CONST D3DXMATRIX& rhs) +{ + memcpy(&_11, &rhs, sizeof(D3DXMATRIX)); + return *this; +} + + +//-------------------------- +// Quaternion +//-------------------------- + +D3DXINLINE +D3DXQUATERNION::D3DXQUATERNION( CONST FLOAT* pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + x = pf[0]; + y = pf[1]; + z = pf[2]; + w = pf[3]; +} + +D3DXINLINE +D3DXQUATERNION::D3DXQUATERNION( CONST D3DXFLOAT16* pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat16To32Array(&x, pf, 4); +} + +D3DXINLINE +D3DXQUATERNION::D3DXQUATERNION( FLOAT fx, FLOAT fy, FLOAT fz, FLOAT fw ) +{ + x = fx; + y = fy; + z = fz; + w = fw; +} + + +// casting +D3DXINLINE +D3DXQUATERNION::operator FLOAT* () +{ + return (FLOAT *) &x; +} + +D3DXINLINE +D3DXQUATERNION::operator CONST FLOAT* () const +{ + return (CONST FLOAT *) &x; +} + + +// assignment operators +D3DXINLINE D3DXQUATERNION& +D3DXQUATERNION::operator += ( CONST D3DXQUATERNION& q ) +{ + x += q.x; + y += q.y; + z += q.z; + w += q.w; + return *this; +} + +D3DXINLINE D3DXQUATERNION& +D3DXQUATERNION::operator -= ( CONST D3DXQUATERNION& q ) +{ + x -= q.x; + y -= q.y; + z -= q.z; + w -= q.w; + return *this; +} + +D3DXINLINE D3DXQUATERNION& +D3DXQUATERNION::operator *= ( CONST D3DXQUATERNION& q ) +{ + D3DXQuaternionMultiply(this, this, &q); + return *this; +} + +D3DXINLINE D3DXQUATERNION& +D3DXQUATERNION::operator *= ( FLOAT f ) +{ + x *= f; + y *= f; + z *= f; + w *= f; + return *this; +} + +D3DXINLINE D3DXQUATERNION& +D3DXQUATERNION::operator /= ( FLOAT f ) +{ + FLOAT fInv = 1.0f / f; + x *= fInv; + y *= fInv; + z *= fInv; + w *= fInv; + return *this; +} + + +// unary operators +D3DXINLINE D3DXQUATERNION +D3DXQUATERNION::operator + () const +{ + return *this; +} + +D3DXINLINE D3DXQUATERNION +D3DXQUATERNION::operator - () const +{ + return D3DXQUATERNION(-x, -y, -z, -w); +} + + +// binary operators +D3DXINLINE D3DXQUATERNION +D3DXQUATERNION::operator + ( CONST D3DXQUATERNION& q ) const +{ + return D3DXQUATERNION(x + q.x, y + q.y, z + q.z, w + q.w); +} + +D3DXINLINE D3DXQUATERNION +D3DXQUATERNION::operator - ( CONST D3DXQUATERNION& q ) const +{ + return D3DXQUATERNION(x - q.x, y - q.y, z - q.z, w - q.w); +} + +D3DXINLINE D3DXQUATERNION +D3DXQUATERNION::operator * ( CONST D3DXQUATERNION& q ) const +{ + D3DXQUATERNION qT; + D3DXQuaternionMultiply(&qT, this, &q); + return qT; +} + +D3DXINLINE D3DXQUATERNION +D3DXQUATERNION::operator * ( FLOAT f ) const +{ + return D3DXQUATERNION(x * f, y * f, z * f, w * f); +} + +D3DXINLINE D3DXQUATERNION +D3DXQUATERNION::operator / ( FLOAT f ) const +{ + FLOAT fInv = 1.0f / f; + return D3DXQUATERNION(x * fInv, y * fInv, z * fInv, w * fInv); +} + + +D3DXINLINE D3DXQUATERNION +operator * (FLOAT f, CONST D3DXQUATERNION& q ) +{ + return D3DXQUATERNION(f * q.x, f * q.y, f * q.z, f * q.w); +} + + +D3DXINLINE BOOL +D3DXQUATERNION::operator == ( CONST D3DXQUATERNION& q ) const +{ + return x == q.x && y == q.y && z == q.z && w == q.w; +} + +D3DXINLINE BOOL +D3DXQUATERNION::operator != ( CONST D3DXQUATERNION& q ) const +{ + return x != q.x || y != q.y || z != q.z || w != q.w; +} + + + +//-------------------------- +// Plane +//-------------------------- + +D3DXINLINE +D3DXPLANE::D3DXPLANE( CONST FLOAT* pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + a = pf[0]; + b = pf[1]; + c = pf[2]; + d = pf[3]; +} + +D3DXINLINE +D3DXPLANE::D3DXPLANE( CONST D3DXFLOAT16* pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat16To32Array(&a, pf, 4); +} + +D3DXINLINE +D3DXPLANE::D3DXPLANE( FLOAT fa, FLOAT fb, FLOAT fc, FLOAT fd ) +{ + a = fa; + b = fb; + c = fc; + d = fd; +} + + +// casting +D3DXINLINE +D3DXPLANE::operator FLOAT* () +{ + return (FLOAT *) &a; +} + +D3DXINLINE +D3DXPLANE::operator CONST FLOAT* () const +{ + return (CONST FLOAT *) &a; +} + + +// assignment operators +D3DXINLINE D3DXPLANE& +D3DXPLANE::operator *= ( FLOAT f ) +{ + a *= f; + b *= f; + c *= f; + d *= f; + return *this; +} + +D3DXINLINE D3DXPLANE& +D3DXPLANE::operator /= ( FLOAT f ) +{ + FLOAT fInv = 1.0f / f; + a *= fInv; + b *= fInv; + c *= fInv; + d *= fInv; + return *this; +} + + +// unary operators +D3DXINLINE D3DXPLANE +D3DXPLANE::operator + () const +{ + return *this; +} + +D3DXINLINE D3DXPLANE +D3DXPLANE::operator - () const +{ + return D3DXPLANE(-a, -b, -c, -d); +} + + +// binary operators +D3DXINLINE D3DXPLANE +D3DXPLANE::operator * ( FLOAT f ) const +{ + return D3DXPLANE(a * f, b * f, c * f, d * f); +} + +D3DXINLINE D3DXPLANE +D3DXPLANE::operator / ( FLOAT f ) const +{ + FLOAT fInv = 1.0f / f; + return D3DXPLANE(a * fInv, b * fInv, c * fInv, d * fInv); +} + +D3DXINLINE D3DXPLANE +operator * (FLOAT f, CONST D3DXPLANE& p ) +{ + return D3DXPLANE(f * p.a, f * p.b, f * p.c, f * p.d); +} + +D3DXINLINE BOOL +D3DXPLANE::operator == ( CONST D3DXPLANE& p ) const +{ + return a == p.a && b == p.b && c == p.c && d == p.d; +} + +D3DXINLINE BOOL +D3DXPLANE::operator != ( CONST D3DXPLANE& p ) const +{ + return a != p.a || b != p.b || c != p.c || d != p.d; +} + + + + +//-------------------------- +// Color +//-------------------------- + +D3DXINLINE +D3DXCOLOR::D3DXCOLOR( DWORD dw ) +{ + CONST FLOAT f = 1.0f / 255.0f; + r = f * (FLOAT) (unsigned char) (dw >> 16); + g = f * (FLOAT) (unsigned char) (dw >> 8); + b = f * (FLOAT) (unsigned char) (dw >> 0); + a = f * (FLOAT) (unsigned char) (dw >> 24); +} + +D3DXINLINE +D3DXCOLOR::D3DXCOLOR( CONST FLOAT* pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + r = pf[0]; + g = pf[1]; + b = pf[2]; + a = pf[3]; +} + +D3DXINLINE +D3DXCOLOR::D3DXCOLOR( CONST D3DXFLOAT16* pf ) +{ +#ifdef D3DX_DEBUG + if(!pf) + return; +#endif + + D3DXFloat16To32Array(&r, pf, 4); +} + +D3DXINLINE +D3DXCOLOR::D3DXCOLOR( CONST D3DCOLORVALUE& c ) +{ + r = c.r; + g = c.g; + b = c.b; + a = c.a; +} + +D3DXINLINE +D3DXCOLOR::D3DXCOLOR( FLOAT fr, FLOAT fg, FLOAT fb, FLOAT fa ) +{ + r = fr; + g = fg; + b = fb; + a = fa; +} + + +// casting +D3DXINLINE +D3DXCOLOR::operator DWORD () const +{ + DWORD dwR = r >= 1.0f ? 0xff : r <= 0.0f ? 0x00 : (DWORD) (r * 255.0f + 0.5f); + DWORD dwG = g >= 1.0f ? 0xff : g <= 0.0f ? 0x00 : (DWORD) (g * 255.0f + 0.5f); + DWORD dwB = b >= 1.0f ? 0xff : b <= 0.0f ? 0x00 : (DWORD) (b * 255.0f + 0.5f); + DWORD dwA = a >= 1.0f ? 0xff : a <= 0.0f ? 0x00 : (DWORD) (a * 255.0f + 0.5f); + + return (dwA << 24) | (dwR << 16) | (dwG << 8) | dwB; +} + + +D3DXINLINE +D3DXCOLOR::operator FLOAT * () +{ + return (FLOAT *) &r; +} + +D3DXINLINE +D3DXCOLOR::operator CONST FLOAT * () const +{ + return (CONST FLOAT *) &r; +} + + +D3DXINLINE +D3DXCOLOR::operator D3DCOLORVALUE * () +{ + return (D3DCOLORVALUE *) &r; +} + +D3DXINLINE +D3DXCOLOR::operator CONST D3DCOLORVALUE * () const +{ + return (CONST D3DCOLORVALUE *) &r; +} + + +D3DXINLINE +D3DXCOLOR::operator D3DCOLORVALUE& () +{ + return *((D3DCOLORVALUE *) &r); +} + +D3DXINLINE +D3DXCOLOR::operator CONST D3DCOLORVALUE& () const +{ + return *((CONST D3DCOLORVALUE *) &r); +} + + +// assignment operators +D3DXINLINE D3DXCOLOR& +D3DXCOLOR::operator += ( CONST D3DXCOLOR& c ) +{ + r += c.r; + g += c.g; + b += c.b; + a += c.a; + return *this; +} + +D3DXINLINE D3DXCOLOR& +D3DXCOLOR::operator -= ( CONST D3DXCOLOR& c ) +{ + r -= c.r; + g -= c.g; + b -= c.b; + a -= c.a; + return *this; +} + +D3DXINLINE D3DXCOLOR& +D3DXCOLOR::operator *= ( FLOAT f ) +{ + r *= f; + g *= f; + b *= f; + a *= f; + return *this; +} + +D3DXINLINE D3DXCOLOR& +D3DXCOLOR::operator /= ( FLOAT f ) +{ + FLOAT fInv = 1.0f / f; + r *= fInv; + g *= fInv; + b *= fInv; + a *= fInv; + return *this; +} + + +// unary operators +D3DXINLINE D3DXCOLOR +D3DXCOLOR::operator + () const +{ + return *this; +} + +D3DXINLINE D3DXCOLOR +D3DXCOLOR::operator - () const +{ + return D3DXCOLOR(-r, -g, -b, -a); +} + + +// binary operators +D3DXINLINE D3DXCOLOR +D3DXCOLOR::operator + ( CONST D3DXCOLOR& c ) const +{ + return D3DXCOLOR(r + c.r, g + c.g, b + c.b, a + c.a); +} + +D3DXINLINE D3DXCOLOR +D3DXCOLOR::operator - ( CONST D3DXCOLOR& c ) const +{ + return D3DXCOLOR(r - c.r, g - c.g, b - c.b, a - c.a); +} + +D3DXINLINE D3DXCOLOR +D3DXCOLOR::operator * ( FLOAT f ) const +{ + return D3DXCOLOR(r * f, g * f, b * f, a * f); +} + +D3DXINLINE D3DXCOLOR +D3DXCOLOR::operator / ( FLOAT f ) const +{ + FLOAT fInv = 1.0f / f; + return D3DXCOLOR(r * fInv, g * fInv, b * fInv, a * fInv); +} + + +D3DXINLINE D3DXCOLOR +operator * (FLOAT f, CONST D3DXCOLOR& c ) +{ + return D3DXCOLOR(f * c.r, f * c.g, f * c.b, f * c.a); +} + + +D3DXINLINE BOOL +D3DXCOLOR::operator == ( CONST D3DXCOLOR& c ) const +{ + return r == c.r && g == c.g && b == c.b && a == c.a; +} + +D3DXINLINE BOOL +D3DXCOLOR::operator != ( CONST D3DXCOLOR& c ) const +{ + return r != c.r || g != c.g || b != c.b || a != c.a; +} + + +#endif //__cplusplus + + + +//=========================================================================== +// +// Inline functions +// +//=========================================================================== + + +//-------------------------- +// 2D Vector +//-------------------------- + +D3DXINLINE FLOAT D3DXVec2Length + ( CONST D3DXVECTOR2 *pV ) +{ +#ifdef D3DX_DEBUG + if(!pV) + return 0.0f; +#endif + +#ifdef __cplusplus + return sqrtf(pV->x * pV->x + pV->y * pV->y); +#else + return (FLOAT) sqrt(pV->x * pV->x + pV->y * pV->y); +#endif +} + +D3DXINLINE FLOAT D3DXVec2LengthSq + ( CONST D3DXVECTOR2 *pV ) +{ +#ifdef D3DX_DEBUG + if(!pV) + return 0.0f; +#endif + + return pV->x * pV->x + pV->y * pV->y; +} + +D3DXINLINE FLOAT D3DXVec2Dot + ( CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pV1 || !pV2) + return 0.0f; +#endif + + return pV1->x * pV2->x + pV1->y * pV2->y; +} + +D3DXINLINE FLOAT D3DXVec2CCW + ( CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pV1 || !pV2) + return 0.0f; +#endif + + return pV1->x * pV2->y - pV1->y * pV2->x; +} + +D3DXINLINE D3DXVECTOR2* D3DXVec2Add + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x + pV2->x; + pOut->y = pV1->y + pV2->y; + return pOut; +} + +D3DXINLINE D3DXVECTOR2* D3DXVec2Subtract + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x - pV2->x; + pOut->y = pV1->y - pV2->y; + return pOut; +} + +D3DXINLINE D3DXVECTOR2* D3DXVec2Minimize + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x < pV2->x ? pV1->x : pV2->x; + pOut->y = pV1->y < pV2->y ? pV1->y : pV2->y; + return pOut; +} + +D3DXINLINE D3DXVECTOR2* D3DXVec2Maximize + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x > pV2->x ? pV1->x : pV2->x; + pOut->y = pV1->y > pV2->y ? pV1->y : pV2->y; + return pOut; +} + +D3DXINLINE D3DXVECTOR2* D3DXVec2Scale + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV, FLOAT s ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV) + return NULL; +#endif + + pOut->x = pV->x * s; + pOut->y = pV->y * s; + return pOut; +} + +D3DXINLINE D3DXVECTOR2* D3DXVec2Lerp + ( D3DXVECTOR2 *pOut, CONST D3DXVECTOR2 *pV1, CONST D3DXVECTOR2 *pV2, + FLOAT s ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x + s * (pV2->x - pV1->x); + pOut->y = pV1->y + s * (pV2->y - pV1->y); + return pOut; +} + + +//-------------------------- +// 3D Vector +//-------------------------- + +D3DXINLINE FLOAT D3DXVec3Length + ( CONST D3DXVECTOR3 *pV ) +{ +#ifdef D3DX_DEBUG + if(!pV) + return 0.0f; +#endif + +#ifdef __cplusplus + return sqrtf(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z); +#else + return (FLOAT) sqrt(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z); +#endif +} + +D3DXINLINE FLOAT D3DXVec3LengthSq + ( CONST D3DXVECTOR3 *pV ) +{ +#ifdef D3DX_DEBUG + if(!pV) + return 0.0f; +#endif + + return pV->x * pV->x + pV->y * pV->y + pV->z * pV->z; +} + +D3DXINLINE FLOAT D3DXVec3Dot + ( CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pV1 || !pV2) + return 0.0f; +#endif + + return pV1->x * pV2->x + pV1->y * pV2->y + pV1->z * pV2->z; +} + +D3DXINLINE D3DXVECTOR3* D3DXVec3Cross + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ) +{ + D3DXVECTOR3 v; + +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + v.x = pV1->y * pV2->z - pV1->z * pV2->y; + v.y = pV1->z * pV2->x - pV1->x * pV2->z; + v.z = pV1->x * pV2->y - pV1->y * pV2->x; + + *pOut = v; + return pOut; +} + +D3DXINLINE D3DXVECTOR3* D3DXVec3Add + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x + pV2->x; + pOut->y = pV1->y + pV2->y; + pOut->z = pV1->z + pV2->z; + return pOut; +} + +D3DXINLINE D3DXVECTOR3* D3DXVec3Subtract + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x - pV2->x; + pOut->y = pV1->y - pV2->y; + pOut->z = pV1->z - pV2->z; + return pOut; +} + +D3DXINLINE D3DXVECTOR3* D3DXVec3Minimize + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x < pV2->x ? pV1->x : pV2->x; + pOut->y = pV1->y < pV2->y ? pV1->y : pV2->y; + pOut->z = pV1->z < pV2->z ? pV1->z : pV2->z; + return pOut; +} + +D3DXINLINE D3DXVECTOR3* D3DXVec3Maximize + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x > pV2->x ? pV1->x : pV2->x; + pOut->y = pV1->y > pV2->y ? pV1->y : pV2->y; + pOut->z = pV1->z > pV2->z ? pV1->z : pV2->z; + return pOut; +} + +D3DXINLINE D3DXVECTOR3* D3DXVec3Scale + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV, FLOAT s) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV) + return NULL; +#endif + + pOut->x = pV->x * s; + pOut->y = pV->y * s; + pOut->z = pV->z * s; + return pOut; +} + +D3DXINLINE D3DXVECTOR3* D3DXVec3Lerp + ( D3DXVECTOR3 *pOut, CONST D3DXVECTOR3 *pV1, CONST D3DXVECTOR3 *pV2, + FLOAT s ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x + s * (pV2->x - pV1->x); + pOut->y = pV1->y + s * (pV2->y - pV1->y); + pOut->z = pV1->z + s * (pV2->z - pV1->z); + return pOut; +} + + +//-------------------------- +// 4D Vector +//-------------------------- + +D3DXINLINE FLOAT D3DXVec4Length + ( CONST D3DXVECTOR4 *pV ) +{ +#ifdef D3DX_DEBUG + if(!pV) + return 0.0f; +#endif + +#ifdef __cplusplus + return sqrtf(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z + pV->w * pV->w); +#else + return (FLOAT) sqrt(pV->x * pV->x + pV->y * pV->y + pV->z * pV->z + pV->w * pV->w); +#endif +} + +D3DXINLINE FLOAT D3DXVec4LengthSq + ( CONST D3DXVECTOR4 *pV ) +{ +#ifdef D3DX_DEBUG + if(!pV) + return 0.0f; +#endif + + return pV->x * pV->x + pV->y * pV->y + pV->z * pV->z + pV->w * pV->w; +} + +D3DXINLINE FLOAT D3DXVec4Dot + ( CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2 ) +{ +#ifdef D3DX_DEBUG + if(!pV1 || !pV2) + return 0.0f; +#endif + + return pV1->x * pV2->x + pV1->y * pV2->y + pV1->z * pV2->z + pV1->w * pV2->w; +} + +D3DXINLINE D3DXVECTOR4* D3DXVec4Add + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x + pV2->x; + pOut->y = pV1->y + pV2->y; + pOut->z = pV1->z + pV2->z; + pOut->w = pV1->w + pV2->w; + return pOut; +} + +D3DXINLINE D3DXVECTOR4* D3DXVec4Subtract + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x - pV2->x; + pOut->y = pV1->y - pV2->y; + pOut->z = pV1->z - pV2->z; + pOut->w = pV1->w - pV2->w; + return pOut; +} + +D3DXINLINE D3DXVECTOR4* D3DXVec4Minimize + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x < pV2->x ? pV1->x : pV2->x; + pOut->y = pV1->y < pV2->y ? pV1->y : pV2->y; + pOut->z = pV1->z < pV2->z ? pV1->z : pV2->z; + pOut->w = pV1->w < pV2->w ? pV1->w : pV2->w; + return pOut; +} + +D3DXINLINE D3DXVECTOR4* D3DXVec4Maximize + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x > pV2->x ? pV1->x : pV2->x; + pOut->y = pV1->y > pV2->y ? pV1->y : pV2->y; + pOut->z = pV1->z > pV2->z ? pV1->z : pV2->z; + pOut->w = pV1->w > pV2->w ? pV1->w : pV2->w; + return pOut; +} + +D3DXINLINE D3DXVECTOR4* D3DXVec4Scale + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV, FLOAT s) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV) + return NULL; +#endif + + pOut->x = pV->x * s; + pOut->y = pV->y * s; + pOut->z = pV->z * s; + pOut->w = pV->w * s; + return pOut; +} + +D3DXINLINE D3DXVECTOR4* D3DXVec4Lerp + ( D3DXVECTOR4 *pOut, CONST D3DXVECTOR4 *pV1, CONST D3DXVECTOR4 *pV2, + FLOAT s ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pV1 || !pV2) + return NULL; +#endif + + pOut->x = pV1->x + s * (pV2->x - pV1->x); + pOut->y = pV1->y + s * (pV2->y - pV1->y); + pOut->z = pV1->z + s * (pV2->z - pV1->z); + pOut->w = pV1->w + s * (pV2->w - pV1->w); + return pOut; +} + + +//-------------------------- +// 4D Matrix +//-------------------------- + +D3DXINLINE D3DXMATRIX* D3DXMatrixIdentity + ( D3DXMATRIX *pOut ) +{ +#ifdef D3DX_DEBUG + if(!pOut) + return NULL; +#endif + + pOut->m[0][1] = pOut->m[0][2] = pOut->m[0][3] = + pOut->m[1][0] = pOut->m[1][2] = pOut->m[1][3] = + pOut->m[2][0] = pOut->m[2][1] = pOut->m[2][3] = + pOut->m[3][0] = pOut->m[3][1] = pOut->m[3][2] = 0.0f; + + pOut->m[0][0] = pOut->m[1][1] = pOut->m[2][2] = pOut->m[3][3] = 1.0f; + return pOut; +} + + +D3DXINLINE BOOL D3DXMatrixIsIdentity + ( CONST D3DXMATRIX *pM ) +{ +#ifdef D3DX_DEBUG + if(!pM) + return FALSE; +#endif + + return pM->m[0][0] == 1.0f && pM->m[0][1] == 0.0f && pM->m[0][2] == 0.0f && pM->m[0][3] == 0.0f && + pM->m[1][0] == 0.0f && pM->m[1][1] == 1.0f && pM->m[1][2] == 0.0f && pM->m[1][3] == 0.0f && + pM->m[2][0] == 0.0f && pM->m[2][1] == 0.0f && pM->m[2][2] == 1.0f && pM->m[2][3] == 0.0f && + pM->m[3][0] == 0.0f && pM->m[3][1] == 0.0f && pM->m[3][2] == 0.0f && pM->m[3][3] == 1.0f; +} + + +//-------------------------- +// Quaternion +//-------------------------- + +D3DXINLINE FLOAT D3DXQuaternionLength + ( CONST D3DXQUATERNION *pQ ) +{ +#ifdef D3DX_DEBUG + if(!pQ) + return 0.0f; +#endif + +#ifdef __cplusplus + return sqrtf(pQ->x * pQ->x + pQ->y * pQ->y + pQ->z * pQ->z + pQ->w * pQ->w); +#else + return (FLOAT) sqrt(pQ->x * pQ->x + pQ->y * pQ->y + pQ->z * pQ->z + pQ->w * pQ->w); +#endif +} + +D3DXINLINE FLOAT D3DXQuaternionLengthSq + ( CONST D3DXQUATERNION *pQ ) +{ +#ifdef D3DX_DEBUG + if(!pQ) + return 0.0f; +#endif + + return pQ->x * pQ->x + pQ->y * pQ->y + pQ->z * pQ->z + pQ->w * pQ->w; +} + +D3DXINLINE FLOAT D3DXQuaternionDot + ( CONST D3DXQUATERNION *pQ1, CONST D3DXQUATERNION *pQ2 ) +{ +#ifdef D3DX_DEBUG + if(!pQ1 || !pQ2) + return 0.0f; +#endif + + return pQ1->x * pQ2->x + pQ1->y * pQ2->y + pQ1->z * pQ2->z + pQ1->w * pQ2->w; +} + + +D3DXINLINE D3DXQUATERNION* D3DXQuaternionIdentity + ( D3DXQUATERNION *pOut ) +{ +#ifdef D3DX_DEBUG + if(!pOut) + return NULL; +#endif + + pOut->x = pOut->y = pOut->z = 0.0f; + pOut->w = 1.0f; + return pOut; +} + +D3DXINLINE BOOL D3DXQuaternionIsIdentity + ( CONST D3DXQUATERNION *pQ ) +{ +#ifdef D3DX_DEBUG + if(!pQ) + return FALSE; +#endif + + return pQ->x == 0.0f && pQ->y == 0.0f && pQ->z == 0.0f && pQ->w == 1.0f; +} + + +D3DXINLINE D3DXQUATERNION* D3DXQuaternionConjugate + ( D3DXQUATERNION *pOut, CONST D3DXQUATERNION *pQ ) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pQ) + return NULL; +#endif + + pOut->x = -pQ->x; + pOut->y = -pQ->y; + pOut->z = -pQ->z; + pOut->w = pQ->w; + return pOut; +} + + +//-------------------------- +// Plane +//-------------------------- + +D3DXINLINE FLOAT D3DXPlaneDot + ( CONST D3DXPLANE *pP, CONST D3DXVECTOR4 *pV) +{ +#ifdef D3DX_DEBUG + if(!pP || !pV) + return 0.0f; +#endif + + return pP->a * pV->x + pP->b * pV->y + pP->c * pV->z + pP->d * pV->w; +} + +D3DXINLINE FLOAT D3DXPlaneDotCoord + ( CONST D3DXPLANE *pP, CONST D3DXVECTOR3 *pV) +{ +#ifdef D3DX_DEBUG + if(!pP || !pV) + return 0.0f; +#endif + + return pP->a * pV->x + pP->b * pV->y + pP->c * pV->z + pP->d; +} + +D3DXINLINE FLOAT D3DXPlaneDotNormal + ( CONST D3DXPLANE *pP, CONST D3DXVECTOR3 *pV) +{ +#ifdef D3DX_DEBUG + if(!pP || !pV) + return 0.0f; +#endif + + return pP->a * pV->x + pP->b * pV->y + pP->c * pV->z; +} + +D3DXINLINE D3DXPLANE* D3DXPlaneScale + (D3DXPLANE *pOut, CONST D3DXPLANE *pP, FLOAT s) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pP) + return NULL; +#endif + + pOut->a = pP->a * s; + pOut->b = pP->b * s; + pOut->c = pP->c * s; + pOut->d = pP->d * s; + return pOut; +} + + +//-------------------------- +// Color +//-------------------------- + +D3DXINLINE D3DXCOLOR* D3DXColorNegative + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pC) + return NULL; +#endif + + pOut->r = 1.0f - pC->r; + pOut->g = 1.0f - pC->g; + pOut->b = 1.0f - pC->b; + pOut->a = pC->a; + return pOut; +} + +D3DXINLINE D3DXCOLOR* D3DXColorAdd + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pC1 || !pC2) + return NULL; +#endif + + pOut->r = pC1->r + pC2->r; + pOut->g = pC1->g + pC2->g; + pOut->b = pC1->b + pC2->b; + pOut->a = pC1->a + pC2->a; + return pOut; +} + +D3DXINLINE D3DXCOLOR* D3DXColorSubtract + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pC1 || !pC2) + return NULL; +#endif + + pOut->r = pC1->r - pC2->r; + pOut->g = pC1->g - pC2->g; + pOut->b = pC1->b - pC2->b; + pOut->a = pC1->a - pC2->a; + return pOut; +} + +D3DXINLINE D3DXCOLOR* D3DXColorScale + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC, FLOAT s) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pC) + return NULL; +#endif + + pOut->r = pC->r * s; + pOut->g = pC->g * s; + pOut->b = pC->b * s; + pOut->a = pC->a * s; + return pOut; +} + +D3DXINLINE D3DXCOLOR* D3DXColorModulate + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pC1 || !pC2) + return NULL; +#endif + + pOut->r = pC1->r * pC2->r; + pOut->g = pC1->g * pC2->g; + pOut->b = pC1->b * pC2->b; + pOut->a = pC1->a * pC2->a; + return pOut; +} + +D3DXINLINE D3DXCOLOR* D3DXColorLerp + (D3DXCOLOR *pOut, CONST D3DXCOLOR *pC1, CONST D3DXCOLOR *pC2, FLOAT s) +{ +#ifdef D3DX_DEBUG + if(!pOut || !pC1 || !pC2) + return NULL; +#endif + + pOut->r = pC1->r + s * (pC2->r - pC1->r); + pOut->g = pC1->g + s * (pC2->g - pC1->g); + pOut->b = pC1->b + s * (pC2->b - pC1->b); + pOut->a = pC1->a + s * (pC2->a - pC1->a); + return pOut; +} + + +#endif // __D3DX9MATH_INL__ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9mesh.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9mesh.h new file mode 100644 index 0000000000..a009d9a041 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9mesh.h @@ -0,0 +1,3007 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Microsoft Corporation. All Rights Reserved. +// +// File: d3dx9mesh.h +// Content: D3DX mesh types and functions +// +////////////////////////////////////////////////////////////////////////////// + +#include "d3dx9.h" + +#ifndef __D3DX9MESH_H__ +#define __D3DX9MESH_H__ + +// {7ED943DD-52E8-40b5-A8D8-76685C406330} +DEFINE_GUID(IID_ID3DXBaseMesh, +0x7ed943dd, 0x52e8, 0x40b5, 0xa8, 0xd8, 0x76, 0x68, 0x5c, 0x40, 0x63, 0x30); + +// {4020E5C2-1403-4929-883F-E2E849FAC195} +DEFINE_GUID(IID_ID3DXMesh, +0x4020e5c2, 0x1403, 0x4929, 0x88, 0x3f, 0xe2, 0xe8, 0x49, 0xfa, 0xc1, 0x95); + +// {8875769A-D579-4088-AAEB-534D1AD84E96} +DEFINE_GUID(IID_ID3DXPMesh, +0x8875769a, 0xd579, 0x4088, 0xaa, 0xeb, 0x53, 0x4d, 0x1a, 0xd8, 0x4e, 0x96); + +// {667EA4C7-F1CD-4386-B523-7C0290B83CC5} +DEFINE_GUID(IID_ID3DXSPMesh, +0x667ea4c7, 0xf1cd, 0x4386, 0xb5, 0x23, 0x7c, 0x2, 0x90, 0xb8, 0x3c, 0xc5); + +// {11EAA540-F9A6-4d49-AE6A-E19221F70CC4} +DEFINE_GUID(IID_ID3DXSkinInfo, +0x11eaa540, 0xf9a6, 0x4d49, 0xae, 0x6a, 0xe1, 0x92, 0x21, 0xf7, 0xc, 0xc4); + +// {3CE6CC22-DBF2-44f4-894D-F9C34A337139} +DEFINE_GUID(IID_ID3DXPatchMesh, +0x3ce6cc22, 0xdbf2, 0x44f4, 0x89, 0x4d, 0xf9, 0xc3, 0x4a, 0x33, 0x71, 0x39); + +//patch mesh can be quads or tris +typedef enum _D3DXPATCHMESHTYPE { + D3DXPATCHMESH_RECT = 0x001, + D3DXPATCHMESH_TRI = 0x002, + D3DXPATCHMESH_NPATCH = 0x003, + + D3DXPATCHMESH_FORCE_DWORD = 0x7fffffff, /* force 32-bit size enum */ +} D3DXPATCHMESHTYPE; + +// Mesh options - lower 3 bytes only, upper byte used by _D3DXMESHOPT option flags +enum _D3DXMESH { + D3DXMESH_32BIT = 0x001, // If set, then use 32 bit indices, if not set use 16 bit indices. + D3DXMESH_DONOTCLIP = 0x002, // Use D3DUSAGE_DONOTCLIP for VB & IB. + D3DXMESH_POINTS = 0x004, // Use D3DUSAGE_POINTS for VB & IB. + D3DXMESH_RTPATCHES = 0x008, // Use D3DUSAGE_RTPATCHES for VB & IB. + D3DXMESH_NPATCHES = 0x4000,// Use D3DUSAGE_NPATCHES for VB & IB. + D3DXMESH_VB_SYSTEMMEM = 0x010, // Use D3DPOOL_SYSTEMMEM for VB. Overrides D3DXMESH_MANAGEDVERTEXBUFFER + D3DXMESH_VB_MANAGED = 0x020, // Use D3DPOOL_MANAGED for VB. + D3DXMESH_VB_WRITEONLY = 0x040, // Use D3DUSAGE_WRITEONLY for VB. + D3DXMESH_VB_DYNAMIC = 0x080, // Use D3DUSAGE_DYNAMIC for VB. + D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000, // Use D3DUSAGE_SOFTWAREPROCESSING for VB. + D3DXMESH_IB_SYSTEMMEM = 0x100, // Use D3DPOOL_SYSTEMMEM for IB. Overrides D3DXMESH_MANAGEDINDEXBUFFER + D3DXMESH_IB_MANAGED = 0x200, // Use D3DPOOL_MANAGED for IB. + D3DXMESH_IB_WRITEONLY = 0x400, // Use D3DUSAGE_WRITEONLY for IB. + D3DXMESH_IB_DYNAMIC = 0x800, // Use D3DUSAGE_DYNAMIC for IB. + D3DXMESH_IB_SOFTWAREPROCESSING= 0x10000, // Use D3DUSAGE_SOFTWAREPROCESSING for IB. + + D3DXMESH_VB_SHARE = 0x1000, // Valid for Clone* calls only, forces cloned mesh/pmesh to share vertex buffer + + D3DXMESH_USEHWONLY = 0x2000, // Valid for ID3DXSkinInfo::ConvertToBlendedMesh + + // Helper options + D3DXMESH_SYSTEMMEM = 0x110, // D3DXMESH_VB_SYSTEMMEM | D3DXMESH_IB_SYSTEMMEM + D3DXMESH_MANAGED = 0x220, // D3DXMESH_VB_MANAGED | D3DXMESH_IB_MANAGED + D3DXMESH_WRITEONLY = 0x440, // D3DXMESH_VB_WRITEONLY | D3DXMESH_IB_WRITEONLY + D3DXMESH_DYNAMIC = 0x880, // D3DXMESH_VB_DYNAMIC | D3DXMESH_IB_DYNAMIC + D3DXMESH_SOFTWAREPROCESSING = 0x18000, // D3DXMESH_VB_SOFTWAREPROCESSING | D3DXMESH_IB_SOFTWAREPROCESSING + +}; + +//patch mesh options +enum _D3DXPATCHMESH { + D3DXPATCHMESH_DEFAULT = 000, +}; +// option field values for specifying min value in D3DXGeneratePMesh and D3DXSimplifyMesh +enum _D3DXMESHSIMP +{ + D3DXMESHSIMP_VERTEX = 0x1, + D3DXMESHSIMP_FACE = 0x2, + +}; + +typedef enum _D3DXCLEANTYPE { + D3DXCLEAN_BACKFACING = 0x00000001, + D3DXCLEAN_BOWTIES = 0x00000002, + + // Helper options + D3DXCLEAN_SKINNING = D3DXCLEAN_BACKFACING, // Bowtie cleaning modifies geometry and breaks skinning + D3DXCLEAN_OPTIMIZATION = D3DXCLEAN_BACKFACING, + D3DXCLEAN_SIMPLIFICATION= D3DXCLEAN_BACKFACING | D3DXCLEAN_BOWTIES, +} D3DXCLEANTYPE; + +enum _MAX_FVF_DECL_SIZE +{ + MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1 // +1 for END +}; + +typedef enum _D3DXTANGENT +{ + D3DXTANGENT_WRAP_U = 0x01, + D3DXTANGENT_WRAP_V = 0x02, + D3DXTANGENT_WRAP_UV = 0x03, + D3DXTANGENT_DONT_NORMALIZE_PARTIALS = 0x04, + D3DXTANGENT_DONT_ORTHOGONALIZE = 0x08, + D3DXTANGENT_ORTHOGONALIZE_FROM_V = 0x010, + D3DXTANGENT_ORTHOGONALIZE_FROM_U = 0x020, + D3DXTANGENT_WEIGHT_BY_AREA = 0x040, + D3DXTANGENT_WEIGHT_EQUAL = 0x080, + D3DXTANGENT_WIND_CW = 0x0100, + D3DXTANGENT_CALCULATE_NORMALS = 0x0200, + D3DXTANGENT_GENERATE_IN_PLACE = 0x0400, +} D3DXTANGENT; + +// D3DXIMT_WRAP_U means the texture wraps in the U direction +// D3DXIMT_WRAP_V means the texture wraps in the V direction +// D3DXIMT_WRAP_UV means the texture wraps in both directions +typedef enum _D3DXIMT +{ + D3DXIMT_WRAP_U = 0x01, + D3DXIMT_WRAP_V = 0x02, + D3DXIMT_WRAP_UV = 0x03, +} D3DXIMT; + +// These options are only valid for UVAtlasCreate and UVAtlasPartition, we may add more for UVAtlasPack if necessary +// D3DXUVATLAS_DEFAULT - Meshes with more than 25k faces go through fast, meshes with fewer than 25k faces go through quality +// D3DXUVATLAS_GEODESIC_FAST - Uses approximations to improve charting speed at the cost of added stretch or more charts. +// D3DXUVATLAS_GEODESIC_QUALITY - Provides better quality charts, but requires more time and memory than fast. +typedef enum _D3DXUVATLAS +{ + D3DXUVATLAS_DEFAULT = 0x00, + D3DXUVATLAS_GEODESIC_FAST = 0x01, + D3DXUVATLAS_GEODESIC_QUALITY = 0x02, +} D3DXUVATLAS; + +typedef struct ID3DXBaseMesh *LPD3DXBASEMESH; +typedef struct ID3DXMesh *LPD3DXMESH; +typedef struct ID3DXPMesh *LPD3DXPMESH; +typedef struct ID3DXSPMesh *LPD3DXSPMESH; +typedef struct ID3DXSkinInfo *LPD3DXSKININFO; +typedef struct ID3DXPatchMesh *LPD3DXPATCHMESH; +typedef interface ID3DXTextureGutterHelper *LPD3DXTEXTUREGUTTERHELPER; +typedef interface ID3DXPRTBuffer *LPD3DXPRTBUFFER; + + +typedef struct _D3DXATTRIBUTERANGE +{ + DWORD AttribId; + DWORD FaceStart; + DWORD FaceCount; + DWORD VertexStart; + DWORD VertexCount; +} D3DXATTRIBUTERANGE; + +typedef D3DXATTRIBUTERANGE* LPD3DXATTRIBUTERANGE; + +typedef struct _D3DXMATERIAL +{ + D3DMATERIAL9 MatD3D; + LPSTR pTextureFilename; +} D3DXMATERIAL; +typedef D3DXMATERIAL *LPD3DXMATERIAL; + +typedef enum _D3DXEFFECTDEFAULTTYPE +{ + D3DXEDT_STRING = 0x1, // pValue points to a null terminated ASCII string + D3DXEDT_FLOATS = 0x2, // pValue points to an array of floats - number of floats is NumBytes / sizeof(float) + D3DXEDT_DWORD = 0x3, // pValue points to a DWORD + + D3DXEDT_FORCEDWORD = 0x7fffffff +} D3DXEFFECTDEFAULTTYPE; + +typedef struct _D3DXEFFECTDEFAULT +{ + LPSTR pParamName; + D3DXEFFECTDEFAULTTYPE Type; // type of the data pointed to by pValue + DWORD NumBytes; // size in bytes of the data pointed to by pValue + LPVOID pValue; // data for the default of the effect +} D3DXEFFECTDEFAULT, *LPD3DXEFFECTDEFAULT; + +typedef struct _D3DXEFFECTINSTANCE +{ + LPSTR pEffectFilename; + DWORD NumDefaults; + LPD3DXEFFECTDEFAULT pDefaults; +} D3DXEFFECTINSTANCE, *LPD3DXEFFECTINSTANCE; + +typedef struct _D3DXATTRIBUTEWEIGHTS +{ + FLOAT Position; + FLOAT Boundary; + FLOAT Normal; + FLOAT Diffuse; + FLOAT Specular; + FLOAT Texcoord[8]; + FLOAT Tangent; + FLOAT Binormal; +} D3DXATTRIBUTEWEIGHTS, *LPD3DXATTRIBUTEWEIGHTS; + +enum _D3DXWELDEPSILONSFLAGS +{ + D3DXWELDEPSILONS_WELDALL = 0x1, // weld all vertices marked by adjacency as being overlapping + + D3DXWELDEPSILONS_WELDPARTIALMATCHES = 0x2, // if a given vertex component is within epsilon, modify partial matched + // vertices so that both components identical AND if all components "equal" + // remove one of the vertices + D3DXWELDEPSILONS_DONOTREMOVEVERTICES = 0x4, // instructs weld to only allow modifications to vertices and not removal + // ONLY valid if D3DXWELDEPSILONS_WELDPARTIALMATCHES is set + // useful to modify vertices to be equal, but not allow vertices to be removed + + D3DXWELDEPSILONS_DONOTSPLIT = 0x8, // instructs weld to specify the D3DXMESHOPT_DONOTSPLIT flag when doing an Optimize(ATTR_SORT) + // if this flag is not set, all vertices that are in separate attribute groups + // will remain split and not welded. Setting this flag can slow down software vertex processing + +}; + +typedef struct _D3DXWELDEPSILONS +{ + FLOAT Position; // NOTE: This does NOT replace the epsilon in GenerateAdjacency + // in general, it should be the same value or greater than the one passed to GeneratedAdjacency + FLOAT BlendWeights; + FLOAT Normal; + FLOAT PSize; + FLOAT Specular; + FLOAT Diffuse; + FLOAT Texcoord[8]; + FLOAT Tangent; + FLOAT Binormal; + FLOAT TessFactor; +} D3DXWELDEPSILONS; + +typedef D3DXWELDEPSILONS* LPD3DXWELDEPSILONS; + + +#undef INTERFACE +#define INTERFACE ID3DXBaseMesh + +DECLARE_INTERFACE_(ID3DXBaseMesh, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXBaseMesh + STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE; + STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE; + STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; + STDMETHOD_(DWORD, GetFVF)(THIS) PURE; + STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE; + STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE; + STDMETHOD_(DWORD, GetOptions)(THIS) PURE; + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options, + DWORD FVF, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE; + STDMETHOD(CloneMesh)(THIS_ DWORD Options, + CONST D3DVERTEXELEMENT9 *pDeclaration, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE; + STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER9* ppVB) PURE; + STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER9* ppIB) PURE; + STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, LPVOID *ppData) PURE; + STDMETHOD(UnlockVertexBuffer)(THIS) PURE; + STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, LPVOID *ppData) PURE; + STDMETHOD(UnlockIndexBuffer)(THIS) PURE; + STDMETHOD(GetAttributeTable)( + THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE; + + STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ CONST DWORD* pPRep, DWORD* pAdjacency) PURE; + STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ CONST DWORD* pAdjacency, DWORD* pPRep) PURE; + STDMETHOD(GenerateAdjacency)(THIS_ FLOAT Epsilon, DWORD* pAdjacency) PURE; + + STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE; +}; + + +#undef INTERFACE +#define INTERFACE ID3DXMesh + +DECLARE_INTERFACE_(ID3DXMesh, ID3DXBaseMesh) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXBaseMesh + STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE; + STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE; + STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; + STDMETHOD_(DWORD, GetFVF)(THIS) PURE; + STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE; + STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE; + STDMETHOD_(DWORD, GetOptions)(THIS) PURE; + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options, + DWORD FVF, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE; + STDMETHOD(CloneMesh)(THIS_ DWORD Options, + CONST D3DVERTEXELEMENT9 *pDeclaration, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE; + STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER9* ppVB) PURE; + STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER9* ppIB) PURE; + STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, LPVOID *ppData) PURE; + STDMETHOD(UnlockVertexBuffer)(THIS) PURE; + STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, LPVOID *ppData) PURE; + STDMETHOD(UnlockIndexBuffer)(THIS) PURE; + STDMETHOD(GetAttributeTable)( + THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE; + + STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ CONST DWORD* pPRep, DWORD* pAdjacency) PURE; + STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ CONST DWORD* pAdjacency, DWORD* pPRep) PURE; + STDMETHOD(GenerateAdjacency)(THIS_ FLOAT Epsilon, DWORD* pAdjacency) PURE; + + STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE; + + // ID3DXMesh + STDMETHOD(LockAttributeBuffer)(THIS_ DWORD Flags, DWORD** ppData) PURE; + STDMETHOD(UnlockAttributeBuffer)(THIS) PURE; + STDMETHOD(Optimize)(THIS_ DWORD Flags, CONST DWORD* pAdjacencyIn, DWORD* pAdjacencyOut, + DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap, + LPD3DXMESH* ppOptMesh) PURE; + STDMETHOD(OptimizeInplace)(THIS_ DWORD Flags, CONST DWORD* pAdjacencyIn, DWORD* pAdjacencyOut, + DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap) PURE; + STDMETHOD(SetAttributeTable)(THIS_ CONST D3DXATTRIBUTERANGE *pAttribTable, DWORD cAttribTableSize) PURE; +}; + + +#undef INTERFACE +#define INTERFACE ID3DXPMesh + +DECLARE_INTERFACE_(ID3DXPMesh, ID3DXBaseMesh) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXBaseMesh + STDMETHOD(DrawSubset)(THIS_ DWORD AttribId) PURE; + STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE; + STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; + STDMETHOD_(DWORD, GetFVF)(THIS) PURE; + STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE; + STDMETHOD_(DWORD, GetNumBytesPerVertex)(THIS) PURE; + STDMETHOD_(DWORD, GetOptions)(THIS) PURE; + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options, + DWORD FVF, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE; + STDMETHOD(CloneMesh)(THIS_ DWORD Options, + CONST D3DVERTEXELEMENT9 *pDeclaration, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXMESH* ppCloneMesh) PURE; + STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER9* ppVB) PURE; + STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER9* ppIB) PURE; + STDMETHOD(LockVertexBuffer)(THIS_ DWORD Flags, LPVOID *ppData) PURE; + STDMETHOD(UnlockVertexBuffer)(THIS) PURE; + STDMETHOD(LockIndexBuffer)(THIS_ DWORD Flags, LPVOID *ppData) PURE; + STDMETHOD(UnlockIndexBuffer)(THIS) PURE; + STDMETHOD(GetAttributeTable)( + THIS_ D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) PURE; + + STDMETHOD(ConvertPointRepsToAdjacency)(THIS_ CONST DWORD* pPRep, DWORD* pAdjacency) PURE; + STDMETHOD(ConvertAdjacencyToPointReps)(THIS_ CONST DWORD* pAdjacency, DWORD* pPRep) PURE; + STDMETHOD(GenerateAdjacency)(THIS_ FLOAT Epsilon, DWORD* pAdjacency) PURE; + + STDMETHOD(UpdateSemantics)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE; + + // ID3DXPMesh + STDMETHOD(ClonePMeshFVF)(THIS_ DWORD Options, + DWORD FVF, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXPMESH* ppCloneMesh) PURE; + STDMETHOD(ClonePMesh)(THIS_ DWORD Options, + CONST D3DVERTEXELEMENT9 *pDeclaration, LPDIRECT3DDEVICE9 pD3DDevice, LPD3DXPMESH* ppCloneMesh) PURE; + STDMETHOD(SetNumFaces)(THIS_ DWORD Faces) PURE; + STDMETHOD(SetNumVertices)(THIS_ DWORD Vertices) PURE; + STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE; + STDMETHOD_(DWORD, GetMinFaces)(THIS) PURE; + STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE; + STDMETHOD_(DWORD, GetMinVertices)(THIS) PURE; + STDMETHOD(Save)(THIS_ IStream *pStream, CONST D3DXMATERIAL* pMaterials, CONST D3DXEFFECTINSTANCE* pEffectInstances, DWORD NumMaterials) PURE; + + STDMETHOD(Optimize)(THIS_ DWORD Flags, DWORD* pAdjacencyOut, + DWORD* pFaceRemap, LPD3DXBUFFER *ppVertexRemap, + LPD3DXMESH* ppOptMesh) PURE; + + STDMETHOD(OptimizeBaseLOD)(THIS_ DWORD Flags, DWORD* pFaceRemap) PURE; + STDMETHOD(TrimByFaces)(THIS_ DWORD NewFacesMin, DWORD NewFacesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) PURE; + STDMETHOD(TrimByVertices)(THIS_ DWORD NewVerticesMin, DWORD NewVerticesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) PURE; + + STDMETHOD(GetAdjacency)(THIS_ DWORD* pAdjacency) PURE; + + // Used to generate the immediate "ancestor" for each vertex when it is removed by a vsplit. Allows generation of geomorphs + // Vertex buffer must be equal to or greater than the maximum number of vertices in the pmesh + STDMETHOD(GenerateVertexHistory)(THIS_ DWORD* pVertexHistory) PURE; +}; + + +#undef INTERFACE +#define INTERFACE ID3DXSPMesh + +DECLARE_INTERFACE_(ID3DXSPMesh, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXSPMesh + STDMETHOD_(DWORD, GetNumFaces)(THIS) PURE; + STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; + STDMETHOD_(DWORD, GetFVF)(THIS) PURE; + STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE; + STDMETHOD_(DWORD, GetOptions)(THIS) PURE; + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + STDMETHOD(CloneMeshFVF)(THIS_ DWORD Options, + DWORD FVF, LPDIRECT3DDEVICE9 pD3DDevice, DWORD *pAdjacencyOut, DWORD *pVertexRemapOut, LPD3DXMESH* ppCloneMesh) PURE; + STDMETHOD(CloneMesh)(THIS_ DWORD Options, + CONST D3DVERTEXELEMENT9 *pDeclaration, LPDIRECT3DDEVICE9 pD3DDevice, DWORD *pAdjacencyOut, DWORD *pVertexRemapOut, LPD3DXMESH* ppCloneMesh) PURE; + STDMETHOD(ClonePMeshFVF)(THIS_ DWORD Options, + DWORD FVF, LPDIRECT3DDEVICE9 pD3DDevice, DWORD *pVertexRemapOut, FLOAT *pErrorsByFace, LPD3DXPMESH* ppCloneMesh) PURE; + STDMETHOD(ClonePMesh)(THIS_ DWORD Options, + CONST D3DVERTEXELEMENT9 *pDeclaration, LPDIRECT3DDEVICE9 pD3DDevice, DWORD *pVertexRemapOut, FLOAT *pErrorsbyFace, LPD3DXPMESH* ppCloneMesh) PURE; + STDMETHOD(ReduceFaces)(THIS_ DWORD Faces) PURE; + STDMETHOD(ReduceVertices)(THIS_ DWORD Vertices) PURE; + STDMETHOD_(DWORD, GetMaxFaces)(THIS) PURE; + STDMETHOD_(DWORD, GetMaxVertices)(THIS) PURE; + STDMETHOD(GetVertexAttributeWeights)(THIS_ LPD3DXATTRIBUTEWEIGHTS pVertexAttributeWeights) PURE; + STDMETHOD(GetVertexWeights)(THIS_ FLOAT *pVertexWeights) PURE; +}; + +#define UNUSED16 (0xffff) +#define UNUSED32 (0xffffffff) + +// ID3DXMesh::Optimize options - upper byte only, lower 3 bytes used from _D3DXMESH option flags +enum _D3DXMESHOPT { + D3DXMESHOPT_COMPACT = 0x01000000, + D3DXMESHOPT_ATTRSORT = 0x02000000, + D3DXMESHOPT_VERTEXCACHE = 0x04000000, + D3DXMESHOPT_STRIPREORDER = 0x08000000, + D3DXMESHOPT_IGNOREVERTS = 0x10000000, // optimize faces only, don't touch vertices + D3DXMESHOPT_DONOTSPLIT = 0x20000000, // do not split vertices shared between attribute groups when attribute sorting + D3DXMESHOPT_DEVICEINDEPENDENT = 0x00400000, // Only affects VCache. uses a static known good cache size for all cards + + // D3DXMESHOPT_SHAREVB has been removed, please use D3DXMESH_VB_SHARE instead + +}; + +// Subset of the mesh that has the same attribute and bone combination. +// This subset can be rendered in a single draw call +typedef struct _D3DXBONECOMBINATION +{ + DWORD AttribId; + DWORD FaceStart; + DWORD FaceCount; + DWORD VertexStart; + DWORD VertexCount; + DWORD* BoneId; +} D3DXBONECOMBINATION, *LPD3DXBONECOMBINATION; + +// The following types of patch combinations are supported: +// Patch type Basis Degree +// Rect Bezier 2,3,5 +// Rect B-Spline 2,3,5 +// Rect Catmull-Rom 3 +// Tri Bezier 2,3,5 +// N-Patch N/A 3 + +typedef struct _D3DXPATCHINFO +{ + D3DXPATCHMESHTYPE PatchType; + D3DDEGREETYPE Degree; + D3DBASISTYPE Basis; +} D3DXPATCHINFO, *LPD3DXPATCHINFO; + +#undef INTERFACE +#define INTERFACE ID3DXPatchMesh + +DECLARE_INTERFACE_(ID3DXPatchMesh, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXPatchMesh + + // Return creation parameters + STDMETHOD_(DWORD, GetNumPatches)(THIS) PURE; + STDMETHOD_(DWORD, GetNumVertices)(THIS) PURE; + STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE; + STDMETHOD_(DWORD, GetControlVerticesPerPatch)(THIS) PURE; + STDMETHOD_(DWORD, GetOptions)(THIS) PURE; + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9 *ppDevice) PURE; + STDMETHOD(GetPatchInfo)(THIS_ LPD3DXPATCHINFO PatchInfo) PURE; + + // Control mesh access + STDMETHOD(GetVertexBuffer)(THIS_ LPDIRECT3DVERTEXBUFFER9* ppVB) PURE; + STDMETHOD(GetIndexBuffer)(THIS_ LPDIRECT3DINDEXBUFFER9* ppIB) PURE; + STDMETHOD(LockVertexBuffer)(THIS_ DWORD flags, LPVOID *ppData) PURE; + STDMETHOD(UnlockVertexBuffer)(THIS) PURE; + STDMETHOD(LockIndexBuffer)(THIS_ DWORD flags, LPVOID *ppData) PURE; + STDMETHOD(UnlockIndexBuffer)(THIS) PURE; + STDMETHOD(LockAttributeBuffer)(THIS_ DWORD flags, DWORD** ppData) PURE; + STDMETHOD(UnlockAttributeBuffer)(THIS) PURE; + + // This function returns the size of the tessellated mesh given a tessellation level. + // This assumes uniform tessellation. For adaptive tessellation the Adaptive parameter must + // be set to TRUE and TessellationLevel should be the max tessellation. + // This will result in the max mesh size necessary for adaptive tessellation. + STDMETHOD(GetTessSize)(THIS_ FLOAT fTessLevel,DWORD Adaptive, DWORD *NumTriangles,DWORD *NumVertices) PURE; + + //GenerateAdjacency determines which patches are adjacent with provided tolerance + //this information is used internally to optimize tessellation + STDMETHOD(GenerateAdjacency)(THIS_ FLOAT Tolerance) PURE; + + //CloneMesh Creates a new patchmesh with the specified decl, and converts the vertex buffer + //to the new decl. Entries in the new decl which are new are set to 0. If the current mesh + //has adjacency, the new mesh will also have adjacency + STDMETHOD(CloneMesh)(THIS_ DWORD Options, CONST D3DVERTEXELEMENT9 *pDecl, LPD3DXPATCHMESH *pMesh) PURE; + + // Optimizes the patchmesh for efficient tessellation. This function is designed + // to perform one time optimization for patch meshes that need to be tessellated + // repeatedly by calling the Tessellate() method. The optimization performed is + // independent of the actual tessellation level used. + // Currently Flags is unused. + // If vertices are changed, Optimize must be called again + STDMETHOD(Optimize)(THIS_ DWORD flags) PURE; + + //gets and sets displacement parameters + //displacement maps can only be 2D textures MIP-MAPPING is ignored for non adapative tessellation + STDMETHOD(SetDisplaceParam)(THIS_ LPDIRECT3DBASETEXTURE9 Texture, + D3DTEXTUREFILTERTYPE MinFilter, + D3DTEXTUREFILTERTYPE MagFilter, + D3DTEXTUREFILTERTYPE MipFilter, + D3DTEXTUREADDRESS Wrap, + DWORD dwLODBias) PURE; + + STDMETHOD(GetDisplaceParam)(THIS_ LPDIRECT3DBASETEXTURE9 *Texture, + D3DTEXTUREFILTERTYPE *MinFilter, + D3DTEXTUREFILTERTYPE *MagFilter, + D3DTEXTUREFILTERTYPE *MipFilter, + D3DTEXTUREADDRESS *Wrap, + DWORD *dwLODBias) PURE; + + // Performs the uniform tessellation based on the tessellation level. + // This function will perform more efficiently if the patch mesh has been optimized using the Optimize() call. + STDMETHOD(Tessellate)(THIS_ FLOAT fTessLevel,LPD3DXMESH pMesh) PURE; + + // Performs adaptive tessellation based on the Z based adaptive tessellation criterion. + // pTrans specifies a 4D vector that is dotted with the vertices to get the per vertex + // adaptive tessellation amount. Each edge is tessellated to the average of the criterion + // at the 2 vertices it connects. + // MaxTessLevel specifies the upper limit for adaptive tesselation. + // This function will perform more efficiently if the patch mesh has been optimized using the Optimize() call. + STDMETHOD(TessellateAdaptive)(THIS_ + CONST D3DXVECTOR4 *pTrans, + DWORD dwMaxTessLevel, + DWORD dwMinTessLevel, + LPD3DXMESH pMesh) PURE; + +}; + +#undef INTERFACE +#define INTERFACE ID3DXSkinInfo + +DECLARE_INTERFACE_(ID3DXSkinInfo, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Specify the which vertices do each bones influence and by how much + STDMETHOD(SetBoneInfluence)(THIS_ DWORD bone, DWORD numInfluences, CONST DWORD* vertices, CONST FLOAT* weights) PURE; + STDMETHOD(SetBoneVertexInfluence)(THIS_ DWORD boneNum, DWORD influenceNum, float weight) PURE; + STDMETHOD_(DWORD, GetNumBoneInfluences)(THIS_ DWORD bone) PURE; + STDMETHOD(GetBoneInfluence)(THIS_ DWORD bone, DWORD* vertices, FLOAT* weights) PURE; + STDMETHOD(GetBoneVertexInfluence)(THIS_ DWORD boneNum, DWORD influenceNum, float *pWeight, DWORD *pVertexNum) PURE; + STDMETHOD(GetMaxVertexInfluences)(THIS_ DWORD* maxVertexInfluences) PURE; + STDMETHOD_(DWORD, GetNumBones)(THIS) PURE; + STDMETHOD(FindBoneVertexInfluenceIndex)(THIS_ DWORD boneNum, DWORD vertexNum, DWORD *pInfluenceIndex) PURE; + + // This gets the max face influences based on a triangle mesh with the specified index buffer + STDMETHOD(GetMaxFaceInfluences)(THIS_ LPDIRECT3DINDEXBUFFER9 pIB, DWORD NumFaces, DWORD* maxFaceInfluences) PURE; + + // Set min bone influence. Bone influences that are smaller than this are ignored + STDMETHOD(SetMinBoneInfluence)(THIS_ FLOAT MinInfl) PURE; + // Get min bone influence. + STDMETHOD_(FLOAT, GetMinBoneInfluence)(THIS) PURE; + + // Bone names are returned by D3DXLoadSkinMeshFromXof. They are not used by any other method of this object + STDMETHOD(SetBoneName)(THIS_ DWORD Bone, LPCSTR pName) PURE; // pName is copied to an internal string buffer + STDMETHOD_(LPCSTR, GetBoneName)(THIS_ DWORD Bone) PURE; // A pointer to an internal string buffer is returned. Do not free this. + + // Bone offset matrices are returned by D3DXLoadSkinMeshFromXof. They are not used by any other method of this object + STDMETHOD(SetBoneOffsetMatrix)(THIS_ DWORD Bone, CONST D3DXMATRIX *pBoneTransform) PURE; // pBoneTransform is copied to an internal buffer + STDMETHOD_(LPD3DXMATRIX, GetBoneOffsetMatrix)(THIS_ DWORD Bone) PURE; // A pointer to an internal matrix is returned. Do not free this. + + // Clone a skin info object + STDMETHOD(Clone)(THIS_ LPD3DXSKININFO* ppSkinInfo) PURE; + + // Update bone influence information to match vertices after they are reordered. This should be called + // if the target vertex buffer has been reordered externally. + STDMETHOD(Remap)(THIS_ DWORD NumVertices, DWORD* pVertexRemap) PURE; + + // These methods enable the modification of the vertex layout of the vertices that will be skinned + STDMETHOD(SetFVF)(THIS_ DWORD FVF) PURE; + STDMETHOD(SetDeclaration)(THIS_ CONST D3DVERTEXELEMENT9 *pDeclaration) PURE; + STDMETHOD_(DWORD, GetFVF)(THIS) PURE; + STDMETHOD(GetDeclaration)(THIS_ D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) PURE; + + // Apply SW skinning based on current pose matrices to the target vertices. + STDMETHOD(UpdateSkinnedMesh)(THIS_ + CONST D3DXMATRIX* pBoneTransforms, + CONST D3DXMATRIX* pBoneInvTransposeTransforms, + LPCVOID pVerticesSrc, + PVOID pVerticesDst) PURE; + + // Takes a mesh and returns a new mesh with per vertex blend weights and a bone combination + // table that describes which bones affect which subsets of the mesh + STDMETHOD(ConvertToBlendedMesh)(THIS_ + LPD3DXMESH pMesh, + DWORD Options, + CONST DWORD *pAdjacencyIn, + LPDWORD pAdjacencyOut, + DWORD* pFaceRemap, + LPD3DXBUFFER *ppVertexRemap, + DWORD* pMaxFaceInfl, + DWORD* pNumBoneCombinations, + LPD3DXBUFFER* ppBoneCombinationTable, + LPD3DXMESH* ppMesh) PURE; + + // Takes a mesh and returns a new mesh with per vertex blend weights and indices + // and a bone combination table that describes which bones palettes affect which subsets of the mesh + STDMETHOD(ConvertToIndexedBlendedMesh)(THIS_ + LPD3DXMESH pMesh, + DWORD Options, + DWORD paletteSize, + CONST DWORD *pAdjacencyIn, + LPDWORD pAdjacencyOut, + DWORD* pFaceRemap, + LPD3DXBUFFER *ppVertexRemap, + DWORD* pMaxVertexInfl, + DWORD* pNumBoneCombinations, + LPD3DXBUFFER* ppBoneCombinationTable, + LPD3DXMESH* ppMesh) PURE; +}; + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + + +HRESULT WINAPI + D3DXCreateMesh( + DWORD NumFaces, + DWORD NumVertices, + DWORD Options, + CONST D3DVERTEXELEMENT9 *pDeclaration, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXMESH* ppMesh); + +HRESULT WINAPI + D3DXCreateMeshFVF( + DWORD NumFaces, + DWORD NumVertices, + DWORD Options, + DWORD FVF, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXMESH* ppMesh); + +HRESULT WINAPI + D3DXCreateSPMesh( + LPD3DXMESH pMesh, + CONST DWORD* pAdjacency, + CONST D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights, + CONST FLOAT *pVertexWeights, + LPD3DXSPMESH* ppSMesh); + +// clean a mesh up for simplification, try to make manifold +HRESULT WINAPI + D3DXCleanMesh( + D3DXCLEANTYPE CleanType, + LPD3DXMESH pMeshIn, + CONST DWORD* pAdjacencyIn, + LPD3DXMESH* ppMeshOut, + DWORD* pAdjacencyOut, + LPD3DXBUFFER* ppErrorsAndWarnings); + +HRESULT WINAPI + D3DXValidMesh( + LPD3DXMESH pMeshIn, + CONST DWORD* pAdjacency, + LPD3DXBUFFER* ppErrorsAndWarnings); + +HRESULT WINAPI + D3DXGeneratePMesh( + LPD3DXMESH pMesh, + CONST DWORD* pAdjacency, + CONST D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights, + CONST FLOAT *pVertexWeights, + DWORD MinValue, + DWORD Options, + LPD3DXPMESH* ppPMesh); + +HRESULT WINAPI + D3DXSimplifyMesh( + LPD3DXMESH pMesh, + CONST DWORD* pAdjacency, + CONST D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights, + CONST FLOAT *pVertexWeights, + DWORD MinValue, + DWORD Options, + LPD3DXMESH* ppMesh); + +HRESULT WINAPI + D3DXComputeBoundingSphere( + CONST D3DXVECTOR3 *pFirstPosition, // pointer to first position + DWORD NumVertices, + DWORD dwStride, // count in bytes to subsequent position vectors + D3DXVECTOR3 *pCenter, + FLOAT *pRadius); + +HRESULT WINAPI + D3DXComputeBoundingBox( + CONST D3DXVECTOR3 *pFirstPosition, // pointer to first position + DWORD NumVertices, + DWORD dwStride, // count in bytes to subsequent position vectors + D3DXVECTOR3 *pMin, + D3DXVECTOR3 *pMax); + +HRESULT WINAPI + D3DXComputeNormals( + LPD3DXBASEMESH pMesh, + CONST DWORD *pAdjacency); + +HRESULT WINAPI + D3DXCreateBuffer( + DWORD NumBytes, + LPD3DXBUFFER *ppBuffer); + + +HRESULT WINAPI + D3DXLoadMeshFromXA( + LPCSTR pFilename, + DWORD Options, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXBUFFER *ppAdjacency, + LPD3DXBUFFER *ppMaterials, + LPD3DXBUFFER *ppEffectInstances, + DWORD *pNumMaterials, + LPD3DXMESH *ppMesh); + +HRESULT WINAPI + D3DXLoadMeshFromXW( + LPCWSTR pFilename, + DWORD Options, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXBUFFER *ppAdjacency, + LPD3DXBUFFER *ppMaterials, + LPD3DXBUFFER *ppEffectInstances, + DWORD *pNumMaterials, + LPD3DXMESH *ppMesh); + +#ifdef UNICODE +#define D3DXLoadMeshFromX D3DXLoadMeshFromXW +#else +#define D3DXLoadMeshFromX D3DXLoadMeshFromXA +#endif + +HRESULT WINAPI + D3DXLoadMeshFromXInMemory( + LPCVOID Memory, + DWORD SizeOfMemory, + DWORD Options, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXBUFFER *ppAdjacency, + LPD3DXBUFFER *ppMaterials, + LPD3DXBUFFER *ppEffectInstances, + DWORD *pNumMaterials, + LPD3DXMESH *ppMesh); + +HRESULT WINAPI + D3DXLoadMeshFromXResource( + HMODULE Module, + LPCSTR Name, + LPCSTR Type, + DWORD Options, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXBUFFER *ppAdjacency, + LPD3DXBUFFER *ppMaterials, + LPD3DXBUFFER *ppEffectInstances, + DWORD *pNumMaterials, + LPD3DXMESH *ppMesh); + +HRESULT WINAPI + D3DXSaveMeshToXA( + LPCSTR pFilename, + LPD3DXMESH pMesh, + CONST DWORD* pAdjacency, + CONST D3DXMATERIAL* pMaterials, + CONST D3DXEFFECTINSTANCE* pEffectInstances, + DWORD NumMaterials, + DWORD Format + ); + +HRESULT WINAPI + D3DXSaveMeshToXW( + LPCWSTR pFilename, + LPD3DXMESH pMesh, + CONST DWORD* pAdjacency, + CONST D3DXMATERIAL* pMaterials, + CONST D3DXEFFECTINSTANCE* pEffectInstances, + DWORD NumMaterials, + DWORD Format + ); + +#ifdef UNICODE +#define D3DXSaveMeshToX D3DXSaveMeshToXW +#else +#define D3DXSaveMeshToX D3DXSaveMeshToXA +#endif + + +HRESULT WINAPI + D3DXCreatePMeshFromStream( + IStream *pStream, + DWORD Options, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXBUFFER *ppMaterials, + LPD3DXBUFFER *ppEffectInstances, + DWORD* pNumMaterials, + LPD3DXPMESH *ppPMesh); + +// Creates a skin info object based on the number of vertices, number of bones, and a declaration describing the vertex layout of the target vertices +// The bone names and initial bone transforms are not filled in the skin info object by this method. +HRESULT WINAPI + D3DXCreateSkinInfo( + DWORD NumVertices, + CONST D3DVERTEXELEMENT9 *pDeclaration, + DWORD NumBones, + LPD3DXSKININFO* ppSkinInfo); + +// Creates a skin info object based on the number of vertices, number of bones, and a FVF describing the vertex layout of the target vertices +// The bone names and initial bone transforms are not filled in the skin info object by this method. +HRESULT WINAPI + D3DXCreateSkinInfoFVF( + DWORD NumVertices, + DWORD FVF, + DWORD NumBones, + LPD3DXSKININFO* ppSkinInfo); + +#ifdef __cplusplus +} + +extern "C" { +#endif //__cplusplus + +HRESULT WINAPI + D3DXLoadMeshFromXof( + LPD3DXFILEDATA pxofMesh, + DWORD Options, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXBUFFER *ppAdjacency, + LPD3DXBUFFER *ppMaterials, + LPD3DXBUFFER *ppEffectInstances, + DWORD *pNumMaterials, + LPD3DXMESH *ppMesh); + +// This similar to D3DXLoadMeshFromXof, except also returns skinning info if present in the file +// If skinning info is not present, ppSkinInfo will be NULL +HRESULT WINAPI + D3DXLoadSkinMeshFromXof( + LPD3DXFILEDATA pxofMesh, + DWORD Options, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXBUFFER* ppAdjacency, + LPD3DXBUFFER* ppMaterials, + LPD3DXBUFFER *ppEffectInstances, + DWORD *pMatOut, + LPD3DXSKININFO* ppSkinInfo, + LPD3DXMESH* ppMesh); + + +// The inverse of D3DXConvertTo{Indexed}BlendedMesh() functions. It figures out the skinning info from +// the mesh and the bone combination table and populates a skin info object with that data. The bone +// names and initial bone transforms are not filled in the skin info object by this method. This works +// with either a non-indexed or indexed blended mesh. It examines the FVF or declarator of the mesh to +// determine what type it is. +HRESULT WINAPI + D3DXCreateSkinInfoFromBlendedMesh( + LPD3DXBASEMESH pMesh, + DWORD NumBones, + CONST D3DXBONECOMBINATION *pBoneCombinationTable, + LPD3DXSKININFO* ppSkinInfo); + +HRESULT WINAPI + D3DXTessellateNPatches( + LPD3DXMESH pMeshIn, + CONST DWORD* pAdjacencyIn, + FLOAT NumSegs, + BOOL QuadraticInterpNormals, // if false use linear intrep for normals, if true use quadratic + LPD3DXMESH *ppMeshOut, + LPD3DXBUFFER *ppAdjacencyOut); + + +//generates implied outputdecl from input decl +//the decl generated from this should be used to generate the output decl for +//the tessellator subroutines. + +HRESULT WINAPI + D3DXGenerateOutputDecl( + D3DVERTEXELEMENT9 *pOutput, + CONST D3DVERTEXELEMENT9 *pInput); + +//loads patches from an XFileData +//since an X file can have up to 6 different patch meshes in it, +//returns them in an array - pNumPatches will contain the number of +//meshes in the actual file. +HRESULT WINAPI + D3DXLoadPatchMeshFromXof( + LPD3DXFILEDATA pXofObjMesh, + DWORD Options, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXBUFFER *ppMaterials, + LPD3DXBUFFER *ppEffectInstances, + PDWORD pNumMaterials, + LPD3DXPATCHMESH *ppMesh); + +//computes the size a single rect patch. +HRESULT WINAPI + D3DXRectPatchSize( + CONST FLOAT *pfNumSegs, //segments for each edge (4) + DWORD *pdwTriangles, //output number of triangles + DWORD *pdwVertices); //output number of vertices + +//computes the size of a single triangle patch +HRESULT WINAPI + D3DXTriPatchSize( + CONST FLOAT *pfNumSegs, //segments for each edge (3) + DWORD *pdwTriangles, //output number of triangles + DWORD *pdwVertices); //output number of vertices + + +//tessellates a patch into a created mesh +//similar to D3D RT patch +HRESULT WINAPI + D3DXTessellateRectPatch( + LPDIRECT3DVERTEXBUFFER9 pVB, + CONST FLOAT *pNumSegs, + CONST D3DVERTEXELEMENT9 *pdwInDecl, + CONST D3DRECTPATCH_INFO *pRectPatchInfo, + LPD3DXMESH pMesh); + + +HRESULT WINAPI + D3DXTessellateTriPatch( + LPDIRECT3DVERTEXBUFFER9 pVB, + CONST FLOAT *pNumSegs, + CONST D3DVERTEXELEMENT9 *pInDecl, + CONST D3DTRIPATCH_INFO *pTriPatchInfo, + LPD3DXMESH pMesh); + + + +//creates an NPatch PatchMesh from a D3DXMESH +HRESULT WINAPI + D3DXCreateNPatchMesh( + LPD3DXMESH pMeshSysMem, + LPD3DXPATCHMESH *pPatchMesh); + + +//creates a patch mesh +HRESULT WINAPI + D3DXCreatePatchMesh( + CONST D3DXPATCHINFO *pInfo, //patch type + DWORD dwNumPatches, //number of patches + DWORD dwNumVertices, //number of control vertices + DWORD dwOptions, //options + CONST D3DVERTEXELEMENT9 *pDecl, //format of control vertices + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXPATCHMESH *pPatchMesh); + + +//returns the number of degenerates in a patch mesh - +//text output put in string. +HRESULT WINAPI + D3DXValidPatchMesh(LPD3DXPATCHMESH pMesh, + DWORD *dwcDegenerateVertices, + DWORD *dwcDegeneratePatches, + LPD3DXBUFFER *ppErrorsAndWarnings); + +UINT WINAPI + D3DXGetFVFVertexSize(DWORD FVF); + +UINT WINAPI + D3DXGetDeclVertexSize(CONST D3DVERTEXELEMENT9 *pDecl,DWORD Stream); + +UINT WINAPI + D3DXGetDeclLength(CONST D3DVERTEXELEMENT9 *pDecl); + +HRESULT WINAPI + D3DXDeclaratorFromFVF( + DWORD FVF, + D3DVERTEXELEMENT9 pDeclarator[MAX_FVF_DECL_SIZE]); + +HRESULT WINAPI + D3DXFVFFromDeclarator( + CONST D3DVERTEXELEMENT9 *pDeclarator, + DWORD *pFVF); + +HRESULT WINAPI + D3DXWeldVertices( + LPD3DXMESH pMesh, + DWORD Flags, + CONST D3DXWELDEPSILONS *pEpsilons, + CONST DWORD *pAdjacencyIn, + DWORD *pAdjacencyOut, + DWORD *pFaceRemap, + LPD3DXBUFFER *ppVertexRemap); + +typedef struct _D3DXINTERSECTINFO +{ + DWORD FaceIndex; // index of face intersected + FLOAT U; // Barycentric Hit Coordinates + FLOAT V; // Barycentric Hit Coordinates + FLOAT Dist; // Ray-Intersection Parameter Distance +} D3DXINTERSECTINFO, *LPD3DXINTERSECTINFO; + + +HRESULT WINAPI + D3DXIntersect( + LPD3DXBASEMESH pMesh, + CONST D3DXVECTOR3 *pRayPos, + CONST D3DXVECTOR3 *pRayDir, + BOOL *pHit, // True if any faces were intersected + DWORD *pFaceIndex, // index of closest face intersected + FLOAT *pU, // Barycentric Hit Coordinates + FLOAT *pV, // Barycentric Hit Coordinates + FLOAT *pDist, // Ray-Intersection Parameter Distance + LPD3DXBUFFER *ppAllHits, // Array of D3DXINTERSECTINFOs for all hits (not just closest) + DWORD *pCountOfHits); // Number of entries in AllHits array + +HRESULT WINAPI + D3DXIntersectSubset( + LPD3DXBASEMESH pMesh, + DWORD AttribId, + CONST D3DXVECTOR3 *pRayPos, + CONST D3DXVECTOR3 *pRayDir, + BOOL *pHit, // True if any faces were intersected + DWORD *pFaceIndex, // index of closest face intersected + FLOAT *pU, // Barycentric Hit Coordinates + FLOAT *pV, // Barycentric Hit Coordinates + FLOAT *pDist, // Ray-Intersection Parameter Distance + LPD3DXBUFFER *ppAllHits, // Array of D3DXINTERSECTINFOs for all hits (not just closest) + DWORD *pCountOfHits); // Number of entries in AllHits array + + +HRESULT WINAPI D3DXSplitMesh + ( + LPD3DXMESH pMeshIn, + CONST DWORD *pAdjacencyIn, + CONST DWORD MaxSize, + CONST DWORD Options, + DWORD *pMeshesOut, + LPD3DXBUFFER *ppMeshArrayOut, + LPD3DXBUFFER *ppAdjacencyArrayOut, + LPD3DXBUFFER *ppFaceRemapArrayOut, + LPD3DXBUFFER *ppVertRemapArrayOut + ); + +BOOL WINAPI D3DXIntersectTri +( + CONST D3DXVECTOR3 *p0, // Triangle vertex 0 position + CONST D3DXVECTOR3 *p1, // Triangle vertex 1 position + CONST D3DXVECTOR3 *p2, // Triangle vertex 2 position + CONST D3DXVECTOR3 *pRayPos, // Ray origin + CONST D3DXVECTOR3 *pRayDir, // Ray direction + FLOAT *pU, // Barycentric Hit Coordinates + FLOAT *pV, // Barycentric Hit Coordinates + FLOAT *pDist); // Ray-Intersection Parameter Distance + +BOOL WINAPI + D3DXSphereBoundProbe( + CONST D3DXVECTOR3 *pCenter, + FLOAT Radius, + CONST D3DXVECTOR3 *pRayPosition, + CONST D3DXVECTOR3 *pRayDirection); + +BOOL WINAPI + D3DXBoxBoundProbe( + CONST D3DXVECTOR3 *pMin, + CONST D3DXVECTOR3 *pMax, + CONST D3DXVECTOR3 *pRayPosition, + CONST D3DXVECTOR3 *pRayDirection); + + +HRESULT WINAPI D3DXComputeTangentFrame(ID3DXMesh *pMesh, + DWORD dwOptions); + +HRESULT WINAPI D3DXComputeTangentFrameEx(ID3DXMesh *pMesh, + DWORD dwTextureInSemantic, + DWORD dwTextureInIndex, + DWORD dwUPartialOutSemantic, + DWORD dwUPartialOutIndex, + DWORD dwVPartialOutSemantic, + DWORD dwVPartialOutIndex, + DWORD dwNormalOutSemantic, + DWORD dwNormalOutIndex, + DWORD dwOptions, + CONST DWORD *pdwAdjacency, + FLOAT fPartialEdgeThreshold, + FLOAT fSingularPointThreshold, + FLOAT fNormalEdgeThreshold, + ID3DXMesh **ppMeshOut, + ID3DXBuffer **ppVertexMapping); + + +//D3DXComputeTangent +// +//Computes the Tangent vectors for the TexStage texture coordinates +//and places the results in the TANGENT[TangentIndex] specified in the meshes' DECL +//puts the binorm in BINORM[BinormIndex] also specified in the decl. +// +//If neither the binorm or the tangnet are in the meshes declaration, +//the function will fail. +// +//If a tangent or Binorm field is in the Decl, but the user does not +//wish D3DXComputeTangent to replace them, then D3DX_DEFAULT specified +//in the TangentIndex or BinormIndex will cause it to ignore the specified +//semantic. +// +//Wrap should be specified if the texture coordinates wrap. + +HRESULT WINAPI D3DXComputeTangent(LPD3DXMESH Mesh, + DWORD TexStage, + DWORD TangentIndex, + DWORD BinormIndex, + DWORD Wrap, + CONST DWORD *pAdjacency); + +//============================================================================ +// +// UVAtlas apis +// +//============================================================================ +typedef HRESULT (WINAPI *LPD3DXUVATLASCB)(FLOAT fPercentDone, LPVOID lpUserContext); + +// This function creates atlases for meshes. There are two modes of operation, +// either based on the number of charts, or the maximum allowed stretch. If the +// maximum allowed stretch is 0, then each triangle will likely be in its own +// chart. + +// +// The parameters are as follows: +// pMesh - Input mesh to calculate an atlas for. This must have a position +// channel and at least a 2-d texture channel. +// uMaxChartNumber - The maximum number of charts required for the atlas. +// If this is 0, it will be parameterized based solely on +// stretch. +// fMaxStretch - The maximum amount of stretch, if 0, no stretching is allowed, +// if 1, then any amount of stretching is allowed. +// uWidth - The width of the texture the atlas will be used on. +// uHeight - The height of the texture the atlas will be used on. +// fGutter - The minimum distance, in texels between two charts on the atlas. +// this gets scaled by the width, so if fGutter is 2.5, and it is +// used on a 512x512 texture, then the minimum distance will be +// 2.5 / 512 in u-v space. +// dwTextureIndex - Specifies which texture coordinate to write to in the +// output mesh (which is cloned from the input mesh). Useful +// if your vertex has multiple texture coordinates. +// pdwAdjacency - a pointer to an array with 3 DWORDs per face, indicating +// which triangles are adjacent to each other. +// pdwFalseEdgeAdjacency - a pointer to an array with 3 DWORDS per face, indicating +// at each face, whether an edge is a false edge or not (using +// the same ordering as the adjacency data structure). If this +// is NULL, then it is assumed that there are no false edges. If +// not NULL, then a non-false edge is indicated by -1 and a false +// edge is indicated by any other value (it is not required, but +// it may be useful for the caller to use the original adjacency +// value). This allows you to parameterize a mesh of quads, and +// the edges down the middle of each quad will not be cut when +// parameterizing the mesh. +// pfIMTArray - a pointer to an array with 3 FLOATs per face, describing the +// integrated metric tensor for that face. This lets you control +// the way this triangle may be stretched in the atlas. The IMT +// passed in will be 3 floats (a,b,c) and specify a symmetric +// matrix (a b) that, given a vector (s,t), specifies the +// (b c) +// distance between a vector v1 and a vector v2 = v1 + (s,t) as +// sqrt((s, t) * M * (s, t)^T). +// In other words, this lets one specify the magnitude of the +// stretch in an arbitrary direction in u-v space. For example +// if a = b = c = 1, then this scales the vector (1,1) by 2, and +// the vector (1,-1) by 0. Note that this is multiplying the edge +// length by the square of the matrix, so if you want the face to +// stretch to twice its +// size with no shearing, the IMT value should be (2, 0, 2), which +// is just the identity matrix times 2. +// Note that this assumes you have an orientation for the triangle +// in some 2-D space. For D3DXUVAtlas, this space is created by +// letting S be the direction from the first to the second +// vertex, and T be the cross product between the normal and S. +// +// pStatusCallback - Since the atlas creation process can be very CPU intensive, +// this allows the programmer to specify a function to be called +// periodically, similarly to how it is done in the PRT simulation +// engine. +// fCallbackFrequency - This lets you specify how often the callback will be +// called. A decent default should be 0.0001f. +// pUserContext - a void pointer to be passed back to the callback function +// dwOptions - A combination of flags in the D3DXUVATLAS enum +// ppMeshOut - A pointer to a location to store a pointer for the newly created +// mesh. +// ppFacePartitioning - A pointer to a location to store a pointer for an array, +// one DWORD per face, giving the final partitioning +// created by the atlasing algorithm. +// ppVertexRemapArray - A pointer to a location to store a pointer for an array, +// one DWORD per vertex, giving the vertex it was copied +// from, if any vertices needed to be split. +// pfMaxStretchOut - A location to store the maximum stretch resulting from the +// atlasing algorithm. +// puNumChartsOut - A location to store the number of charts created, or if the +// maximum number of charts was too low, this gives the minimum +// number of charts needed to create an atlas. + +HRESULT WINAPI D3DXUVAtlasCreate(LPD3DXMESH pMesh, + UINT uMaxChartNumber, + FLOAT fMaxStretch, + UINT uWidth, + UINT uHeight, + FLOAT fGutter, + DWORD dwTextureIndex, + CONST DWORD *pdwAdjacency, + CONST DWORD *pdwFalseEdgeAdjacency, + CONST FLOAT *pfIMTArray, + LPD3DXUVATLASCB pStatusCallback, + FLOAT fCallbackFrequency, + LPVOID pUserContext, + DWORD dwOptions, + LPD3DXMESH *ppMeshOut, + LPD3DXBUFFER *ppFacePartitioning, + LPD3DXBUFFER *ppVertexRemapArray, + FLOAT *pfMaxStretchOut, + UINT *puNumChartsOut); + +// This has the same exact arguments as Create, except that it does not perform the +// final packing step. This method allows one to get a partitioning out, and possibly +// modify it before sending it to be repacked. Note that if you change the +// partitioning, you'll also need to calculate new texture coordinates for any faces +// that have switched charts. +// +// The partition result adjacency output parameter is meant to be passed to the +// UVAtlasPack function, this adjacency cuts edges that are between adjacent +// charts, and also can include cuts inside of a chart in order to make it +// equivalent to a disc. For example: +// +// _______ +// | ___ | +// | |_| | +// |_____| +// +// In order to make this equivalent to a disc, we would need to add a cut, and it +// Would end up looking like: +// _______ +// | ___ | +// | |_|_| +// |_____| +// +// The resulting partition adjacency parameter cannot be NULL, because it is +// required for the packing step. + + + +HRESULT WINAPI D3DXUVAtlasPartition(LPD3DXMESH pMesh, + UINT uMaxChartNumber, + FLOAT fMaxStretch, + DWORD dwTextureIndex, + CONST DWORD *pdwAdjacency, + CONST DWORD *pdwFalseEdgeAdjacency, + CONST FLOAT *pfIMTArray, + LPD3DXUVATLASCB pStatusCallback, + FLOAT fCallbackFrequency, + LPVOID pUserContext, + DWORD dwOptions, + LPD3DXMESH *ppMeshOut, + LPD3DXBUFFER *ppFacePartitioning, + LPD3DXBUFFER *ppVertexRemapArray, + LPD3DXBUFFER *ppPartitionResultAdjacency, + FLOAT *pfMaxStretchOut, + UINT *puNumChartsOut); + +// This takes the face partitioning result from Partition and packs it into an +// atlas of the given size. pdwPartitionResultAdjacency should be derived from +// the adjacency returned from the partition step. This value cannot be NULL +// because Pack needs to know where charts were cut in the partition step in +// order to find the edges of each chart. +// The options parameter is currently reserved. +HRESULT WINAPI D3DXUVAtlasPack(ID3DXMesh *pMesh, + UINT uWidth, + UINT uHeight, + FLOAT fGutter, + DWORD dwTextureIndex, + CONST DWORD *pdwPartitionResultAdjacency, + LPD3DXUVATLASCB pStatusCallback, + FLOAT fCallbackFrequency, + LPVOID pUserContext, + DWORD dwOptions, + LPD3DXBUFFER pFacePartitioning); + + +//============================================================================ +// +// IMT Calculation apis +// +// These functions all compute the Integrated Metric Tensor for use in the +// UVAtlas API. They all calculate the IMT with respect to the canonical +// triangle, where the coordinate system is set up so that the u axis goes +// from vertex 0 to 1 and the v axis is N x u. So, for example, the second +// vertex's canonical uv coordinates are (d,0) where d is the distance between +// vertices 0 and 1. This way the IMT does not depend on the parameterization +// of the mesh, and if the signal over the surface doesn't change, then +// the IMT doesn't need to be recalculated. +//============================================================================ + +// This callback is used by D3DXComputeIMTFromSignal. +// +// uv - The texture coordinate for the vertex. +// uPrimitiveID - Face ID of the triangle on which to compute the signal. +// uSignalDimension - The number of floats to store in pfSignalOut. +// pUserData - The pUserData pointer passed in to ComputeIMTFromSignal. +// pfSignalOut - A pointer to where to store the signal data. +typedef HRESULT (WINAPI* LPD3DXIMTSIGNALCALLBACK) + (CONST D3DXVECTOR2 *uv, + UINT uPrimitiveID, + UINT uSignalDimension, + VOID *pUserData, + FLOAT *pfSignalOut); + +// This function is used to calculate the IMT from per vertex data. It sets +// up a linear system over the triangle, solves for the jacobian J, then +// constructs the IMT from that (J^TJ). +// This function allows you to calculate the IMT based off of any value in a +// mesh (color, normal, etc) by specifying the correct stride of the array. +// The IMT computed will cause areas of the mesh that have similar values to +// take up less space in the texture. +// +// pMesh - The mesh to calculate the IMT for. +// pVertexSignal - A float array of size uSignalStride * v, where v is the +// number of vertices in the mesh. +// uSignalDimension - How many floats per vertex to use in calculating the IMT. +// uSignalStride - The number of bytes per vertex in the array. This must be +// a multiple of sizeof(float) +// ppIMTData - Where to store the buffer holding the IMT data + +HRESULT WINAPI D3DXComputeIMTFromPerVertexSignal ( + LPD3DXMESH pMesh, + CONST FLOAT *pfVertexSignal, // uSignalDimension floats per vertex + UINT uSignalDimension, + UINT uSignalStride, // stride of signal in bytes + DWORD dwOptions, // reserved for future use + LPD3DXUVATLASCB pStatusCallback, + LPVOID pUserContext, + LPD3DXBUFFER *ppIMTData); + +// This function is used to calculate the IMT from data that varies over the +// surface of the mesh (generally at a higher frequency than vertex data). +// This function requires the mesh to already be parameterized (so it already +// has texture coordinates). It allows the user to define a signal arbitrarily +// over the surface of the mesh. +// +// pMesh - The mesh to calculate the IMT for. +// dwTextureIndex - This describes which set of texture coordinates in the +// mesh to use. +// uSignalDimension - How many components there are in the signal. +// fMaxUVDistance - The subdivision will continue until the distance between +// all vertices is at most fMaxUVDistance. +// dwOptions - reserved for future use +// pSignalCallback - The callback to use to get the signal. +// pUserData - A pointer that will be passed in to the callback. +// ppIMTData - Where to store the buffer holding the IMT data +HRESULT WINAPI D3DXComputeIMTFromSignal( + LPD3DXMESH pMesh, + DWORD dwTextureIndex, + UINT uSignalDimension, + FLOAT fMaxUVDistance, + DWORD dwOptions, // reserved for future use + LPD3DXIMTSIGNALCALLBACK pSignalCallback, + VOID *pUserData, + LPD3DXUVATLASCB pStatusCallback, + LPVOID pUserContext, + LPD3DXBUFFER *ppIMTData); + +// This function is used to calculate the IMT from texture data. Given a texture +// that maps over the surface of the mesh, the algorithm computes the IMT for +// each face. This will cause large areas that are very similar to take up less +// room when parameterized with UVAtlas. The texture is assumed to be +// interpolated over the mesh bilinearly. +// +// pMesh - The mesh to calculate the IMT for. +// pTexture - The texture to load data from. +// dwTextureIndex - This describes which set of texture coordinates in the +// mesh to use. +// dwOptions - Combination of one or more D3DXIMT flags. +// ppIMTData - Where to store the buffer holding the IMT data +HRESULT WINAPI D3DXComputeIMTFromTexture ( + LPD3DXMESH pMesh, + LPDIRECT3DTEXTURE9 pTexture, + DWORD dwTextureIndex, + DWORD dwOptions, + LPD3DXUVATLASCB pStatusCallback, + LPVOID pUserContext, + LPD3DXBUFFER *ppIMTData); + +// This function is very similar to ComputeIMTFromTexture, but it uses a +// float array to pass in the data, and it can calculate higher dimensional +// values than 4. +// +// pMesh - The mesh to calculate the IMT for. +// dwTextureIndex - This describes which set of texture coordinates in the +// mesh to use. +// pfFloatArray - a pointer to a float array of size +// uWidth*uHeight*uComponents +// uWidth - The width of the texture +// uHeight - The height of the texture +// uSignalDimension - The number of floats per texel in the signal +// uComponents - The number of floats in each texel +// dwOptions - Combination of one or more D3DXIMT flags +// ppIMTData - Where to store the buffer holding the IMT data +HRESULT WINAPI D3DXComputeIMTFromPerTexelSignal( + LPD3DXMESH pMesh, + DWORD dwTextureIndex, + FLOAT *pfTexelSignal, + UINT uWidth, + UINT uHeight, + UINT uSignalDimension, + UINT uComponents, + DWORD dwOptions, + LPD3DXUVATLASCB pStatusCallback, + LPVOID pUserContext, + LPD3DXBUFFER *ppIMTData); + +HRESULT WINAPI + D3DXConvertMeshSubsetToSingleStrip( + LPD3DXBASEMESH MeshIn, + DWORD AttribId, + DWORD IBOptions, + LPDIRECT3DINDEXBUFFER9 *ppIndexBuffer, + DWORD *pNumIndices); + +HRESULT WINAPI + D3DXConvertMeshSubsetToStrips( + LPD3DXBASEMESH MeshIn, + DWORD AttribId, + DWORD IBOptions, + LPDIRECT3DINDEXBUFFER9 *ppIndexBuffer, + DWORD *pNumIndices, + LPD3DXBUFFER *ppStripLengths, + DWORD *pNumStrips); + + +//============================================================================ +// +// D3DXOptimizeFaces: +// -------------------- +// Generate a face remapping for a triangle list that more effectively utilizes +// vertex caches. This optimization is identical to the one provided +// by ID3DXMesh::Optimize with the hardware independent option enabled. +// +// Parameters: +// pbIndices +// Triangle list indices to use for generating a vertex ordering +// NumFaces +// Number of faces in the triangle list +// NumVertices +// Number of vertices referenced by the triangle list +// b32BitIndices +// TRUE if indices are 32 bit, FALSE if indices are 16 bit +// pFaceRemap +// Destination buffer to store face ordering +// The number stored for a given element is where in the new ordering +// the face will have come from. See ID3DXMesh::Optimize for more info. +// +//============================================================================ +HRESULT WINAPI + D3DXOptimizeFaces( + LPCVOID pbIndices, + UINT cFaces, + UINT cVertices, + BOOL b32BitIndices, + DWORD* pFaceRemap); + +//============================================================================ +// +// D3DXOptimizeVertices: +// -------------------- +// Generate a vertex remapping to optimize for in order use of vertices for +// a given set of indices. This is commonly used after applying the face +// remap generated by D3DXOptimizeFaces +// +// Parameters: +// pbIndices +// Triangle list indices to use for generating a vertex ordering +// NumFaces +// Number of faces in the triangle list +// NumVertices +// Number of vertices referenced by the triangle list +// b32BitIndices +// TRUE if indices are 32 bit, FALSE if indices are 16 bit +// pVertexRemap +// Destination buffer to store vertex ordering +// The number stored for a given element is where in the new ordering +// the vertex will have come from. See ID3DXMesh::Optimize for more info. +// +//============================================================================ +HRESULT WINAPI + D3DXOptimizeVertices( + LPCVOID pbIndices, + UINT cFaces, + UINT cVertices, + BOOL b32BitIndices, + DWORD* pVertexRemap); + +#ifdef __cplusplus +} +#endif //__cplusplus + + +//=========================================================================== +// +// Data structures for Spherical Harmonic Precomputation +// +// +//============================================================================ + +typedef enum _D3DXSHCOMPRESSQUALITYTYPE { + D3DXSHCQUAL_FASTLOWQUALITY = 1, + D3DXSHCQUAL_SLOWHIGHQUALITY = 2, + D3DXSHCQUAL_FORCE_DWORD = 0x7fffffff +} D3DXSHCOMPRESSQUALITYTYPE; + +typedef enum _D3DXSHGPUSIMOPT { + D3DXSHGPUSIMOPT_SHADOWRES256 = 1, + D3DXSHGPUSIMOPT_SHADOWRES512 = 0, + D3DXSHGPUSIMOPT_SHADOWRES1024 = 2, + D3DXSHGPUSIMOPT_SHADOWRES2048 = 3, + + D3DXSHGPUSIMOPT_HIGHQUALITY = 4, + + D3DXSHGPUSIMOPT_FORCE_DWORD = 0x7fffffff +} D3DXSHGPUSIMOPT; + +// for all properties that are colors the luminance is computed +// if the simulator is run with a single channel using the following +// formula: R * 0.2125 + G * 0.7154 + B * 0.0721 + +typedef struct _D3DXSHMATERIAL { + D3DCOLORVALUE Diffuse; // Diffuse albedo of the surface. (Ignored if object is a Mirror) + BOOL bMirror; // Must be set to FALSE. bMirror == TRUE not currently supported + BOOL bSubSurf; // true if the object does subsurface scattering - can't do this and be a mirror + + // subsurface scattering parameters + FLOAT RelativeIndexOfRefraction; + D3DCOLORVALUE Absorption; + D3DCOLORVALUE ReducedScattering; + +} D3DXSHMATERIAL; + +// allocated in D3DXSHPRTCompSplitMeshSC +// vertices are duplicated into multiple super clusters but +// only have a valid status in one super cluster (fill in the rest) + +typedef struct _D3DXSHPRTSPLITMESHVERTDATA { + UINT uVertRemap; // vertex in original mesh this corresponds to + UINT uSubCluster; // cluster index relative to super cluster + UCHAR ucVertStatus; // 1 if vertex has valid data, 0 if it is "fill" +} D3DXSHPRTSPLITMESHVERTDATA; + +// used in D3DXSHPRTCompSplitMeshSC +// information for each super cluster that maps into face/vert arrays + +typedef struct _D3DXSHPRTSPLITMESHCLUSTERDATA { + UINT uVertStart; // initial index into remapped vertex array + UINT uVertLength; // number of vertices in this super cluster + + UINT uFaceStart; // initial index into face array + UINT uFaceLength; // number of faces in this super cluster + + UINT uClusterStart; // initial index into cluster array + UINT uClusterLength; // number of clusters in this super cluster +} D3DXSHPRTSPLITMESHCLUSTERDATA; + +// call back function for simulator +// return S_OK to keep running the simulator - anything else represents +// failure and the simulator will abort. + +typedef HRESULT (WINAPI *LPD3DXSHPRTSIMCB)(float fPercentDone, LPVOID lpUserContext); + +// interfaces for PRT buffers/simulator + +// GUIDs +// {F1827E47-00A8-49cd-908C-9D11955F8728} +DEFINE_GUID(IID_ID3DXPRTBuffer, +0xf1827e47, 0xa8, 0x49cd, 0x90, 0x8c, 0x9d, 0x11, 0x95, 0x5f, 0x87, 0x28); + +// {A758D465-FE8D-45ad-9CF0-D01E56266A07} +DEFINE_GUID(IID_ID3DXPRTCompBuffer, +0xa758d465, 0xfe8d, 0x45ad, 0x9c, 0xf0, 0xd0, 0x1e, 0x56, 0x26, 0x6a, 0x7); + +// {838F01EC-9729-4527-AADB-DF70ADE7FEA9} +DEFINE_GUID(IID_ID3DXTextureGutterHelper, +0x838f01ec, 0x9729, 0x4527, 0xaa, 0xdb, 0xdf, 0x70, 0xad, 0xe7, 0xfe, 0xa9); + +// {683A4278-CD5F-4d24-90AD-C4E1B6855D53} +DEFINE_GUID(IID_ID3DXPRTEngine, +0x683a4278, 0xcd5f, 0x4d24, 0x90, 0xad, 0xc4, 0xe1, 0xb6, 0x85, 0x5d, 0x53); + +// interface defenitions + +typedef interface ID3DXTextureGutterHelper ID3DXTextureGutterHelper; +typedef interface ID3DXPRTBuffer ID3DXPRTBuffer; + +#undef INTERFACE +#define INTERFACE ID3DXPRTBuffer + +// Buffer interface - contains "NumSamples" samples +// each sample in memory is stored as NumCoeffs scalars per channel (1 or 3) +// Same interface is used for both Vertex and Pixel PRT buffers + +DECLARE_INTERFACE_(ID3DXPRTBuffer, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXPRTBuffer + STDMETHOD_(UINT, GetNumSamples)(THIS) PURE; + STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE; + STDMETHOD_(UINT, GetNumChannels)(THIS) PURE; + + STDMETHOD_(BOOL, IsTexture)(THIS) PURE; + STDMETHOD_(UINT, GetWidth)(THIS) PURE; + STDMETHOD_(UINT, GetHeight)(THIS) PURE; + + // changes the number of samples allocated in the buffer + STDMETHOD(Resize)(THIS_ UINT NewSize) PURE; + + // ppData will point to the memory location where sample Start begins + // pointer is valid for at least NumSamples samples + STDMETHOD(LockBuffer)(THIS_ UINT Start, UINT NumSamples, FLOAT **ppData) PURE; + STDMETHOD(UnlockBuffer)(THIS) PURE; + + // every scalar in buffer is multiplied by Scale + STDMETHOD(ScaleBuffer)(THIS_ FLOAT Scale) PURE; + + // every scalar contains the sum of this and pBuffers values + // pBuffer must have the same storage class/dimensions + STDMETHOD(AddBuffer)(THIS_ LPD3DXPRTBUFFER pBuffer) PURE; + + // GutterHelper (described below) will fill in the gutter + // regions of a texture by interpolating "internal" values + STDMETHOD(AttachGH)(THIS_ LPD3DXTEXTUREGUTTERHELPER) PURE; + STDMETHOD(ReleaseGH)(THIS) PURE; + + // Evaluates attached gutter helper on the contents of this buffer + STDMETHOD(EvalGH)(THIS) PURE; + + // extracts a given channel into texture pTexture + // NumCoefficients starting from StartCoefficient are copied + STDMETHOD(ExtractTexture)(THIS_ UINT Channel, UINT StartCoefficient, + UINT NumCoefficients, LPDIRECT3DTEXTURE9 pTexture) PURE; + + // extracts NumCoefficients coefficients into mesh - only applicable on single channel + // buffers, otherwise just lockbuffer and copy data. With SHPRT data NumCoefficients + // should be Order^2 + STDMETHOD(ExtractToMesh)(THIS_ UINT NumCoefficients, D3DDECLUSAGE Usage, UINT UsageIndexStart, + LPD3DXMESH pScene) PURE; + +}; + +typedef interface ID3DXPRTCompBuffer ID3DXPRTCompBuffer; +typedef interface ID3DXPRTCompBuffer *LPD3DXPRTCOMPBUFFER; + +#undef INTERFACE +#define INTERFACE ID3DXPRTCompBuffer + +// compressed buffers stored a compressed version of a PRTBuffer + +DECLARE_INTERFACE_(ID3DXPRTCompBuffer, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DPRTCompBuffer + + // NumCoeffs and NumChannels are properties of input buffer + STDMETHOD_(UINT, GetNumSamples)(THIS) PURE; + STDMETHOD_(UINT, GetNumCoeffs)(THIS) PURE; + STDMETHOD_(UINT, GetNumChannels)(THIS) PURE; + + STDMETHOD_(BOOL, IsTexture)(THIS) PURE; + STDMETHOD_(UINT, GetWidth)(THIS) PURE; + STDMETHOD_(UINT, GetHeight)(THIS) PURE; + + // number of clusters, and PCA vectors per-cluster + STDMETHOD_(UINT, GetNumClusters)(THIS) PURE; + STDMETHOD_(UINT, GetNumPCA)(THIS) PURE; + + // normalizes PCA weights so that they are between [-1,1] + // basis vectors are modified to reflect this + STDMETHOD(NormalizeData)(THIS) PURE; + + // copies basis vectors for cluster "Cluster" into pClusterBasis + // (NumPCA+1)*NumCoeffs*NumChannels floats + STDMETHOD(ExtractBasis)(THIS_ UINT Cluster, FLOAT *pClusterBasis) PURE; + + // UINT per sample - which cluster it belongs to + STDMETHOD(ExtractClusterIDs)(THIS_ UINT *pClusterIDs) PURE; + + // copies NumExtract PCA projection coefficients starting at StartPCA + // into pPCACoefficients - NumSamples*NumExtract floats copied + STDMETHOD(ExtractPCA)(THIS_ UINT StartPCA, UINT NumExtract, FLOAT *pPCACoefficients) PURE; + + // copies NumPCA projection coefficients starting at StartPCA + // into pTexture - should be able to cope with signed formats + STDMETHOD(ExtractTexture)(THIS_ UINT StartPCA, UINT NumpPCA, + LPDIRECT3DTEXTURE9 pTexture) PURE; + + // copies NumPCA projection coefficients into mesh pScene + // Usage is D3DDECLUSAGE where coefficients are to be stored + // UsageIndexStart is starting index + STDMETHOD(ExtractToMesh)(THIS_ UINT NumPCA, D3DDECLUSAGE Usage, UINT UsageIndexStart, + LPD3DXMESH pScene) PURE; +}; + + +#undef INTERFACE +#define INTERFACE ID3DXTextureGutterHelper + +// ID3DXTextureGutterHelper will build and manage +// "gutter" regions in a texture - this will allow for +// bi-linear interpolation to not have artifacts when rendering +// It generates a map (in texture space) where each texel +// is in one of 3 states: +// 0 Invalid - not used at all +// 1 Inside triangle +// 2 Gutter texel +// 4 represents a gutter texel that will be computed during PRT +// For each Inside/Gutter texel it stores the face it +// belongs to and barycentric coordinates for the 1st two +// vertices of that face. Gutter vertices are assigned to +// the closest edge in texture space. +// +// When used with PRT this requires a unique parameterization +// of the model - every texel must correspond to a single point +// on the surface of the model and vice versa + +DECLARE_INTERFACE_(ID3DXTextureGutterHelper, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXTextureGutterHelper + + // dimensions of texture this is bound too + STDMETHOD_(UINT, GetWidth)(THIS) PURE; + STDMETHOD_(UINT, GetHeight)(THIS) PURE; + + + // Applying gutters recomputes all of the gutter texels of class "2" + // based on texels of class "1" or "4" + + // Applies gutters to a raw float buffer - each texel is NumCoeffs floats + // Width and Height must match GutterHelper + STDMETHOD(ApplyGuttersFloat)(THIS_ FLOAT *pDataIn, UINT NumCoeffs, UINT Width, UINT Height); + + // Applies gutters to pTexture + // Dimensions must match GutterHelper + STDMETHOD(ApplyGuttersTex)(THIS_ LPDIRECT3DTEXTURE9 pTexture); + + // Applies gutters to a D3DXPRTBuffer + // Dimensions must match GutterHelper + STDMETHOD(ApplyGuttersPRT)(THIS_ LPD3DXPRTBUFFER pBuffer); + + // Resamples a texture from a mesh onto this gutterhelpers + // parameterization. It is assumed that the UV coordinates + // for this gutter helper are in TEXTURE 0 (usage/usage index) + // and the texture coordinates should all be within [0,1] for + // both sets. + // + // pTextureIn - texture represented using parameterization in pMeshIn + // pMeshIn - Mesh with texture coordinates that represent pTextureIn + // pTextureOut texture coordinates are assumed to be in + // TEXTURE 0 + // Usage - field in DECL for pMeshIn that stores texture coordinates + // for pTextureIn + // UsageIndex - which index for Usage above for pTextureIn + // pTextureOut- Resampled texture + // + // Usage would generally be D3DDECLUSAGE_TEXCOORD and UsageIndex other than zero + STDMETHOD(ResampleTex)(THIS_ LPDIRECT3DTEXTURE9 pTextureIn, + LPD3DXMESH pMeshIn, + D3DDECLUSAGE Usage, UINT UsageIndex, + LPDIRECT3DTEXTURE9 pTextureOut); + + // the routines below provide access to the data structures + // used by the Apply functions + + // face map is a UINT per texel that represents the + // face of the mesh that texel belongs too - + // only valid if same texel is valid in pGutterData + // pFaceData must be allocated by the user + STDMETHOD(GetFaceMap)(THIS_ UINT *pFaceData) PURE; + + // BaryMap is a D3DXVECTOR2 per texel + // the 1st two barycentric coordinates for the corresponding + // face (3rd weight is always 1-sum of first two) + // only valid if same texel is valid in pGutterData + // pBaryData must be allocated by the user + STDMETHOD(GetBaryMap)(THIS_ D3DXVECTOR2 *pBaryData) PURE; + + // TexelMap is a D3DXVECTOR2 per texel that + // stores the location in pixel coordinates where the + // corresponding texel is mapped + // pTexelData must be allocated by the user + STDMETHOD(GetTexelMap)(THIS_ D3DXVECTOR2 *pTexelData) PURE; + + // GutterMap is a BYTE per texel + // 0/1/2 for Invalid/Internal/Gutter texels + // 4 represents a gutter texel that will be computed + // during PRT + // pGutterData must be allocated by the user + STDMETHOD(GetGutterMap)(THIS_ BYTE *pGutterData) PURE; + + // face map is a UINT per texel that represents the + // face of the mesh that texel belongs too - + // only valid if same texel is valid in pGutterData + STDMETHOD(SetFaceMap)(THIS_ UINT *pFaceData) PURE; + + // BaryMap is a D3DXVECTOR2 per texel + // the 1st two barycentric coordinates for the corresponding + // face (3rd weight is always 1-sum of first two) + // only valid if same texel is valid in pGutterData + STDMETHOD(SetBaryMap)(THIS_ D3DXVECTOR2 *pBaryData) PURE; + + // TexelMap is a D3DXVECTOR2 per texel that + // stores the location in pixel coordinates where the + // corresponding texel is mapped + STDMETHOD(SetTexelMap)(THIS_ D3DXVECTOR2 *pTexelData) PURE; + + // GutterMap is a BYTE per texel + // 0/1/2 for Invalid/Internal/Gutter texels + // 4 represents a gutter texel that will be computed + // during PRT + STDMETHOD(SetGutterMap)(THIS_ BYTE *pGutterData) PURE; +}; + + +typedef interface ID3DXPRTEngine ID3DXPRTEngine; +typedef interface ID3DXPRTEngine *LPD3DXPRTENGINE; + +#undef INTERFACE +#define INTERFACE ID3DXPRTEngine + +// ID3DXPRTEngine is used to compute a PRT simulation +// Use the following steps to compute PRT for SH +// (1) create an interface (which includes a scene) +// (2) call SetSamplingInfo +// (3) [optional] Set MeshMaterials/albedo's (required if doing bounces) +// (4) call ComputeDirectLightingSH +// (5) [optional] call ComputeBounce +// repeat step 5 for as many bounces as wanted. +// if you want to model subsurface scattering you +// need to call ComputeSS after direct lighting and +// each bounce. +// If you want to bake the albedo into the PRT signal, you +// must call MutliplyAlbedo, otherwise the user has to multiply +// the albedo themselves. Not multiplying the albedo allows you +// to model albedo variation at a finer scale then illumination, and +// can result in better compression results. +// Luminance values are computed from RGB values using the following +// formula: R * 0.2125 + G * 0.7154 + B * 0.0721 + +DECLARE_INTERFACE_(ID3DXPRTEngine, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXPRTEngine + + // This sets a material per attribute in the scene mesh and it is + // the only way to specify subsurface scattering parameters. if + // bSetAlbedo is FALSE, NumChannels must match the current + // configuration of the PRTEngine. If you intend to change + // NumChannels (through some other SetAlbedo function) it must + // happen before SetMeshMaterials is called. + // + // NumChannels 1 implies "grayscale" materials, set this to 3 to enable + // color bleeding effects + // bSetAlbedo sets albedo from material if TRUE - which clobbers per texel/vertex + // albedo that might have been set before. FALSE won't clobber. + // fLengthScale is used for subsurface scattering - scene is mapped into a 1mm unit cube + // and scaled by this amount + STDMETHOD(SetMeshMaterials)(THIS_ CONST D3DXSHMATERIAL **ppMaterials, UINT NumMeshes, + UINT NumChannels, BOOL bSetAlbedo, FLOAT fLengthScale) PURE; + + // setting albedo per-vertex or per-texel over rides the albedos stored per mesh + // but it does not over ride any other settings + + // sets an albedo to be used per vertex - the albedo is represented as a float + // pDataIn input pointer (pointint to albedo of 1st sample) + // NumChannels 1 implies "grayscale" materials, set this to 3 to enable + // color bleeding effects + // Stride - stride in bytes to get to next samples albedo + STDMETHOD(SetPerVertexAlbedo)(THIS_ CONST VOID *pDataIn, UINT NumChannels, UINT Stride) PURE; + + // represents the albedo per-texel instead of per-vertex (even if per-vertex PRT is used) + // pAlbedoTexture - texture that stores the albedo (dimension arbitrary) + // NumChannels 1 implies "grayscale" materials, set this to 3 to enable + // color bleeding effects + // pGH - optional gutter helper, otherwise one is constructed in computation routines and + // destroyed (if not attached to buffers) + STDMETHOD(SetPerTexelAlbedo)(THIS_ LPDIRECT3DTEXTURE9 pAlbedoTexture, + UINT NumChannels, + LPD3DXTEXTUREGUTTERHELPER pGH) PURE; + + // gets the per-vertex albedo + STDMETHOD(GetVertexAlbedo)(THIS_ D3DXCOLOR *pVertColors, UINT NumVerts) PURE; + + // If pixel PRT is being computed normals default to ones that are interpolated + // from the vertex normals. This specifies a texture that stores an object + // space normal map instead (must use a texture format that can represent signed values) + // pNormalTexture - normal map, must be same dimensions as PRTBuffers, signed + STDMETHOD(SetPerTexelNormal)(THIS_ LPDIRECT3DTEXTURE9 pNormalTexture) PURE; + + // Copies per-vertex albedo from mesh + // pMesh - mesh that represents the scene. It must have the same + // properties as the mesh used to create the PRTEngine + // Usage - D3DDECLUSAGE to extract albedos from + // NumChannels 1 implies "grayscale" materials, set this to 3 to enable + // color bleeding effects + STDMETHOD(ExtractPerVertexAlbedo)(THIS_ LPD3DXMESH pMesh, + D3DDECLUSAGE Usage, + UINT NumChannels) PURE; + + // Resamples the input buffer into the output buffer + // can be used to move between per-vertex and per-texel buffers. This can also be used + // to convert single channel buffers to 3-channel buffers and vice-versa. + STDMETHOD(ResampleBuffer)(THIS_ LPD3DXPRTBUFFER pBufferIn, LPD3DXPRTBUFFER pBufferOut) PURE; + + // Returns the scene mesh - including modifications from adaptive spatial sampling + // The returned mesh only has positions, normals and texture coordinates (if defined) + // pD3DDevice - d3d device that will be used to allocate the mesh + // pFaceRemap - each face has a pointer back to the face on the original mesh that it comes from + // if the face hasn't been subdivided this will be an identity mapping + // pVertRemap - each vertex contains 3 vertices that this is a linear combination of + // pVertWeights - weights for each of above indices (sum to 1.0f) + // ppMesh - mesh that will be allocated and filled + STDMETHOD(GetAdaptedMesh)(THIS_ LPDIRECT3DDEVICE9 pD3DDevice,UINT *pFaceRemap, UINT *pVertRemap, FLOAT *pfVertWeights, LPD3DXMESH *ppMesh) PURE; + + // Number of vertices currently allocated (includes new vertices from adaptive sampling) + STDMETHOD_(UINT, GetNumVerts)(THIS) PURE; + // Number of faces currently allocated (includes new faces) + STDMETHOD_(UINT, GetNumFaces)(THIS) PURE; + + // Sets the Minimum/Maximum intersection distances, this can be used to control + // maximum distance that objects can shadow/reflect light, and help with "bad" + // art that might have near features that you don't want to shadow. This does not + // apply for GPU simulations. + // fMin - minimum intersection distance, must be positive and less than fMax + // fMax - maximum intersection distance, if 0.0f use the previous value, otherwise + // must be strictly greater than fMin + STDMETHOD(SetMinMaxIntersection)(THIS_ FLOAT fMin, FLOAT fMax) PURE; + + // This will subdivide faces on a mesh so that adaptively simulations can + // use a more conservative threshold (it won't miss features.) + // MinEdgeLength - minimum edge length that will be generated, if 0.0f a + // reasonable default will be used + // MaxSubdiv - maximum level of subdivision, if 0 is specified a default + // value will be used (5) + STDMETHOD(RobustMeshRefine)(THIS_ FLOAT MinEdgeLength, UINT MaxSubdiv) PURE; + + // This sets to sampling information used by the simulator. Adaptive sampling + // parameters are currently ignored. + // NumRays - number of rays to shoot per sample + // UseSphere - if TRUE uses spherical samples, otherwise samples over + // the hemisphere. Should only be used with GPU and Vol computations + // UseCosine - if TRUE uses a cosine weighting - not used for Vol computations + // or if only the visiblity function is desired + // Adaptive - if TRUE adaptive sampling (angular) is used + // AdaptiveThresh - threshold used to terminate adaptive angular sampling + // ignored if adaptive sampling is not set + STDMETHOD(SetSamplingInfo)(THIS_ UINT NumRays, + BOOL UseSphere, + BOOL UseCosine, + BOOL Adaptive, + FLOAT AdaptiveThresh) PURE; + + // Methods that compute the direct lighting contribution for objects + // always represente light using spherical harmonics (SH) + // the albedo is not multiplied by the signal - it just integrates + // incoming light. If NumChannels is not 1 the vector is replicated + // + // SHOrder - order of SH to use + // pDataOut - PRT buffer that is generated. Can be single channel + STDMETHOD(ComputeDirectLightingSH)(THIS_ UINT SHOrder, + LPD3DXPRTBUFFER pDataOut) PURE; + + // Adaptive variant of above function. This will refine the mesh + // generating new vertices/faces to approximate the PRT signal + // more faithfully. + // SHOrder - order of SH to use + // AdaptiveThresh - threshold for adaptive subdivision (in PRT vector error) + // if value is less then 1e-6f, 1e-6f is specified + // MinEdgeLength - minimum edge length that will be generated + // if value is too small a fairly conservative model dependent value + // is used + // MaxSubdiv - maximum subdivision level, if 0 is specified it + // will default to 4 + // pDataOut - PRT buffer that is generated. Can be single channel. + STDMETHOD(ComputeDirectLightingSHAdaptive)(THIS_ UINT SHOrder, + FLOAT AdaptiveThresh, + FLOAT MinEdgeLength, + UINT MaxSubdiv, + LPD3DXPRTBUFFER pDataOut) PURE; + + // Function that computes the direct lighting contribution for objects + // light is always represented using spherical harmonics (SH) + // This is done on the GPU and is much faster then using the CPU. + // The albedo is not multiplied by the signal - it just integrates + // incoming light. If NumChannels is not 1 the vector is replicated. + // ZBias/ZAngleBias are akin to parameters used with shadow zbuffers. + // A reasonable default for both values is 0.005, but the user should + // experiment (ZAngleBias can be zero, ZBias should not be.) + // Callbacks should not use the Direct3D9Device the simulator is using. + // SetSamplingInfo must be called with TRUE for UseSphere and + // FALSE for UseCosine before this method is called. + // + // pD3DDevice - device used to run GPU simulator - must support PS2.0 + // and FP render targets + // Flags - parameters for the GPU simulator, combination of one or more + // D3DXSHGPUSIMOPT flags. Only one SHADOWRES setting should be set and + // the defaults is 512 + // SHOrder - order of SH to use + // ZBias - bias in normal direction (for depth test) + // ZAngleBias - scaled by one minus cosine of angle with light (offset in depth) + // pDataOut - PRT buffer that is filled in. Can be single channel + STDMETHOD(ComputeDirectLightingSHGPU)(THIS_ LPDIRECT3DDEVICE9 pD3DDevice, + UINT Flags, + UINT SHOrder, + FLOAT ZBias, + FLOAT ZAngleBias, + LPD3DXPRTBUFFER pDataOut) PURE; + + + // Functions that computes subsurface scattering (using material properties) + // Albedo is not multiplied by result. This only works for per-vertex data + // use ResampleBuffer to move per-vertex data into a texture and back. + // + // pDataIn - input data (previous bounce) + // pDataOut - result of subsurface scattering simulation + // pDataTotal - [optional] results can be summed into this buffer + STDMETHOD(ComputeSS)(THIS_ LPD3DXPRTBUFFER pDataIn, + LPD3DXPRTBUFFER pDataOut, LPD3DXPRTBUFFER pDataTotal) PURE; + + // Adaptive version of ComputeSS. + // + // pDataIn - input data (previous bounce) + // AdaptiveThresh - threshold for adaptive subdivision (in PRT vector error) + // if value is less then 1e-6f, 1e-6f is specified + // MinEdgeLength - minimum edge length that will be generated + // if value is too small a fairly conservative model dependent value + // is used + // MaxSubdiv - maximum subdivision level, if 0 is specified it + // will default to 4 + // pDataOut - result of subsurface scattering simulation + // pDataTotal - [optional] results can be summed into this buffer + STDMETHOD(ComputeSSAdaptive)(THIS_ LPD3DXPRTBUFFER pDataIn, + FLOAT AdaptiveThresh, + FLOAT MinEdgeLength, + UINT MaxSubdiv, + LPD3DXPRTBUFFER pDataOut, LPD3DXPRTBUFFER pDataTotal) PURE; + + // computes a single bounce of inter-reflected light + // works for SH based PRT or generic lighting + // Albedo is not multiplied by result + // + // pDataIn - previous bounces data + // pDataOut - PRT buffer that is generated + // pDataTotal - [optional] can be used to keep a running sum + STDMETHOD(ComputeBounce)(THIS_ LPD3DXPRTBUFFER pDataIn, + LPD3DXPRTBUFFER pDataOut, + LPD3DXPRTBUFFER pDataTotal) PURE; + + // Adaptive version of above function. + // + // pDataIn - previous bounces data, can be single channel + // AdaptiveThresh - threshold for adaptive subdivision (in PRT vector error) + // if value is less then 1e-6f, 1e-6f is specified + // MinEdgeLength - minimum edge length that will be generated + // if value is too small a fairly conservative model dependent value + // is used + // MaxSubdiv - maximum subdivision level, if 0 is specified it + // will default to 4 + // pDataOut - PRT buffer that is generated + // pDataTotal - [optional] can be used to keep a running sum + STDMETHOD(ComputeBounceAdaptive)(THIS_ LPD3DXPRTBUFFER pDataIn, + FLOAT AdaptiveThresh, + FLOAT MinEdgeLength, + UINT MaxSubdiv, + LPD3DXPRTBUFFER pDataOut, + LPD3DXPRTBUFFER pDataTotal) PURE; + + // Computes projection of distant SH radiance into a local SH radiance + // function. This models how direct lighting is attenuated by the + // scene and is a form of "neighborhood transfer." The result is + // a linear operator (matrix) at every sample point, if you multiply + // this matrix by the distant SH lighting coefficients you get an + // approximation of the local incident radiance function from + // direct lighting. These resulting lighting coefficients can + // than be projected into another basis or used with any rendering + // technique that uses spherical harmonics as input. + // SetSamplingInfo must be called with TRUE for UseSphere and + // FALSE for UseCosine before this method is called. + // Generates SHOrderIn*SHOrderIn*SHOrderOut*SHOrderOut scalars + // per channel at each sample location. + // + // SHOrderIn - Order of the SH representation of distant lighting + // SHOrderOut - Order of the SH representation of local lighting + // NumVolSamples - Number of sample locations + // pSampleLocs - position of sample locations + // pDataOut - PRT Buffer that will store output results + STDMETHOD(ComputeVolumeSamplesDirectSH)(THIS_ UINT SHOrderIn, + UINT SHOrderOut, + UINT NumVolSamples, + CONST D3DXVECTOR3 *pSampleLocs, + LPD3DXPRTBUFFER pDataOut) PURE; + + // At each sample location computes a linear operator (matrix) that maps + // the representation of source radiance (NumCoeffs in pSurfDataIn) + // into a local incident radiance function approximated with spherical + // harmonics. For example if a light map data is specified in pSurfDataIn + // the result is an SH representation of the flow of light at each sample + // point. If PRT data for an outdoor scene is used, each sample point + // contains a matrix that models how distant lighting bounces of the objects + // in the scene and arrives at the given sample point. Combined with + // ComputeVolumeSamplesDirectSH this gives the complete representation for + // how light arrives at each sample point parameterized by distant lighting. + // SetSamplingInfo must be called with TRUE for UseSphere and + // FALSE for UseCosine before this method is called. + // Generates pSurfDataIn->NumCoeffs()*SHOrder*SHOrder scalars + // per channel at each sample location. + // + // pSurfDataIn - previous bounce data + // SHOrder - order of SH to generate projection with + // NumVolSamples - Number of sample locations + // pSampleLocs - position of sample locations + // pDataOut - PRT Buffer that will store output results + STDMETHOD(ComputeVolumeSamples)(THIS_ LPD3DXPRTBUFFER pSurfDataIn, + UINT SHOrder, + UINT NumVolSamples, + CONST D3DXVECTOR3 *pSampleLocs, + LPD3DXPRTBUFFER pDataOut) PURE; + + // Computes direct lighting (SH) for a point not on the mesh + // with a given normal - cannot use texture buffers. + // + // SHOrder - order of SH to use + // NumSamples - number of sample locations + // pSampleLocs - position for each sample + // pSampleNorms - normal for each sample + // pDataOut - PRT Buffer that will store output results + STDMETHOD(ComputeSurfSamplesDirectSH)(THIS_ UINT SHOrder, + UINT NumSamples, + CONST D3DXVECTOR3 *pSampleLocs, + CONST D3DXVECTOR3 *pSampleNorms, + LPD3DXPRTBUFFER pDataOut) PURE; + + + // given the solution for PRT or light maps, computes transfer vector at arbitrary + // position/normal pairs in space + // + // pSurfDataIn - input data + // NumSamples - number of sample locations + // pSampleLocs - position for each sample + // pSampleNorms - normal for each sample + // pDataOut - PRT Buffer that will store output results + // pDataTotal - optional buffer to sum results into - can be NULL + STDMETHOD(ComputeSurfSamplesBounce)(THIS_ LPD3DXPRTBUFFER pSurfDataIn, + UINT NumSamples, + CONST D3DXVECTOR3 *pSampleLocs, + CONST D3DXVECTOR3 *pSampleNorms, + LPD3DXPRTBUFFER pDataOut, + LPD3DXPRTBUFFER pDataTotal) PURE; + + // Frees temporary data structures that can be created for subsurface scattering + // this data is freed when the PRTComputeEngine is freed and is lazily created + STDMETHOD(FreeSSData)(THIS) PURE; + + // Frees temporary data structures that can be created for bounce simulations + // this data is freed when the PRTComputeEngine is freed and is lazily created + STDMETHOD(FreeBounceData)(THIS) PURE; + + // This computes the Local Deformable PRT (LDPRT) coefficients relative to the + // per sample normals that minimize error in a least squares sense with respect + // to the input PRT data set. These coefficients can be used with skinned/transformed + // normals to model global effects with dynamic objects. Shading normals can + // optionally be solved for - these normals (along with the LDPRT coefficients) can + // more accurately represent the PRT signal. The coefficients are for zonal + // harmonics oriented in the normal/shading normal direction. + // + // pDataIn - SH PRT dataset that is input + // SHOrder - Order of SH to compute conv coefficients for + // pNormOut - Optional array of vectors (passed in) that will be filled with + // "shading normals", LDPRT coefficients are optimized for + // these normals. This array must be the same size as the number of + // samples in pDataIn + // pDataOut - Output buffer (SHOrder zonal harmonic coefficients per channel per sample) + STDMETHOD(ComputeLDPRTCoeffs)(THIS_ LPD3DXPRTBUFFER pDataIn, + UINT SHOrder, + D3DXVECTOR3 *pNormOut, + LPD3DXPRTBUFFER pDataOut) PURE; + + // scales all the samples associated with a given sub mesh + // can be useful when using subsurface scattering + // fScale - value to scale each vector in submesh by + STDMETHOD(ScaleMeshChunk)(THIS_ UINT uMeshChunk, FLOAT fScale, LPD3DXPRTBUFFER pDataOut) PURE; + + // mutliplies each PRT vector by the albedo - can be used if you want to have the albedo + // burned into the dataset, often better not to do this. If this is not done the user + // must mutliply the albedo themselves when rendering - just multiply the albedo times + // the result of the PRT dot product. + // If pDataOut is a texture simulation result and there is an albedo texture it + // must be represented at the same resolution as the simulation buffer. You can use + // LoadSurfaceFromSurface and set a new albedo texture if this is an issue - but must + // be careful about how the gutters are handled. + // + // pDataOut - dataset that will get albedo pushed into it + STDMETHOD(MultiplyAlbedo)(THIS_ LPD3DXPRTBUFFER pDataOut) PURE; + + // Sets a pointer to an optional call back function that reports back to the + // user percentage done and gives them the option of quitting + // pCB - pointer to call back function, return S_OK for the simulation + // to continue + // Frequency - 1/Frequency is roughly the number of times the call back + // will be invoked + // lpUserContext - will be passed back to the users call back + STDMETHOD(SetCallBack)(THIS_ LPD3DXSHPRTSIMCB pCB, FLOAT Frequency, LPVOID lpUserContext) PURE; + + // Returns TRUE if the ray intersects the mesh, FALSE if it does not. This function + // takes into account settings from SetMinMaxIntersection. If the closest intersection + // is not needed this function is more efficient compared to the ClosestRayIntersection + // method. + // pRayPos - origin of ray + // pRayDir - normalized ray direction (normalization required for SetMinMax to be meaningful) + + STDMETHOD_(BOOL, ShadowRayIntersects)(THIS_ CONST D3DXVECTOR3 *pRayPos, CONST D3DXVECTOR3 *pRayDir) PURE; + + // Returns TRUE if the ray intersects the mesh, FALSE if it does not. If there is an + // intersection the closest face that was intersected and its first two barycentric coordinates + // are returned. This function takes into account settings from SetMinMaxIntersection. + // This is a slower function compared to ShadowRayIntersects and should only be used where + // needed. The third vertices barycentric coordinates will be 1 - pU - pV. + // pRayPos - origin of ray + // pRayDir - normalized ray direction (normalization required for SetMinMax to be meaningful) + // pFaceIndex - Closest face that intersects. This index is based on stacking the pBlockerMesh + // faces before the faces from pMesh + // pU - Barycentric coordinate for vertex 0 + // pV - Barycentric coordinate for vertex 1 + // pDist - Distance along ray where the intersection occured + + STDMETHOD_(BOOL, ClosestRayIntersects)(THIS_ CONST D3DXVECTOR3 *pRayPos, CONST D3DXVECTOR3 *pRayDir, + DWORD *pFaceIndex, FLOAT *pU, FLOAT *pV, FLOAT *pDist) PURE; +}; + + +// API functions for creating interfaces + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + +//============================================================================ +// +// D3DXCreatePRTBuffer: +// -------------------- +// Generates a PRT Buffer that can be compressed or filled by a simulator +// This function should be used to create per-vertex or volume buffers. +// When buffers are created all values are initialized to zero. +// +// Parameters: +// NumSamples +// Number of sample locations represented +// NumCoeffs +// Number of coefficients per sample location (order^2 for SH) +// NumChannels +// Number of color channels to represent (1 or 3) +// ppBuffer +// Buffer that will be allocated +// +//============================================================================ + +HRESULT WINAPI + D3DXCreatePRTBuffer( + UINT NumSamples, + UINT NumCoeffs, + UINT NumChannels, + LPD3DXPRTBUFFER* ppBuffer); + +//============================================================================ +// +// D3DXCreatePRTBufferTex: +// -------------------- +// Generates a PRT Buffer that can be compressed or filled by a simulator +// This function should be used to create per-pixel buffers. +// When buffers are created all values are initialized to zero. +// +// Parameters: +// Width +// Width of texture +// Height +// Height of texture +// NumCoeffs +// Number of coefficients per sample location (order^2 for SH) +// NumChannels +// Number of color channels to represent (1 or 3) +// ppBuffer +// Buffer that will be allocated +// +//============================================================================ + +HRESULT WINAPI + D3DXCreatePRTBufferTex( + UINT Width, + UINT Height, + UINT NumCoeffs, + UINT NumChannels, + LPD3DXPRTBUFFER* ppBuffer); + +//============================================================================ +// +// D3DXLoadPRTBufferFromFile: +// -------------------- +// Loads a PRT buffer that has been saved to disk. +// +// Parameters: +// pFilename +// Name of the file to load +// ppBuffer +// Buffer that will be allocated +// +//============================================================================ + +HRESULT WINAPI + D3DXLoadPRTBufferFromFileA( + LPCSTR pFilename, + LPD3DXPRTBUFFER* ppBuffer); + +HRESULT WINAPI + D3DXLoadPRTBufferFromFileW( + LPCWSTR pFilename, + LPD3DXPRTBUFFER* ppBuffer); + +#ifdef UNICODE +#define D3DXLoadPRTBufferFromFile D3DXLoadPRTBufferFromFileW +#else +#define D3DXLoadPRTBufferFromFile D3DXLoadPRTBufferFromFileA +#endif + + +//============================================================================ +// +// D3DXSavePRTBufferToFile: +// -------------------- +// Saves a PRTBuffer to disk. +// +// Parameters: +// pFilename +// Name of the file to save +// pBuffer +// Buffer that will be saved +// +//============================================================================ + +HRESULT WINAPI + D3DXSavePRTBufferToFileA( + LPCSTR pFileName, + LPD3DXPRTBUFFER pBuffer); + +HRESULT WINAPI + D3DXSavePRTBufferToFileW( + LPCWSTR pFileName, + LPD3DXPRTBUFFER pBuffer); + +#ifdef UNICODE +#define D3DXSavePRTBufferToFile D3DXSavePRTBufferToFileW +#else +#define D3DXSavePRTBufferToFile D3DXSavePRTBufferToFileA +#endif + + +//============================================================================ +// +// D3DXLoadPRTCompBufferFromFile: +// -------------------- +// Loads a PRTComp buffer that has been saved to disk. +// +// Parameters: +// pFilename +// Name of the file to load +// ppBuffer +// Buffer that will be allocated +// +//============================================================================ + +HRESULT WINAPI + D3DXLoadPRTCompBufferFromFileA( + LPCSTR pFilename, + LPD3DXPRTCOMPBUFFER* ppBuffer); + +HRESULT WINAPI + D3DXLoadPRTCompBufferFromFileW( + LPCWSTR pFilename, + LPD3DXPRTCOMPBUFFER* ppBuffer); + +#ifdef UNICODE +#define D3DXLoadPRTCompBufferFromFile D3DXLoadPRTCompBufferFromFileW +#else +#define D3DXLoadPRTCompBufferFromFile D3DXLoadPRTCompBufferFromFileA +#endif + +//============================================================================ +// +// D3DXSavePRTCompBufferToFile: +// -------------------- +// Saves a PRTCompBuffer to disk. +// +// Parameters: +// pFilename +// Name of the file to save +// pBuffer +// Buffer that will be saved +// +//============================================================================ + +HRESULT WINAPI + D3DXSavePRTCompBufferToFileA( + LPCSTR pFileName, + LPD3DXPRTCOMPBUFFER pBuffer); + +HRESULT WINAPI + D3DXSavePRTCompBufferToFileW( + LPCWSTR pFileName, + LPD3DXPRTCOMPBUFFER pBuffer); + +#ifdef UNICODE +#define D3DXSavePRTCompBufferToFile D3DXSavePRTCompBufferToFileW +#else +#define D3DXSavePRTCompBufferToFile D3DXSavePRTCompBufferToFileA +#endif + +//============================================================================ +// +// D3DXCreatePRTCompBuffer: +// -------------------- +// Compresses a PRT buffer (vertex or texel) +// +// Parameters: +// D3DXSHCOMPRESSQUALITYTYPE +// Quality of compression - low is faster (computes PCA per voronoi cluster) +// high is slower but better quality (clusters based on distance to affine subspace) +// NumClusters +// Number of clusters to compute +// NumPCA +// Number of basis vectors to compute +// pCB +// Optional Callback function +// lpUserContext +// Optional user context +// pBufferIn +// Buffer that will be compressed +// ppBufferOut +// Compressed buffer that will be created +// +//============================================================================ + + +HRESULT WINAPI + D3DXCreatePRTCompBuffer( + D3DXSHCOMPRESSQUALITYTYPE Quality, + UINT NumClusters, + UINT NumPCA, + LPD3DXSHPRTSIMCB pCB, + LPVOID lpUserContext, + LPD3DXPRTBUFFER pBufferIn, + LPD3DXPRTCOMPBUFFER *ppBufferOut + ); + +//============================================================================ +// +// D3DXCreateTextureGutterHelper: +// -------------------- +// Generates a "GutterHelper" for a given set of meshes and texture +// resolution +// +// Parameters: +// Width +// Width of texture +// Height +// Height of texture +// pMesh +// Mesh that represents the scene +// GutterSize +// Number of texels to over rasterize in texture space +// this should be at least 1.0 +// ppBuffer +// GutterHelper that will be created +// +//============================================================================ + + +HRESULT WINAPI + D3DXCreateTextureGutterHelper( + UINT Width, + UINT Height, + LPD3DXMESH pMesh, + FLOAT GutterSize, + LPD3DXTEXTUREGUTTERHELPER* ppBuffer); + + +//============================================================================ +// +// D3DXCreatePRTEngine: +// -------------------- +// Computes a PRTEngine which can efficiently generate PRT simulations +// of a scene +// +// Parameters: +// pMesh +// Mesh that represents the scene - must have an AttributeTable +// where vertices are in a unique attribute. +// pAdjacency +// Optional adjacency information +// ExtractUVs +// Set this to true if textures are going to be used for albedos +// or to store PRT vectors +// pBlockerMesh +// Optional mesh that just blocks the scene +// ppEngine +// PRTEngine that will be created +// +//============================================================================ + + +HRESULT WINAPI + D3DXCreatePRTEngine( + LPD3DXMESH pMesh, + DWORD *pAdjacency, + BOOL ExtractUVs, + LPD3DXMESH pBlockerMesh, + LPD3DXPRTENGINE* ppEngine); + +//============================================================================ +// +// D3DXConcatenateMeshes: +// -------------------- +// Concatenates a group of meshes into one common mesh. This can optionaly transform +// each sub mesh or its texture coordinates. If no DECL is given it will +// generate a union of all of the DECL's of the sub meshes, promoting channels +// and types if neccesary. It will create an AttributeTable if possible, one can +// call OptimizeMesh with attribute sort and compacting enabled to ensure this. +// +// Parameters: +// ppMeshes +// Array of pointers to meshes that can store PRT vectors +// NumMeshes +// Number of meshes +// Options +// Passed through to D3DXCreateMesh +// pGeomXForms +// [optional] Each sub mesh is transformed by the corresponding +// matrix if this array is supplied +// pTextureXForms +// [optional] UV coordinates for each sub mesh are transformed +// by corresponding matrix if supplied +// pDecl +// [optional] Only information in this DECL is used when merging +// data +// pD3DDevice +// D3D device that is used to create the new mesh +// ppMeshOut +// Mesh that will be created +// +//============================================================================ + + +HRESULT WINAPI + D3DXConcatenateMeshes( + LPD3DXMESH *ppMeshes, + UINT NumMeshes, + DWORD Options, + CONST D3DXMATRIX *pGeomXForms, + CONST D3DXMATRIX *pTextureXForms, + CONST D3DVERTEXELEMENT9 *pDecl, + LPDIRECT3DDEVICE9 pD3DDevice, + LPD3DXMESH *ppMeshOut); + +//============================================================================ +// +// D3DXSHPRTCompSuperCluster: +// -------------------------- +// Used with compressed results of D3DXSHPRTSimulation. +// Generates "super clusters" - groups of clusters that can be drawn in +// the same draw call. A greedy algorithm that minimizes overdraw is used +// to group the clusters. +// +// Parameters: +// pClusterIDs +// NumVerts cluster ID's (extracted from a compressed buffer) +// pScene +// Mesh that represents composite scene passed to the simulator +// MaxNumClusters +// Maximum number of clusters allocated per super cluster +// NumClusters +// Number of clusters computed in the simulator +// pSuperClusterIDs +// Array of length NumClusters, contains index of super cluster +// that corresponding cluster was assigned to +// pNumSuperClusters +// Returns the number of super clusters allocated +// +//============================================================================ + +HRESULT WINAPI + D3DXSHPRTCompSuperCluster( + UINT *pClusterIDs, + LPD3DXMESH pScene, + UINT MaxNumClusters, + UINT NumClusters, + UINT *pSuperClusterIDs, + UINT *pNumSuperClusters); + +//============================================================================ +// +// D3DXSHPRTCompSplitMeshSC: +// ------------------------- +// Used with compressed results of the vertex version of the PRT simulator. +// After D3DXSHRTCompSuperCluster has been called this function can be used +// to split the mesh into a group of faces/vertices per super cluster. +// Each super cluster contains all of the faces that contain any vertex +// classified in one of its clusters. All of the vertices connected to this +// set of faces are also included with the returned array ppVertStatus +// indicating whether or not the vertex belongs to the supercluster. +// +// Parameters: +// pClusterIDs +// NumVerts cluster ID's (extracted from a compressed buffer) +// NumVertices +// Number of vertices in original mesh +// NumClusters +// Number of clusters (input parameter to compression) +// pSuperClusterIDs +// Array of size NumClusters that will contain super cluster ID's (from +// D3DXSHCompSuerCluster) +// NumSuperClusters +// Number of superclusters allocated in D3DXSHCompSuerCluster +// pInputIB +// Raw index buffer for mesh - format depends on bInputIBIs32Bit +// InputIBIs32Bit +// Indicates whether the input index buffer is 32-bit (otherwise 16-bit +// is assumed) +// NumFaces +// Number of faces in the original mesh (pInputIB is 3 times this length) +// ppIBData +// LPD3DXBUFFER holds raw index buffer that will contain the resulting split faces. +// Format determined by bIBIs32Bit. Allocated by function +// pIBDataLength +// Length of ppIBData, assigned in function +// OutputIBIs32Bit +// Indicates whether the output index buffer is to be 32-bit (otherwise +// 16-bit is assumed) +// ppFaceRemap +// LPD3DXBUFFER mapping of each face in ppIBData to original faces. Length is +// *pIBDataLength/3. Optional paramter, allocated in function +// ppVertData +// LPD3DXBUFFER contains new vertex data structure. Size of pVertDataLength +// pVertDataLength +// Number of new vertices in split mesh. Assigned in function +// pSCClusterList +// Array of length NumClusters which pSCData indexes into (Cluster* fields) +// for each SC, contains clusters sorted by super cluster +// pSCData +// Structure per super cluster - contains indices into ppIBData, +// pSCClusterList and ppVertData +// +//============================================================================ + +HRESULT WINAPI + D3DXSHPRTCompSplitMeshSC( + UINT *pClusterIDs, + UINT NumVertices, + UINT NumClusters, + UINT *pSuperClusterIDs, + UINT NumSuperClusters, + LPVOID pInputIB, + BOOL InputIBIs32Bit, + UINT NumFaces, + LPD3DXBUFFER *ppIBData, + UINT *pIBDataLength, + BOOL OutputIBIs32Bit, + LPD3DXBUFFER *ppFaceRemap, + LPD3DXBUFFER *ppVertData, + UINT *pVertDataLength, + UINT *pSCClusterList, + D3DXSHPRTSPLITMESHCLUSTERDATA *pSCData); + + +#ifdef __cplusplus +} +#endif //__cplusplus + +////////////////////////////////////////////////////////////////////////////// +// +// Definitions of .X file templates used by mesh load/save functions +// that are not RM standard +// +////////////////////////////////////////////////////////////////////////////// + +// {3CF169CE-FF7C-44ab-93C0-F78F62D172E2} +DEFINE_GUID(DXFILEOBJ_XSkinMeshHeader, +0x3cf169ce, 0xff7c, 0x44ab, 0x93, 0xc0, 0xf7, 0x8f, 0x62, 0xd1, 0x72, 0xe2); + +// {B8D65549-D7C9-4995-89CF-53A9A8B031E3} +DEFINE_GUID(DXFILEOBJ_VertexDuplicationIndices, +0xb8d65549, 0xd7c9, 0x4995, 0x89, 0xcf, 0x53, 0xa9, 0xa8, 0xb0, 0x31, 0xe3); + +// {A64C844A-E282-4756-8B80-250CDE04398C} +DEFINE_GUID(DXFILEOBJ_FaceAdjacency, +0xa64c844a, 0xe282, 0x4756, 0x8b, 0x80, 0x25, 0xc, 0xde, 0x4, 0x39, 0x8c); + +// {6F0D123B-BAD2-4167-A0D0-80224F25FABB} +DEFINE_GUID(DXFILEOBJ_SkinWeights, +0x6f0d123b, 0xbad2, 0x4167, 0xa0, 0xd0, 0x80, 0x22, 0x4f, 0x25, 0xfa, 0xbb); + +// {A3EB5D44-FC22-429d-9AFB-3221CB9719A6} +DEFINE_GUID(DXFILEOBJ_Patch, +0xa3eb5d44, 0xfc22, 0x429d, 0x9a, 0xfb, 0x32, 0x21, 0xcb, 0x97, 0x19, 0xa6); + +// {D02C95CC-EDBA-4305-9B5D-1820D7704BBF} +DEFINE_GUID(DXFILEOBJ_PatchMesh, +0xd02c95cc, 0xedba, 0x4305, 0x9b, 0x5d, 0x18, 0x20, 0xd7, 0x70, 0x4b, 0xbf); + +// {B9EC94E1-B9A6-4251-BA18-94893F02C0EA} +DEFINE_GUID(DXFILEOBJ_PatchMesh9, +0xb9ec94e1, 0xb9a6, 0x4251, 0xba, 0x18, 0x94, 0x89, 0x3f, 0x2, 0xc0, 0xea); + +// {B6C3E656-EC8B-4b92-9B62-681659522947} +DEFINE_GUID(DXFILEOBJ_PMInfo, +0xb6c3e656, 0xec8b, 0x4b92, 0x9b, 0x62, 0x68, 0x16, 0x59, 0x52, 0x29, 0x47); + +// {917E0427-C61E-4a14-9C64-AFE65F9E9844} +DEFINE_GUID(DXFILEOBJ_PMAttributeRange, +0x917e0427, 0xc61e, 0x4a14, 0x9c, 0x64, 0xaf, 0xe6, 0x5f, 0x9e, 0x98, 0x44); + +// {574CCC14-F0B3-4333-822D-93E8A8A08E4C} +DEFINE_GUID(DXFILEOBJ_PMVSplitRecord, +0x574ccc14, 0xf0b3, 0x4333, 0x82, 0x2d, 0x93, 0xe8, 0xa8, 0xa0, 0x8e, 0x4c); + +// {B6E70A0E-8EF9-4e83-94AD-ECC8B0C04897} +DEFINE_GUID(DXFILEOBJ_FVFData, +0xb6e70a0e, 0x8ef9, 0x4e83, 0x94, 0xad, 0xec, 0xc8, 0xb0, 0xc0, 0x48, 0x97); + +// {F752461C-1E23-48f6-B9F8-8350850F336F} +DEFINE_GUID(DXFILEOBJ_VertexElement, +0xf752461c, 0x1e23, 0x48f6, 0xb9, 0xf8, 0x83, 0x50, 0x85, 0xf, 0x33, 0x6f); + +// {BF22E553-292C-4781-9FEA-62BD554BDD93} +DEFINE_GUID(DXFILEOBJ_DeclData, +0xbf22e553, 0x292c, 0x4781, 0x9f, 0xea, 0x62, 0xbd, 0x55, 0x4b, 0xdd, 0x93); + +// {F1CFE2B3-0DE3-4e28-AFA1-155A750A282D} +DEFINE_GUID(DXFILEOBJ_EffectFloats, +0xf1cfe2b3, 0xde3, 0x4e28, 0xaf, 0xa1, 0x15, 0x5a, 0x75, 0xa, 0x28, 0x2d); + +// {D55B097E-BDB6-4c52-B03D-6051C89D0E42} +DEFINE_GUID(DXFILEOBJ_EffectString, +0xd55b097e, 0xbdb6, 0x4c52, 0xb0, 0x3d, 0x60, 0x51, 0xc8, 0x9d, 0xe, 0x42); + +// {622C0ED0-956E-4da9-908A-2AF94F3CE716} +DEFINE_GUID(DXFILEOBJ_EffectDWord, +0x622c0ed0, 0x956e, 0x4da9, 0x90, 0x8a, 0x2a, 0xf9, 0x4f, 0x3c, 0xe7, 0x16); + +// {3014B9A0-62F5-478c-9B86-E4AC9F4E418B} +DEFINE_GUID(DXFILEOBJ_EffectParamFloats, +0x3014b9a0, 0x62f5, 0x478c, 0x9b, 0x86, 0xe4, 0xac, 0x9f, 0x4e, 0x41, 0x8b); + +// {1DBC4C88-94C1-46ee-9076-2C28818C9481} +DEFINE_GUID(DXFILEOBJ_EffectParamString, +0x1dbc4c88, 0x94c1, 0x46ee, 0x90, 0x76, 0x2c, 0x28, 0x81, 0x8c, 0x94, 0x81); + +// {E13963BC-AE51-4c5d-B00F-CFA3A9D97CE5} +DEFINE_GUID(DXFILEOBJ_EffectParamDWord, +0xe13963bc, 0xae51, 0x4c5d, 0xb0, 0xf, 0xcf, 0xa3, 0xa9, 0xd9, 0x7c, 0xe5); + +// {E331F7E4-0559-4cc2-8E99-1CEC1657928F} +DEFINE_GUID(DXFILEOBJ_EffectInstance, +0xe331f7e4, 0x559, 0x4cc2, 0x8e, 0x99, 0x1c, 0xec, 0x16, 0x57, 0x92, 0x8f); + +// {9E415A43-7BA6-4a73-8743-B73D47E88476} +DEFINE_GUID(DXFILEOBJ_AnimTicksPerSecond, +0x9e415a43, 0x7ba6, 0x4a73, 0x87, 0x43, 0xb7, 0x3d, 0x47, 0xe8, 0x84, 0x76); + +// {7F9B00B3-F125-4890-876E-1CFFBF697C4D} +DEFINE_GUID(DXFILEOBJ_CompressedAnimationSet, +0x7f9b00b3, 0xf125, 0x4890, 0x87, 0x6e, 0x1c, 0x42, 0xbf, 0x69, 0x7c, 0x4d); + +#pragma pack(push, 1) +typedef struct _XFILECOMPRESSEDANIMATIONSET +{ + DWORD CompressedBlockSize; + FLOAT TicksPerSec; + DWORD PlaybackType; + DWORD BufferLength; +} XFILECOMPRESSEDANIMATIONSET; +#pragma pack(pop) + +#define XSKINEXP_TEMPLATES \ + "xof 0303txt 0032\ + template XSkinMeshHeader \ + { \ + <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> \ + WORD nMaxSkinWeightsPerVertex; \ + WORD nMaxSkinWeightsPerFace; \ + WORD nBones; \ + } \ + template VertexDuplicationIndices \ + { \ + \ + DWORD nIndices; \ + DWORD nOriginalVertices; \ + array DWORD indices[nIndices]; \ + } \ + template FaceAdjacency \ + { \ + \ + DWORD nIndices; \ + array DWORD indices[nIndices]; \ + } \ + template SkinWeights \ + { \ + <6F0D123B-BAD2-4167-A0D0-80224F25FABB> \ + STRING transformNodeName; \ + DWORD nWeights; \ + array DWORD vertexIndices[nWeights]; \ + array float weights[nWeights]; \ + Matrix4x4 matrixOffset; \ + } \ + template Patch \ + { \ + \ + DWORD nControlIndices; \ + array DWORD controlIndices[nControlIndices]; \ + } \ + template PatchMesh \ + { \ + \ + DWORD nVertices; \ + array Vector vertices[nVertices]; \ + DWORD nPatches; \ + array Patch patches[nPatches]; \ + [ ... ] \ + } \ + template PatchMesh9 \ + { \ + \ + DWORD Type; \ + DWORD Degree; \ + DWORD Basis; \ + DWORD nVertices; \ + array Vector vertices[nVertices]; \ + DWORD nPatches; \ + array Patch patches[nPatches]; \ + [ ... ] \ + } " \ + "template EffectFloats \ + { \ + \ + DWORD nFloats; \ + array float Floats[nFloats]; \ + } \ + template EffectString \ + { \ + \ + STRING Value; \ + } \ + template EffectDWord \ + { \ + <622C0ED0-956E-4da9-908A-2AF94F3CE716> \ + DWORD Value; \ + } " \ + "template EffectParamFloats \ + { \ + <3014B9A0-62F5-478c-9B86-E4AC9F4E418B> \ + STRING ParamName; \ + DWORD nFloats; \ + array float Floats[nFloats]; \ + } " \ + "template EffectParamString \ + { \ + <1DBC4C88-94C1-46ee-9076-2C28818C9481> \ + STRING ParamName; \ + STRING Value; \ + } \ + template EffectParamDWord \ + { \ + \ + STRING ParamName; \ + DWORD Value; \ + } \ + template EffectInstance \ + { \ + \ + STRING EffectFilename; \ + [ ... ] \ + } " \ + "template AnimTicksPerSecond \ + { \ + <9E415A43-7BA6-4a73-8743-B73D47E88476> \ + DWORD AnimTicksPerSecond; \ + } \ + template CompressedAnimationSet \ + { \ + <7F9B00B3-F125-4890-876E-1C42BF697C4D> \ + DWORD CompressedBlockSize; \ + FLOAT TicksPerSec; \ + DWORD PlaybackType; \ + DWORD BufferLength; \ + array DWORD CompressedData[BufferLength]; \ + } " + +#define XEXTENSIONS_TEMPLATES \ + "xof 0303txt 0032\ + template FVFData \ + { \ + \ + DWORD dwFVF; \ + DWORD nDWords; \ + array DWORD data[nDWords]; \ + } \ + template VertexElement \ + { \ + \ + DWORD Type; \ + DWORD Method; \ + DWORD Usage; \ + DWORD UsageIndex; \ + } \ + template DeclData \ + { \ + \ + DWORD nElements; \ + array VertexElement Elements[nElements]; \ + DWORD nDWords; \ + array DWORD data[nDWords]; \ + } \ + template PMAttributeRange \ + { \ + <917E0427-C61E-4a14-9C64-AFE65F9E9844> \ + DWORD iFaceOffset; \ + DWORD nFacesMin; \ + DWORD nFacesMax; \ + DWORD iVertexOffset; \ + DWORD nVerticesMin; \ + DWORD nVerticesMax; \ + } \ + template PMVSplitRecord \ + { \ + <574CCC14-F0B3-4333-822D-93E8A8A08E4C> \ + DWORD iFaceCLW; \ + DWORD iVlrOffset; \ + DWORD iCode; \ + } \ + template PMInfo \ + { \ + \ + DWORD nAttributes; \ + array PMAttributeRange attributeRanges[nAttributes]; \ + DWORD nMaxValence; \ + DWORD nMinLogicalVertices; \ + DWORD nMaxLogicalVertices; \ + DWORD nVSplits; \ + array PMVSplitRecord splitRecords[nVSplits]; \ + DWORD nAttributeMispredicts; \ + array DWORD attributeMispredicts[nAttributeMispredicts]; \ + } " + +#endif //__D3DX9MESH_H__ + + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9shader.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9shader.h new file mode 100644 index 0000000000..1e2cda2846 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9shader.h @@ -0,0 +1,1177 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// File: d3dx9shader.h +// Content: D3DX Shader APIs +// +////////////////////////////////////////////////////////////////////////////// + +#include "d3dx9.h" + +#ifndef __D3DX9SHADER_H__ +#define __D3DX9SHADER_H__ + + +//--------------------------------------------------------------------------- +// D3DXTX_VERSION: +// -------------- +// Version token used to create a procedural texture filler in effects +// Used by D3DXFill[]TX functions +//--------------------------------------------------------------------------- +#define D3DXTX_VERSION(_Major,_Minor) (('T' << 24) | ('X' << 16) | ((_Major) << 8) | (_Minor)) + + + +//---------------------------------------------------------------------------- +// D3DXSHADER flags: +// ----------------- +// D3DXSHADER_DEBUG +// Insert debug file/line/type/symbol information. +// +// D3DXSHADER_SKIPVALIDATION +// Do not validate the generated code against known capabilities and +// constraints. This option is only recommended when compiling shaders +// you KNOW will work. (ie. have compiled before without this option.) +// Shaders are always validated by D3D before they are set to the device. +// +// D3DXSHADER_SKIPOPTIMIZATION +// Instructs the compiler to skip optimization steps during code generation. +// Unless you are trying to isolate a problem in your code using this option +// is not recommended. +// +// D3DXSHADER_PACKMATRIX_ROWMAJOR +// Unless explicitly specified, matrices will be packed in row-major order +// on input and output from the shader. +// +// D3DXSHADER_PACKMATRIX_COLUMNMAJOR +// Unless explicitly specified, matrices will be packed in column-major +// order on input and output from the shader. This is generally more +// efficient, since it allows vector-matrix multiplication to be performed +// using a series of dot-products. +// +// D3DXSHADER_PARTIALPRECISION +// Force all computations in resulting shader to occur at partial precision. +// This may result in faster evaluation of shaders on some hardware. +// +// D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT +// Force compiler to compile against the next highest available software +// target for vertex shaders. This flag also turns optimizations off, +// and debugging on. +// +// D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT +// Force compiler to compile against the next highest available software +// target for pixel shaders. This flag also turns optimizations off, +// and debugging on. +// +// D3DXSHADER_NO_PRESHADER +// Disables Preshaders. Using this flag will cause the compiler to not +// pull out static expression for evaluation on the host cpu +// +// D3DXSHADER_AVOID_FLOW_CONTROL +// Hint compiler to avoid flow-control constructs where possible. +// +// D3DXSHADER_PREFER_FLOW_CONTROL +// Hint compiler to prefer flow-control constructs where possible. +// +//---------------------------------------------------------------------------- + +#define D3DXSHADER_DEBUG (1 << 0) +#define D3DXSHADER_SKIPVALIDATION (1 << 1) +#define D3DXSHADER_SKIPOPTIMIZATION (1 << 2) +#define D3DXSHADER_PACKMATRIX_ROWMAJOR (1 << 3) +#define D3DXSHADER_PACKMATRIX_COLUMNMAJOR (1 << 4) +#define D3DXSHADER_PARTIALPRECISION (1 << 5) +#define D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT (1 << 6) +#define D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT (1 << 7) +#define D3DXSHADER_NO_PRESHADER (1 << 8) +#define D3DXSHADER_AVOID_FLOW_CONTROL (1 << 9) +#define D3DXSHADER_PREFER_FLOW_CONTROL (1 << 10) +#define D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY (1 << 12) +#define D3DXSHADER_IEEE_STRICTNESS (1 << 13) +#define D3DXSHADER_USE_LEGACY_D3DX9_31_DLL (1 << 16) + + +// optimization level flags +#define D3DXSHADER_OPTIMIZATION_LEVEL0 (1 << 14) +#define D3DXSHADER_OPTIMIZATION_LEVEL1 0 +#define D3DXSHADER_OPTIMIZATION_LEVEL2 ((1 << 14) | (1 << 15)) +#define D3DXSHADER_OPTIMIZATION_LEVEL3 (1 << 15) + + + + +//---------------------------------------------------------------------------- +// D3DXHANDLE: +// ----------- +// Handle values used to efficiently reference shader and effect parameters. +// Strings can be used as handles. However, handles are not always strings. +//---------------------------------------------------------------------------- + +#ifndef D3DXFX_LARGEADDRESS_HANDLE +typedef LPCSTR D3DXHANDLE; +#else +typedef UINT_PTR D3DXHANDLE; +#endif +typedef D3DXHANDLE *LPD3DXHANDLE; + + +//---------------------------------------------------------------------------- +// D3DXMACRO: +// ---------- +// Preprocessor macro definition. The application pass in a NULL-terminated +// array of this structure to various D3DX APIs. This enables the application +// to #define tokens at runtime, before the file is parsed. +//---------------------------------------------------------------------------- + +typedef struct _D3DXMACRO +{ + LPCSTR Name; + LPCSTR Definition; + +} D3DXMACRO, *LPD3DXMACRO; + + +//---------------------------------------------------------------------------- +// D3DXSEMANTIC: +//---------------------------------------------------------------------------- + +typedef struct _D3DXSEMANTIC +{ + UINT Usage; + UINT UsageIndex; + +} D3DXSEMANTIC, *LPD3DXSEMANTIC; + + + +//---------------------------------------------------------------------------- +// D3DXFRAGMENT_DESC: +//---------------------------------------------------------------------------- + +typedef struct _D3DXFRAGMENT_DESC +{ + LPCSTR Name; + DWORD Target; + +} D3DXFRAGMENT_DESC, *LPD3DXFRAGMENT_DESC; + + +//---------------------------------------------------------------------------- +// D3DXREGISTER_SET: +//---------------------------------------------------------------------------- + +typedef enum _D3DXREGISTER_SET +{ + D3DXRS_BOOL, + D3DXRS_INT4, + D3DXRS_FLOAT4, + D3DXRS_SAMPLER, + + // force 32-bit size enum + D3DXRS_FORCE_DWORD = 0x7fffffff + +} D3DXREGISTER_SET, *LPD3DXREGISTER_SET; + + +//---------------------------------------------------------------------------- +// D3DXPARAMETER_CLASS: +//---------------------------------------------------------------------------- + +typedef enum _D3DXPARAMETER_CLASS +{ + D3DXPC_SCALAR, + D3DXPC_VECTOR, + D3DXPC_MATRIX_ROWS, + D3DXPC_MATRIX_COLUMNS, + D3DXPC_OBJECT, + D3DXPC_STRUCT, + + // force 32-bit size enum + D3DXPC_FORCE_DWORD = 0x7fffffff + +} D3DXPARAMETER_CLASS, *LPD3DXPARAMETER_CLASS; + + +//---------------------------------------------------------------------------- +// D3DXPARAMETER_TYPE: +//---------------------------------------------------------------------------- + +typedef enum _D3DXPARAMETER_TYPE +{ + D3DXPT_VOID, + D3DXPT_BOOL, + D3DXPT_INT, + D3DXPT_FLOAT, + D3DXPT_STRING, + D3DXPT_TEXTURE, + D3DXPT_TEXTURE1D, + D3DXPT_TEXTURE2D, + D3DXPT_TEXTURE3D, + D3DXPT_TEXTURECUBE, + D3DXPT_SAMPLER, + D3DXPT_SAMPLER1D, + D3DXPT_SAMPLER2D, + D3DXPT_SAMPLER3D, + D3DXPT_SAMPLERCUBE, + D3DXPT_PIXELSHADER, + D3DXPT_VERTEXSHADER, + D3DXPT_PIXELFRAGMENT, + D3DXPT_VERTEXFRAGMENT, + D3DXPT_UNSUPPORTED, + + // force 32-bit size enum + D3DXPT_FORCE_DWORD = 0x7fffffff + +} D3DXPARAMETER_TYPE, *LPD3DXPARAMETER_TYPE; + + +//---------------------------------------------------------------------------- +// D3DXCONSTANTTABLE_DESC: +//---------------------------------------------------------------------------- + +typedef struct _D3DXCONSTANTTABLE_DESC +{ + LPCSTR Creator; // Creator string + DWORD Version; // Shader version + UINT Constants; // Number of constants + +} D3DXCONSTANTTABLE_DESC, *LPD3DXCONSTANTTABLE_DESC; + + +//---------------------------------------------------------------------------- +// D3DXCONSTANT_DESC: +//---------------------------------------------------------------------------- + +typedef struct _D3DXCONSTANT_DESC +{ + LPCSTR Name; // Constant name + + D3DXREGISTER_SET RegisterSet; // Register set + UINT RegisterIndex; // Register index + UINT RegisterCount; // Number of registers occupied + + D3DXPARAMETER_CLASS Class; // Class + D3DXPARAMETER_TYPE Type; // Component type + + UINT Rows; // Number of rows + UINT Columns; // Number of columns + UINT Elements; // Number of array elements + UINT StructMembers; // Number of structure member sub-parameters + + UINT Bytes; // Data size, in bytes + LPCVOID DefaultValue; // Pointer to default value + +} D3DXCONSTANT_DESC, *LPD3DXCONSTANT_DESC; + + + +//---------------------------------------------------------------------------- +// ID3DXConstantTable: +//---------------------------------------------------------------------------- + +typedef interface ID3DXConstantTable ID3DXConstantTable; +typedef interface ID3DXConstantTable *LPD3DXCONSTANTTABLE; + +// {AB3C758F-093E-4356-B762-4DB18F1B3A01} +DEFINE_GUID(IID_ID3DXConstantTable, +0xab3c758f, 0x93e, 0x4356, 0xb7, 0x62, 0x4d, 0xb1, 0x8f, 0x1b, 0x3a, 0x1); + + +#undef INTERFACE +#define INTERFACE ID3DXConstantTable + +DECLARE_INTERFACE_(ID3DXConstantTable, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Buffer + STDMETHOD_(LPVOID, GetBufferPointer)(THIS) PURE; + STDMETHOD_(DWORD, GetBufferSize)(THIS) PURE; + + // Descs + STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE; + STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE; + STDMETHOD_(UINT, GetSamplerIndex)(THIS_ D3DXHANDLE hConstant) PURE; + + // Handle operations + STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; + + // Set Constants + STDMETHOD(SetDefaults)(THIS_ LPDIRECT3DDEVICE9 pDevice) PURE; + STDMETHOD(SetValue)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, LPCVOID pData, UINT Bytes) PURE; + STDMETHOD(SetBool)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, BOOL b) PURE; + STDMETHOD(SetBoolArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST BOOL* pb, UINT Count) PURE; + STDMETHOD(SetInt)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, INT n) PURE; + STDMETHOD(SetIntArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST INT* pn, UINT Count) PURE; + STDMETHOD(SetFloat)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, FLOAT f) PURE; + STDMETHOD(SetFloatArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST FLOAT* pf, UINT Count) PURE; + STDMETHOD(SetVector)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector) PURE; + STDMETHOD(SetVectorArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector, UINT Count) PURE; + STDMETHOD(SetMatrix)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixPointerArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTranspose)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixTransposeArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTransposePointerArray)(THIS_ LPDIRECT3DDEVICE9 pDevice, D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; +}; + + +//---------------------------------------------------------------------------- +// ID3DXTextureShader: +//---------------------------------------------------------------------------- + +typedef interface ID3DXTextureShader ID3DXTextureShader; +typedef interface ID3DXTextureShader *LPD3DXTEXTURESHADER; + +// {3E3D67F8-AA7A-405d-A857-BA01D4758426} +DEFINE_GUID(IID_ID3DXTextureShader, +0x3e3d67f8, 0xaa7a, 0x405d, 0xa8, 0x57, 0xba, 0x1, 0xd4, 0x75, 0x84, 0x26); + +#undef INTERFACE +#define INTERFACE ID3DXTextureShader + +DECLARE_INTERFACE_(ID3DXTextureShader, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // Gets + STDMETHOD(GetFunction)(THIS_ LPD3DXBUFFER *ppFunction) PURE; + STDMETHOD(GetConstantBuffer)(THIS_ LPD3DXBUFFER *ppConstantBuffer) PURE; + + // Descs + STDMETHOD(GetDesc)(THIS_ D3DXCONSTANTTABLE_DESC *pDesc) PURE; + STDMETHOD(GetConstantDesc)(THIS_ D3DXHANDLE hConstant, D3DXCONSTANT_DESC *pConstantDesc, UINT *pCount) PURE; + + // Handle operations + STDMETHOD_(D3DXHANDLE, GetConstant)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetConstantByName)(THIS_ D3DXHANDLE hConstant, LPCSTR pName) PURE; + STDMETHOD_(D3DXHANDLE, GetConstantElement)(THIS_ D3DXHANDLE hConstant, UINT Index) PURE; + + // Set Constants + STDMETHOD(SetDefaults)(THIS) PURE; + STDMETHOD(SetValue)(THIS_ D3DXHANDLE hConstant, LPCVOID pData, UINT Bytes) PURE; + STDMETHOD(SetBool)(THIS_ D3DXHANDLE hConstant, BOOL b) PURE; + STDMETHOD(SetBoolArray)(THIS_ D3DXHANDLE hConstant, CONST BOOL* pb, UINT Count) PURE; + STDMETHOD(SetInt)(THIS_ D3DXHANDLE hConstant, INT n) PURE; + STDMETHOD(SetIntArray)(THIS_ D3DXHANDLE hConstant, CONST INT* pn, UINT Count) PURE; + STDMETHOD(SetFloat)(THIS_ D3DXHANDLE hConstant, FLOAT f) PURE; + STDMETHOD(SetFloatArray)(THIS_ D3DXHANDLE hConstant, CONST FLOAT* pf, UINT Count) PURE; + STDMETHOD(SetVector)(THIS_ D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector) PURE; + STDMETHOD(SetVectorArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXVECTOR4* pVector, UINT Count) PURE; + STDMETHOD(SetMatrix)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixPointerArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTranspose)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix) PURE; + STDMETHOD(SetMatrixTransposeArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX* pMatrix, UINT Count) PURE; + STDMETHOD(SetMatrixTransposePointerArray)(THIS_ D3DXHANDLE hConstant, CONST D3DXMATRIX** ppMatrix, UINT Count) PURE; +}; + + + +//---------------------------------------------------------------------------- +// ID3DXFragmentLinker +//---------------------------------------------------------------------------- + +typedef interface ID3DXFragmentLinker ID3DXFragmentLinker; +typedef interface ID3DXFragmentLinker *LPD3DXFRAGMENTLINKER; + +// {1A2C0CC2-E5B6-4ebc-9E8D-390E057811B6} +DEFINE_GUID(IID_ID3DXFragmentLinker, +0x1a2c0cc2, 0xe5b6, 0x4ebc, 0x9e, 0x8d, 0x39, 0xe, 0x5, 0x78, 0x11, 0xb6); + +#undef INTERFACE +#define INTERFACE ID3DXFragmentLinker + +DECLARE_INTERFACE_(ID3DXFragmentLinker, IUnknown) +{ + // IUnknown + STDMETHOD(QueryInterface)(THIS_ REFIID iid, LPVOID *ppv) PURE; + STDMETHOD_(ULONG, AddRef)(THIS) PURE; + STDMETHOD_(ULONG, Release)(THIS) PURE; + + // ID3DXFragmentLinker + + // fragment access and information retrieval functions + STDMETHOD(GetDevice)(THIS_ LPDIRECT3DDEVICE9* ppDevice) PURE; + STDMETHOD_(UINT, GetNumberOfFragments)(THIS) PURE; + + STDMETHOD_(D3DXHANDLE, GetFragmentHandleByIndex)(THIS_ UINT Index) PURE; + STDMETHOD_(D3DXHANDLE, GetFragmentHandleByName)(THIS_ LPCSTR Name) PURE; + STDMETHOD(GetFragmentDesc)(THIS_ D3DXHANDLE Name, LPD3DXFRAGMENT_DESC FragDesc) PURE; + + // add the fragments in the buffer to the linker + STDMETHOD(AddFragments)(THIS_ CONST DWORD *Fragments) PURE; + + // Create a buffer containing the fragments. Suitable for saving to disk + STDMETHOD(GetAllFragments)(THIS_ LPD3DXBUFFER *ppBuffer) PURE; + STDMETHOD(GetFragment)(THIS_ D3DXHANDLE Name, LPD3DXBUFFER *ppBuffer) PURE; + + STDMETHOD(LinkShader)(THIS_ LPCSTR pProfile, DWORD Flags, CONST D3DXHANDLE *rgFragmentHandles, UINT cFragments, LPD3DXBUFFER *ppBuffer, LPD3DXBUFFER *ppErrorMsgs) PURE; + STDMETHOD(LinkVertexShader)(THIS_ LPCSTR pProfile, DWORD Flags, CONST D3DXHANDLE *rgFragmentHandles, UINT cFragments, LPDIRECT3DVERTEXSHADER9 *pVShader, LPD3DXBUFFER *ppErrorMsgs) PURE; + STDMETHOD(LinkPixelShader)(THIS_ LPCSTR pProfile, DWORD Flags, CONST D3DXHANDLE *rgFragmentHandles, UINT cFragments, LPDIRECT3DPIXELSHADER9 *pPShader, LPD3DXBUFFER *ppErrorMsgs) PURE; + + STDMETHOD(ClearCache)(THIS) PURE; +}; + + +//---------------------------------------------------------------------------- +// D3DXINCLUDE_TYPE: +//---------------------------------------------------------------------------- + +typedef enum _D3DXINCLUDE_TYPE +{ + D3DXINC_LOCAL, + D3DXINC_SYSTEM, + + // force 32-bit size enum + D3DXINC_FORCE_DWORD = 0x7fffffff + +} D3DXINCLUDE_TYPE, *LPD3DXINCLUDE_TYPE; + + +//---------------------------------------------------------------------------- +// ID3DXInclude: +// ------------- +// This interface is intended to be implemented by the application, and can +// be used by various D3DX APIs. This enables application-specific handling +// of #include directives in source files. +// +// Open() +// Opens an include file. If successful, it should fill in ppData and +// pBytes. The data pointer returned must remain valid until Close is +// subsequently called. +// Close() +// Closes an include file. If Open was successful, Close is guaranteed +// to be called before the API using this interface returns. +//---------------------------------------------------------------------------- + +typedef interface ID3DXInclude ID3DXInclude; +typedef interface ID3DXInclude *LPD3DXINCLUDE; + +#undef INTERFACE +#define INTERFACE ID3DXInclude + +DECLARE_INTERFACE(ID3DXInclude) +{ + STDMETHOD(Open)(THIS_ D3DXINCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) PURE; + STDMETHOD(Close)(THIS_ LPCVOID pData) PURE; +}; + + +////////////////////////////////////////////////////////////////////////////// +// APIs ////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + + +//---------------------------------------------------------------------------- +// D3DXAssembleShader: +// ------------------- +// Assembles a shader. +// +// Parameters: +// pSrcFile +// Source file name +// hSrcModule +// Module handle. if NULL, current module will be used +// pSrcResource +// Resource name in module +// pSrcData +// Pointer to source code +// SrcDataLen +// Size of source code, in bytes +// pDefines +// Optional NULL-terminated array of preprocessor macro definitions. +// pInclude +// Optional interface pointer to use for handling #include directives. +// If this parameter is NULL, #includes will be honored when assembling +// from file, and will error when assembling from resource or memory. +// Flags +// See D3DXSHADER_xxx flags +// ppShader +// Returns a buffer containing the created shader. This buffer contains +// the assembled shader code, as well as any embedded debug info. +// ppErrorMsgs +// Returns a buffer containing a listing of errors and warnings that were +// encountered during assembly. If you are running in a debugger, +// these are the same messages you will see in your debug output. +//---------------------------------------------------------------------------- + + +HRESULT WINAPI + D3DXAssembleShaderFromFileA( + LPCSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + +HRESULT WINAPI + D3DXAssembleShaderFromFileW( + LPCWSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + +#ifdef UNICODE +#define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileW +#else +#define D3DXAssembleShaderFromFile D3DXAssembleShaderFromFileA +#endif + + +HRESULT WINAPI + D3DXAssembleShaderFromResourceA( + HMODULE hSrcModule, + LPCSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + +HRESULT WINAPI + D3DXAssembleShaderFromResourceW( + HMODULE hSrcModule, + LPCWSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + +#ifdef UNICODE +#define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceW +#else +#define D3DXAssembleShaderFromResource D3DXAssembleShaderFromResourceA +#endif + + +HRESULT WINAPI + D3DXAssembleShader( + LPCSTR pSrcData, + UINT SrcDataLen, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + + + +//---------------------------------------------------------------------------- +// D3DXCompileShader: +// ------------------ +// Compiles a shader. +// +// Parameters: +// pSrcFile +// Source file name. +// hSrcModule +// Module handle. if NULL, current module will be used. +// pSrcResource +// Resource name in module. +// pSrcData +// Pointer to source code. +// SrcDataLen +// Size of source code, in bytes. +// pDefines +// Optional NULL-terminated array of preprocessor macro definitions. +// pInclude +// Optional interface pointer to use for handling #include directives. +// If this parameter is NULL, #includes will be honored when compiling +// from file, and will error when compiling from resource or memory. +// pFunctionName +// Name of the entrypoint function where execution should begin. +// pProfile +// Instruction set to be used when generating code. Currently supported +// profiles are "vs_1_1", "vs_2_0", "vs_2_a", "vs_2_sw", "ps_1_1", +// "ps_1_2", "ps_1_3", "ps_1_4", "ps_2_0", "ps_2_a", "ps_2_sw", "tx_1_0" +// Flags +// See D3DXSHADER_xxx flags. +// ppShader +// Returns a buffer containing the created shader. This buffer contains +// the compiled shader code, as well as any embedded debug and symbol +// table info. (See D3DXGetShaderConstantTable) +// ppErrorMsgs +// Returns a buffer containing a listing of errors and warnings that were +// encountered during the compile. If you are running in a debugger, +// these are the same messages you will see in your debug output. +// ppConstantTable +// Returns a ID3DXConstantTable object which can be used to set +// shader constants to the device. Alternatively, an application can +// parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within +// the shader. +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXCompileShaderFromFileA( + LPCSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pFunctionName, + LPCSTR pProfile, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs, + LPD3DXCONSTANTTABLE* ppConstantTable); + +HRESULT WINAPI + D3DXCompileShaderFromFileW( + LPCWSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pFunctionName, + LPCSTR pProfile, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs, + LPD3DXCONSTANTTABLE* ppConstantTable); + +#ifdef UNICODE +#define D3DXCompileShaderFromFile D3DXCompileShaderFromFileW +#else +#define D3DXCompileShaderFromFile D3DXCompileShaderFromFileA +#endif + + +HRESULT WINAPI + D3DXCompileShaderFromResourceA( + HMODULE hSrcModule, + LPCSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pFunctionName, + LPCSTR pProfile, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs, + LPD3DXCONSTANTTABLE* ppConstantTable); + +HRESULT WINAPI + D3DXCompileShaderFromResourceW( + HMODULE hSrcModule, + LPCWSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pFunctionName, + LPCSTR pProfile, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs, + LPD3DXCONSTANTTABLE* ppConstantTable); + +#ifdef UNICODE +#define D3DXCompileShaderFromResource D3DXCompileShaderFromResourceW +#else +#define D3DXCompileShaderFromResource D3DXCompileShaderFromResourceA +#endif + + +HRESULT WINAPI + D3DXCompileShader( + LPCSTR pSrcData, + UINT SrcDataLen, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPCSTR pFunctionName, + LPCSTR pProfile, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs, + LPD3DXCONSTANTTABLE* ppConstantTable); + + +//---------------------------------------------------------------------------- +// D3DXDisassembleShader: +// ---------------------- +// Takes a binary shader, and returns a buffer containing text assembly. +// +// Parameters: +// pShader +// Pointer to the shader byte code. +// ShaderSizeInBytes +// Size of the shader byte code in bytes. +// EnableColorCode +// Emit HTML tags for color coding the output? +// pComments +// Pointer to a comment string to include at the top of the shader. +// ppDisassembly +// Returns a buffer containing the disassembled shader. +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXDisassembleShader( + CONST DWORD* pShader, + BOOL EnableColorCode, + LPCSTR pComments, + LPD3DXBUFFER* ppDisassembly); + + +//---------------------------------------------------------------------------- +// D3DXGetPixelShaderProfile/D3DXGetVertexShaderProfile: +// ----------------------------------------------------- +// Returns the name of the HLSL profile best suited to a given device. +// +// Parameters: +// pDevice +// Pointer to the device in question +//---------------------------------------------------------------------------- + +LPCSTR WINAPI + D3DXGetPixelShaderProfile( + LPDIRECT3DDEVICE9 pDevice); + +LPCSTR WINAPI + D3DXGetVertexShaderProfile( + LPDIRECT3DDEVICE9 pDevice); + + +//---------------------------------------------------------------------------- +// D3DXFindShaderComment: +// ---------------------- +// Searches through a shader for a particular comment, denoted by a FourCC in +// the first DWORD of the comment. If the comment is not found, and no other +// error has occurred, S_FALSE is returned. +// +// Parameters: +// pFunction +// Pointer to the function DWORD stream +// FourCC +// FourCC used to identify the desired comment block. +// ppData +// Returns a pointer to the comment data (not including comment token +// and FourCC). Can be NULL. +// pSizeInBytes +// Returns the size of the comment data in bytes. Can be NULL. +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXFindShaderComment( + CONST DWORD* pFunction, + DWORD FourCC, + LPCVOID* ppData, + UINT* pSizeInBytes); + + +//---------------------------------------------------------------------------- +// D3DXGetShaderSize: +// ------------------ +// Returns the size of the shader byte-code, in bytes. +// +// Parameters: +// pFunction +// Pointer to the function DWORD stream +//---------------------------------------------------------------------------- + +UINT WINAPI + D3DXGetShaderSize( + CONST DWORD* pFunction); + + +//---------------------------------------------------------------------------- +// D3DXGetShaderVersion: +// ----------------------- +// Returns the shader version of a given shader. Returns zero if the shader +// function is NULL. +// +// Parameters: +// pFunction +// Pointer to the function DWORD stream +//---------------------------------------------------------------------------- + +DWORD WINAPI + D3DXGetShaderVersion( + CONST DWORD* pFunction); + +//---------------------------------------------------------------------------- +// D3DXGetShaderSemantics: +// ----------------------- +// Gets semantics for all input elements referenced inside a given shader. +// +// Parameters: +// pFunction +// Pointer to the function DWORD stream +// pSemantics +// Pointer to an array of D3DXSEMANTIC structures. The function will +// fill this array with the semantics for each input element referenced +// inside the shader. This array is assumed to contain at least +// MAXD3DDECLLENGTH elements. +// pCount +// Returns the number of elements referenced by the shader +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXGetShaderInputSemantics( + CONST DWORD* pFunction, + D3DXSEMANTIC* pSemantics, + UINT* pCount); + +HRESULT WINAPI + D3DXGetShaderOutputSemantics( + CONST DWORD* pFunction, + D3DXSEMANTIC* pSemantics, + UINT* pCount); + + +//---------------------------------------------------------------------------- +// D3DXGetShaderSamplers: +// ---------------------- +// Gets semantics for all input elements referenced inside a given shader. +// +// pFunction +// Pointer to the function DWORD stream +// pSamplers +// Pointer to an array of LPCSTRs. The function will fill this array +// with pointers to the sampler names contained within pFunction, for +// each sampler referenced inside the shader. This array is assumed to +// contain at least 16 elements. +// pCount +// Returns the number of samplers referenced by the shader +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXGetShaderSamplers( + CONST DWORD* pFunction, + LPCSTR* pSamplers, + UINT* pCount); + + +//---------------------------------------------------------------------------- +// D3DXGetShaderConstantTable: +// --------------------------- +// Gets shader constant table embedded inside shader. A constant table is +// generated by D3DXAssembleShader and D3DXCompileShader, and is embedded in +// the body of the shader. +// +// Parameters: +// pFunction +// Pointer to the function DWORD stream +// ppConstantTable +// Returns a ID3DXConstantTable object which can be used to set +// shader constants to the device. Alternatively, an application can +// parse the D3DXSHADER_CONSTANTTABLE block embedded as a comment within +// the shader. +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXGetShaderConstantTable( + CONST DWORD* pFunction, + LPD3DXCONSTANTTABLE* ppConstantTable); + + + +//---------------------------------------------------------------------------- +// D3DXCreateTextureShader: +// ------------------------ +// Creates a texture shader object, given the compiled shader. +// +// Parameters +// pFunction +// Pointer to the function DWORD stream +// ppTextureShader +// Returns a ID3DXTextureShader object which can be used to procedurally +// fill the contents of a texture using the D3DXFillTextureTX functions. +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXCreateTextureShader( + CONST DWORD* pFunction, + LPD3DXTEXTURESHADER* ppTextureShader); + + + +//---------------------------------------------------------------------------- +// D3DXGatherFragments: +// ------------------- +// Assembles shader fragments into a buffer to be passed to a fragment linker. +// will generate shader fragments for all fragments in the file +// +// Parameters: +// pSrcFile +// Source file name +// hSrcModule +// Module handle. if NULL, current module will be used +// pSrcResource +// Resource name in module +// pSrcData +// Pointer to source code +// SrcDataLen +// Size of source code, in bytes +// pDefines +// Optional NULL-terminated array of preprocessor macro definitions. +// pInclude +// Optional interface pointer to use for handling #include directives. +// If this parameter is NULL, #includes will be honored when assembling +// from file, and will error when assembling from resource or memory. +// Flags +// See D3DXSHADER_xxx flags +// ppShader +// Returns a buffer containing the created shader fragments. This buffer contains +// the assembled shader code, as well as any embedded debug info. +// ppErrorMsgs +// Returns a buffer containing a listing of errors and warnings that were +// encountered during assembly. If you are running in a debugger, +// these are the same messages you will see in your debug output. +//---------------------------------------------------------------------------- + + +HRESULT WINAPI +D3DXGatherFragmentsFromFileA( + LPCSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + +HRESULT WINAPI +D3DXGatherFragmentsFromFileW( + LPCWSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + +#ifdef UNICODE +#define D3DXGatherFragmentsFromFile D3DXGatherFragmentsFromFileW +#else +#define D3DXGatherFragmentsFromFile D3DXGatherFragmentsFromFileA +#endif + + +HRESULT WINAPI + D3DXGatherFragmentsFromResourceA( + HMODULE hSrcModule, + LPCSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + +HRESULT WINAPI + D3DXGatherFragmentsFromResourceW( + HMODULE hSrcModule, + LPCWSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + +#ifdef UNICODE +#define D3DXGatherFragmentsFromResource D3DXGatherFragmentsFromResourceW +#else +#define D3DXGatherFragmentsFromResource D3DXGatherFragmentsFromResourceA +#endif + + +HRESULT WINAPI + D3DXGatherFragments( + LPCSTR pSrcData, + UINT SrcDataLen, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + DWORD Flags, + LPD3DXBUFFER* ppShader, + LPD3DXBUFFER* ppErrorMsgs); + + + +//---------------------------------------------------------------------------- +// D3DXCreateFragmentLinker: +// ------------------------- +// Creates a fragment linker with a given cache size. The interface returned +// can be used to link together shader fragments. (both HLSL & ASM fragements) +// +// Parameters: +// pDevice +// Pointer to the device on which to create the shaders +// ShaderCacheSize +// Size of the shader cache +// ppFragmentLinker +// pointer to a memory location to put the created interface pointer +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXCreateFragmentLinker( + LPDIRECT3DDEVICE9 pDevice, + UINT ShaderCacheSize, + LPD3DXFRAGMENTLINKER* ppFragmentLinker); + + +//---------------------------------------------------------------------------- +// D3DXPreprocessShader: +// --------------------- +// Runs the preprocessor on the specified shader or effect, but does +// not actually compile it. This is useful for evaluating the #includes +// and #defines in a shader and then emitting a reformatted token stream +// for debugging purposes or for generating a self-contained shader. +// +// Parameters: +// pSrcFile +// Source file name +// hSrcModule +// Module handle. if NULL, current module will be used +// pSrcResource +// Resource name in module +// pSrcData +// Pointer to source code +// SrcDataLen +// Size of source code, in bytes +// pDefines +// Optional NULL-terminated array of preprocessor macro definitions. +// pInclude +// Optional interface pointer to use for handling #include directives. +// If this parameter is NULL, #includes will be honored when assembling +// from file, and will error when assembling from resource or memory. +// ppShaderText +// Returns a buffer containing a single large string that represents +// the resulting formatted token stream +// ppErrorMsgs +// Returns a buffer containing a listing of errors and warnings that were +// encountered during assembly. If you are running in a debugger, +// these are the same messages you will see in your debug output. +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXPreprocessShaderFromFileA( + LPCSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPD3DXBUFFER* ppShaderText, + LPD3DXBUFFER* ppErrorMsgs); + +HRESULT WINAPI + D3DXPreprocessShaderFromFileW( + LPCWSTR pSrcFile, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPD3DXBUFFER* ppShaderText, + LPD3DXBUFFER* ppErrorMsgs); + +#ifdef UNICODE +#define D3DXPreprocessShaderFromFile D3DXPreprocessShaderFromFileW +#else +#define D3DXPreprocessShaderFromFile D3DXPreprocessShaderFromFileA +#endif + +HRESULT WINAPI + D3DXPreprocessShaderFromResourceA( + HMODULE hSrcModule, + LPCSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPD3DXBUFFER* ppShaderText, + LPD3DXBUFFER* ppErrorMsgs); + +HRESULT WINAPI + D3DXPreprocessShaderFromResourceW( + HMODULE hSrcModule, + LPCWSTR pSrcResource, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPD3DXBUFFER* ppShaderText, + LPD3DXBUFFER* ppErrorMsgs); + +#ifdef UNICODE +#define D3DXPreprocessShaderFromResource D3DXPreprocessShaderFromResourceW +#else +#define D3DXPreprocessShaderFromResource D3DXPreprocessShaderFromResourceA +#endif + +HRESULT WINAPI + D3DXPreprocessShader( + LPCSTR pSrcData, + UINT SrcDataSize, + CONST D3DXMACRO* pDefines, + LPD3DXINCLUDE pInclude, + LPD3DXBUFFER* ppShaderText, + LPD3DXBUFFER* ppErrorMsgs); + + +#ifdef __cplusplus +} +#endif //__cplusplus + + +////////////////////////////////////////////////////////////////////////////// +// Shader comment block layouts ////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +//---------------------------------------------------------------------------- +// D3DXSHADER_CONSTANTTABLE: +// ------------------------- +// Shader constant information; included as an CTAB comment block inside +// shaders. All offsets are BYTE offsets from start of CONSTANTTABLE struct. +// Entries in the table are sorted by Name in ascending order. +//---------------------------------------------------------------------------- + +typedef struct _D3DXSHADER_CONSTANTTABLE +{ + DWORD Size; // sizeof(D3DXSHADER_CONSTANTTABLE) + DWORD Creator; // LPCSTR offset + DWORD Version; // shader version + DWORD Constants; // number of constants + DWORD ConstantInfo; // D3DXSHADER_CONSTANTINFO[Constants] offset + DWORD Flags; // flags shader was compiled with + DWORD Target; // LPCSTR offset + +} D3DXSHADER_CONSTANTTABLE, *LPD3DXSHADER_CONSTANTTABLE; + + +typedef struct _D3DXSHADER_CONSTANTINFO +{ + DWORD Name; // LPCSTR offset + WORD RegisterSet; // D3DXREGISTER_SET + WORD RegisterIndex; // register number + WORD RegisterCount; // number of registers + WORD Reserved; // reserved + DWORD TypeInfo; // D3DXSHADER_TYPEINFO offset + DWORD DefaultValue; // offset of default value + +} D3DXSHADER_CONSTANTINFO, *LPD3DXSHADER_CONSTANTINFO; + + +typedef struct _D3DXSHADER_TYPEINFO +{ + WORD Class; // D3DXPARAMETER_CLASS + WORD Type; // D3DXPARAMETER_TYPE + WORD Rows; // number of rows (matrices) + WORD Columns; // number of columns (vectors and matrices) + WORD Elements; // array dimension + WORD StructMembers; // number of struct members + DWORD StructMemberInfo; // D3DXSHADER_STRUCTMEMBERINFO[Members] offset + +} D3DXSHADER_TYPEINFO, *LPD3DXSHADER_TYPEINFO; + + +typedef struct _D3DXSHADER_STRUCTMEMBERINFO +{ + DWORD Name; // LPCSTR offset + DWORD TypeInfo; // D3DXSHADER_TYPEINFO offset + +} D3DXSHADER_STRUCTMEMBERINFO, *LPD3DXSHADER_STRUCTMEMBERINFO; + + + +#endif //__D3DX9SHADER_H__ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9shape.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9shape.h new file mode 100644 index 0000000000..4c23091560 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9shape.h @@ -0,0 +1,221 @@ +/////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Microsoft Corporation. All Rights Reserved. +// +// File: d3dx9shapes.h +// Content: D3DX simple shapes +// +/////////////////////////////////////////////////////////////////////////// + +#include "d3dx9.h" + +#ifndef __D3DX9SHAPES_H__ +#define __D3DX9SHAPES_H__ + +/////////////////////////////////////////////////////////////////////////// +// Functions: +/////////////////////////////////////////////////////////////////////////// + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + + +//------------------------------------------------------------------------- +// D3DXCreatePolygon: +// ------------------ +// Creates a mesh containing an n-sided polygon. The polygon is centered +// at the origin. +// +// Parameters: +// +// pDevice The D3D device with which the mesh is going to be used. +// Length Length of each side. +// Sides Number of sides the polygon has. (Must be >= 3) +// ppMesh The mesh object which will be created +// ppAdjacency Returns a buffer containing adjacency info. Can be NULL. +//------------------------------------------------------------------------- +HRESULT WINAPI + D3DXCreatePolygon( + LPDIRECT3DDEVICE9 pDevice, + FLOAT Length, + UINT Sides, + LPD3DXMESH* ppMesh, + LPD3DXBUFFER* ppAdjacency); + + +//------------------------------------------------------------------------- +// D3DXCreateBox: +// -------------- +// Creates a mesh containing an axis-aligned box. The box is centered at +// the origin. +// +// Parameters: +// +// pDevice The D3D device with which the mesh is going to be used. +// Width Width of box (along X-axis) +// Height Height of box (along Y-axis) +// Depth Depth of box (along Z-axis) +// ppMesh The mesh object which will be created +// ppAdjacency Returns a buffer containing adjacency info. Can be NULL. +//------------------------------------------------------------------------- +HRESULT WINAPI + D3DXCreateBox( + LPDIRECT3DDEVICE9 pDevice, + FLOAT Width, + FLOAT Height, + FLOAT Depth, + LPD3DXMESH* ppMesh, + LPD3DXBUFFER* ppAdjacency); + + +//------------------------------------------------------------------------- +// D3DXCreateCylinder: +// ------------------- +// Creates a mesh containing a cylinder. The generated cylinder is +// centered at the origin, and its axis is aligned with the Z-axis. +// +// Parameters: +// +// pDevice The D3D device with which the mesh is going to be used. +// Radius1 Radius at -Z end (should be >= 0.0f) +// Radius2 Radius at +Z end (should be >= 0.0f) +// Length Length of cylinder (along Z-axis) +// Slices Number of slices about the main axis +// Stacks Number of stacks along the main axis +// ppMesh The mesh object which will be created +// ppAdjacency Returns a buffer containing adjacency info. Can be NULL. +//------------------------------------------------------------------------- +HRESULT WINAPI + D3DXCreateCylinder( + LPDIRECT3DDEVICE9 pDevice, + FLOAT Radius1, + FLOAT Radius2, + FLOAT Length, + UINT Slices, + UINT Stacks, + LPD3DXMESH* ppMesh, + LPD3DXBUFFER* ppAdjacency); + + +//------------------------------------------------------------------------- +// D3DXCreateSphere: +// ----------------- +// Creates a mesh containing a sphere. The sphere is centered at the +// origin. +// +// Parameters: +// +// pDevice The D3D device with which the mesh is going to be used. +// Radius Radius of the sphere (should be >= 0.0f) +// Slices Number of slices about the main axis +// Stacks Number of stacks along the main axis +// ppMesh The mesh object which will be created +// ppAdjacency Returns a buffer containing adjacency info. Can be NULL. +//------------------------------------------------------------------------- +HRESULT WINAPI + D3DXCreateSphere( + LPDIRECT3DDEVICE9 pDevice, + FLOAT Radius, + UINT Slices, + UINT Stacks, + LPD3DXMESH* ppMesh, + LPD3DXBUFFER* ppAdjacency); + + +//------------------------------------------------------------------------- +// D3DXCreateTorus: +// ---------------- +// Creates a mesh containing a torus. The generated torus is centered at +// the origin, and its axis is aligned with the Z-axis. +// +// Parameters: +// +// pDevice The D3D device with which the mesh is going to be used. +// InnerRadius Inner radius of the torus (should be >= 0.0f) +// OuterRadius Outer radius of the torue (should be >= 0.0f) +// Sides Number of sides in a cross-section (must be >= 3) +// Rings Number of rings making up the torus (must be >= 3) +// ppMesh The mesh object which will be created +// ppAdjacency Returns a buffer containing adjacency info. Can be NULL. +//------------------------------------------------------------------------- +HRESULT WINAPI + D3DXCreateTorus( + LPDIRECT3DDEVICE9 pDevice, + FLOAT InnerRadius, + FLOAT OuterRadius, + UINT Sides, + UINT Rings, + LPD3DXMESH* ppMesh, + LPD3DXBUFFER* ppAdjacency); + + +//------------------------------------------------------------------------- +// D3DXCreateTeapot: +// ----------------- +// Creates a mesh containing a teapot. +// +// Parameters: +// +// pDevice The D3D device with which the mesh is going to be used. +// ppMesh The mesh object which will be created +// ppAdjacency Returns a buffer containing adjacency info. Can be NULL. +//------------------------------------------------------------------------- +HRESULT WINAPI + D3DXCreateTeapot( + LPDIRECT3DDEVICE9 pDevice, + LPD3DXMESH* ppMesh, + LPD3DXBUFFER* ppAdjacency); + + +//------------------------------------------------------------------------- +// D3DXCreateText: +// --------------- +// Creates a mesh containing the specified text using the font associated +// with the device context. +// +// Parameters: +// +// pDevice The D3D device with which the mesh is going to be used. +// hDC Device context, with desired font selected +// pText Text to generate +// Deviation Maximum chordal deviation from true font outlines +// Extrusion Amount to extrude text in -Z direction +// ppMesh The mesh object which will be created +// pGlyphMetrics Address of buffer to receive glyph metric data (or NULL) +//------------------------------------------------------------------------- +HRESULT WINAPI + D3DXCreateTextA( + LPDIRECT3DDEVICE9 pDevice, + HDC hDC, + LPCSTR pText, + FLOAT Deviation, + FLOAT Extrusion, + LPD3DXMESH* ppMesh, + LPD3DXBUFFER* ppAdjacency, + LPGLYPHMETRICSFLOAT pGlyphMetrics); + +HRESULT WINAPI + D3DXCreateTextW( + LPDIRECT3DDEVICE9 pDevice, + HDC hDC, + LPCWSTR pText, + FLOAT Deviation, + FLOAT Extrusion, + LPD3DXMESH* ppMesh, + LPD3DXBUFFER* ppAdjacency, + LPGLYPHMETRICSFLOAT pGlyphMetrics); + +#ifdef UNICODE +#define D3DXCreateText D3DXCreateTextW +#else +#define D3DXCreateText D3DXCreateTextA +#endif + + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif //__D3DX9SHAPES_H__ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9tex.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9tex.h new file mode 100644 index 0000000000..c4b65103f6 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9tex.h @@ -0,0 +1,1735 @@ +////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Microsoft Corporation. All Rights Reserved. +// +// File: d3dx9tex.h +// Content: D3DX texturing APIs +// +////////////////////////////////////////////////////////////////////////////// + +#include "d3dx9.h" + +#ifndef __D3DX9TEX_H__ +#define __D3DX9TEX_H__ + + +//---------------------------------------------------------------------------- +// D3DX_FILTER flags: +// ------------------ +// +// A valid filter must contain one of these values: +// +// D3DX_FILTER_NONE +// No scaling or filtering will take place. Pixels outside the bounds +// of the source image are assumed to be transparent black. +// D3DX_FILTER_POINT +// Each destination pixel is computed by sampling the nearest pixel +// from the source image. +// D3DX_FILTER_LINEAR +// Each destination pixel is computed by linearly interpolating between +// the nearest pixels in the source image. This filter works best +// when the scale on each axis is less than 2. +// D3DX_FILTER_TRIANGLE +// Every pixel in the source image contributes equally to the +// destination image. This is the slowest of all the filters. +// D3DX_FILTER_BOX +// Each pixel is computed by averaging a 2x2(x2) box pixels from +// the source image. Only works when the dimensions of the +// destination are half those of the source. (as with mip maps) +// +// And can be OR'd with any of these optional flags: +// +// D3DX_FILTER_MIRROR_U +// Indicates that pixels off the edge of the texture on the U-axis +// should be mirrored, not wraped. +// D3DX_FILTER_MIRROR_V +// Indicates that pixels off the edge of the texture on the V-axis +// should be mirrored, not wraped. +// D3DX_FILTER_MIRROR_W +// Indicates that pixels off the edge of the texture on the W-axis +// should be mirrored, not wraped. +// D3DX_FILTER_MIRROR +// Same as specifying D3DX_FILTER_MIRROR_U | D3DX_FILTER_MIRROR_V | +// D3DX_FILTER_MIRROR_V +// D3DX_FILTER_DITHER +// Dithers the resulting image using a 4x4 order dither pattern. +// D3DX_FILTER_SRGB_IN +// Denotes that the input data is in sRGB (gamma 2.2) colorspace. +// D3DX_FILTER_SRGB_OUT +// Denotes that the output data is in sRGB (gamma 2.2) colorspace. +// D3DX_FILTER_SRGB +// Same as specifying D3DX_FILTER_SRGB_IN | D3DX_FILTER_SRGB_OUT +// +//---------------------------------------------------------------------------- + +#define D3DX_FILTER_NONE (1 << 0) +#define D3DX_FILTER_POINT (2 << 0) +#define D3DX_FILTER_LINEAR (3 << 0) +#define D3DX_FILTER_TRIANGLE (4 << 0) +#define D3DX_FILTER_BOX (5 << 0) + +#define D3DX_FILTER_MIRROR_U (1 << 16) +#define D3DX_FILTER_MIRROR_V (2 << 16) +#define D3DX_FILTER_MIRROR_W (4 << 16) +#define D3DX_FILTER_MIRROR (7 << 16) + +#define D3DX_FILTER_DITHER (1 << 19) +#define D3DX_FILTER_DITHER_DIFFUSION (2 << 19) + +#define D3DX_FILTER_SRGB_IN (1 << 21) +#define D3DX_FILTER_SRGB_OUT (2 << 21) +#define D3DX_FILTER_SRGB (3 << 21) + + +//----------------------------------------------------------------------------- +// D3DX_SKIP_DDS_MIP_LEVELS is used to skip mip levels when loading a DDS file: +//----------------------------------------------------------------------------- + +#define D3DX_SKIP_DDS_MIP_LEVELS_MASK 0x1F +#define D3DX_SKIP_DDS_MIP_LEVELS_SHIFT 26 +#define D3DX_SKIP_DDS_MIP_LEVELS(levels, filter) ((((levels) & D3DX_SKIP_DDS_MIP_LEVELS_MASK) << D3DX_SKIP_DDS_MIP_LEVELS_SHIFT) | ((filter) == D3DX_DEFAULT ? D3DX_FILTER_BOX : (filter))) + + + + +//---------------------------------------------------------------------------- +// D3DX_NORMALMAP flags: +// --------------------- +// These flags are used to control how D3DXComputeNormalMap generates normal +// maps. Any number of these flags may be OR'd together in any combination. +// +// D3DX_NORMALMAP_MIRROR_U +// Indicates that pixels off the edge of the texture on the U-axis +// should be mirrored, not wraped. +// D3DX_NORMALMAP_MIRROR_V +// Indicates that pixels off the edge of the texture on the V-axis +// should be mirrored, not wraped. +// D3DX_NORMALMAP_MIRROR +// Same as specifying D3DX_NORMALMAP_MIRROR_U | D3DX_NORMALMAP_MIRROR_V +// D3DX_NORMALMAP_INVERTSIGN +// Inverts the direction of each normal +// D3DX_NORMALMAP_COMPUTE_OCCLUSION +// Compute the per pixel Occlusion term and encodes it into the alpha. +// An Alpha of 1 means that the pixel is not obscured in anyway, and +// an alpha of 0 would mean that the pixel is completly obscured. +// +//---------------------------------------------------------------------------- + +//---------------------------------------------------------------------------- + +#define D3DX_NORMALMAP_MIRROR_U (1 << 16) +#define D3DX_NORMALMAP_MIRROR_V (2 << 16) +#define D3DX_NORMALMAP_MIRROR (3 << 16) +#define D3DX_NORMALMAP_INVERTSIGN (8 << 16) +#define D3DX_NORMALMAP_COMPUTE_OCCLUSION (16 << 16) + + + + +//---------------------------------------------------------------------------- +// D3DX_CHANNEL flags: +// ------------------- +// These flags are used by functions which operate on or more channels +// in a texture. +// +// D3DX_CHANNEL_RED +// Indicates the red channel should be used +// D3DX_CHANNEL_BLUE +// Indicates the blue channel should be used +// D3DX_CHANNEL_GREEN +// Indicates the green channel should be used +// D3DX_CHANNEL_ALPHA +// Indicates the alpha channel should be used +// D3DX_CHANNEL_LUMINANCE +// Indicates the luminaces of the red green and blue channels should be +// used. +// +//---------------------------------------------------------------------------- + +#define D3DX_CHANNEL_RED (1 << 0) +#define D3DX_CHANNEL_BLUE (1 << 1) +#define D3DX_CHANNEL_GREEN (1 << 2) +#define D3DX_CHANNEL_ALPHA (1 << 3) +#define D3DX_CHANNEL_LUMINANCE (1 << 4) + + + + +//---------------------------------------------------------------------------- +// D3DXIMAGE_FILEFORMAT: +// --------------------- +// This enum is used to describe supported image file formats. +// +//---------------------------------------------------------------------------- + +typedef enum _D3DXIMAGE_FILEFORMAT +{ + D3DXIFF_BMP = 0, + D3DXIFF_JPG = 1, + D3DXIFF_TGA = 2, + D3DXIFF_PNG = 3, + D3DXIFF_DDS = 4, + D3DXIFF_PPM = 5, + D3DXIFF_DIB = 6, + D3DXIFF_HDR = 7, //high dynamic range formats + D3DXIFF_PFM = 8, // + D3DXIFF_FORCE_DWORD = 0x7fffffff + +} D3DXIMAGE_FILEFORMAT; + + +//---------------------------------------------------------------------------- +// LPD3DXFILL2D and LPD3DXFILL3D: +// ------------------------------ +// Function types used by the texture fill functions. +// +// Parameters: +// pOut +// Pointer to a vector which the function uses to return its result. +// X,Y,Z,W will be mapped to R,G,B,A respectivly. +// pTexCoord +// Pointer to a vector containing the coordinates of the texel currently +// being evaluated. Textures and VolumeTexture texcoord components +// range from 0 to 1. CubeTexture texcoord component range from -1 to 1. +// pTexelSize +// Pointer to a vector containing the dimensions of the current texel. +// pData +// Pointer to user data. +// +//---------------------------------------------------------------------------- + +typedef VOID (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *pOut, + CONST D3DXVECTOR2 *pTexCoord, CONST D3DXVECTOR2 *pTexelSize, LPVOID pData); + +typedef VOID (WINAPI *LPD3DXFILL3D)(D3DXVECTOR4 *pOut, + CONST D3DXVECTOR3 *pTexCoord, CONST D3DXVECTOR3 *pTexelSize, LPVOID pData); + + + +//---------------------------------------------------------------------------- +// D3DXIMAGE_INFO: +// --------------- +// This structure is used to return a rough description of what the +// the original contents of an image file looked like. +// +// Width +// Width of original image in pixels +// Height +// Height of original image in pixels +// Depth +// Depth of original image in pixels +// MipLevels +// Number of mip levels in original image +// Format +// D3D format which most closely describes the data in original image +// ResourceType +// D3DRESOURCETYPE representing the type of texture stored in the file. +// D3DRTYPE_TEXTURE, D3DRTYPE_VOLUMETEXTURE, or D3DRTYPE_CUBETEXTURE. +// ImageFileFormat +// D3DXIMAGE_FILEFORMAT representing the format of the image file. +// +//---------------------------------------------------------------------------- + +typedef struct _D3DXIMAGE_INFO +{ + UINT Width; + UINT Height; + UINT Depth; + UINT MipLevels; + D3DFORMAT Format; + D3DRESOURCETYPE ResourceType; + D3DXIMAGE_FILEFORMAT ImageFileFormat; + +} D3DXIMAGE_INFO; + + + + + +#ifdef __cplusplus +extern "C" { +#endif //__cplusplus + + + +////////////////////////////////////////////////////////////////////////////// +// Image File APIs /////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// +; +//---------------------------------------------------------------------------- +// GetImageInfoFromFile/Resource: +// ------------------------------ +// Fills in a D3DXIMAGE_INFO struct with information about an image file. +// +// Parameters: +// pSrcFile +// File name of the source image. +// pSrcModule +// Module where resource is located, or NULL for module associated +// with image the os used to create the current process. +// pSrcResource +// Resource name +// pSrcData +// Pointer to file in memory. +// SrcDataSize +// Size in bytes of file in memory. +// pSrcInfo +// Pointer to a D3DXIMAGE_INFO structure to be filled in with the +// description of the data in the source image file. +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXGetImageInfoFromFileA( + LPCSTR pSrcFile, + D3DXIMAGE_INFO* pSrcInfo); + +HRESULT WINAPI + D3DXGetImageInfoFromFileW( + LPCWSTR pSrcFile, + D3DXIMAGE_INFO* pSrcInfo); + +#ifdef UNICODE +#define D3DXGetImageInfoFromFile D3DXGetImageInfoFromFileW +#else +#define D3DXGetImageInfoFromFile D3DXGetImageInfoFromFileA +#endif + + +HRESULT WINAPI + D3DXGetImageInfoFromResourceA( + HMODULE hSrcModule, + LPCSTR pSrcResource, + D3DXIMAGE_INFO* pSrcInfo); + +HRESULT WINAPI + D3DXGetImageInfoFromResourceW( + HMODULE hSrcModule, + LPCWSTR pSrcResource, + D3DXIMAGE_INFO* pSrcInfo); + +#ifdef UNICODE +#define D3DXGetImageInfoFromResource D3DXGetImageInfoFromResourceW +#else +#define D3DXGetImageInfoFromResource D3DXGetImageInfoFromResourceA +#endif + + +HRESULT WINAPI + D3DXGetImageInfoFromFileInMemory( + LPCVOID pSrcData, + UINT SrcDataSize, + D3DXIMAGE_INFO* pSrcInfo); + + + + +////////////////////////////////////////////////////////////////////////////// +// Load/Save Surface APIs //////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +//---------------------------------------------------------------------------- +// D3DXLoadSurfaceFromFile/Resource: +// --------------------------------- +// Load surface from a file or resource +// +// Parameters: +// pDestSurface +// Destination surface, which will receive the image. +// pDestPalette +// Destination palette of 256 colors, or NULL +// pDestRect +// Destination rectangle, or NULL for entire surface +// pSrcFile +// File name of the source image. +// pSrcModule +// Module where resource is located, or NULL for module associated +// with image the os used to create the current process. +// pSrcResource +// Resource name +// pSrcData +// Pointer to file in memory. +// SrcDataSize +// Size in bytes of file in memory. +// pSrcRect +// Source rectangle, or NULL for entire image +// Filter +// D3DX_FILTER flags controlling how the image is filtered. +// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE. +// ColorKey +// Color to replace with transparent black, or 0 to disable colorkey. +// This is always a 32-bit ARGB color, independent of the source image +// format. Alpha is significant, and should usually be set to FF for +// opaque colorkeys. (ex. Opaque black == 0xff000000) +// pSrcInfo +// Pointer to a D3DXIMAGE_INFO structure to be filled in with the +// description of the data in the source image file, or NULL. +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXLoadSurfaceFromFileA( + LPDIRECT3DSURFACE9 pDestSurface, + CONST PALETTEENTRY* pDestPalette, + CONST RECT* pDestRect, + LPCSTR pSrcFile, + CONST RECT* pSrcRect, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + +HRESULT WINAPI + D3DXLoadSurfaceFromFileW( + LPDIRECT3DSURFACE9 pDestSurface, + CONST PALETTEENTRY* pDestPalette, + CONST RECT* pDestRect, + LPCWSTR pSrcFile, + CONST RECT* pSrcRect, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + +#ifdef UNICODE +#define D3DXLoadSurfaceFromFile D3DXLoadSurfaceFromFileW +#else +#define D3DXLoadSurfaceFromFile D3DXLoadSurfaceFromFileA +#endif + + + +HRESULT WINAPI + D3DXLoadSurfaceFromResourceA( + LPDIRECT3DSURFACE9 pDestSurface, + CONST PALETTEENTRY* pDestPalette, + CONST RECT* pDestRect, + HMODULE hSrcModule, + LPCSTR pSrcResource, + CONST RECT* pSrcRect, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + +HRESULT WINAPI + D3DXLoadSurfaceFromResourceW( + LPDIRECT3DSURFACE9 pDestSurface, + CONST PALETTEENTRY* pDestPalette, + CONST RECT* pDestRect, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + CONST RECT* pSrcRect, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + + +#ifdef UNICODE +#define D3DXLoadSurfaceFromResource D3DXLoadSurfaceFromResourceW +#else +#define D3DXLoadSurfaceFromResource D3DXLoadSurfaceFromResourceA +#endif + + + +HRESULT WINAPI + D3DXLoadSurfaceFromFileInMemory( + LPDIRECT3DSURFACE9 pDestSurface, + CONST PALETTEENTRY* pDestPalette, + CONST RECT* pDestRect, + LPCVOID pSrcData, + UINT SrcDataSize, + CONST RECT* pSrcRect, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + + + +//---------------------------------------------------------------------------- +// D3DXLoadSurfaceFromSurface: +// --------------------------- +// Load surface from another surface (with color conversion) +// +// Parameters: +// pDestSurface +// Destination surface, which will receive the image. +// pDestPalette +// Destination palette of 256 colors, or NULL +// pDestRect +// Destination rectangle, or NULL for entire surface +// pSrcSurface +// Source surface +// pSrcPalette +// Source palette of 256 colors, or NULL +// pSrcRect +// Source rectangle, or NULL for entire surface +// Filter +// D3DX_FILTER flags controlling how the image is filtered. +// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE. +// ColorKey +// Color to replace with transparent black, or 0 to disable colorkey. +// This is always a 32-bit ARGB color, independent of the source image +// format. Alpha is significant, and should usually be set to FF for +// opaque colorkeys. (ex. Opaque black == 0xff000000) +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXLoadSurfaceFromSurface( + LPDIRECT3DSURFACE9 pDestSurface, + CONST PALETTEENTRY* pDestPalette, + CONST RECT* pDestRect, + LPDIRECT3DSURFACE9 pSrcSurface, + CONST PALETTEENTRY* pSrcPalette, + CONST RECT* pSrcRect, + DWORD Filter, + D3DCOLOR ColorKey); + + +//---------------------------------------------------------------------------- +// D3DXLoadSurfaceFromMemory: +// -------------------------- +// Load surface from memory. +// +// Parameters: +// pDestSurface +// Destination surface, which will receive the image. +// pDestPalette +// Destination palette of 256 colors, or NULL +// pDestRect +// Destination rectangle, or NULL for entire surface +// pSrcMemory +// Pointer to the top-left corner of the source image in memory +// SrcFormat +// Pixel format of the source image. +// SrcPitch +// Pitch of source image, in bytes. For DXT formats, this number +// should represent the width of one row of cells, in bytes. +// pSrcPalette +// Source palette of 256 colors, or NULL +// pSrcRect +// Source rectangle. +// Filter +// D3DX_FILTER flags controlling how the image is filtered. +// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE. +// ColorKey +// Color to replace with transparent black, or 0 to disable colorkey. +// This is always a 32-bit ARGB color, independent of the source image +// format. Alpha is significant, and should usually be set to FF for +// opaque colorkeys. (ex. Opaque black == 0xff000000) +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXLoadSurfaceFromMemory( + LPDIRECT3DSURFACE9 pDestSurface, + CONST PALETTEENTRY* pDestPalette, + CONST RECT* pDestRect, + LPCVOID pSrcMemory, + D3DFORMAT SrcFormat, + UINT SrcPitch, + CONST PALETTEENTRY* pSrcPalette, + CONST RECT* pSrcRect, + DWORD Filter, + D3DCOLOR ColorKey); + + +//---------------------------------------------------------------------------- +// D3DXSaveSurfaceToFile: +// ---------------------- +// Save a surface to a image file. +// +// Parameters: +// pDestFile +// File name of the destination file +// DestFormat +// D3DXIMAGE_FILEFORMAT specifying file format to use when saving. +// pSrcSurface +// Source surface, containing the image to be saved +// pSrcPalette +// Source palette of 256 colors, or NULL +// pSrcRect +// Source rectangle, or NULL for the entire image +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXSaveSurfaceToFileA( + LPCSTR pDestFile, + D3DXIMAGE_FILEFORMAT DestFormat, + LPDIRECT3DSURFACE9 pSrcSurface, + CONST PALETTEENTRY* pSrcPalette, + CONST RECT* pSrcRect); + +HRESULT WINAPI + D3DXSaveSurfaceToFileW( + LPCWSTR pDestFile, + D3DXIMAGE_FILEFORMAT DestFormat, + LPDIRECT3DSURFACE9 pSrcSurface, + CONST PALETTEENTRY* pSrcPalette, + CONST RECT* pSrcRect); + +#ifdef UNICODE +#define D3DXSaveSurfaceToFile D3DXSaveSurfaceToFileW +#else +#define D3DXSaveSurfaceToFile D3DXSaveSurfaceToFileA +#endif + +//---------------------------------------------------------------------------- +// D3DXSaveSurfaceToFileInMemory: +// ---------------------- +// Save a surface to a image file. +// +// Parameters: +// ppDestBuf +// address of pointer to d3dxbuffer for returning data bits +// DestFormat +// D3DXIMAGE_FILEFORMAT specifying file format to use when saving. +// pSrcSurface +// Source surface, containing the image to be saved +// pSrcPalette +// Source palette of 256 colors, or NULL +// pSrcRect +// Source rectangle, or NULL for the entire image +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXSaveSurfaceToFileInMemory( + LPD3DXBUFFER* ppDestBuf, + D3DXIMAGE_FILEFORMAT DestFormat, + LPDIRECT3DSURFACE9 pSrcSurface, + CONST PALETTEENTRY* pSrcPalette, + CONST RECT* pSrcRect); + + +////////////////////////////////////////////////////////////////////////////// +// Load/Save Volume APIs ///////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +//---------------------------------------------------------------------------- +// D3DXLoadVolumeFromFile/Resource: +// -------------------------------- +// Load volume from a file or resource +// +// Parameters: +// pDestVolume +// Destination volume, which will receive the image. +// pDestPalette +// Destination palette of 256 colors, or NULL +// pDestBox +// Destination box, or NULL for entire volume +// pSrcFile +// File name of the source image. +// pSrcModule +// Module where resource is located, or NULL for module associated +// with image the os used to create the current process. +// pSrcResource +// Resource name +// pSrcData +// Pointer to file in memory. +// SrcDataSize +// Size in bytes of file in memory. +// pSrcBox +// Source box, or NULL for entire image +// Filter +// D3DX_FILTER flags controlling how the image is filtered. +// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE. +// ColorKey +// Color to replace with transparent black, or 0 to disable colorkey. +// This is always a 32-bit ARGB color, independent of the source image +// format. Alpha is significant, and should usually be set to FF for +// opaque colorkeys. (ex. Opaque black == 0xff000000) +// pSrcInfo +// Pointer to a D3DXIMAGE_INFO structure to be filled in with the +// description of the data in the source image file, or NULL. +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXLoadVolumeFromFileA( + LPDIRECT3DVOLUME9 pDestVolume, + CONST PALETTEENTRY* pDestPalette, + CONST D3DBOX* pDestBox, + LPCSTR pSrcFile, + CONST D3DBOX* pSrcBox, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + +HRESULT WINAPI + D3DXLoadVolumeFromFileW( + LPDIRECT3DVOLUME9 pDestVolume, + CONST PALETTEENTRY* pDestPalette, + CONST D3DBOX* pDestBox, + LPCWSTR pSrcFile, + CONST D3DBOX* pSrcBox, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + +#ifdef UNICODE +#define D3DXLoadVolumeFromFile D3DXLoadVolumeFromFileW +#else +#define D3DXLoadVolumeFromFile D3DXLoadVolumeFromFileA +#endif + + +HRESULT WINAPI + D3DXLoadVolumeFromResourceA( + LPDIRECT3DVOLUME9 pDestVolume, + CONST PALETTEENTRY* pDestPalette, + CONST D3DBOX* pDestBox, + HMODULE hSrcModule, + LPCSTR pSrcResource, + CONST D3DBOX* pSrcBox, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + +HRESULT WINAPI + D3DXLoadVolumeFromResourceW( + LPDIRECT3DVOLUME9 pDestVolume, + CONST PALETTEENTRY* pDestPalette, + CONST D3DBOX* pDestBox, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + CONST D3DBOX* pSrcBox, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + +#ifdef UNICODE +#define D3DXLoadVolumeFromResource D3DXLoadVolumeFromResourceW +#else +#define D3DXLoadVolumeFromResource D3DXLoadVolumeFromResourceA +#endif + + + +HRESULT WINAPI + D3DXLoadVolumeFromFileInMemory( + LPDIRECT3DVOLUME9 pDestVolume, + CONST PALETTEENTRY* pDestPalette, + CONST D3DBOX* pDestBox, + LPCVOID pSrcData, + UINT SrcDataSize, + CONST D3DBOX* pSrcBox, + DWORD Filter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo); + + + +//---------------------------------------------------------------------------- +// D3DXLoadVolumeFromVolume: +// ------------------------- +// Load volume from another volume (with color conversion) +// +// Parameters: +// pDestVolume +// Destination volume, which will receive the image. +// pDestPalette +// Destination palette of 256 colors, or NULL +// pDestBox +// Destination box, or NULL for entire volume +// pSrcVolume +// Source volume +// pSrcPalette +// Source palette of 256 colors, or NULL +// pSrcBox +// Source box, or NULL for entire volume +// Filter +// D3DX_FILTER flags controlling how the image is filtered. +// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE. +// ColorKey +// Color to replace with transparent black, or 0 to disable colorkey. +// This is always a 32-bit ARGB color, independent of the source image +// format. Alpha is significant, and should usually be set to FF for +// opaque colorkeys. (ex. Opaque black == 0xff000000) +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXLoadVolumeFromVolume( + LPDIRECT3DVOLUME9 pDestVolume, + CONST PALETTEENTRY* pDestPalette, + CONST D3DBOX* pDestBox, + LPDIRECT3DVOLUME9 pSrcVolume, + CONST PALETTEENTRY* pSrcPalette, + CONST D3DBOX* pSrcBox, + DWORD Filter, + D3DCOLOR ColorKey); + + + +//---------------------------------------------------------------------------- +// D3DXLoadVolumeFromMemory: +// ------------------------- +// Load volume from memory. +// +// Parameters: +// pDestVolume +// Destination volume, which will receive the image. +// pDestPalette +// Destination palette of 256 colors, or NULL +// pDestBox +// Destination box, or NULL for entire volume +// pSrcMemory +// Pointer to the top-left corner of the source volume in memory +// SrcFormat +// Pixel format of the source volume. +// SrcRowPitch +// Pitch of source image, in bytes. For DXT formats, this number +// should represent the size of one row of cells, in bytes. +// SrcSlicePitch +// Pitch of source image, in bytes. For DXT formats, this number +// should represent the size of one slice of cells, in bytes. +// pSrcPalette +// Source palette of 256 colors, or NULL +// pSrcBox +// Source box. +// Filter +// D3DX_FILTER flags controlling how the image is filtered. +// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE. +// ColorKey +// Color to replace with transparent black, or 0 to disable colorkey. +// This is always a 32-bit ARGB color, independent of the source image +// format. Alpha is significant, and should usually be set to FF for +// opaque colorkeys. (ex. Opaque black == 0xff000000) +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXLoadVolumeFromMemory( + LPDIRECT3DVOLUME9 pDestVolume, + CONST PALETTEENTRY* pDestPalette, + CONST D3DBOX* pDestBox, + LPCVOID pSrcMemory, + D3DFORMAT SrcFormat, + UINT SrcRowPitch, + UINT SrcSlicePitch, + CONST PALETTEENTRY* pSrcPalette, + CONST D3DBOX* pSrcBox, + DWORD Filter, + D3DCOLOR ColorKey); + + + +//---------------------------------------------------------------------------- +// D3DXSaveVolumeToFile: +// --------------------- +// Save a volume to a image file. +// +// Parameters: +// pDestFile +// File name of the destination file +// DestFormat +// D3DXIMAGE_FILEFORMAT specifying file format to use when saving. +// pSrcVolume +// Source volume, containing the image to be saved +// pSrcPalette +// Source palette of 256 colors, or NULL +// pSrcBox +// Source box, or NULL for the entire volume +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXSaveVolumeToFileA( + LPCSTR pDestFile, + D3DXIMAGE_FILEFORMAT DestFormat, + LPDIRECT3DVOLUME9 pSrcVolume, + CONST PALETTEENTRY* pSrcPalette, + CONST D3DBOX* pSrcBox); + +HRESULT WINAPI + D3DXSaveVolumeToFileW( + LPCWSTR pDestFile, + D3DXIMAGE_FILEFORMAT DestFormat, + LPDIRECT3DVOLUME9 pSrcVolume, + CONST PALETTEENTRY* pSrcPalette, + CONST D3DBOX* pSrcBox); + +#ifdef UNICODE +#define D3DXSaveVolumeToFile D3DXSaveVolumeToFileW +#else +#define D3DXSaveVolumeToFile D3DXSaveVolumeToFileA +#endif + + +//---------------------------------------------------------------------------- +// D3DXSaveVolumeToFileInMemory: +// --------------------- +// Save a volume to a image file. +// +// Parameters: +// pDestFile +// File name of the destination file +// DestFormat +// D3DXIMAGE_FILEFORMAT specifying file format to use when saving. +// pSrcVolume +// Source volume, containing the image to be saved +// pSrcPalette +// Source palette of 256 colors, or NULL +// pSrcBox +// Source box, or NULL for the entire volume +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXSaveVolumeToFileInMemory( + LPD3DXBUFFER* ppDestBuf, + D3DXIMAGE_FILEFORMAT DestFormat, + LPDIRECT3DVOLUME9 pSrcVolume, + CONST PALETTEENTRY* pSrcPalette, + CONST D3DBOX* pSrcBox); + +////////////////////////////////////////////////////////////////////////////// +// Create/Save Texture APIs ////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +//---------------------------------------------------------------------------- +// D3DXCheckTextureRequirements: +// ----------------------------- +// Checks texture creation parameters. If parameters are invalid, this +// function returns corrected parameters. +// +// Parameters: +// +// pDevice +// The D3D device to be used +// pWidth, pHeight, pDepth, pSize +// Desired size in pixels, or NULL. Returns corrected size. +// pNumMipLevels +// Number of desired mipmap levels, or NULL. Returns corrected number. +// Usage +// Texture usage flags +// pFormat +// Desired pixel format, or NULL. Returns corrected format. +// Pool +// Memory pool to be used to create texture +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXCheckTextureRequirements( + LPDIRECT3DDEVICE9 pDevice, + UINT* pWidth, + UINT* pHeight, + UINT* pNumMipLevels, + DWORD Usage, + D3DFORMAT* pFormat, + D3DPOOL Pool); + +HRESULT WINAPI + D3DXCheckCubeTextureRequirements( + LPDIRECT3DDEVICE9 pDevice, + UINT* pSize, + UINT* pNumMipLevels, + DWORD Usage, + D3DFORMAT* pFormat, + D3DPOOL Pool); + +HRESULT WINAPI + D3DXCheckVolumeTextureRequirements( + LPDIRECT3DDEVICE9 pDevice, + UINT* pWidth, + UINT* pHeight, + UINT* pDepth, + UINT* pNumMipLevels, + DWORD Usage, + D3DFORMAT* pFormat, + D3DPOOL Pool); + + +//---------------------------------------------------------------------------- +// D3DXCreateTexture: +// ------------------ +// Create an empty texture +// +// Parameters: +// +// pDevice +// The D3D device with which the texture is going to be used. +// Width, Height, Depth, Size +// size in pixels. these must be non-zero +// MipLevels +// number of mip levels desired. if zero or D3DX_DEFAULT, a complete +// mipmap chain will be created. +// Usage +// Texture usage flags +// Format +// Pixel format. +// Pool +// Memory pool to be used to create texture +// ppTexture, ppCubeTexture, ppVolumeTexture +// The texture object that will be created +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXCreateTexture( + LPDIRECT3DDEVICE9 pDevice, + UINT Width, + UINT Height, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + LPDIRECT3DTEXTURE9* ppTexture); + +HRESULT WINAPI + D3DXCreateCubeTexture( + LPDIRECT3DDEVICE9 pDevice, + UINT Size, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +HRESULT WINAPI + D3DXCreateVolumeTexture( + LPDIRECT3DDEVICE9 pDevice, + UINT Width, + UINT Height, + UINT Depth, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + + + +//---------------------------------------------------------------------------- +// D3DXCreateTextureFromFile/Resource: +// ----------------------------------- +// Create a texture object from a file or resource. +// +// Parameters: +// +// pDevice +// The D3D device with which the texture is going to be used. +// pSrcFile +// File name. +// hSrcModule +// Module handle. if NULL, current module will be used. +// pSrcResource +// Resource name in module +// pvSrcData +// Pointer to file in memory. +// SrcDataSize +// Size in bytes of file in memory. +// Width, Height, Depth, Size +// Size in pixels. If zero or D3DX_DEFAULT, the size will be taken from +// the file and rounded up to a power of two. If D3DX_DEFAULT_NONPOW2, +// and the device supports NONPOW2 textures, the size will not be rounded. +// If D3DX_FROM_FILE, the size will be taken exactly as it is in the file, +// and the call will fail if this violates device capabilities. +// MipLevels +// Number of mip levels. If zero or D3DX_DEFAULT, a complete mipmap +// chain will be created. If D3DX_FROM_FILE, the size will be taken +// exactly as it is in the file, and the call will fail if this violates +// device capabilities. +// Usage +// Texture usage flags +// Format +// Desired pixel format. If D3DFMT_UNKNOWN, the format will be +// taken from the file. If D3DFMT_FROM_FILE, the format will be taken +// exactly as it is in the file, and the call will fail if the device does +// not support the given format. +// Pool +// Memory pool to be used to create texture +// Filter +// D3DX_FILTER flags controlling how the image is filtered. +// Or D3DX_DEFAULT for D3DX_FILTER_TRIANGLE. +// MipFilter +// D3DX_FILTER flags controlling how each miplevel is filtered. +// Or D3DX_DEFAULT for D3DX_FILTER_BOX. +// Use the D3DX_SKIP_DDS_MIP_LEVELS macro to specify both a filter and the +// number of mip levels to skip when loading DDS files. +// ColorKey +// Color to replace with transparent black, or 0 to disable colorkey. +// This is always a 32-bit ARGB color, independent of the source image +// format. Alpha is significant, and should usually be set to FF for +// opaque colorkeys. (ex. Opaque black == 0xff000000) +// pSrcInfo +// Pointer to a D3DXIMAGE_INFO structure to be filled in with the +// description of the data in the source image file, or NULL. +// pPalette +// 256 color palette to be filled in, or NULL +// ppTexture, ppCubeTexture, ppVolumeTexture +// The texture object that will be created +// +//---------------------------------------------------------------------------- + +// FromFile + +HRESULT WINAPI + D3DXCreateTextureFromFileA( + LPDIRECT3DDEVICE9 pDevice, + LPCSTR pSrcFile, + LPDIRECT3DTEXTURE9* ppTexture); + +HRESULT WINAPI + D3DXCreateTextureFromFileW( + LPDIRECT3DDEVICE9 pDevice, + LPCWSTR pSrcFile, + LPDIRECT3DTEXTURE9* ppTexture); + +#ifdef UNICODE +#define D3DXCreateTextureFromFile D3DXCreateTextureFromFileW +#else +#define D3DXCreateTextureFromFile D3DXCreateTextureFromFileA +#endif + + +HRESULT WINAPI + D3DXCreateCubeTextureFromFileA( + LPDIRECT3DDEVICE9 pDevice, + LPCSTR pSrcFile, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +HRESULT WINAPI + D3DXCreateCubeTextureFromFileW( + LPDIRECT3DDEVICE9 pDevice, + LPCWSTR pSrcFile, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +#ifdef UNICODE +#define D3DXCreateCubeTextureFromFile D3DXCreateCubeTextureFromFileW +#else +#define D3DXCreateCubeTextureFromFile D3DXCreateCubeTextureFromFileA +#endif + + +HRESULT WINAPI + D3DXCreateVolumeTextureFromFileA( + LPDIRECT3DDEVICE9 pDevice, + LPCSTR pSrcFile, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + +HRESULT WINAPI + D3DXCreateVolumeTextureFromFileW( + LPDIRECT3DDEVICE9 pDevice, + LPCWSTR pSrcFile, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + +#ifdef UNICODE +#define D3DXCreateVolumeTextureFromFile D3DXCreateVolumeTextureFromFileW +#else +#define D3DXCreateVolumeTextureFromFile D3DXCreateVolumeTextureFromFileA +#endif + + +// FromResource + +HRESULT WINAPI + D3DXCreateTextureFromResourceA( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCSTR pSrcResource, + LPDIRECT3DTEXTURE9* ppTexture); + +HRESULT WINAPI + D3DXCreateTextureFromResourceW( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + LPDIRECT3DTEXTURE9* ppTexture); + +#ifdef UNICODE +#define D3DXCreateTextureFromResource D3DXCreateTextureFromResourceW +#else +#define D3DXCreateTextureFromResource D3DXCreateTextureFromResourceA +#endif + + +HRESULT WINAPI + D3DXCreateCubeTextureFromResourceA( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCSTR pSrcResource, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +HRESULT WINAPI + D3DXCreateCubeTextureFromResourceW( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +#ifdef UNICODE +#define D3DXCreateCubeTextureFromResource D3DXCreateCubeTextureFromResourceW +#else +#define D3DXCreateCubeTextureFromResource D3DXCreateCubeTextureFromResourceA +#endif + + +HRESULT WINAPI + D3DXCreateVolumeTextureFromResourceA( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCSTR pSrcResource, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + +HRESULT WINAPI + D3DXCreateVolumeTextureFromResourceW( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + +#ifdef UNICODE +#define D3DXCreateVolumeTextureFromResource D3DXCreateVolumeTextureFromResourceW +#else +#define D3DXCreateVolumeTextureFromResource D3DXCreateVolumeTextureFromResourceA +#endif + + +// FromFileEx + +HRESULT WINAPI + D3DXCreateTextureFromFileExA( + LPDIRECT3DDEVICE9 pDevice, + LPCSTR pSrcFile, + UINT Width, + UINT Height, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DTEXTURE9* ppTexture); + +HRESULT WINAPI + D3DXCreateTextureFromFileExW( + LPDIRECT3DDEVICE9 pDevice, + LPCWSTR pSrcFile, + UINT Width, + UINT Height, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DTEXTURE9* ppTexture); + +#ifdef UNICODE +#define D3DXCreateTextureFromFileEx D3DXCreateTextureFromFileExW +#else +#define D3DXCreateTextureFromFileEx D3DXCreateTextureFromFileExA +#endif + + +HRESULT WINAPI + D3DXCreateCubeTextureFromFileExA( + LPDIRECT3DDEVICE9 pDevice, + LPCSTR pSrcFile, + UINT Size, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +HRESULT WINAPI + D3DXCreateCubeTextureFromFileExW( + LPDIRECT3DDEVICE9 pDevice, + LPCWSTR pSrcFile, + UINT Size, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +#ifdef UNICODE +#define D3DXCreateCubeTextureFromFileEx D3DXCreateCubeTextureFromFileExW +#else +#define D3DXCreateCubeTextureFromFileEx D3DXCreateCubeTextureFromFileExA +#endif + + +HRESULT WINAPI + D3DXCreateVolumeTextureFromFileExA( + LPDIRECT3DDEVICE9 pDevice, + LPCSTR pSrcFile, + UINT Width, + UINT Height, + UINT Depth, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + +HRESULT WINAPI + D3DXCreateVolumeTextureFromFileExW( + LPDIRECT3DDEVICE9 pDevice, + LPCWSTR pSrcFile, + UINT Width, + UINT Height, + UINT Depth, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + +#ifdef UNICODE +#define D3DXCreateVolumeTextureFromFileEx D3DXCreateVolumeTextureFromFileExW +#else +#define D3DXCreateVolumeTextureFromFileEx D3DXCreateVolumeTextureFromFileExA +#endif + + +// FromResourceEx + +HRESULT WINAPI + D3DXCreateTextureFromResourceExA( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCSTR pSrcResource, + UINT Width, + UINT Height, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DTEXTURE9* ppTexture); + +HRESULT WINAPI + D3DXCreateTextureFromResourceExW( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + UINT Width, + UINT Height, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DTEXTURE9* ppTexture); + +#ifdef UNICODE +#define D3DXCreateTextureFromResourceEx D3DXCreateTextureFromResourceExW +#else +#define D3DXCreateTextureFromResourceEx D3DXCreateTextureFromResourceExA +#endif + + +HRESULT WINAPI + D3DXCreateCubeTextureFromResourceExA( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCSTR pSrcResource, + UINT Size, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +HRESULT WINAPI + D3DXCreateCubeTextureFromResourceExW( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + UINT Size, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +#ifdef UNICODE +#define D3DXCreateCubeTextureFromResourceEx D3DXCreateCubeTextureFromResourceExW +#else +#define D3DXCreateCubeTextureFromResourceEx D3DXCreateCubeTextureFromResourceExA +#endif + + +HRESULT WINAPI + D3DXCreateVolumeTextureFromResourceExA( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCSTR pSrcResource, + UINT Width, + UINT Height, + UINT Depth, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + +HRESULT WINAPI + D3DXCreateVolumeTextureFromResourceExW( + LPDIRECT3DDEVICE9 pDevice, + HMODULE hSrcModule, + LPCWSTR pSrcResource, + UINT Width, + UINT Height, + UINT Depth, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + +#ifdef UNICODE +#define D3DXCreateVolumeTextureFromResourceEx D3DXCreateVolumeTextureFromResourceExW +#else +#define D3DXCreateVolumeTextureFromResourceEx D3DXCreateVolumeTextureFromResourceExA +#endif + + +// FromFileInMemory + +HRESULT WINAPI + D3DXCreateTextureFromFileInMemory( + LPDIRECT3DDEVICE9 pDevice, + LPCVOID pSrcData, + UINT SrcDataSize, + LPDIRECT3DTEXTURE9* ppTexture); + +HRESULT WINAPI + D3DXCreateCubeTextureFromFileInMemory( + LPDIRECT3DDEVICE9 pDevice, + LPCVOID pSrcData, + UINT SrcDataSize, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +HRESULT WINAPI + D3DXCreateVolumeTextureFromFileInMemory( + LPDIRECT3DDEVICE9 pDevice, + LPCVOID pSrcData, + UINT SrcDataSize, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + + +// FromFileInMemoryEx + +HRESULT WINAPI + D3DXCreateTextureFromFileInMemoryEx( + LPDIRECT3DDEVICE9 pDevice, + LPCVOID pSrcData, + UINT SrcDataSize, + UINT Width, + UINT Height, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DTEXTURE9* ppTexture); + +HRESULT WINAPI + D3DXCreateCubeTextureFromFileInMemoryEx( + LPDIRECT3DDEVICE9 pDevice, + LPCVOID pSrcData, + UINT SrcDataSize, + UINT Size, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DCUBETEXTURE9* ppCubeTexture); + +HRESULT WINAPI + D3DXCreateVolumeTextureFromFileInMemoryEx( + LPDIRECT3DDEVICE9 pDevice, + LPCVOID pSrcData, + UINT SrcDataSize, + UINT Width, + UINT Height, + UINT Depth, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture); + + + +//---------------------------------------------------------------------------- +// D3DXSaveTextureToFile: +// ---------------------- +// Save a texture to a file. +// +// Parameters: +// pDestFile +// File name of the destination file +// DestFormat +// D3DXIMAGE_FILEFORMAT specifying file format to use when saving. +// pSrcTexture +// Source texture, containing the image to be saved +// pSrcPalette +// Source palette of 256 colors, or NULL +// +//---------------------------------------------------------------------------- + + +HRESULT WINAPI + D3DXSaveTextureToFileA( + LPCSTR pDestFile, + D3DXIMAGE_FILEFORMAT DestFormat, + LPDIRECT3DBASETEXTURE9 pSrcTexture, + CONST PALETTEENTRY* pSrcPalette); + +HRESULT WINAPI + D3DXSaveTextureToFileW( + LPCWSTR pDestFile, + D3DXIMAGE_FILEFORMAT DestFormat, + LPDIRECT3DBASETEXTURE9 pSrcTexture, + CONST PALETTEENTRY* pSrcPalette); + +#ifdef UNICODE +#define D3DXSaveTextureToFile D3DXSaveTextureToFileW +#else +#define D3DXSaveTextureToFile D3DXSaveTextureToFileA +#endif + + +//---------------------------------------------------------------------------- +// D3DXSaveTextureToFileInMemory: +// ---------------------- +// Save a texture to a file. +// +// Parameters: +// ppDestBuf +// address of a d3dxbuffer pointer to return the image data +// DestFormat +// D3DXIMAGE_FILEFORMAT specifying file format to use when saving. +// pSrcTexture +// Source texture, containing the image to be saved +// pSrcPalette +// Source palette of 256 colors, or NULL +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXSaveTextureToFileInMemory( + LPD3DXBUFFER* ppDestBuf, + D3DXIMAGE_FILEFORMAT DestFormat, + LPDIRECT3DBASETEXTURE9 pSrcTexture, + CONST PALETTEENTRY* pSrcPalette); + + + + +////////////////////////////////////////////////////////////////////////////// +// Misc Texture APIs ///////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +//---------------------------------------------------------------------------- +// D3DXFilterTexture: +// ------------------ +// Filters mipmaps levels of a texture. +// +// Parameters: +// pBaseTexture +// The texture object to be filtered +// pPalette +// 256 color palette to be used, or NULL for non-palettized formats +// SrcLevel +// The level whose image is used to generate the subsequent levels. +// Filter +// D3DX_FILTER flags controlling how each miplevel is filtered. +// Or D3DX_DEFAULT for D3DX_FILTER_BOX, +// +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXFilterTexture( + LPDIRECT3DBASETEXTURE9 pBaseTexture, + CONST PALETTEENTRY* pPalette, + UINT SrcLevel, + DWORD Filter); + +#define D3DXFilterCubeTexture D3DXFilterTexture +#define D3DXFilterVolumeTexture D3DXFilterTexture + + + +//---------------------------------------------------------------------------- +// D3DXFillTexture: +// ---------------- +// Uses a user provided function to fill each texel of each mip level of a +// given texture. +// +// Paramters: +// pTexture, pCubeTexture, pVolumeTexture +// Pointer to the texture to be filled. +// pFunction +// Pointer to user provided evalutor function which will be used to +// compute the value of each texel. +// pData +// Pointer to an arbitrary block of user defined data. This pointer +// will be passed to the function provided in pFunction +//----------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXFillTexture( + LPDIRECT3DTEXTURE9 pTexture, + LPD3DXFILL2D pFunction, + LPVOID pData); + +HRESULT WINAPI + D3DXFillCubeTexture( + LPDIRECT3DCUBETEXTURE9 pCubeTexture, + LPD3DXFILL3D pFunction, + LPVOID pData); + +HRESULT WINAPI + D3DXFillVolumeTexture( + LPDIRECT3DVOLUMETEXTURE9 pVolumeTexture, + LPD3DXFILL3D pFunction, + LPVOID pData); + +//--------------------------------------------------------------------------- +// D3DXFillTextureTX: +// ------------------ +// Uses a TX Shader target to function to fill each texel of each mip level +// of a given texture. The TX Shader target should be a compiled function +// taking 2 paramters and returning a float4 color. +// +// Paramters: +// pTexture, pCubeTexture, pVolumeTexture +// Pointer to the texture to be filled. +// pTextureShader +// Pointer to the texture shader to be used to fill in the texture +//---------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXFillTextureTX( + LPDIRECT3DTEXTURE9 pTexture, + LPD3DXTEXTURESHADER pTextureShader); + + +HRESULT WINAPI + D3DXFillCubeTextureTX( + LPDIRECT3DCUBETEXTURE9 pCubeTexture, + LPD3DXTEXTURESHADER pTextureShader); + + +HRESULT WINAPI + D3DXFillVolumeTextureTX( + LPDIRECT3DVOLUMETEXTURE9 pVolumeTexture, + LPD3DXTEXTURESHADER pTextureShader); + + + +//---------------------------------------------------------------------------- +// D3DXComputeNormalMap: +// --------------------- +// Converts a height map into a normal map. The (x,y,z) components of each +// normal are mapped to the (r,g,b) channels of the output texture. +// +// Parameters +// pTexture +// Pointer to the destination texture +// pSrcTexture +// Pointer to the source heightmap texture +// pSrcPalette +// Source palette of 256 colors, or NULL +// Flags +// D3DX_NORMALMAP flags +// Channel +// D3DX_CHANNEL specifying source of height information +// Amplitude +// The constant value which the height information is multiplied by. +//--------------------------------------------------------------------------- + +HRESULT WINAPI + D3DXComputeNormalMap( + LPDIRECT3DTEXTURE9 pTexture, + LPDIRECT3DTEXTURE9 pSrcTexture, + CONST PALETTEENTRY* pSrcPalette, + DWORD Flags, + DWORD Channel, + FLOAT Amplitude); + + + + +#ifdef __cplusplus +} +#endif //__cplusplus + +#endif //__D3DX9TEX_H__ + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9xof.h b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9xof.h new file mode 100644 index 0000000000..c513f0fc93 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Include/d3dx9xof.h @@ -0,0 +1,299 @@ +/////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Microsoft Corporation. All Rights Reserved. +// +// File: d3dx9xof.h +// Content: D3DX .X File types and functions +// +/////////////////////////////////////////////////////////////////////////// + +#include "d3dx9.h" + +#if !defined( __D3DX9XOF_H__ ) +#define __D3DX9XOF_H__ + +#if defined( __cplusplus ) +extern "C" { +#endif // defined( __cplusplus ) + +//---------------------------------------------------------------------------- +// D3DXF_FILEFORMAT +// This flag is used to specify what file type to use when saving to disk. +// _BINARY, and _TEXT are mutually exclusive, while +// _COMPRESSED is an optional setting that works with all file types. +//---------------------------------------------------------------------------- +typedef DWORD D3DXF_FILEFORMAT; + +#define D3DXF_FILEFORMAT_BINARY 0 +#define D3DXF_FILEFORMAT_TEXT 1 +#define D3DXF_FILEFORMAT_COMPRESSED 2 + +//---------------------------------------------------------------------------- +// D3DXF_FILESAVEOPTIONS +// This flag is used to specify where to save the file to. Each flag is +// mutually exclusive, indicates the data location of the file, and also +// chooses which additional data will specify the location. +// _TOFILE is paired with a filename (LPCSTR) +// _TOWFILE is paired with a filename (LPWSTR) +//---------------------------------------------------------------------------- +typedef DWORD D3DXF_FILESAVEOPTIONS; + +#define D3DXF_FILESAVE_TOFILE 0x00L +#define D3DXF_FILESAVE_TOWFILE 0x01L + +//---------------------------------------------------------------------------- +// D3DXF_FILELOADOPTIONS +// This flag is used to specify where to load the file from. Each flag is +// mutually exclusive, indicates the data location of the file, and also +// chooses which additional data will specify the location. +// _FROMFILE is paired with a filename (LPCSTR) +// _FROMWFILE is paired with a filename (LPWSTR) +// _FROMRESOURCE is paired with a (D3DXF_FILELOADRESOUCE*) description. +// _FROMMEMORY is paired with a (D3DXF_FILELOADMEMORY*) description. +//---------------------------------------------------------------------------- +typedef DWORD D3DXF_FILELOADOPTIONS; + +#define D3DXF_FILELOAD_FROMFILE 0x00L +#define D3DXF_FILELOAD_FROMWFILE 0x01L +#define D3DXF_FILELOAD_FROMRESOURCE 0x02L +#define D3DXF_FILELOAD_FROMMEMORY 0x03L + +//---------------------------------------------------------------------------- +// D3DXF_FILELOADRESOURCE: +//---------------------------------------------------------------------------- + +typedef struct _D3DXF_FILELOADRESOURCE +{ + HMODULE hModule; // Desc + LPCSTR lpName; // Desc + LPCSTR lpType; // Desc +} D3DXF_FILELOADRESOURCE; + +//---------------------------------------------------------------------------- +// D3DXF_FILELOADMEMORY: +//---------------------------------------------------------------------------- + +typedef struct _D3DXF_FILELOADMEMORY +{ + LPCVOID lpMemory; // Desc + SIZE_T dSize; // Desc +} D3DXF_FILELOADMEMORY; + +#if defined( _WIN32 ) && !defined( _NO_COM ) + +// {cef08cf9-7b4f-4429-9624-2a690a933201} +DEFINE_GUID( IID_ID3DXFile, +0xcef08cf9, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); + +// {cef08cfa-7b4f-4429-9624-2a690a933201} +DEFINE_GUID( IID_ID3DXFileSaveObject, +0xcef08cfa, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); + +// {cef08cfb-7b4f-4429-9624-2a690a933201} +DEFINE_GUID( IID_ID3DXFileSaveData, +0xcef08cfb, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); + +// {cef08cfc-7b4f-4429-9624-2a690a933201} +DEFINE_GUID( IID_ID3DXFileEnumObject, +0xcef08cfc, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); + +// {cef08cfd-7b4f-4429-9624-2a690a933201} +DEFINE_GUID( IID_ID3DXFileData, +0xcef08cfd, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); + +#endif // defined( _WIN32 ) && !defined( _NO_COM ) + +#if defined( __cplusplus ) +#if !defined( DECLSPEC_UUID ) +#if _MSC_VER >= 1100 +#define DECLSPEC_UUID( x ) __declspec( uuid( x ) ) +#else // !( _MSC_VER >= 1100 ) +#define DECLSPEC_UUID( x ) +#endif // !( _MSC_VER >= 1100 ) +#endif // !defined( DECLSPEC_UUID ) + +interface DECLSPEC_UUID( "cef08cf9-7b4f-4429-9624-2a690a933201" ) + ID3DXFile; +interface DECLSPEC_UUID( "cef08cfa-7b4f-4429-9624-2a690a933201" ) + ID3DXFileSaveObject; +interface DECLSPEC_UUID( "cef08cfb-7b4f-4429-9624-2a690a933201" ) + ID3DXFileSaveData; +interface DECLSPEC_UUID( "cef08cfc-7b4f-4429-9624-2a690a933201" ) + ID3DXFileEnumObject; +interface DECLSPEC_UUID( "cef08cfd-7b4f-4429-9624-2a690a933201" ) + ID3DXFileData; + +#if defined( _COM_SMARTPTR_TYPEDEF ) +_COM_SMARTPTR_TYPEDEF( ID3DXFile, + __uuidof( ID3DXFile ) ); +_COM_SMARTPTR_TYPEDEF( ID3DXFileSaveObject, + __uuidof( ID3DXFileSaveObject ) ); +_COM_SMARTPTR_TYPEDEF( ID3DXFileSaveData, + __uuidof( ID3DXFileSaveData ) ); +_COM_SMARTPTR_TYPEDEF( ID3DXFileEnumObject, + __uuidof( ID3DXFileEnumObject ) ); +_COM_SMARTPTR_TYPEDEF( ID3DXFileData, + __uuidof( ID3DXFileData ) ); +#endif // defined( _COM_SMARTPTR_TYPEDEF ) +#endif // defined( __cplusplus ) + +typedef interface ID3DXFile ID3DXFile; +typedef interface ID3DXFileSaveObject ID3DXFileSaveObject; +typedef interface ID3DXFileSaveData ID3DXFileSaveData; +typedef interface ID3DXFileEnumObject ID3DXFileEnumObject; +typedef interface ID3DXFileData ID3DXFileData; + +////////////////////////////////////////////////////////////////////////////// +// ID3DXFile ///////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +#undef INTERFACE +#define INTERFACE ID3DXFile + +DECLARE_INTERFACE_( ID3DXFile, IUnknown ) +{ + STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE; + STDMETHOD_( ULONG, AddRef )( THIS ) PURE; + STDMETHOD_( ULONG, Release )( THIS ) PURE; + + STDMETHOD( CreateEnumObject )( THIS_ LPCVOID, D3DXF_FILELOADOPTIONS, + ID3DXFileEnumObject** ) PURE; + STDMETHOD( CreateSaveObject )( THIS_ LPCVOID, D3DXF_FILESAVEOPTIONS, + D3DXF_FILEFORMAT, ID3DXFileSaveObject** ) PURE; + STDMETHOD( RegisterTemplates )( THIS_ LPCVOID, SIZE_T ) PURE; + STDMETHOD( RegisterEnumTemplates )( THIS_ ID3DXFileEnumObject* ) PURE; +}; + +////////////////////////////////////////////////////////////////////////////// +// ID3DXFileSaveObject /////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +#undef INTERFACE +#define INTERFACE ID3DXFileSaveObject + +DECLARE_INTERFACE_( ID3DXFileSaveObject, IUnknown ) +{ + STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE; + STDMETHOD_( ULONG, AddRef )( THIS ) PURE; + STDMETHOD_( ULONG, Release )( THIS ) PURE; + + STDMETHOD( GetFile )( THIS_ ID3DXFile** ) PURE; + STDMETHOD( AddDataObject )( THIS_ REFGUID, LPCSTR, CONST GUID*, + SIZE_T, LPCVOID, ID3DXFileSaveData** ) PURE; + STDMETHOD( Save )( THIS ) PURE; +}; + +////////////////////////////////////////////////////////////////////////////// +// ID3DXFileSaveData ///////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +#undef INTERFACE +#define INTERFACE ID3DXFileSaveData + +DECLARE_INTERFACE_( ID3DXFileSaveData, IUnknown ) +{ + STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE; + STDMETHOD_( ULONG, AddRef )( THIS ) PURE; + STDMETHOD_( ULONG, Release )( THIS ) PURE; + + STDMETHOD( GetSave )( THIS_ ID3DXFileSaveObject** ) PURE; + STDMETHOD( GetName )( THIS_ LPSTR, SIZE_T* ) PURE; + STDMETHOD( GetId )( THIS_ LPGUID ) PURE; + STDMETHOD( GetType )( THIS_ GUID* ) PURE; + STDMETHOD( AddDataObject )( THIS_ REFGUID, LPCSTR, CONST GUID*, + SIZE_T, LPCVOID, ID3DXFileSaveData** ) PURE; + STDMETHOD( AddDataReference )( THIS_ LPCSTR, CONST GUID* ) PURE; +}; + +////////////////////////////////////////////////////////////////////////////// +// ID3DXFileEnumObject /////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +#undef INTERFACE +#define INTERFACE ID3DXFileEnumObject + +DECLARE_INTERFACE_( ID3DXFileEnumObject, IUnknown ) +{ + STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE; + STDMETHOD_( ULONG, AddRef )( THIS ) PURE; + STDMETHOD_( ULONG, Release )( THIS ) PURE; + + STDMETHOD( GetFile )( THIS_ ID3DXFile** ) PURE; + STDMETHOD( GetChildren )( THIS_ SIZE_T* ) PURE; + STDMETHOD( GetChild )( THIS_ SIZE_T, ID3DXFileData** ) PURE; + STDMETHOD( GetDataObjectById )( THIS_ REFGUID, ID3DXFileData** ) PURE; + STDMETHOD( GetDataObjectByName )( THIS_ LPCSTR, ID3DXFileData** ) PURE; +}; + +////////////////////////////////////////////////////////////////////////////// +// ID3DXFileData ///////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////// + +#undef INTERFACE +#define INTERFACE ID3DXFileData + +DECLARE_INTERFACE_( ID3DXFileData, IUnknown ) +{ + STDMETHOD( QueryInterface )( THIS_ REFIID, LPVOID* ) PURE; + STDMETHOD_( ULONG, AddRef )( THIS ) PURE; + STDMETHOD_( ULONG, Release )( THIS ) PURE; + + STDMETHOD( GetEnum )( THIS_ ID3DXFileEnumObject** ) PURE; + STDMETHOD( GetName )( THIS_ LPSTR, SIZE_T* ) PURE; + STDMETHOD( GetId )( THIS_ LPGUID ) PURE; + STDMETHOD( Lock )( THIS_ SIZE_T*, LPCVOID* ) PURE; + STDMETHOD( Unlock )( THIS ) PURE; + STDMETHOD( GetType )( THIS_ GUID* ) PURE; + STDMETHOD_( BOOL, IsReference )( THIS ) PURE; + STDMETHOD( GetChildren )( THIS_ SIZE_T* ) PURE; + STDMETHOD( GetChild )( THIS_ SIZE_T, ID3DXFileData** ) PURE; +}; + +STDAPI D3DXFileCreate( ID3DXFile** lplpDirectXFile ); + +/* + * DirectX File errors. + */ + +#define _FACD3DXF 0x876 + +#define D3DXFERR_BADOBJECT MAKE_HRESULT( 1, _FACD3DXF, 900 ) +#define D3DXFERR_BADVALUE MAKE_HRESULT( 1, _FACD3DXF, 901 ) +#define D3DXFERR_BADTYPE MAKE_HRESULT( 1, _FACD3DXF, 902 ) +#define D3DXFERR_NOTFOUND MAKE_HRESULT( 1, _FACD3DXF, 903 ) +#define D3DXFERR_NOTDONEYET MAKE_HRESULT( 1, _FACD3DXF, 904 ) +#define D3DXFERR_FILENOTFOUND MAKE_HRESULT( 1, _FACD3DXF, 905 ) +#define D3DXFERR_RESOURCENOTFOUND MAKE_HRESULT( 1, _FACD3DXF, 906 ) +#define D3DXFERR_BADRESOURCE MAKE_HRESULT( 1, _FACD3DXF, 907 ) +#define D3DXFERR_BADFILETYPE MAKE_HRESULT( 1, _FACD3DXF, 908 ) +#define D3DXFERR_BADFILEVERSION MAKE_HRESULT( 1, _FACD3DXF, 909 ) +#define D3DXFERR_BADFILEFLOATSIZE MAKE_HRESULT( 1, _FACD3DXF, 910 ) +#define D3DXFERR_BADFILE MAKE_HRESULT( 1, _FACD3DXF, 911 ) +#define D3DXFERR_PARSEERROR MAKE_HRESULT( 1, _FACD3DXF, 912 ) +#define D3DXFERR_BADARRAYSIZE MAKE_HRESULT( 1, _FACD3DXF, 913 ) +#define D3DXFERR_BADDATAREFERENCE MAKE_HRESULT( 1, _FACD3DXF, 914 ) +#define D3DXFERR_NOMOREOBJECTS MAKE_HRESULT( 1, _FACD3DXF, 915 ) +#define D3DXFERR_NOMOREDATA MAKE_HRESULT( 1, _FACD3DXF, 916 ) +#define D3DXFERR_BADCACHEFILE MAKE_HRESULT( 1, _FACD3DXF, 917 ) + +/* + * DirectX File object types. + */ + +#ifndef WIN_TYPES +#define WIN_TYPES(itype, ptype) typedef interface itype *LP##ptype, **LPLP##ptype +#endif + +WIN_TYPES(ID3DXFile, D3DXFILE); +WIN_TYPES(ID3DXFileEnumObject, D3DXFILEENUMOBJECT); +WIN_TYPES(ID3DXFileSaveObject, D3DXFILESAVEOBJECT); +WIN_TYPES(ID3DXFileData, D3DXFILEDATA); +WIN_TYPES(ID3DXFileSaveData, D3DXFILESAVEDATA); + +#if defined( __cplusplus ) +} // extern "C" +#endif // defined( __cplusplus ) + +#endif // !defined( __D3DX9XOF_H__ ) + + diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Lib/d3d9.lib b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Lib/d3d9.lib new file mode 100644 index 0000000000..f6eddc60b5 Binary files /dev/null and b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Lib/d3d9.lib differ diff --git a/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Lib/d3dx9.lib b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Lib/d3dx9.lib new file mode 100644 index 0000000000..727baf5e65 Binary files /dev/null and b/client_files/native_autoloot/eq-core-dll/dependencies/dx9/Lib/d3dx9.lib differ diff --git a/client_files/native_autoloot/eq-core-dll/dxsdk81/include/dinput.h b/client_files/native_autoloot/eq-core-dll/dxsdk81/include/dinput.h new file mode 100644 index 0000000000..bfaff164be --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/dxsdk81/include/dinput.h @@ -0,0 +1,4399 @@ +/**************************************************************************** + * + * Copyright (C) 1996-2000 Microsoft Corporation. All Rights Reserved. + * + * File: dinput.h + * Content: DirectInput include file + * + ****************************************************************************/ + +#ifndef __DINPUT_INCLUDED__ +#define __DINPUT_INCLUDED__ + +#ifndef DIJ_RINGZERO + +#ifdef _WIN32 +#define COM_NO_WINDOWS_H +#include +#endif + +#endif /* DIJ_RINGZERO */ + +#ifdef __cplusplus +extern "C" { +#endif + + + + + +/* + * To build applications for older versions of DirectInput + * + * #define DIRECTINPUT_VERSION [ 0x0300 | 0x0500 | 0x0700 ] + * + * before #include . By default, #include + * will produce a DirectX 8-compatible header file. + * + */ + +#define DIRECTINPUT_HEADER_VERSION 0x0800 +#ifndef DIRECTINPUT_VERSION +#define DIRECTINPUT_VERSION DIRECTINPUT_HEADER_VERSION +#pragma message(__FILE__ ": DIRECTINPUT_VERSION undefined. Defaulting to version 0x0800") +#endif + +#ifndef DIJ_RINGZERO + +/**************************************************************************** + * + * Class IDs + * + ****************************************************************************/ + +DEFINE_GUID(CLSID_DirectInput, 0x25E609E0,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(CLSID_DirectInputDevice, 0x25E609E1,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +DEFINE_GUID(CLSID_DirectInput8, 0x25E609E4,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(CLSID_DirectInputDevice8,0x25E609E5,0xB259,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +/**************************************************************************** + * + * Interfaces + * + ****************************************************************************/ + +DEFINE_GUID(IID_IDirectInputA, 0x89521360,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputW, 0x89521361,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInput2A, 0x5944E662,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInput2W, 0x5944E663,0xAA8A,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInput7A, 0x9A4CB684,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInput7W, 0x9A4CB685,0x236D,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInput8A, 0xBF798030,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); +DEFINE_GUID(IID_IDirectInput8W, 0xBF798031,0x483A,0x4DA2,0xAA,0x99,0x5D,0x64,0xED,0x36,0x97,0x00); +DEFINE_GUID(IID_IDirectInputDeviceA, 0x5944E680,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDeviceW, 0x5944E681,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDevice2A,0x5944E682,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDevice2W,0x5944E683,0xC92E,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(IID_IDirectInputDevice7A,0x57D7C6BC,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInputDevice7W,0x57D7C6BD,0x2356,0x11D3,0x8E,0x9D,0x00,0xC0,0x4F,0x68,0x44,0xAE); +DEFINE_GUID(IID_IDirectInputDevice8A,0x54D41080,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); +DEFINE_GUID(IID_IDirectInputDevice8W,0x54D41081,0xDC15,0x4833,0xA4,0x1B,0x74,0x8F,0x73,0xA3,0x81,0x79); +DEFINE_GUID(IID_IDirectInputEffect, 0xE7E1F7C0,0x88D2,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); + +/**************************************************************************** + * + * Predefined object types + * + ****************************************************************************/ + +DEFINE_GUID(GUID_XAxis, 0xA36D02E0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_YAxis, 0xA36D02E1,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_ZAxis, 0xA36D02E2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_RxAxis, 0xA36D02F4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_RyAxis, 0xA36D02F5,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_RzAxis, 0xA36D02E3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_Slider, 0xA36D02E4,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +DEFINE_GUID(GUID_Button, 0xA36D02F0,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_Key, 0x55728220,0xD33C,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +DEFINE_GUID(GUID_POV, 0xA36D02F2,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +DEFINE_GUID(GUID_Unknown, 0xA36D02F3,0xC9F3,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +/**************************************************************************** + * + * Predefined product GUIDs + * + ****************************************************************************/ + +DEFINE_GUID(GUID_SysMouse, 0x6F1D2B60,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysKeyboard,0x6F1D2B61,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_Joystick ,0x6F1D2B70,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysMouseEm, 0x6F1D2B80,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysMouseEm2,0x6F1D2B81,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysKeyboardEm, 0x6F1D2B82,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); +DEFINE_GUID(GUID_SysKeyboardEm2,0x6F1D2B83,0xD5A0,0x11CF,0xBF,0xC7,0x44,0x45,0x53,0x54,0x00,0x00); + +/**************************************************************************** + * + * Predefined force feedback effects + * + ****************************************************************************/ + +DEFINE_GUID(GUID_ConstantForce, 0x13541C20,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_RampForce, 0x13541C21,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Square, 0x13541C22,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Sine, 0x13541C23,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Triangle, 0x13541C24,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_SawtoothUp, 0x13541C25,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_SawtoothDown, 0x13541C26,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Spring, 0x13541C27,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Damper, 0x13541C28,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Inertia, 0x13541C29,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_Friction, 0x13541C2A,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); +DEFINE_GUID(GUID_CustomForce, 0x13541C2B,0x8E33,0x11D0,0x9A,0xD0,0x00,0xA0,0xC9,0xA0,0x6E,0x35); + +#endif /* DIJ_RINGZERO */ + +/**************************************************************************** + * + * Interfaces and Structures... + * + ****************************************************************************/ + +#if(DIRECTINPUT_VERSION >= 0x0500) + +/**************************************************************************** + * + * IDirectInputEffect + * + ****************************************************************************/ + +#define DIEFT_ALL 0x00000000 + +#define DIEFT_CONSTANTFORCE 0x00000001 +#define DIEFT_RAMPFORCE 0x00000002 +#define DIEFT_PERIODIC 0x00000003 +#define DIEFT_CONDITION 0x00000004 +#define DIEFT_CUSTOMFORCE 0x00000005 +#define DIEFT_HARDWARE 0x000000FF +#define DIEFT_FFATTACK 0x00000200 +#define DIEFT_FFFADE 0x00000400 +#define DIEFT_SATURATION 0x00000800 +#define DIEFT_POSNEGCOEFFICIENTS 0x00001000 +#define DIEFT_POSNEGSATURATION 0x00002000 +#define DIEFT_DEADBAND 0x00004000 +#define DIEFT_STARTDELAY 0x00008000 +#define DIEFT_GETTYPE(n) LOBYTE(n) + +#define DI_DEGREES 100 +#define DI_FFNOMINALMAX 10000 +#define DI_SECONDS 1000000 + +typedef struct DICONSTANTFORCE { + LONG lMagnitude; +} DICONSTANTFORCE, *LPDICONSTANTFORCE; +typedef const DICONSTANTFORCE *LPCDICONSTANTFORCE; + +typedef struct DIRAMPFORCE { + LONG lStart; + LONG lEnd; +} DIRAMPFORCE, *LPDIRAMPFORCE; +typedef const DIRAMPFORCE *LPCDIRAMPFORCE; + +typedef struct DIPERIODIC { + DWORD dwMagnitude; + LONG lOffset; + DWORD dwPhase; + DWORD dwPeriod; +} DIPERIODIC, *LPDIPERIODIC; +typedef const DIPERIODIC *LPCDIPERIODIC; + +typedef struct DICONDITION { + LONG lOffset; + LONG lPositiveCoefficient; + LONG lNegativeCoefficient; + DWORD dwPositiveSaturation; + DWORD dwNegativeSaturation; + LONG lDeadBand; +} DICONDITION, *LPDICONDITION; +typedef const DICONDITION *LPCDICONDITION; + +typedef struct DICUSTOMFORCE { + DWORD cChannels; + DWORD dwSamplePeriod; + DWORD cSamples; + LPLONG rglForceData; +} DICUSTOMFORCE, *LPDICUSTOMFORCE; +typedef const DICUSTOMFORCE *LPCDICUSTOMFORCE; + + +typedef struct DIENVELOPE { + DWORD dwSize; /* sizeof(DIENVELOPE) */ + DWORD dwAttackLevel; + DWORD dwAttackTime; /* Microseconds */ + DWORD dwFadeLevel; + DWORD dwFadeTime; /* Microseconds */ +} DIENVELOPE, *LPDIENVELOPE; +typedef const DIENVELOPE *LPCDIENVELOPE; + + +/* This structure is defined for DirectX 5.0 compatibility */ +typedef struct DIEFFECT_DX5 { + DWORD dwSize; /* sizeof(DIEFFECT_DX5) */ + DWORD dwFlags; /* DIEFF_* */ + DWORD dwDuration; /* Microseconds */ + DWORD dwSamplePeriod; /* Microseconds */ + DWORD dwGain; + DWORD dwTriggerButton; /* or DIEB_NOTRIGGER */ + DWORD dwTriggerRepeatInterval; /* Microseconds */ + DWORD cAxes; /* Number of axes */ + LPDWORD rgdwAxes; /* Array of axes */ + LPLONG rglDirection; /* Array of directions */ + LPDIENVELOPE lpEnvelope; /* Optional */ + DWORD cbTypeSpecificParams; /* Size of params */ + LPVOID lpvTypeSpecificParams; /* Pointer to params */ +} DIEFFECT_DX5, *LPDIEFFECT_DX5; +typedef const DIEFFECT_DX5 *LPCDIEFFECT_DX5; + +typedef struct DIEFFECT { + DWORD dwSize; /* sizeof(DIEFFECT) */ + DWORD dwFlags; /* DIEFF_* */ + DWORD dwDuration; /* Microseconds */ + DWORD dwSamplePeriod; /* Microseconds */ + DWORD dwGain; + DWORD dwTriggerButton; /* or DIEB_NOTRIGGER */ + DWORD dwTriggerRepeatInterval; /* Microseconds */ + DWORD cAxes; /* Number of axes */ + LPDWORD rgdwAxes; /* Array of axes */ + LPLONG rglDirection; /* Array of directions */ + LPDIENVELOPE lpEnvelope; /* Optional */ + DWORD cbTypeSpecificParams; /* Size of params */ + LPVOID lpvTypeSpecificParams; /* Pointer to params */ +#if(DIRECTINPUT_VERSION >= 0x0600) + DWORD dwStartDelay; /* Microseconds */ +#endif /* DIRECTINPUT_VERSION >= 0x0600 */ +} DIEFFECT, *LPDIEFFECT; +typedef DIEFFECT DIEFFECT_DX6; +typedef LPDIEFFECT LPDIEFFECT_DX6; +typedef const DIEFFECT *LPCDIEFFECT; + + +#if(DIRECTINPUT_VERSION >= 0x0700) +#ifndef DIJ_RINGZERO +typedef struct DIFILEEFFECT{ + DWORD dwSize; + GUID GuidEffect; + LPCDIEFFECT lpDiEffect; + CHAR szFriendlyName[MAX_PATH]; +}DIFILEEFFECT, *LPDIFILEEFFECT; +typedef const DIFILEEFFECT *LPCDIFILEEFFECT; +typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSINFILECALLBACK)(LPCDIFILEEFFECT , LPVOID); +#endif /* DIJ_RINGZERO */ +#endif /* DIRECTINPUT_VERSION >= 0x0700 */ + +#define DIEFF_OBJECTIDS 0x00000001 +#define DIEFF_OBJECTOFFSETS 0x00000002 +#define DIEFF_CARTESIAN 0x00000010 +#define DIEFF_POLAR 0x00000020 +#define DIEFF_SPHERICAL 0x00000040 + +#define DIEP_DURATION 0x00000001 +#define DIEP_SAMPLEPERIOD 0x00000002 +#define DIEP_GAIN 0x00000004 +#define DIEP_TRIGGERBUTTON 0x00000008 +#define DIEP_TRIGGERREPEATINTERVAL 0x00000010 +#define DIEP_AXES 0x00000020 +#define DIEP_DIRECTION 0x00000040 +#define DIEP_ENVELOPE 0x00000080 +#define DIEP_TYPESPECIFICPARAMS 0x00000100 +#if(DIRECTINPUT_VERSION >= 0x0600) +#define DIEP_STARTDELAY 0x00000200 +#define DIEP_ALLPARAMS_DX5 0x000001FF +#define DIEP_ALLPARAMS 0x000003FF +#else /* DIRECTINPUT_VERSION < 0x0600 */ +#define DIEP_ALLPARAMS 0x000001FF +#endif /* DIRECTINPUT_VERSION < 0x0600 */ +#define DIEP_START 0x20000000 +#define DIEP_NORESTART 0x40000000 +#define DIEP_NODOWNLOAD 0x80000000 +#define DIEB_NOTRIGGER 0xFFFFFFFF + +#define DIES_SOLO 0x00000001 +#define DIES_NODOWNLOAD 0x80000000 + +#define DIEGES_PLAYING 0x00000001 +#define DIEGES_EMULATED 0x00000002 + +typedef struct DIEFFESCAPE { + DWORD dwSize; + DWORD dwCommand; + LPVOID lpvInBuffer; + DWORD cbInBuffer; + LPVOID lpvOutBuffer; + DWORD cbOutBuffer; +} DIEFFESCAPE, *LPDIEFFESCAPE; + +#ifndef DIJ_RINGZERO + +#undef INTERFACE +#define INTERFACE IDirectInputEffect + +DECLARE_INTERFACE_(IDirectInputEffect, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputEffect methods ***/ + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(GetEffectGuid)(THIS_ LPGUID) PURE; + STDMETHOD(GetParameters)(THIS_ LPDIEFFECT,DWORD) PURE; + STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT,DWORD) PURE; + STDMETHOD(Start)(THIS_ DWORD,DWORD) PURE; + STDMETHOD(Stop)(THIS) PURE; + STDMETHOD(GetEffectStatus)(THIS_ LPDWORD) PURE; + STDMETHOD(Download)(THIS) PURE; + STDMETHOD(Unload)(THIS) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; +}; + +typedef struct IDirectInputEffect *LPDIRECTINPUTEFFECT; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputEffect_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputEffect_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputEffect_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputEffect_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectInputEffect_GetEffectGuid(p,a) (p)->lpVtbl->GetEffectGuid(p,a) +#define IDirectInputEffect_GetParameters(p,a,b) (p)->lpVtbl->GetParameters(p,a,b) +#define IDirectInputEffect_SetParameters(p,a,b) (p)->lpVtbl->SetParameters(p,a,b) +#define IDirectInputEffect_Start(p,a,b) (p)->lpVtbl->Start(p,a,b) +#define IDirectInputEffect_Stop(p) (p)->lpVtbl->Stop(p) +#define IDirectInputEffect_GetEffectStatus(p,a) (p)->lpVtbl->GetEffectStatus(p,a) +#define IDirectInputEffect_Download(p) (p)->lpVtbl->Download(p) +#define IDirectInputEffect_Unload(p) (p)->lpVtbl->Unload(p) +#define IDirectInputEffect_Escape(p,a) (p)->lpVtbl->Escape(p,a) +#else +#define IDirectInputEffect_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputEffect_AddRef(p) (p)->AddRef() +#define IDirectInputEffect_Release(p) (p)->Release() +#define IDirectInputEffect_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectInputEffect_GetEffectGuid(p,a) (p)->GetEffectGuid(a) +#define IDirectInputEffect_GetParameters(p,a,b) (p)->GetParameters(a,b) +#define IDirectInputEffect_SetParameters(p,a,b) (p)->SetParameters(a,b) +#define IDirectInputEffect_Start(p,a,b) (p)->Start(a,b) +#define IDirectInputEffect_Stop(p) (p)->Stop() +#define IDirectInputEffect_GetEffectStatus(p,a) (p)->GetEffectStatus(a) +#define IDirectInputEffect_Download(p) (p)->Download() +#define IDirectInputEffect_Unload(p) (p)->Unload() +#define IDirectInputEffect_Escape(p,a) (p)->Escape(a) +#endif + +#endif /* DIJ_RINGZERO */ + +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +/**************************************************************************** + * + * IDirectInputDevice + * + ****************************************************************************/ + +#if DIRECTINPUT_VERSION <= 0x700 +#define DIDEVTYPE_DEVICE 1 +#define DIDEVTYPE_MOUSE 2 +#define DIDEVTYPE_KEYBOARD 3 +#define DIDEVTYPE_JOYSTICK 4 + +#else +#define DI8DEVCLASS_ALL 0 +#define DI8DEVCLASS_DEVICE 1 +#define DI8DEVCLASS_POINTER 2 +#define DI8DEVCLASS_KEYBOARD 3 +#define DI8DEVCLASS_GAMECTRL 4 + +#define DI8DEVTYPE_DEVICE 0x11 +#define DI8DEVTYPE_MOUSE 0x12 +#define DI8DEVTYPE_KEYBOARD 0x13 +#define DI8DEVTYPE_JOYSTICK 0x14 +#define DI8DEVTYPE_GAMEPAD 0x15 +#define DI8DEVTYPE_DRIVING 0x16 +#define DI8DEVTYPE_FLIGHT 0x17 +#define DI8DEVTYPE_1STPERSON 0x18 +#define DI8DEVTYPE_DEVICECTRL 0x19 +#define DI8DEVTYPE_SCREENPOINTER 0x1A +#define DI8DEVTYPE_REMOTE 0x1B +#define DI8DEVTYPE_SUPPLEMENTAL 0x1C +#endif /* DIRECTINPUT_VERSION <= 0x700 */ + +#define DIDEVTYPE_HID 0x00010000 + +#if DIRECTINPUT_VERSION <= 0x700 +#define DIDEVTYPEMOUSE_UNKNOWN 1 +#define DIDEVTYPEMOUSE_TRADITIONAL 2 +#define DIDEVTYPEMOUSE_FINGERSTICK 3 +#define DIDEVTYPEMOUSE_TOUCHPAD 4 +#define DIDEVTYPEMOUSE_TRACKBALL 5 + +#define DIDEVTYPEKEYBOARD_UNKNOWN 0 +#define DIDEVTYPEKEYBOARD_PCXT 1 +#define DIDEVTYPEKEYBOARD_OLIVETTI 2 +#define DIDEVTYPEKEYBOARD_PCAT 3 +#define DIDEVTYPEKEYBOARD_PCENH 4 +#define DIDEVTYPEKEYBOARD_NOKIA1050 5 +#define DIDEVTYPEKEYBOARD_NOKIA9140 6 +#define DIDEVTYPEKEYBOARD_NEC98 7 +#define DIDEVTYPEKEYBOARD_NEC98LAPTOP 8 +#define DIDEVTYPEKEYBOARD_NEC98106 9 +#define DIDEVTYPEKEYBOARD_JAPAN106 10 +#define DIDEVTYPEKEYBOARD_JAPANAX 11 +#define DIDEVTYPEKEYBOARD_J3100 12 + +#define DIDEVTYPEJOYSTICK_UNKNOWN 1 +#define DIDEVTYPEJOYSTICK_TRADITIONAL 2 +#define DIDEVTYPEJOYSTICK_FLIGHTSTICK 3 +#define DIDEVTYPEJOYSTICK_GAMEPAD 4 +#define DIDEVTYPEJOYSTICK_RUDDER 5 +#define DIDEVTYPEJOYSTICK_WHEEL 6 +#define DIDEVTYPEJOYSTICK_HEADTRACKER 7 + +#else +#define DI8DEVTYPEMOUSE_UNKNOWN 1 +#define DI8DEVTYPEMOUSE_TRADITIONAL 2 +#define DI8DEVTYPEMOUSE_FINGERSTICK 3 +#define DI8DEVTYPEMOUSE_TOUCHPAD 4 +#define DI8DEVTYPEMOUSE_TRACKBALL 5 +#define DI8DEVTYPEMOUSE_ABSOLUTE 6 + +#define DI8DEVTYPEKEYBOARD_UNKNOWN 0 +#define DI8DEVTYPEKEYBOARD_PCXT 1 +#define DI8DEVTYPEKEYBOARD_OLIVETTI 2 +#define DI8DEVTYPEKEYBOARD_PCAT 3 +#define DI8DEVTYPEKEYBOARD_PCENH 4 +#define DI8DEVTYPEKEYBOARD_NOKIA1050 5 +#define DI8DEVTYPEKEYBOARD_NOKIA9140 6 +#define DI8DEVTYPEKEYBOARD_NEC98 7 +#define DI8DEVTYPEKEYBOARD_NEC98LAPTOP 8 +#define DI8DEVTYPEKEYBOARD_NEC98106 9 +#define DI8DEVTYPEKEYBOARD_JAPAN106 10 +#define DI8DEVTYPEKEYBOARD_JAPANAX 11 +#define DI8DEVTYPEKEYBOARD_J3100 12 + +#define DI8DEVTYPE_LIMITEDGAMESUBTYPE 1 + +#define DI8DEVTYPEJOYSTICK_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPEJOYSTICK_STANDARD 2 + +#define DI8DEVTYPEGAMEPAD_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPEGAMEPAD_STANDARD 2 +#define DI8DEVTYPEGAMEPAD_TILT 3 + +#define DI8DEVTYPEDRIVING_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPEDRIVING_COMBINEDPEDALS 2 +#define DI8DEVTYPEDRIVING_DUALPEDALS 3 +#define DI8DEVTYPEDRIVING_THREEPEDALS 4 +#define DI8DEVTYPEDRIVING_HANDHELD 5 + +#define DI8DEVTYPEFLIGHT_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPEFLIGHT_STICK 2 +#define DI8DEVTYPEFLIGHT_YOKE 3 +#define DI8DEVTYPEFLIGHT_RC 4 + +#define DI8DEVTYPE1STPERSON_LIMITED DI8DEVTYPE_LIMITEDGAMESUBTYPE +#define DI8DEVTYPE1STPERSON_UNKNOWN 2 +#define DI8DEVTYPE1STPERSON_SIXDOF 3 +#define DI8DEVTYPE1STPERSON_SHOOTER 4 + +#define DI8DEVTYPESCREENPTR_UNKNOWN 2 +#define DI8DEVTYPESCREENPTR_LIGHTGUN 3 +#define DI8DEVTYPESCREENPTR_LIGHTPEN 4 +#define DI8DEVTYPESCREENPTR_TOUCH 5 + +#define DI8DEVTYPEREMOTE_UNKNOWN 2 + +#define DI8DEVTYPEDEVICECTRL_UNKNOWN 2 +#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION 3 +#define DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED 4 + +#define DI8DEVTYPESUPPLEMENTAL_UNKNOWN 2 +#define DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER 3 +#define DI8DEVTYPESUPPLEMENTAL_HEADTRACKER 4 +#define DI8DEVTYPESUPPLEMENTAL_HANDTRACKER 5 +#define DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE 6 +#define DI8DEVTYPESUPPLEMENTAL_SHIFTER 7 +#define DI8DEVTYPESUPPLEMENTAL_THROTTLE 8 +#define DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE 9 +#define DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS 10 +#define DI8DEVTYPESUPPLEMENTAL_DUALPEDALS 11 +#define DI8DEVTYPESUPPLEMENTAL_THREEPEDALS 12 +#define DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS 13 +#endif /* DIRECTINPUT_VERSION <= 0x700 */ + +#define GET_DIDEVICE_TYPE(dwDevType) LOBYTE(dwDevType) +#define GET_DIDEVICE_SUBTYPE(dwDevType) HIBYTE(dwDevType) + +#if(DIRECTINPUT_VERSION >= 0x0500) +/* This structure is defined for DirectX 3.0 compatibility */ +typedef struct DIDEVCAPS_DX3 { + DWORD dwSize; + DWORD dwFlags; + DWORD dwDevType; + DWORD dwAxes; + DWORD dwButtons; + DWORD dwPOVs; +} DIDEVCAPS_DX3, *LPDIDEVCAPS_DX3; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +typedef struct DIDEVCAPS { + DWORD dwSize; + DWORD dwFlags; + DWORD dwDevType; + DWORD dwAxes; + DWORD dwButtons; + DWORD dwPOVs; +#if(DIRECTINPUT_VERSION >= 0x0500) + DWORD dwFFSamplePeriod; + DWORD dwFFMinTimeResolution; + DWORD dwFirmwareRevision; + DWORD dwHardwareRevision; + DWORD dwFFDriverVersion; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVCAPS, *LPDIDEVCAPS; + +#define DIDC_ATTACHED 0x00000001 +#define DIDC_POLLEDDEVICE 0x00000002 +#define DIDC_EMULATED 0x00000004 +#define DIDC_POLLEDDATAFORMAT 0x00000008 +#if(DIRECTINPUT_VERSION >= 0x0500) +#define DIDC_FORCEFEEDBACK 0x00000100 +#define DIDC_FFATTACK 0x00000200 +#define DIDC_FFFADE 0x00000400 +#define DIDC_SATURATION 0x00000800 +#define DIDC_POSNEGCOEFFICIENTS 0x00001000 +#define DIDC_POSNEGSATURATION 0x00002000 +#define DIDC_DEADBAND 0x00004000 +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +#define DIDC_STARTDELAY 0x00008000 +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIDC_ALIAS 0x00010000 +#define DIDC_PHANTOM 0x00020000 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIDC_HIDDEN 0x00040000 +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#define DIDFT_ALL 0x00000000 + +#define DIDFT_RELAXIS 0x00000001 +#define DIDFT_ABSAXIS 0x00000002 +#define DIDFT_AXIS 0x00000003 + +#define DIDFT_PSHBUTTON 0x00000004 +#define DIDFT_TGLBUTTON 0x00000008 +#define DIDFT_BUTTON 0x0000000C + +#define DIDFT_POV 0x00000010 +#define DIDFT_COLLECTION 0x00000040 +#define DIDFT_NODATA 0x00000080 + +#define DIDFT_ANYINSTANCE 0x00FFFF00 +#define DIDFT_INSTANCEMASK DIDFT_ANYINSTANCE +#define DIDFT_MAKEINSTANCE(n) ((WORD)(n) << 8) +#define DIDFT_GETTYPE(n) LOBYTE(n) +#define DIDFT_GETINSTANCE(n) LOWORD((n) >> 8) +#define DIDFT_FFACTUATOR 0x01000000 +#define DIDFT_FFEFFECTTRIGGER 0x02000000 +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIDFT_OUTPUT 0x10000000 +#define DIDFT_VENDORDEFINED 0x04000000 +#define DIDFT_ALIAS 0x08000000 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +#define DIDFT_ENUMCOLLECTION(n) ((WORD)(n) << 8) +#define DIDFT_NOCOLLECTION 0x00FFFF00 + +#ifndef DIJ_RINGZERO + +typedef struct _DIOBJECTDATAFORMAT { + const GUID *pguid; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; +} DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT; +typedef const DIOBJECTDATAFORMAT *LPCDIOBJECTDATAFORMAT; + +typedef struct _DIDATAFORMAT { + DWORD dwSize; + DWORD dwObjSize; + DWORD dwFlags; + DWORD dwDataSize; + DWORD dwNumObjs; + LPDIOBJECTDATAFORMAT rgodf; +} DIDATAFORMAT, *LPDIDATAFORMAT; +typedef const DIDATAFORMAT *LPCDIDATAFORMAT; + +#define DIDF_ABSAXIS 0x00000001 +#define DIDF_RELAXIS 0x00000002 + +#ifdef __cplusplus +extern "C" { +#endif +extern const DIDATAFORMAT c_dfDIMouse; + +#if(DIRECTINPUT_VERSION >= 0x0700) +extern const DIDATAFORMAT c_dfDIMouse2; +#endif /* DIRECTINPUT_VERSION >= 0x0700 */ + +extern const DIDATAFORMAT c_dfDIKeyboard; + +#if(DIRECTINPUT_VERSION >= 0x0500) +extern const DIDATAFORMAT c_dfDIJoystick; +extern const DIDATAFORMAT c_dfDIJoystick2; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +#ifdef __cplusplus +}; +#endif + + +#if DIRECTINPUT_VERSION > 0x0700 + +typedef struct _DIACTIONA { + UINT_PTR uAppData; + DWORD dwSemantic; + OPTIONAL DWORD dwFlags; + OPTIONAL union { + LPCSTR lptszActionName; + UINT uResIdString; + }; + OPTIONAL GUID guidInstance; + OPTIONAL DWORD dwObjID; + OPTIONAL DWORD dwHow; +} DIACTIONA, *LPDIACTIONA ; +typedef struct _DIACTIONW { + UINT_PTR uAppData; + DWORD dwSemantic; + OPTIONAL DWORD dwFlags; + OPTIONAL union { + LPCWSTR lptszActionName; + UINT uResIdString; + }; + OPTIONAL GUID guidInstance; + OPTIONAL DWORD dwObjID; + OPTIONAL DWORD dwHow; +} DIACTIONW, *LPDIACTIONW ; +#ifdef UNICODE +typedef DIACTIONW DIACTION; +typedef LPDIACTIONW LPDIACTION; +#else +typedef DIACTIONA DIACTION; +typedef LPDIACTIONA LPDIACTION; +#endif // UNICODE + +typedef const DIACTIONA *LPCDIACTIONA; +typedef const DIACTIONW *LPCDIACTIONW; +#ifdef UNICODE +typedef DIACTIONW DIACTION; +typedef LPCDIACTIONW LPCDIACTION; +#else +typedef DIACTIONA DIACTION; +typedef LPCDIACTIONA LPCDIACTION; +#endif // UNICODE +typedef const DIACTION *LPCDIACTION; + + +#define DIA_FORCEFEEDBACK 0x00000001 +#define DIA_APPMAPPED 0x00000002 +#define DIA_APPNOMAP 0x00000004 +#define DIA_NORANGE 0x00000008 +#define DIA_APPFIXED 0x00000010 + +#define DIAH_UNMAPPED 0x00000000 +#define DIAH_USERCONFIG 0x00000001 +#define DIAH_APPREQUESTED 0x00000002 +#define DIAH_HWAPP 0x00000004 +#define DIAH_HWDEFAULT 0x00000008 +#define DIAH_DEFAULT 0x00000020 +#define DIAH_ERROR 0x80000000 + +typedef struct _DIACTIONFORMATA { + DWORD dwSize; + DWORD dwActionSize; + DWORD dwDataSize; + DWORD dwNumActions; + LPDIACTIONA rgoAction; + GUID guidActionMap; + DWORD dwGenre; + DWORD dwBufferSize; + OPTIONAL LONG lAxisMin; + OPTIONAL LONG lAxisMax; + OPTIONAL HINSTANCE hInstString; + FILETIME ftTimeStamp; + DWORD dwCRC; + CHAR tszActionMap[MAX_PATH]; +} DIACTIONFORMATA, *LPDIACTIONFORMATA; +typedef struct _DIACTIONFORMATW { + DWORD dwSize; + DWORD dwActionSize; + DWORD dwDataSize; + DWORD dwNumActions; + LPDIACTIONW rgoAction; + GUID guidActionMap; + DWORD dwGenre; + DWORD dwBufferSize; + OPTIONAL LONG lAxisMin; + OPTIONAL LONG lAxisMax; + OPTIONAL HINSTANCE hInstString; + FILETIME ftTimeStamp; + DWORD dwCRC; + WCHAR tszActionMap[MAX_PATH]; +} DIACTIONFORMATW, *LPDIACTIONFORMATW; +#ifdef UNICODE +typedef DIACTIONFORMATW DIACTIONFORMAT; +typedef LPDIACTIONFORMATW LPDIACTIONFORMAT; +#else +typedef DIACTIONFORMATA DIACTIONFORMAT; +typedef LPDIACTIONFORMATA LPDIACTIONFORMAT; +#endif // UNICODE +typedef const DIACTIONFORMATA *LPCDIACTIONFORMATA; +typedef const DIACTIONFORMATW *LPCDIACTIONFORMATW; +#ifdef UNICODE +typedef DIACTIONFORMATW DIACTIONFORMAT; +typedef LPCDIACTIONFORMATW LPCDIACTIONFORMAT; +#else +typedef DIACTIONFORMATA DIACTIONFORMAT; +typedef LPCDIACTIONFORMATA LPCDIACTIONFORMAT; +#endif // UNICODE +typedef const DIACTIONFORMAT *LPCDIACTIONFORMAT; + +#define DIAFTS_NEWDEVICELOW 0xFFFFFFFF +#define DIAFTS_NEWDEVICEHIGH 0xFFFFFFFF +#define DIAFTS_UNUSEDDEVICELOW 0x00000000 +#define DIAFTS_UNUSEDDEVICEHIGH 0x00000000 + +#define DIDBAM_DEFAULT 0x00000000 +#define DIDBAM_PRESERVE 0x00000001 +#define DIDBAM_INITIALIZE 0x00000002 +#define DIDBAM_HWDEFAULTS 0x00000004 + +#define DIDSAM_DEFAULT 0x00000000 +#define DIDSAM_NOUSER 0x00000001 +#define DIDSAM_FORCESAVE 0x00000002 + +#define DICD_DEFAULT 0x00000000 +#define DICD_EDIT 0x00000001 + +/* + * The following definition is normally defined in d3dtypes.h + */ +#ifndef D3DCOLOR_DEFINED +typedef DWORD D3DCOLOR; +#define D3DCOLOR_DEFINED +#endif + +typedef struct _DICOLORSET{ + DWORD dwSize; + D3DCOLOR cTextFore; + D3DCOLOR cTextHighlight; + D3DCOLOR cCalloutLine; + D3DCOLOR cCalloutHighlight; + D3DCOLOR cBorder; + D3DCOLOR cControlFill; + D3DCOLOR cHighlightFill; + D3DCOLOR cAreaFill; +} DICOLORSET, *LPDICOLORSET; +typedef const DICOLORSET *LPCDICOLORSET; + + +typedef struct _DICONFIGUREDEVICESPARAMSA{ + DWORD dwSize; + DWORD dwcUsers; + LPSTR lptszUserNames; + DWORD dwcFormats; + LPDIACTIONFORMATA lprgFormats; + HWND hwnd; + DICOLORSET dics; + IUnknown FAR * lpUnkDDSTarget; +} DICONFIGUREDEVICESPARAMSA, *LPDICONFIGUREDEVICESPARAMSA; +typedef struct _DICONFIGUREDEVICESPARAMSW{ + DWORD dwSize; + DWORD dwcUsers; + LPWSTR lptszUserNames; + DWORD dwcFormats; + LPDIACTIONFORMATW lprgFormats; + HWND hwnd; + DICOLORSET dics; + IUnknown FAR * lpUnkDDSTarget; +} DICONFIGUREDEVICESPARAMSW, *LPDICONFIGUREDEVICESPARAMSW; +#ifdef UNICODE +typedef DICONFIGUREDEVICESPARAMSW DICONFIGUREDEVICESPARAMS; +typedef LPDICONFIGUREDEVICESPARAMSW LPDICONFIGUREDEVICESPARAMS; +#else +typedef DICONFIGUREDEVICESPARAMSA DICONFIGUREDEVICESPARAMS; +typedef LPDICONFIGUREDEVICESPARAMSA LPDICONFIGUREDEVICESPARAMS; +#endif // UNICODE +typedef const DICONFIGUREDEVICESPARAMSA *LPCDICONFIGUREDEVICESPARAMSA; +typedef const DICONFIGUREDEVICESPARAMSW *LPCDICONFIGUREDEVICESPARAMSW; +#ifdef UNICODE +typedef DICONFIGUREDEVICESPARAMSW DICONFIGUREDEVICESPARAMS; +typedef LPCDICONFIGUREDEVICESPARAMSW LPCDICONFIGUREDEVICESPARAMS; +#else +typedef DICONFIGUREDEVICESPARAMSA DICONFIGUREDEVICESPARAMS; +typedef LPCDICONFIGUREDEVICESPARAMSA LPCDICONFIGUREDEVICESPARAMS; +#endif // UNICODE +typedef const DICONFIGUREDEVICESPARAMS *LPCDICONFIGUREDEVICESPARAMS; + + +#define DIDIFT_CONFIGURATION 0x00000001 +#define DIDIFT_OVERLAY 0x00000002 + +#define DIDAL_CENTERED 0x00000000 +#define DIDAL_LEFTALIGNED 0x00000001 +#define DIDAL_RIGHTALIGNED 0x00000002 +#define DIDAL_MIDDLE 0x00000000 +#define DIDAL_TOPALIGNED 0x00000004 +#define DIDAL_BOTTOMALIGNED 0x00000008 + +typedef struct _DIDEVICEIMAGEINFOA { + CHAR tszImagePath[MAX_PATH]; + DWORD dwFlags; + // These are valid if DIDIFT_OVERLAY is present in dwFlags. + DWORD dwViewID; + RECT rcOverlay; + DWORD dwObjID; + DWORD dwcValidPts; + POINT rgptCalloutLine[5]; + RECT rcCalloutRect; + DWORD dwTextAlign; +} DIDEVICEIMAGEINFOA, *LPDIDEVICEIMAGEINFOA; +typedef struct _DIDEVICEIMAGEINFOW { + WCHAR tszImagePath[MAX_PATH]; + DWORD dwFlags; + // These are valid if DIDIFT_OVERLAY is present in dwFlags. + DWORD dwViewID; + RECT rcOverlay; + DWORD dwObjID; + DWORD dwcValidPts; + POINT rgptCalloutLine[5]; + RECT rcCalloutRect; + DWORD dwTextAlign; +} DIDEVICEIMAGEINFOW, *LPDIDEVICEIMAGEINFOW; +#ifdef UNICODE +typedef DIDEVICEIMAGEINFOW DIDEVICEIMAGEINFO; +typedef LPDIDEVICEIMAGEINFOW LPDIDEVICEIMAGEINFO; +#else +typedef DIDEVICEIMAGEINFOA DIDEVICEIMAGEINFO; +typedef LPDIDEVICEIMAGEINFOA LPDIDEVICEIMAGEINFO; +#endif // UNICODE +typedef const DIDEVICEIMAGEINFOA *LPCDIDEVICEIMAGEINFOA; +typedef const DIDEVICEIMAGEINFOW *LPCDIDEVICEIMAGEINFOW; +#ifdef UNICODE +typedef DIDEVICEIMAGEINFOW DIDEVICEIMAGEINFO; +typedef LPCDIDEVICEIMAGEINFOW LPCDIDEVICEIMAGEINFO; +#else +typedef DIDEVICEIMAGEINFOA DIDEVICEIMAGEINFO; +typedef LPCDIDEVICEIMAGEINFOA LPCDIDEVICEIMAGEINFO; +#endif // UNICODE +typedef const DIDEVICEIMAGEINFO *LPCDIDEVICEIMAGEINFO; + +typedef struct _DIDEVICEIMAGEINFOHEADERA { + DWORD dwSize; + DWORD dwSizeImageInfo; + DWORD dwcViews; + DWORD dwcButtons; + DWORD dwcAxes; + DWORD dwcPOVs; + DWORD dwBufferSize; + DWORD dwBufferUsed; + LPDIDEVICEIMAGEINFOA lprgImageInfoArray; +} DIDEVICEIMAGEINFOHEADERA, *LPDIDEVICEIMAGEINFOHEADERA; +typedef struct _DIDEVICEIMAGEINFOHEADERW { + DWORD dwSize; + DWORD dwSizeImageInfo; + DWORD dwcViews; + DWORD dwcButtons; + DWORD dwcAxes; + DWORD dwcPOVs; + DWORD dwBufferSize; + DWORD dwBufferUsed; + LPDIDEVICEIMAGEINFOW lprgImageInfoArray; +} DIDEVICEIMAGEINFOHEADERW, *LPDIDEVICEIMAGEINFOHEADERW; +#ifdef UNICODE +typedef DIDEVICEIMAGEINFOHEADERW DIDEVICEIMAGEINFOHEADER; +typedef LPDIDEVICEIMAGEINFOHEADERW LPDIDEVICEIMAGEINFOHEADER; +#else +typedef DIDEVICEIMAGEINFOHEADERA DIDEVICEIMAGEINFOHEADER; +typedef LPDIDEVICEIMAGEINFOHEADERA LPDIDEVICEIMAGEINFOHEADER; +#endif // UNICODE +typedef const DIDEVICEIMAGEINFOHEADERA *LPCDIDEVICEIMAGEINFOHEADERA; +typedef const DIDEVICEIMAGEINFOHEADERW *LPCDIDEVICEIMAGEINFOHEADERW; +#ifdef UNICODE +typedef DIDEVICEIMAGEINFOHEADERW DIDEVICEIMAGEINFOHEADER; +typedef LPCDIDEVICEIMAGEINFOHEADERW LPCDIDEVICEIMAGEINFOHEADER; +#else +typedef DIDEVICEIMAGEINFOHEADERA DIDEVICEIMAGEINFOHEADER; +typedef LPCDIDEVICEIMAGEINFOHEADERA LPCDIDEVICEIMAGEINFOHEADER; +#endif // UNICODE +typedef const DIDEVICEIMAGEINFOHEADER *LPCDIDEVICEIMAGEINFOHEADER; + +#endif /* DIRECTINPUT_VERSION > 0x0700 */ + +#if(DIRECTINPUT_VERSION >= 0x0500) +/* These structures are defined for DirectX 3.0 compatibility */ + +typedef struct DIDEVICEOBJECTINSTANCE_DX3A { + DWORD dwSize; + GUID guidType; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; + CHAR tszName[MAX_PATH]; +} DIDEVICEOBJECTINSTANCE_DX3A, *LPDIDEVICEOBJECTINSTANCE_DX3A; +typedef struct DIDEVICEOBJECTINSTANCE_DX3W { + DWORD dwSize; + GUID guidType; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; + WCHAR tszName[MAX_PATH]; +} DIDEVICEOBJECTINSTANCE_DX3W, *LPDIDEVICEOBJECTINSTANCE_DX3W; +#ifdef UNICODE +typedef DIDEVICEOBJECTINSTANCE_DX3W DIDEVICEOBJECTINSTANCE_DX3; +typedef LPDIDEVICEOBJECTINSTANCE_DX3W LPDIDEVICEOBJECTINSTANCE_DX3; +#else +typedef DIDEVICEOBJECTINSTANCE_DX3A DIDEVICEOBJECTINSTANCE_DX3; +typedef LPDIDEVICEOBJECTINSTANCE_DX3A LPDIDEVICEOBJECTINSTANCE_DX3; +#endif // UNICODE +typedef const DIDEVICEOBJECTINSTANCE_DX3A *LPCDIDEVICEOBJECTINSTANCE_DX3A; +typedef const DIDEVICEOBJECTINSTANCE_DX3W *LPCDIDEVICEOBJECTINSTANCE_DX3W; +typedef const DIDEVICEOBJECTINSTANCE_DX3 *LPCDIDEVICEOBJECTINSTANCE_DX3; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +typedef struct DIDEVICEOBJECTINSTANCEA { + DWORD dwSize; + GUID guidType; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; + CHAR tszName[MAX_PATH]; +#if(DIRECTINPUT_VERSION >= 0x0500) + DWORD dwFFMaxForce; + DWORD dwFFForceResolution; + WORD wCollectionNumber; + WORD wDesignatorIndex; + WORD wUsagePage; + WORD wUsage; + DWORD dwDimension; + WORD wExponent; + WORD wReportId; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVICEOBJECTINSTANCEA, *LPDIDEVICEOBJECTINSTANCEA; +typedef struct DIDEVICEOBJECTINSTANCEW { + DWORD dwSize; + GUID guidType; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; + WCHAR tszName[MAX_PATH]; +#if(DIRECTINPUT_VERSION >= 0x0500) + DWORD dwFFMaxForce; + DWORD dwFFForceResolution; + WORD wCollectionNumber; + WORD wDesignatorIndex; + WORD wUsagePage; + WORD wUsage; + DWORD dwDimension; + WORD wExponent; + WORD wReportId; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVICEOBJECTINSTANCEW, *LPDIDEVICEOBJECTINSTANCEW; +#ifdef UNICODE +typedef DIDEVICEOBJECTINSTANCEW DIDEVICEOBJECTINSTANCE; +typedef LPDIDEVICEOBJECTINSTANCEW LPDIDEVICEOBJECTINSTANCE; +#else +typedef DIDEVICEOBJECTINSTANCEA DIDEVICEOBJECTINSTANCE; +typedef LPDIDEVICEOBJECTINSTANCEA LPDIDEVICEOBJECTINSTANCE; +#endif // UNICODE +typedef const DIDEVICEOBJECTINSTANCEA *LPCDIDEVICEOBJECTINSTANCEA; +typedef const DIDEVICEOBJECTINSTANCEW *LPCDIDEVICEOBJECTINSTANCEW; +typedef const DIDEVICEOBJECTINSTANCE *LPCDIDEVICEOBJECTINSTANCE; + +typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKA)(LPCDIDEVICEOBJECTINSTANCEA, LPVOID); +typedef BOOL (FAR PASCAL * LPDIENUMDEVICEOBJECTSCALLBACKW)(LPCDIDEVICEOBJECTINSTANCEW, LPVOID); +#ifdef UNICODE +#define LPDIENUMDEVICEOBJECTSCALLBACK LPDIENUMDEVICEOBJECTSCALLBACKW +#else +#define LPDIENUMDEVICEOBJECTSCALLBACK LPDIENUMDEVICEOBJECTSCALLBACKA +#endif // !UNICODE + +#if(DIRECTINPUT_VERSION >= 0x0500) +#define DIDOI_FFACTUATOR 0x00000001 +#define DIDOI_FFEFFECTTRIGGER 0x00000002 +#define DIDOI_POLLED 0x00008000 +#define DIDOI_ASPECTPOSITION 0x00000100 +#define DIDOI_ASPECTVELOCITY 0x00000200 +#define DIDOI_ASPECTACCEL 0x00000300 +#define DIDOI_ASPECTFORCE 0x00000400 +#define DIDOI_ASPECTMASK 0x00000F00 +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIDOI_GUIDISUSAGE 0x00010000 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +typedef struct DIPROPHEADER { + DWORD dwSize; + DWORD dwHeaderSize; + DWORD dwObj; + DWORD dwHow; +} DIPROPHEADER, *LPDIPROPHEADER; +typedef const DIPROPHEADER *LPCDIPROPHEADER; + +#define DIPH_DEVICE 0 +#define DIPH_BYOFFSET 1 +#define DIPH_BYID 2 +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIPH_BYUSAGE 3 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIMAKEUSAGEDWORD(UsagePage, Usage) \ + (DWORD)MAKELONG(Usage, UsagePage) +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +typedef struct DIPROPDWORD { + DIPROPHEADER diph; + DWORD dwData; +} DIPROPDWORD, *LPDIPROPDWORD; +typedef const DIPROPDWORD *LPCDIPROPDWORD; + +#if(DIRECTINPUT_VERSION >= 0x0800) +typedef struct DIPROPPOINTER { + DIPROPHEADER diph; + UINT_PTR uData; +} DIPROPPOINTER, *LPDIPROPPOINTER; +typedef const DIPROPPOINTER *LPCDIPROPPOINTER; +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +typedef struct DIPROPRANGE { + DIPROPHEADER diph; + LONG lMin; + LONG lMax; +} DIPROPRANGE, *LPDIPROPRANGE; +typedef const DIPROPRANGE *LPCDIPROPRANGE; + +#define DIPROPRANGE_NOMIN ((LONG)0x80000000) +#define DIPROPRANGE_NOMAX ((LONG)0x7FFFFFFF) + +#if(DIRECTINPUT_VERSION >= 0x050a) +typedef struct DIPROPCAL { + DIPROPHEADER diph; + LONG lMin; + LONG lCenter; + LONG lMax; +} DIPROPCAL, *LPDIPROPCAL; +typedef const DIPROPCAL *LPCDIPROPCAL; + +typedef struct DIPROPCALPOV { + DIPROPHEADER diph; + LONG lMin[5]; + LONG lMax[5]; +} DIPROPCALPOV, *LPDIPROPCALPOV; +typedef const DIPROPCALPOV *LPCDIPROPCALPOV; + +typedef struct DIPROPGUIDANDPATH { + DIPROPHEADER diph; + GUID guidClass; + WCHAR wszPath[MAX_PATH]; +} DIPROPGUIDANDPATH, *LPDIPROPGUIDANDPATH; +typedef const DIPROPGUIDANDPATH *LPCDIPROPGUIDANDPATH; + +typedef struct DIPROPSTRING { + DIPROPHEADER diph; + WCHAR wsz[MAX_PATH]; +} DIPROPSTRING, *LPDIPROPSTRING; +typedef const DIPROPSTRING *LPCDIPROPSTRING; + +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +#if(DIRECTINPUT_VERSION >= 0x0800) +#define MAXCPOINTSNUM 8 + +typedef struct _CPOINT +{ + LONG lP; // raw value + DWORD dwLog; // logical_value / max_logical_value * 10000 +} CPOINT, *PCPOINT; + +typedef struct DIPROPCPOINTS { + DIPROPHEADER diph; + DWORD dwCPointsNum; + CPOINT cp[MAXCPOINTSNUM]; +} DIPROPCPOINTS, *LPDIPROPCPOINTS; +typedef const DIPROPCPOINTS *LPCDIPROPCPOINTS; +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + + +#ifdef __cplusplus +#define MAKEDIPROP(prop) (*(const GUID *)(prop)) +#else +#define MAKEDIPROP(prop) ((REFGUID)(prop)) +#endif + +#define DIPROP_BUFFERSIZE MAKEDIPROP(1) + +#define DIPROP_AXISMODE MAKEDIPROP(2) + +#define DIPROPAXISMODE_ABS 0 +#define DIPROPAXISMODE_REL 1 + +#define DIPROP_GRANULARITY MAKEDIPROP(3) + +#define DIPROP_RANGE MAKEDIPROP(4) + +#define DIPROP_DEADZONE MAKEDIPROP(5) + +#define DIPROP_SATURATION MAKEDIPROP(6) + +#define DIPROP_FFGAIN MAKEDIPROP(7) + +#define DIPROP_FFLOAD MAKEDIPROP(8) + +#define DIPROP_AUTOCENTER MAKEDIPROP(9) + +#define DIPROPAUTOCENTER_OFF 0 +#define DIPROPAUTOCENTER_ON 1 + +#define DIPROP_CALIBRATIONMODE MAKEDIPROP(10) + +#define DIPROPCALIBRATIONMODE_COOKED 0 +#define DIPROPCALIBRATIONMODE_RAW 1 + +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIPROP_CALIBRATION MAKEDIPROP(11) + +#define DIPROP_GUIDANDPATH MAKEDIPROP(12) + +#define DIPROP_INSTANCENAME MAKEDIPROP(13) + +#define DIPROP_PRODUCTNAME MAKEDIPROP(14) +#endif /* DIRECTINPUT_VERSION >= 0x050a */ + +#if(DIRECTINPUT_VERSION >= 0x05b2) +#define DIPROP_JOYSTICKID MAKEDIPROP(15) + +#define DIPROP_GETPORTDISPLAYNAME MAKEDIPROP(16) + +#endif /* DIRECTINPUT_VERSION >= 0x05b2 */ + +#if(DIRECTINPUT_VERSION >= 0x0700) +#define DIPROP_PHYSICALRANGE MAKEDIPROP(18) + +#define DIPROP_LOGICALRANGE MAKEDIPROP(19) +#endif /* DIRECTINPUT_VERSION >= 0x0700 */ + +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIPROP_KEYNAME MAKEDIPROP(20) + +#define DIPROP_CPOINTS MAKEDIPROP(21) + +#define DIPROP_APPDATA MAKEDIPROP(22) + +#define DIPROP_SCANCODE MAKEDIPROP(23) + +#define DIPROP_VIDPID MAKEDIPROP(24) + +#define DIPROP_USERNAME MAKEDIPROP(25) + +#define DIPROP_TYPENAME MAKEDIPROP(26) +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + + +typedef struct DIDEVICEOBJECTDATA_DX3 { + DWORD dwOfs; + DWORD dwData; + DWORD dwTimeStamp; + DWORD dwSequence; +} DIDEVICEOBJECTDATA_DX3, *LPDIDEVICEOBJECTDATA_DX3; +typedef const DIDEVICEOBJECTDATA_DX3 *LPCDIDEVICEOBJECTDATA_DX; + +typedef struct DIDEVICEOBJECTDATA { + DWORD dwOfs; + DWORD dwData; + DWORD dwTimeStamp; + DWORD dwSequence; +#if(DIRECTINPUT_VERSION >= 0x0800) + UINT_PTR uAppData; +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ +} DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA; +typedef const DIDEVICEOBJECTDATA *LPCDIDEVICEOBJECTDATA; + +#define DIGDD_PEEK 0x00000001 + +#define DISEQUENCE_COMPARE(dwSequence1, cmp, dwSequence2) \ + ((int)((dwSequence1) - (dwSequence2)) cmp 0) +#define DISCL_EXCLUSIVE 0x00000001 +#define DISCL_NONEXCLUSIVE 0x00000002 +#define DISCL_FOREGROUND 0x00000004 +#define DISCL_BACKGROUND 0x00000008 +#define DISCL_NOWINKEY 0x00000010 + +#if(DIRECTINPUT_VERSION >= 0x0500) +/* These structures are defined for DirectX 3.0 compatibility */ + +typedef struct DIDEVICEINSTANCE_DX3A { + DWORD dwSize; + GUID guidInstance; + GUID guidProduct; + DWORD dwDevType; + CHAR tszInstanceName[MAX_PATH]; + CHAR tszProductName[MAX_PATH]; +} DIDEVICEINSTANCE_DX3A, *LPDIDEVICEINSTANCE_DX3A; +typedef struct DIDEVICEINSTANCE_DX3W { + DWORD dwSize; + GUID guidInstance; + GUID guidProduct; + DWORD dwDevType; + WCHAR tszInstanceName[MAX_PATH]; + WCHAR tszProductName[MAX_PATH]; +} DIDEVICEINSTANCE_DX3W, *LPDIDEVICEINSTANCE_DX3W; +#ifdef UNICODE +typedef DIDEVICEINSTANCE_DX3W DIDEVICEINSTANCE_DX3; +typedef LPDIDEVICEINSTANCE_DX3W LPDIDEVICEINSTANCE_DX3; +#else +typedef DIDEVICEINSTANCE_DX3A DIDEVICEINSTANCE_DX3; +typedef LPDIDEVICEINSTANCE_DX3A LPDIDEVICEINSTANCE_DX3; +#endif // UNICODE +typedef const DIDEVICEINSTANCE_DX3A *LPCDIDEVICEINSTANCE_DX3A; +typedef const DIDEVICEINSTANCE_DX3W *LPCDIDEVICEINSTANCE_DX3W; +typedef const DIDEVICEINSTANCE_DX3 *LPCDIDEVICEINSTANCE_DX3; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +typedef struct DIDEVICEINSTANCEA { + DWORD dwSize; + GUID guidInstance; + GUID guidProduct; + DWORD dwDevType; + CHAR tszInstanceName[MAX_PATH]; + CHAR tszProductName[MAX_PATH]; +#if(DIRECTINPUT_VERSION >= 0x0500) + GUID guidFFDriver; + WORD wUsagePage; + WORD wUsage; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVICEINSTANCEA, *LPDIDEVICEINSTANCEA; +typedef struct DIDEVICEINSTANCEW { + DWORD dwSize; + GUID guidInstance; + GUID guidProduct; + DWORD dwDevType; + WCHAR tszInstanceName[MAX_PATH]; + WCHAR tszProductName[MAX_PATH]; +#if(DIRECTINPUT_VERSION >= 0x0500) + GUID guidFFDriver; + WORD wUsagePage; + WORD wUsage; +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +} DIDEVICEINSTANCEW, *LPDIDEVICEINSTANCEW; +#ifdef UNICODE +typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE; +typedef LPDIDEVICEINSTANCEW LPDIDEVICEINSTANCE; +#else +typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE; +typedef LPDIDEVICEINSTANCEA LPDIDEVICEINSTANCE; +#endif // UNICODE + +typedef const DIDEVICEINSTANCEA *LPCDIDEVICEINSTANCEA; +typedef const DIDEVICEINSTANCEW *LPCDIDEVICEINSTANCEW; +#ifdef UNICODE +typedef DIDEVICEINSTANCEW DIDEVICEINSTANCE; +typedef LPCDIDEVICEINSTANCEW LPCDIDEVICEINSTANCE; +#else +typedef DIDEVICEINSTANCEA DIDEVICEINSTANCE; +typedef LPCDIDEVICEINSTANCEA LPCDIDEVICEINSTANCE; +#endif // UNICODE +typedef const DIDEVICEINSTANCE *LPCDIDEVICEINSTANCE; + +#undef INTERFACE +#define INTERFACE IDirectInputDeviceW + +DECLARE_INTERFACE_(IDirectInputDeviceW, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDeviceW methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; +}; + +typedef struct IDirectInputDeviceW *LPDIRECTINPUTDEVICEW; + +#undef INTERFACE +#define INTERFACE IDirectInputDeviceA + +DECLARE_INTERFACE_(IDirectInputDeviceA, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDeviceA methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; +}; + +typedef struct IDirectInputDeviceA *LPDIRECTINPUTDEVICEA; + +#ifdef UNICODE +#define IID_IDirectInputDevice IID_IDirectInputDeviceW +#define IDirectInputDevice IDirectInputDeviceW +#define IDirectInputDeviceVtbl IDirectInputDeviceWVtbl +#else +#define IID_IDirectInputDevice IID_IDirectInputDeviceA +#define IDirectInputDevice IDirectInputDeviceA +#define IDirectInputDeviceVtbl IDirectInputDeviceAVtbl +#endif +typedef struct IDirectInputDevice *LPDIRECTINPUTDEVICE; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputDevice_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputDevice_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputDevice_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputDevice_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) +#define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) +#define IDirectInputDevice_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) +#define IDirectInputDevice_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) +#define IDirectInputDevice_Acquire(p) (p)->lpVtbl->Acquire(p) +#define IDirectInputDevice_Unacquire(p) (p)->lpVtbl->Unacquire(p) +#define IDirectInputDevice_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) +#define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) +#define IDirectInputDevice_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) +#define IDirectInputDevice_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) +#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) +#define IDirectInputDevice_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) +#define IDirectInputDevice_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInputDevice_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#else +#define IDirectInputDevice_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputDevice_AddRef(p) (p)->AddRef() +#define IDirectInputDevice_Release(p) (p)->Release() +#define IDirectInputDevice_GetCapabilities(p,a) (p)->GetCapabilities(a) +#define IDirectInputDevice_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) +#define IDirectInputDevice_GetProperty(p,a,b) (p)->GetProperty(a,b) +#define IDirectInputDevice_SetProperty(p,a,b) (p)->SetProperty(a,b) +#define IDirectInputDevice_Acquire(p) (p)->Acquire() +#define IDirectInputDevice_Unacquire(p) (p)->Unacquire() +#define IDirectInputDevice_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) +#define IDirectInputDevice_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) +#define IDirectInputDevice_SetDataFormat(p,a) (p)->SetDataFormat(a) +#define IDirectInputDevice_SetEventNotification(p,a) (p)->SetEventNotification(a) +#define IDirectInputDevice_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectInputDevice_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) +#define IDirectInputDevice_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) +#define IDirectInputDevice_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInputDevice_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#endif + +#endif /* DIJ_RINGZERO */ + + +#if(DIRECTINPUT_VERSION >= 0x0500) + +#define DISFFC_RESET 0x00000001 +#define DISFFC_STOPALL 0x00000002 +#define DISFFC_PAUSE 0x00000004 +#define DISFFC_CONTINUE 0x00000008 +#define DISFFC_SETACTUATORSON 0x00000010 +#define DISFFC_SETACTUATORSOFF 0x00000020 + +#define DIGFFS_EMPTY 0x00000001 +#define DIGFFS_STOPPED 0x00000002 +#define DIGFFS_PAUSED 0x00000004 +#define DIGFFS_ACTUATORSON 0x00000010 +#define DIGFFS_ACTUATORSOFF 0x00000020 +#define DIGFFS_POWERON 0x00000040 +#define DIGFFS_POWEROFF 0x00000080 +#define DIGFFS_SAFETYSWITCHON 0x00000100 +#define DIGFFS_SAFETYSWITCHOFF 0x00000200 +#define DIGFFS_USERFFSWITCHON 0x00000400 +#define DIGFFS_USERFFSWITCHOFF 0x00000800 +#define DIGFFS_DEVICELOST 0x80000000 + +#ifndef DIJ_RINGZERO + +typedef struct DIEFFECTINFOA { + DWORD dwSize; + GUID guid; + DWORD dwEffType; + DWORD dwStaticParams; + DWORD dwDynamicParams; + CHAR tszName[MAX_PATH]; +} DIEFFECTINFOA, *LPDIEFFECTINFOA; +typedef struct DIEFFECTINFOW { + DWORD dwSize; + GUID guid; + DWORD dwEffType; + DWORD dwStaticParams; + DWORD dwDynamicParams; + WCHAR tszName[MAX_PATH]; +} DIEFFECTINFOW, *LPDIEFFECTINFOW; +#ifdef UNICODE +typedef DIEFFECTINFOW DIEFFECTINFO; +typedef LPDIEFFECTINFOW LPDIEFFECTINFO; +#else +typedef DIEFFECTINFOA DIEFFECTINFO; +typedef LPDIEFFECTINFOA LPDIEFFECTINFO; +#endif // UNICODE +typedef const DIEFFECTINFOA *LPCDIEFFECTINFOA; +typedef const DIEFFECTINFOW *LPCDIEFFECTINFOW; +typedef const DIEFFECTINFO *LPCDIEFFECTINFO; + +#define DISDD_CONTINUE 0x00000001 + +typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKA)(LPCDIEFFECTINFOA, LPVOID); +typedef BOOL (FAR PASCAL * LPDIENUMEFFECTSCALLBACKW)(LPCDIEFFECTINFOW, LPVOID); +#ifdef UNICODE +#define LPDIENUMEFFECTSCALLBACK LPDIENUMEFFECTSCALLBACKW +#else +#define LPDIENUMEFFECTSCALLBACK LPDIENUMEFFECTSCALLBACKA +#endif // !UNICODE +typedef BOOL (FAR PASCAL * LPDIENUMCREATEDEFFECTOBJECTSCALLBACK)(LPDIRECTINPUTEFFECT, LPVOID); + +#undef INTERFACE +#define INTERFACE IDirectInputDevice2W + +DECLARE_INTERFACE_(IDirectInputDevice2W, IDirectInputDeviceW) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDeviceW methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + + /*** IDirectInputDevice2W methods ***/ + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; +}; + +typedef struct IDirectInputDevice2W *LPDIRECTINPUTDEVICE2W; + +#undef INTERFACE +#define INTERFACE IDirectInputDevice2A + +DECLARE_INTERFACE_(IDirectInputDevice2A, IDirectInputDeviceA) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDeviceA methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + + /*** IDirectInputDevice2A methods ***/ + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; +}; + +typedef struct IDirectInputDevice2A *LPDIRECTINPUTDEVICE2A; + +#ifdef UNICODE +#define IID_IDirectInputDevice2 IID_IDirectInputDevice2W +#define IDirectInputDevice2 IDirectInputDevice2W +#define IDirectInputDevice2Vtbl IDirectInputDevice2WVtbl +#else +#define IID_IDirectInputDevice2 IID_IDirectInputDevice2A +#define IDirectInputDevice2 IDirectInputDevice2A +#define IDirectInputDevice2Vtbl IDirectInputDevice2AVtbl +#endif +typedef struct IDirectInputDevice2 *LPDIRECTINPUTDEVICE2; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputDevice2_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputDevice2_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputDevice2_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) +#define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) +#define IDirectInputDevice2_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) +#define IDirectInputDevice2_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) +#define IDirectInputDevice2_Acquire(p) (p)->lpVtbl->Acquire(p) +#define IDirectInputDevice2_Unacquire(p) (p)->lpVtbl->Unacquire(p) +#define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) +#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) +#define IDirectInputDevice2_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) +#define IDirectInputDevice2_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) +#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) +#define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) +#define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInputDevice2_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) +#define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) +#define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) +#define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) +#define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) +#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) +#define IDirectInputDevice2_Escape(p,a) (p)->lpVtbl->Escape(p,a) +#define IDirectInputDevice2_Poll(p) (p)->lpVtbl->Poll(p) +#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) +#else +#define IDirectInputDevice2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputDevice2_AddRef(p) (p)->AddRef() +#define IDirectInputDevice2_Release(p) (p)->Release() +#define IDirectInputDevice2_GetCapabilities(p,a) (p)->GetCapabilities(a) +#define IDirectInputDevice2_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) +#define IDirectInputDevice2_GetProperty(p,a,b) (p)->GetProperty(a,b) +#define IDirectInputDevice2_SetProperty(p,a,b) (p)->SetProperty(a,b) +#define IDirectInputDevice2_Acquire(p) (p)->Acquire() +#define IDirectInputDevice2_Unacquire(p) (p)->Unacquire() +#define IDirectInputDevice2_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) +#define IDirectInputDevice2_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) +#define IDirectInputDevice2_SetDataFormat(p,a) (p)->SetDataFormat(a) +#define IDirectInputDevice2_SetEventNotification(p,a) (p)->SetEventNotification(a) +#define IDirectInputDevice2_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectInputDevice2_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) +#define IDirectInputDevice2_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) +#define IDirectInputDevice2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInputDevice2_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectInputDevice2_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) +#define IDirectInputDevice2_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) +#define IDirectInputDevice2_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) +#define IDirectInputDevice2_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) +#define IDirectInputDevice2_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) +#define IDirectInputDevice2_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) +#define IDirectInputDevice2_Escape(p,a) (p)->Escape(a) +#define IDirectInputDevice2_Poll(p) (p)->Poll() +#define IDirectInputDevice2_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) +#endif + +#endif /* DIJ_RINGZERO */ + +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ + +#if(DIRECTINPUT_VERSION >= 0x0700) +#define DIFEF_DEFAULT 0x00000000 +#define DIFEF_INCLUDENONSTANDARD 0x00000001 +#define DIFEF_MODIFYIFNEEDED 0x00000010 + +#ifndef DIJ_RINGZERO + +#undef INTERFACE +#define INTERFACE IDirectInputDevice7W + +DECLARE_INTERFACE_(IDirectInputDevice7W, IDirectInputDevice2W) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDevice2W methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + + /*** IDirectInputDevice7W methods ***/ + STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; +}; + +typedef struct IDirectInputDevice7W *LPDIRECTINPUTDEVICE7W; + +#undef INTERFACE +#define INTERFACE IDirectInputDevice7A + +DECLARE_INTERFACE_(IDirectInputDevice7A, IDirectInputDevice2A) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDevice2A methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + + /*** IDirectInputDevice7A methods ***/ + STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; +}; + +typedef struct IDirectInputDevice7A *LPDIRECTINPUTDEVICE7A; + +#ifdef UNICODE +#define IID_IDirectInputDevice7 IID_IDirectInputDevice7W +#define IDirectInputDevice7 IDirectInputDevice7W +#define IDirectInputDevice7Vtbl IDirectInputDevice7WVtbl +#else +#define IID_IDirectInputDevice7 IID_IDirectInputDevice7A +#define IDirectInputDevice7 IDirectInputDevice7A +#define IDirectInputDevice7Vtbl IDirectInputDevice7AVtbl +#endif +typedef struct IDirectInputDevice7 *LPDIRECTINPUTDEVICE7; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputDevice7_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputDevice7_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputDevice7_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) +#define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) +#define IDirectInputDevice7_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) +#define IDirectInputDevice7_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) +#define IDirectInputDevice7_Acquire(p) (p)->lpVtbl->Acquire(p) +#define IDirectInputDevice7_Unacquire(p) (p)->lpVtbl->Unacquire(p) +#define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) +#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) +#define IDirectInputDevice7_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) +#define IDirectInputDevice7_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) +#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) +#define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) +#define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInputDevice7_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) +#define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) +#define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) +#define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) +#define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) +#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) +#define IDirectInputDevice7_Escape(p,a) (p)->lpVtbl->Escape(p,a) +#define IDirectInputDevice7_Poll(p) (p)->lpVtbl->Poll(p) +#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) +#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d) +#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d) +#else +#define IDirectInputDevice7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputDevice7_AddRef(p) (p)->AddRef() +#define IDirectInputDevice7_Release(p) (p)->Release() +#define IDirectInputDevice7_GetCapabilities(p,a) (p)->GetCapabilities(a) +#define IDirectInputDevice7_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) +#define IDirectInputDevice7_GetProperty(p,a,b) (p)->GetProperty(a,b) +#define IDirectInputDevice7_SetProperty(p,a,b) (p)->SetProperty(a,b) +#define IDirectInputDevice7_Acquire(p) (p)->Acquire() +#define IDirectInputDevice7_Unacquire(p) (p)->Unacquire() +#define IDirectInputDevice7_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) +#define IDirectInputDevice7_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) +#define IDirectInputDevice7_SetDataFormat(p,a) (p)->SetDataFormat(a) +#define IDirectInputDevice7_SetEventNotification(p,a) (p)->SetEventNotification(a) +#define IDirectInputDevice7_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectInputDevice7_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) +#define IDirectInputDevice7_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) +#define IDirectInputDevice7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInputDevice7_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectInputDevice7_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) +#define IDirectInputDevice7_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) +#define IDirectInputDevice7_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) +#define IDirectInputDevice7_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) +#define IDirectInputDevice7_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) +#define IDirectInputDevice7_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) +#define IDirectInputDevice7_Escape(p,a) (p)->Escape(a) +#define IDirectInputDevice7_Poll(p) (p)->Poll() +#define IDirectInputDevice7_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) +#define IDirectInputDevice7_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d) +#define IDirectInputDevice7_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d) +#endif + +#endif /* DIJ_RINGZERO */ + +#endif /* DIRECTINPUT_VERSION >= 0x0700 */ + +#if(DIRECTINPUT_VERSION >= 0x0800) + +#ifndef DIJ_RINGZERO + +#undef INTERFACE +#define INTERFACE IDirectInputDevice8W + +DECLARE_INTERFACE_(IDirectInputDevice8W, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDevice8W methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; + STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW,LPCWSTR,DWORD) PURE; + STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW,LPCWSTR,DWORD) PURE; + STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW) PURE; +}; + +typedef struct IDirectInputDevice8W *LPDIRECTINPUTDEVICE8W; + +#undef INTERFACE +#define INTERFACE IDirectInputDevice8A + +DECLARE_INTERFACE_(IDirectInputDevice8A, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputDevice8A methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS) PURE; + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetProperty)(THIS_ REFGUID,LPDIPROPHEADER) PURE; + STDMETHOD(SetProperty)(THIS_ REFGUID,LPCDIPROPHEADER) PURE; + STDMETHOD(Acquire)(THIS) PURE; + STDMETHOD(Unacquire)(THIS) PURE; + STDMETHOD(GetDeviceState)(THIS_ DWORD,LPVOID) PURE; + STDMETHOD(GetDeviceData)(THIS_ DWORD,LPDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT) PURE; + STDMETHOD(SetEventNotification)(THIS_ HANDLE) PURE; + STDMETHOD(SetCooperativeLevel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA,DWORD,DWORD) PURE; + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD,REFGUID) PURE; + STDMETHOD(CreateEffect)(THIS_ REFGUID,LPCDIEFFECT,LPDIRECTINPUTEFFECT *,LPUNKNOWN) PURE; + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA,REFGUID) PURE; + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD) PURE; + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD) PURE; + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE) PURE; + STDMETHOD(Poll)(THIS) PURE; + STDMETHOD(SendDeviceData)(THIS_ DWORD,LPCDIDEVICEOBJECTDATA,LPDWORD,DWORD) PURE; + STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR,LPDIENUMEFFECTSINFILECALLBACK,LPVOID,DWORD) PURE; + STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR,DWORD,LPDIFILEEFFECT,DWORD) PURE; + STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA,LPCSTR,DWORD) PURE; + STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA,LPCSTR,DWORD) PURE; + STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA) PURE; +}; + +typedef struct IDirectInputDevice8A *LPDIRECTINPUTDEVICE8A; + +#ifdef UNICODE +#define IID_IDirectInputDevice8 IID_IDirectInputDevice8W +#define IDirectInputDevice8 IDirectInputDevice8W +#define IDirectInputDevice8Vtbl IDirectInputDevice8WVtbl +#else +#define IID_IDirectInputDevice8 IID_IDirectInputDevice8A +#define IDirectInputDevice8 IDirectInputDevice8A +#define IDirectInputDevice8Vtbl IDirectInputDevice8AVtbl +#endif +typedef struct IDirectInputDevice8 *LPDIRECTINPUTDEVICE8; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInputDevice8_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInputDevice8_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInputDevice8_GetCapabilities(p,a) (p)->lpVtbl->GetCapabilities(p,a) +#define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->lpVtbl->EnumObjects(p,a,b,c) +#define IDirectInputDevice8_GetProperty(p,a,b) (p)->lpVtbl->GetProperty(p,a,b) +#define IDirectInputDevice8_SetProperty(p,a,b) (p)->lpVtbl->SetProperty(p,a,b) +#define IDirectInputDevice8_Acquire(p) (p)->lpVtbl->Acquire(p) +#define IDirectInputDevice8_Unacquire(p) (p)->lpVtbl->Unacquire(p) +#define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->lpVtbl->GetDeviceState(p,a,b) +#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->lpVtbl->GetDeviceData(p,a,b,c,d) +#define IDirectInputDevice8_SetDataFormat(p,a) (p)->lpVtbl->SetDataFormat(p,a) +#define IDirectInputDevice8_SetEventNotification(p,a) (p)->lpVtbl->SetEventNotification(p,a) +#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b) +#define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->lpVtbl->GetObjectInfo(p,a,b,c) +#define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->lpVtbl->GetDeviceInfo(p,a) +#define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInputDevice8_Initialize(p,a,b,c) (p)->lpVtbl->Initialize(p,a,b,c) +#define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->lpVtbl->CreateEffect(p,a,b,c,d) +#define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->lpVtbl->EnumEffects(p,a,b,c) +#define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->lpVtbl->GetEffectInfo(p,a,b) +#define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->lpVtbl->GetForceFeedbackState(p,a) +#define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->lpVtbl->SendForceFeedbackCommand(p,a) +#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->lpVtbl->EnumCreatedEffectObjects(p,a,b,c) +#define IDirectInputDevice8_Escape(p,a) (p)->lpVtbl->Escape(p,a) +#define IDirectInputDevice8_Poll(p) (p)->lpVtbl->Poll(p) +#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->lpVtbl->SendDeviceData(p,a,b,c,d) +#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->lpVtbl->EnumEffectsInFile(p,a,b,c,d) +#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->lpVtbl->WriteEffectToFile(p,a,b,c,d) +#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->lpVtbl->BuildActionMap(p,a,b,c) +#define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->lpVtbl->SetActionMap(p,a,b,c) +#define IDirectInputDevice8_GetImageInfo(p,a) (p)->lpVtbl->GetImageInfo(p,a) +#else +#define IDirectInputDevice8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInputDevice8_AddRef(p) (p)->AddRef() +#define IDirectInputDevice8_Release(p) (p)->Release() +#define IDirectInputDevice8_GetCapabilities(p,a) (p)->GetCapabilities(a) +#define IDirectInputDevice8_EnumObjects(p,a,b,c) (p)->EnumObjects(a,b,c) +#define IDirectInputDevice8_GetProperty(p,a,b) (p)->GetProperty(a,b) +#define IDirectInputDevice8_SetProperty(p,a,b) (p)->SetProperty(a,b) +#define IDirectInputDevice8_Acquire(p) (p)->Acquire() +#define IDirectInputDevice8_Unacquire(p) (p)->Unacquire() +#define IDirectInputDevice8_GetDeviceState(p,a,b) (p)->GetDeviceState(a,b) +#define IDirectInputDevice8_GetDeviceData(p,a,b,c,d) (p)->GetDeviceData(a,b,c,d) +#define IDirectInputDevice8_SetDataFormat(p,a) (p)->SetDataFormat(a) +#define IDirectInputDevice8_SetEventNotification(p,a) (p)->SetEventNotification(a) +#define IDirectInputDevice8_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b) +#define IDirectInputDevice8_GetObjectInfo(p,a,b,c) (p)->GetObjectInfo(a,b,c) +#define IDirectInputDevice8_GetDeviceInfo(p,a) (p)->GetDeviceInfo(a) +#define IDirectInputDevice8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInputDevice8_Initialize(p,a,b,c) (p)->Initialize(a,b,c) +#define IDirectInputDevice8_CreateEffect(p,a,b,c,d) (p)->CreateEffect(a,b,c,d) +#define IDirectInputDevice8_EnumEffects(p,a,b,c) (p)->EnumEffects(a,b,c) +#define IDirectInputDevice8_GetEffectInfo(p,a,b) (p)->GetEffectInfo(a,b) +#define IDirectInputDevice8_GetForceFeedbackState(p,a) (p)->GetForceFeedbackState(a) +#define IDirectInputDevice8_SendForceFeedbackCommand(p,a) (p)->SendForceFeedbackCommand(a) +#define IDirectInputDevice8_EnumCreatedEffectObjects(p,a,b,c) (p)->EnumCreatedEffectObjects(a,b,c) +#define IDirectInputDevice8_Escape(p,a) (p)->Escape(a) +#define IDirectInputDevice8_Poll(p) (p)->Poll() +#define IDirectInputDevice8_SendDeviceData(p,a,b,c,d) (p)->SendDeviceData(a,b,c,d) +#define IDirectInputDevice8_EnumEffectsInFile(p,a,b,c,d) (p)->EnumEffectsInFile(a,b,c,d) +#define IDirectInputDevice8_WriteEffectToFile(p,a,b,c,d) (p)->WriteEffectToFile(a,b,c,d) +#define IDirectInputDevice8_BuildActionMap(p,a,b,c) (p)->BuildActionMap(a,b,c) +#define IDirectInputDevice8_SetActionMap(p,a,b,c) (p)->SetActionMap(a,b,c) +#define IDirectInputDevice8_GetImageInfo(p,a) (p)->GetImageInfo(a) +#endif + +#endif /* DIJ_RINGZERO */ + +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +/**************************************************************************** + * + * Mouse + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +typedef struct _DIMOUSESTATE { + LONG lX; + LONG lY; + LONG lZ; + BYTE rgbButtons[4]; +} DIMOUSESTATE, *LPDIMOUSESTATE; + +#if DIRECTINPUT_VERSION >= 0x0700 +typedef struct _DIMOUSESTATE2 { + LONG lX; + LONG lY; + LONG lZ; + BYTE rgbButtons[8]; +} DIMOUSESTATE2, *LPDIMOUSESTATE2; +#endif + + +#define DIMOFS_X FIELD_OFFSET(DIMOUSESTATE, lX) +#define DIMOFS_Y FIELD_OFFSET(DIMOUSESTATE, lY) +#define DIMOFS_Z FIELD_OFFSET(DIMOUSESTATE, lZ) +#define DIMOFS_BUTTON0 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 0) +#define DIMOFS_BUTTON1 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 1) +#define DIMOFS_BUTTON2 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 2) +#define DIMOFS_BUTTON3 (FIELD_OFFSET(DIMOUSESTATE, rgbButtons) + 3) +#if (DIRECTINPUT_VERSION >= 0x0700) +#define DIMOFS_BUTTON4 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 4) +#define DIMOFS_BUTTON5 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 5) +#define DIMOFS_BUTTON6 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 6) +#define DIMOFS_BUTTON7 (FIELD_OFFSET(DIMOUSESTATE2, rgbButtons) + 7) +#endif +#endif /* DIJ_RINGZERO */ + +/**************************************************************************** + * + * Keyboard + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +/**************************************************************************** + * + * DirectInput keyboard scan codes + * + ****************************************************************************/ +#define DIK_ESCAPE 0x01 +#define DIK_1 0x02 +#define DIK_2 0x03 +#define DIK_3 0x04 +#define DIK_4 0x05 +#define DIK_5 0x06 +#define DIK_6 0x07 +#define DIK_7 0x08 +#define DIK_8 0x09 +#define DIK_9 0x0A +#define DIK_0 0x0B +#define DIK_MINUS 0x0C /* - on main keyboard */ +#define DIK_EQUALS 0x0D +#define DIK_BACK 0x0E /* backspace */ +#define DIK_TAB 0x0F +#define DIK_Q 0x10 +#define DIK_W 0x11 +#define DIK_E 0x12 +#define DIK_R 0x13 +#define DIK_T 0x14 +#define DIK_Y 0x15 +#define DIK_U 0x16 +#define DIK_I 0x17 +#define DIK_O 0x18 +#define DIK_P 0x19 +#define DIK_LBRACKET 0x1A +#define DIK_RBRACKET 0x1B +#define DIK_RETURN 0x1C /* Enter on main keyboard */ +#define DIK_LCONTROL 0x1D +#define DIK_A 0x1E +#define DIK_S 0x1F +#define DIK_D 0x20 +#define DIK_F 0x21 +#define DIK_G 0x22 +#define DIK_H 0x23 +#define DIK_J 0x24 +#define DIK_K 0x25 +#define DIK_L 0x26 +#define DIK_SEMICOLON 0x27 +#define DIK_APOSTROPHE 0x28 +#define DIK_GRAVE 0x29 /* accent grave */ +#define DIK_LSHIFT 0x2A +#define DIK_BACKSLASH 0x2B +#define DIK_Z 0x2C +#define DIK_X 0x2D +#define DIK_C 0x2E +#define DIK_V 0x2F +#define DIK_B 0x30 +#define DIK_N 0x31 +#define DIK_M 0x32 +#define DIK_COMMA 0x33 +#define DIK_PERIOD 0x34 /* . on main keyboard */ +#define DIK_SLASH 0x35 /* / on main keyboard */ +#define DIK_RSHIFT 0x36 +#define DIK_MULTIPLY 0x37 /* * on numeric keypad */ +#define DIK_LMENU 0x38 /* left Alt */ +#define DIK_SPACE 0x39 +#define DIK_CAPITAL 0x3A +#define DIK_F1 0x3B +#define DIK_F2 0x3C +#define DIK_F3 0x3D +#define DIK_F4 0x3E +#define DIK_F5 0x3F +#define DIK_F6 0x40 +#define DIK_F7 0x41 +#define DIK_F8 0x42 +#define DIK_F9 0x43 +#define DIK_F10 0x44 +#define DIK_NUMLOCK 0x45 +#define DIK_SCROLL 0x46 /* Scroll Lock */ +#define DIK_NUMPAD7 0x47 +#define DIK_NUMPAD8 0x48 +#define DIK_NUMPAD9 0x49 +#define DIK_SUBTRACT 0x4A /* - on numeric keypad */ +#define DIK_NUMPAD4 0x4B +#define DIK_NUMPAD5 0x4C +#define DIK_NUMPAD6 0x4D +#define DIK_ADD 0x4E /* + on numeric keypad */ +#define DIK_NUMPAD1 0x4F +#define DIK_NUMPAD2 0x50 +#define DIK_NUMPAD3 0x51 +#define DIK_NUMPAD0 0x52 +#define DIK_DECIMAL 0x53 /* . on numeric keypad */ +#define DIK_OEM_102 0x56 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ +#define DIK_F11 0x57 +#define DIK_F12 0x58 +#define DIK_F13 0x64 /* (NEC PC98) */ +#define DIK_F14 0x65 /* (NEC PC98) */ +#define DIK_F15 0x66 /* (NEC PC98) */ +#define DIK_KANA 0x70 /* (Japanese keyboard) */ +#define DIK_ABNT_C1 0x73 /* /? on Brazilian keyboard */ +#define DIK_CONVERT 0x79 /* (Japanese keyboard) */ +#define DIK_NOCONVERT 0x7B /* (Japanese keyboard) */ +#define DIK_YEN 0x7D /* (Japanese keyboard) */ +#define DIK_ABNT_C2 0x7E /* Numpad . on Brazilian keyboard */ +#define DIK_NUMPADEQUALS 0x8D /* = on numeric keypad (NEC PC98) */ +#define DIK_PREVTRACK 0x90 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */ +#define DIK_AT 0x91 /* (NEC PC98) */ +#define DIK_COLON 0x92 /* (NEC PC98) */ +#define DIK_UNDERLINE 0x93 /* (NEC PC98) */ +#define DIK_KANJI 0x94 /* (Japanese keyboard) */ +#define DIK_STOP 0x95 /* (NEC PC98) */ +#define DIK_AX 0x96 /* (Japan AX) */ +#define DIK_UNLABELED 0x97 /* (J3100) */ +#define DIK_NEXTTRACK 0x99 /* Next Track */ +#define DIK_NUMPADENTER 0x9C /* Enter on numeric keypad */ +#define DIK_RCONTROL 0x9D +#define DIK_MUTE 0xA0 /* Mute */ +#define DIK_CALCULATOR 0xA1 /* Calculator */ +#define DIK_PLAYPAUSE 0xA2 /* Play / Pause */ +#define DIK_MEDIASTOP 0xA4 /* Media Stop */ +#define DIK_VOLUMEDOWN 0xAE /* Volume - */ +#define DIK_VOLUMEUP 0xB0 /* Volume + */ +#define DIK_WEBHOME 0xB2 /* Web home */ +#define DIK_NUMPADCOMMA 0xB3 /* , on numeric keypad (NEC PC98) */ +#define DIK_DIVIDE 0xB5 /* / on numeric keypad */ +#define DIK_SYSRQ 0xB7 +#define DIK_RMENU 0xB8 /* right Alt */ +#define DIK_PAUSE 0xC5 /* Pause */ +#define DIK_HOME 0xC7 /* Home on arrow keypad */ +#define DIK_UP 0xC8 /* UpArrow on arrow keypad */ +#define DIK_PRIOR 0xC9 /* PgUp on arrow keypad */ +#define DIK_LEFT 0xCB /* LeftArrow on arrow keypad */ +#define DIK_RIGHT 0xCD /* RightArrow on arrow keypad */ +#define DIK_END 0xCF /* End on arrow keypad */ +#define DIK_DOWN 0xD0 /* DownArrow on arrow keypad */ +#define DIK_NEXT 0xD1 /* PgDn on arrow keypad */ +#define DIK_INSERT 0xD2 /* Insert on arrow keypad */ +#define DIK_DELETE 0xD3 /* Delete on arrow keypad */ +#define DIK_LWIN 0xDB /* Left Windows key */ +#define DIK_RWIN 0xDC /* Right Windows key */ +#define DIK_APPS 0xDD /* AppMenu key */ +#define DIK_POWER 0xDE /* System Power */ +#define DIK_SLEEP 0xDF /* System Sleep */ +#define DIK_WAKE 0xE3 /* System Wake */ +#define DIK_WEBSEARCH 0xE5 /* Web Search */ +#define DIK_WEBFAVORITES 0xE6 /* Web Favorites */ +#define DIK_WEBREFRESH 0xE7 /* Web Refresh */ +#define DIK_WEBSTOP 0xE8 /* Web Stop */ +#define DIK_WEBFORWARD 0xE9 /* Web Forward */ +#define DIK_WEBBACK 0xEA /* Web Back */ +#define DIK_MYCOMPUTER 0xEB /* My Computer */ +#define DIK_MAIL 0xEC /* Mail */ +#define DIK_MEDIASELECT 0xED /* Media Select */ + +/* + * Alternate names for keys, to facilitate transition from DOS. + */ +#define DIK_BACKSPACE DIK_BACK /* backspace */ +#define DIK_NUMPADSTAR DIK_MULTIPLY /* * on numeric keypad */ +#define DIK_LALT DIK_LMENU /* left Alt */ +#define DIK_CAPSLOCK DIK_CAPITAL /* CapsLock */ +#define DIK_NUMPADMINUS DIK_SUBTRACT /* - on numeric keypad */ +#define DIK_NUMPADPLUS DIK_ADD /* + on numeric keypad */ +#define DIK_NUMPADPERIOD DIK_DECIMAL /* . on numeric keypad */ +#define DIK_NUMPADSLASH DIK_DIVIDE /* / on numeric keypad */ +#define DIK_RALT DIK_RMENU /* right Alt */ +#define DIK_UPARROW DIK_UP /* UpArrow on arrow keypad */ +#define DIK_PGUP DIK_PRIOR /* PgUp on arrow keypad */ +#define DIK_LEFTARROW DIK_LEFT /* LeftArrow on arrow keypad */ +#define DIK_RIGHTARROW DIK_RIGHT /* RightArrow on arrow keypad */ +#define DIK_DOWNARROW DIK_DOWN /* DownArrow on arrow keypad */ +#define DIK_PGDN DIK_NEXT /* PgDn on arrow keypad */ + +/* + * Alternate names for keys originally not used on US keyboards. + */ +#define DIK_CIRCUMFLEX DIK_PREVTRACK /* Japanese keyboard */ + +#endif /* DIJ_RINGZERO */ + +/**************************************************************************** + * + * Joystick + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +typedef struct DIJOYSTATE { + LONG lX; /* x-axis position */ + LONG lY; /* y-axis position */ + LONG lZ; /* z-axis position */ + LONG lRx; /* x-axis rotation */ + LONG lRy; /* y-axis rotation */ + LONG lRz; /* z-axis rotation */ + LONG rglSlider[2]; /* extra axes positions */ + DWORD rgdwPOV[4]; /* POV directions */ + BYTE rgbButtons[32]; /* 32 buttons */ +} DIJOYSTATE, *LPDIJOYSTATE; + +typedef struct DIJOYSTATE2 { + LONG lX; /* x-axis position */ + LONG lY; /* y-axis position */ + LONG lZ; /* z-axis position */ + LONG lRx; /* x-axis rotation */ + LONG lRy; /* y-axis rotation */ + LONG lRz; /* z-axis rotation */ + LONG rglSlider[2]; /* extra axes positions */ + DWORD rgdwPOV[4]; /* POV directions */ + BYTE rgbButtons[128]; /* 128 buttons */ + LONG lVX; /* x-axis velocity */ + LONG lVY; /* y-axis velocity */ + LONG lVZ; /* z-axis velocity */ + LONG lVRx; /* x-axis angular velocity */ + LONG lVRy; /* y-axis angular velocity */ + LONG lVRz; /* z-axis angular velocity */ + LONG rglVSlider[2]; /* extra axes velocities */ + LONG lAX; /* x-axis acceleration */ + LONG lAY; /* y-axis acceleration */ + LONG lAZ; /* z-axis acceleration */ + LONG lARx; /* x-axis angular acceleration */ + LONG lARy; /* y-axis angular acceleration */ + LONG lARz; /* z-axis angular acceleration */ + LONG rglASlider[2]; /* extra axes accelerations */ + LONG lFX; /* x-axis force */ + LONG lFY; /* y-axis force */ + LONG lFZ; /* z-axis force */ + LONG lFRx; /* x-axis torque */ + LONG lFRy; /* y-axis torque */ + LONG lFRz; /* z-axis torque */ + LONG rglFSlider[2]; /* extra axes forces */ +} DIJOYSTATE2, *LPDIJOYSTATE2; + +#define DIJOFS_X FIELD_OFFSET(DIJOYSTATE, lX) +#define DIJOFS_Y FIELD_OFFSET(DIJOYSTATE, lY) +#define DIJOFS_Z FIELD_OFFSET(DIJOYSTATE, lZ) +#define DIJOFS_RX FIELD_OFFSET(DIJOYSTATE, lRx) +#define DIJOFS_RY FIELD_OFFSET(DIJOYSTATE, lRy) +#define DIJOFS_RZ FIELD_OFFSET(DIJOYSTATE, lRz) +#define DIJOFS_SLIDER(n) (FIELD_OFFSET(DIJOYSTATE, rglSlider) + \ + (n) * sizeof(LONG)) +#define DIJOFS_POV(n) (FIELD_OFFSET(DIJOYSTATE, rgdwPOV) + \ + (n) * sizeof(DWORD)) +#define DIJOFS_BUTTON(n) (FIELD_OFFSET(DIJOYSTATE, rgbButtons) + (n)) +#define DIJOFS_BUTTON0 DIJOFS_BUTTON(0) +#define DIJOFS_BUTTON1 DIJOFS_BUTTON(1) +#define DIJOFS_BUTTON2 DIJOFS_BUTTON(2) +#define DIJOFS_BUTTON3 DIJOFS_BUTTON(3) +#define DIJOFS_BUTTON4 DIJOFS_BUTTON(4) +#define DIJOFS_BUTTON5 DIJOFS_BUTTON(5) +#define DIJOFS_BUTTON6 DIJOFS_BUTTON(6) +#define DIJOFS_BUTTON7 DIJOFS_BUTTON(7) +#define DIJOFS_BUTTON8 DIJOFS_BUTTON(8) +#define DIJOFS_BUTTON9 DIJOFS_BUTTON(9) +#define DIJOFS_BUTTON10 DIJOFS_BUTTON(10) +#define DIJOFS_BUTTON11 DIJOFS_BUTTON(11) +#define DIJOFS_BUTTON12 DIJOFS_BUTTON(12) +#define DIJOFS_BUTTON13 DIJOFS_BUTTON(13) +#define DIJOFS_BUTTON14 DIJOFS_BUTTON(14) +#define DIJOFS_BUTTON15 DIJOFS_BUTTON(15) +#define DIJOFS_BUTTON16 DIJOFS_BUTTON(16) +#define DIJOFS_BUTTON17 DIJOFS_BUTTON(17) +#define DIJOFS_BUTTON18 DIJOFS_BUTTON(18) +#define DIJOFS_BUTTON19 DIJOFS_BUTTON(19) +#define DIJOFS_BUTTON20 DIJOFS_BUTTON(20) +#define DIJOFS_BUTTON21 DIJOFS_BUTTON(21) +#define DIJOFS_BUTTON22 DIJOFS_BUTTON(22) +#define DIJOFS_BUTTON23 DIJOFS_BUTTON(23) +#define DIJOFS_BUTTON24 DIJOFS_BUTTON(24) +#define DIJOFS_BUTTON25 DIJOFS_BUTTON(25) +#define DIJOFS_BUTTON26 DIJOFS_BUTTON(26) +#define DIJOFS_BUTTON27 DIJOFS_BUTTON(27) +#define DIJOFS_BUTTON28 DIJOFS_BUTTON(28) +#define DIJOFS_BUTTON29 DIJOFS_BUTTON(29) +#define DIJOFS_BUTTON30 DIJOFS_BUTTON(30) +#define DIJOFS_BUTTON31 DIJOFS_BUTTON(31) + + +#endif /* DIJ_RINGZERO */ + +/**************************************************************************** + * + * IDirectInput + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +#define DIENUM_STOP 0 +#define DIENUM_CONTINUE 1 + +typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKA)(LPCDIDEVICEINSTANCEA, LPVOID); +typedef BOOL (FAR PASCAL * LPDIENUMDEVICESCALLBACKW)(LPCDIDEVICEINSTANCEW, LPVOID); +#ifdef UNICODE +#define LPDIENUMDEVICESCALLBACK LPDIENUMDEVICESCALLBACKW +#else +#define LPDIENUMDEVICESCALLBACK LPDIENUMDEVICESCALLBACKA +#endif // !UNICODE +typedef BOOL (FAR PASCAL * LPDICONFIGUREDEVICESCALLBACK)(IUnknown FAR *, LPVOID); + +#define DIEDFL_ALLDEVICES 0x00000000 +#define DIEDFL_ATTACHEDONLY 0x00000001 +#if(DIRECTINPUT_VERSION >= 0x0500) +#define DIEDFL_FORCEFEEDBACK 0x00000100 +#endif /* DIRECTINPUT_VERSION >= 0x0500 */ +#if(DIRECTINPUT_VERSION >= 0x050a) +#define DIEDFL_INCLUDEALIASES 0x00010000 +#define DIEDFL_INCLUDEPHANTOMS 0x00020000 +#endif /* DIRECTINPUT_VERSION >= 0x050a */ +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIEDFL_INCLUDEHIDDEN 0x00040000 +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + + +#if(DIRECTINPUT_VERSION >= 0x0800) +typedef BOOL (FAR PASCAL * LPDIENUMDEVICESBYSEMANTICSCBA)(LPCDIDEVICEINSTANCEA, LPDIRECTINPUTDEVICE8A, DWORD, DWORD, LPVOID); +typedef BOOL (FAR PASCAL * LPDIENUMDEVICESBYSEMANTICSCBW)(LPCDIDEVICEINSTANCEW, LPDIRECTINPUTDEVICE8W, DWORD, DWORD, LPVOID); +#ifdef UNICODE +#define LPDIENUMDEVICESBYSEMANTICSCB LPDIENUMDEVICESBYSEMANTICSCBW +#else +#define LPDIENUMDEVICESBYSEMANTICSCB LPDIENUMDEVICESBYSEMANTICSCBA +#endif // !UNICODE +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIEDBS_MAPPEDPRI1 0x00000001 +#define DIEDBS_MAPPEDPRI2 0x00000002 +#define DIEDBS_RECENTDEVICE 0x00000010 +#define DIEDBS_NEWDEVICE 0x00000020 +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#if(DIRECTINPUT_VERSION >= 0x0800) +#define DIEDBSFL_ATTACHEDONLY 0x00000000 +#define DIEDBSFL_THISUSER 0x00000010 +#define DIEDBSFL_FORCEFEEDBACK DIEDFL_FORCEFEEDBACK +#define DIEDBSFL_AVAILABLEDEVICES 0x00001000 +#define DIEDBSFL_MULTIMICEKEYBOARDS 0x00002000 +#define DIEDBSFL_NONGAMINGDEVICES 0x00004000 +#define DIEDBSFL_VALID 0x00007110 +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#undef INTERFACE +#define INTERFACE IDirectInputW + +DECLARE_INTERFACE_(IDirectInputW, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputW methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; +}; + +typedef struct IDirectInputW *LPDIRECTINPUTW; + +#undef INTERFACE +#define INTERFACE IDirectInputA + +DECLARE_INTERFACE_(IDirectInputA, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputA methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; +}; + +typedef struct IDirectInputA *LPDIRECTINPUTA; + +#ifdef UNICODE +#define IID_IDirectInput IID_IDirectInputW +#define IDirectInput IDirectInputW +#define IDirectInputVtbl IDirectInputWVtbl +#else +#define IID_IDirectInput IID_IDirectInputA +#define IDirectInput IDirectInputA +#define IDirectInputVtbl IDirectInputAVtbl +#endif +typedef struct IDirectInput *LPDIRECTINPUT; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInput_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInput_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInput_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInput_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) +#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectInput_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) +#define IDirectInput_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInput_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#else +#define IDirectInput_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInput_AddRef(p) (p)->AddRef() +#define IDirectInput_Release(p) (p)->Release() +#define IDirectInput_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) +#define IDirectInput_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectInput_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) +#define IDirectInput_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInput_Initialize(p,a,b) (p)->Initialize(a,b) +#endif + +#undef INTERFACE +#define INTERFACE IDirectInput2W + +DECLARE_INTERFACE_(IDirectInput2W, IDirectInputW) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputW methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + + /*** IDirectInput2W methods ***/ + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE; +}; + +typedef struct IDirectInput2W *LPDIRECTINPUT2W; + +#undef INTERFACE +#define INTERFACE IDirectInput2A + +DECLARE_INTERFACE_(IDirectInput2A, IDirectInputA) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInputA methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + + /*** IDirectInput2A methods ***/ + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE; +}; + +typedef struct IDirectInput2A *LPDIRECTINPUT2A; + +#ifdef UNICODE +#define IID_IDirectInput2 IID_IDirectInput2W +#define IDirectInput2 IDirectInput2W +#define IDirectInput2Vtbl IDirectInput2WVtbl +#else +#define IID_IDirectInput2 IID_IDirectInput2A +#define IDirectInput2 IDirectInput2A +#define IDirectInput2Vtbl IDirectInput2AVtbl +#endif +typedef struct IDirectInput2 *LPDIRECTINPUT2; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInput2_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInput2_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInput2_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInput2_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) +#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectInput2_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) +#define IDirectInput2_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInput2_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectInput2_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) +#else +#define IDirectInput2_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInput2_AddRef(p) (p)->AddRef() +#define IDirectInput2_Release(p) (p)->Release() +#define IDirectInput2_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) +#define IDirectInput2_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectInput2_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) +#define IDirectInput2_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInput2_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectInput2_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) +#endif + + +#undef INTERFACE +#define INTERFACE IDirectInput7W + +DECLARE_INTERFACE_(IDirectInput7W, IDirectInput2W) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInput2W methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE; + + /*** IDirectInput7W methods ***/ + STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE; +}; + +typedef struct IDirectInput7W *LPDIRECTINPUT7W; + +#undef INTERFACE +#define INTERFACE IDirectInput7A + +DECLARE_INTERFACE_(IDirectInput7A, IDirectInput2A) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInput2A methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICEA *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE; + + /*** IDirectInput7A methods ***/ + STDMETHOD(CreateDeviceEx)(THIS_ REFGUID,REFIID,LPVOID *,LPUNKNOWN) PURE; +}; + +typedef struct IDirectInput7A *LPDIRECTINPUT7A; + +#ifdef UNICODE +#define IID_IDirectInput7 IID_IDirectInput7W +#define IDirectInput7 IDirectInput7W +#define IDirectInput7Vtbl IDirectInput7WVtbl +#else +#define IID_IDirectInput7 IID_IDirectInput7A +#define IDirectInput7 IDirectInput7A +#define IDirectInput7Vtbl IDirectInput7AVtbl +#endif +typedef struct IDirectInput7 *LPDIRECTINPUT7; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInput7_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInput7_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInput7_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInput7_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) +#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectInput7_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) +#define IDirectInput7_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInput7_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectInput7_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) +#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->lpVtbl->CreateDeviceEx(p,a,b,c,d) +#else +#define IDirectInput7_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInput7_AddRef(p) (p)->AddRef() +#define IDirectInput7_Release(p) (p)->Release() +#define IDirectInput7_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) +#define IDirectInput7_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectInput7_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) +#define IDirectInput7_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInput7_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectInput7_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) +#define IDirectInput7_CreateDeviceEx(p,a,b,c,d) (p)->CreateDeviceEx(a,b,c,d) +#endif + +#if(DIRECTINPUT_VERSION >= 0x0800) +#undef INTERFACE +#define INTERFACE IDirectInput8W + +DECLARE_INTERFACE_(IDirectInput8W, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInput8W methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICE8W *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCWSTR,LPGUID) PURE; + STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR,LPDIACTIONFORMATW,LPDIENUMDEVICESBYSEMANTICSCBW,LPVOID,DWORD) PURE; + STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK,LPDICONFIGUREDEVICESPARAMSW,DWORD,LPVOID) PURE; +}; + +typedef struct IDirectInput8W *LPDIRECTINPUT8W; + +#undef INTERFACE +#define INTERFACE IDirectInput8A + +DECLARE_INTERFACE_(IDirectInput8A, IUnknown) +{ + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + + /*** IDirectInput8A methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID,LPDIRECTINPUTDEVICE8A *,LPUNKNOWN) PURE; + STDMETHOD(EnumDevices)(THIS_ DWORD,LPDIENUMDEVICESCALLBACKA,LPVOID,DWORD) PURE; + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID) PURE; + STDMETHOD(RunControlPanel)(THIS_ HWND,DWORD) PURE; + STDMETHOD(Initialize)(THIS_ HINSTANCE,DWORD) PURE; + STDMETHOD(FindDevice)(THIS_ REFGUID,LPCSTR,LPGUID) PURE; + STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR,LPDIACTIONFORMATA,LPDIENUMDEVICESBYSEMANTICSCBA,LPVOID,DWORD) PURE; + STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK,LPDICONFIGUREDEVICESPARAMSA,DWORD,LPVOID) PURE; +}; + +typedef struct IDirectInput8A *LPDIRECTINPUT8A; + +#ifdef UNICODE +#define IID_IDirectInput8 IID_IDirectInput8W +#define IDirectInput8 IDirectInput8W +#define IDirectInput8Vtbl IDirectInput8WVtbl +#else +#define IID_IDirectInput8 IID_IDirectInput8A +#define IDirectInput8 IDirectInput8A +#define IDirectInput8Vtbl IDirectInput8AVtbl +#endif +typedef struct IDirectInput8 *LPDIRECTINPUT8; + +#if !defined(__cplusplus) || defined(CINTERFACE) +#define IDirectInput8_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) +#define IDirectInput8_AddRef(p) (p)->lpVtbl->AddRef(p) +#define IDirectInput8_Release(p) (p)->lpVtbl->Release(p) +#define IDirectInput8_CreateDevice(p,a,b,c) (p)->lpVtbl->CreateDevice(p,a,b,c) +#define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->lpVtbl->EnumDevices(p,a,b,c,d) +#define IDirectInput8_GetDeviceStatus(p,a) (p)->lpVtbl->GetDeviceStatus(p,a) +#define IDirectInput8_RunControlPanel(p,a,b) (p)->lpVtbl->RunControlPanel(p,a,b) +#define IDirectInput8_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b) +#define IDirectInput8_FindDevice(p,a,b,c) (p)->lpVtbl->FindDevice(p,a,b,c) +#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->lpVtbl->EnumDevicesBySemantics(p,a,b,c,d,e) +#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->lpVtbl->ConfigureDevices(p,a,b,c,d) +#else +#define IDirectInput8_QueryInterface(p,a,b) (p)->QueryInterface(a,b) +#define IDirectInput8_AddRef(p) (p)->AddRef() +#define IDirectInput8_Release(p) (p)->Release() +#define IDirectInput8_CreateDevice(p,a,b,c) (p)->CreateDevice(a,b,c) +#define IDirectInput8_EnumDevices(p,a,b,c,d) (p)->EnumDevices(a,b,c,d) +#define IDirectInput8_GetDeviceStatus(p,a) (p)->GetDeviceStatus(a) +#define IDirectInput8_RunControlPanel(p,a,b) (p)->RunControlPanel(a,b) +#define IDirectInput8_Initialize(p,a,b) (p)->Initialize(a,b) +#define IDirectInput8_FindDevice(p,a,b,c) (p)->FindDevice(a,b,c) +#define IDirectInput8_EnumDevicesBySemantics(p,a,b,c,d,e) (p)->EnumDevicesBySemantics(a,b,c,d,e) +#define IDirectInput8_ConfigureDevices(p,a,b,c,d) (p)->ConfigureDevices(a,b,c,d) +#endif +#endif /* DIRECTINPUT_VERSION >= 0x0800 */ + +#if DIRECTINPUT_VERSION > 0x0700 + +extern HRESULT WINAPI DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter); + +#else +extern HRESULT WINAPI DirectInputCreateA(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTA *ppDI, LPUNKNOWN punkOuter); +extern HRESULT WINAPI DirectInputCreateW(HINSTANCE hinst, DWORD dwVersion, LPDIRECTINPUTW *ppDI, LPUNKNOWN punkOuter); +#ifdef UNICODE +#define DirectInputCreate DirectInputCreateW +#else +#define DirectInputCreate DirectInputCreateA +#endif // !UNICODE + +extern HRESULT WINAPI DirectInputCreateEx(HINSTANCE hinst, DWORD dwVersion, REFIID riidltf, LPVOID *ppvOut, LPUNKNOWN punkOuter); + +#endif /* DIRECTINPUT_VERSION > 0x700 */ + +#endif /* DIJ_RINGZERO */ + + +/**************************************************************************** + * + * Return Codes + * + ****************************************************************************/ + +/* + * The operation completed successfully. + */ +#define DI_OK S_OK + +/* + * The device exists but is not currently attached. + */ +#define DI_NOTATTACHED S_FALSE + +/* + * The device buffer overflowed. Some input was lost. + */ +#define DI_BUFFEROVERFLOW S_FALSE + +/* + * The change in device properties had no effect. + */ +#define DI_PROPNOEFFECT S_FALSE + +/* + * The operation had no effect. + */ +#define DI_NOEFFECT S_FALSE + +/* + * The device is a polled device. As a result, device buffering + * will not collect any data and event notifications will not be + * signalled until GetDeviceState is called. + */ +#define DI_POLLEDDEVICE ((HRESULT)0x00000002L) + +/* + * The parameters of the effect were successfully updated by + * IDirectInputEffect::SetParameters, but the effect was not + * downloaded because the device is not exclusively acquired + * or because the DIEP_NODOWNLOAD flag was passed. + */ +#define DI_DOWNLOADSKIPPED ((HRESULT)0x00000003L) + +/* + * The parameters of the effect were successfully updated by + * IDirectInputEffect::SetParameters, but in order to change + * the parameters, the effect needed to be restarted. + */ +#define DI_EFFECTRESTARTED ((HRESULT)0x00000004L) + +/* + * The parameters of the effect were successfully updated by + * IDirectInputEffect::SetParameters, but some of them were + * beyond the capabilities of the device and were truncated. + */ +#define DI_TRUNCATED ((HRESULT)0x00000008L) + +/* + * The settings have been successfully applied but could not be + * persisted. + */ +#define DI_SETTINGSNOTSAVED ((HRESULT)0x0000000BL) + +/* + * Equal to DI_EFFECTRESTARTED | DI_TRUNCATED. + */ +#define DI_TRUNCATEDANDRESTARTED ((HRESULT)0x0000000CL) + +/* + * A SUCCESS code indicating that settings cannot be modified. + */ +#define DI_WRITEPROTECT ((HRESULT)0x00000013L) + +/* + * The application requires a newer version of DirectInput. + */ +#define DIERR_OLDDIRECTINPUTVERSION \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_OLD_WIN_VERSION) + +/* + * The application was written for an unsupported prerelease version + * of DirectInput. + */ +#define DIERR_BETADIRECTINPUTVERSION \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_RMODE_APP) + +/* + * The object could not be created due to an incompatible driver version + * or mismatched or incomplete driver components. + */ +#define DIERR_BADDRIVERVER \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BAD_DRIVER_LEVEL) + +/* + * The device or device instance or effect is not registered with DirectInput. + */ +#define DIERR_DEVICENOTREG REGDB_E_CLASSNOTREG + +/* + * The requested object does not exist. + */ +#define DIERR_NOTFOUND \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) + +/* + * The requested object does not exist. + */ +#define DIERR_OBJECTNOTFOUND \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND) + +/* + * An invalid parameter was passed to the returning function, + * or the object was not in a state that admitted the function + * to be called. + */ +#define DIERR_INVALIDPARAM E_INVALIDARG + +/* + * The specified interface is not supported by the object + */ +#define DIERR_NOINTERFACE E_NOINTERFACE + +/* + * An undetermined error occured inside the DInput subsystem + */ +#define DIERR_GENERIC E_FAIL + +/* + * The DInput subsystem couldn't allocate sufficient memory to complete the + * caller's request. + */ +#define DIERR_OUTOFMEMORY E_OUTOFMEMORY + +/* + * The function called is not supported at this time + */ +#define DIERR_UNSUPPORTED E_NOTIMPL + +/* + * This object has not been initialized + */ +#define DIERR_NOTINITIALIZED \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_READY) + +/* + * This object is already initialized + */ +#define DIERR_ALREADYINITIALIZED \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_ALREADY_INITIALIZED) + +/* + * This object does not support aggregation + */ +#define DIERR_NOAGGREGATION CLASS_E_NOAGGREGATION + +/* + * Another app has a higher priority level, preventing this call from + * succeeding. + */ +#define DIERR_OTHERAPPHASPRIO E_ACCESSDENIED + +/* + * Access to the device has been lost. It must be re-acquired. + */ +#define DIERR_INPUTLOST \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT) + +/* + * The operation cannot be performed while the device is acquired. + */ +#define DIERR_ACQUIRED \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_BUSY) + +/* + * The operation cannot be performed unless the device is acquired. + */ +#define DIERR_NOTACQUIRED \ + MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INVALID_ACCESS) + +/* + * The specified property cannot be changed. + */ +#define DIERR_READONLY E_ACCESSDENIED + +/* + * The device already has an event notification associated with it. + */ +#define DIERR_HANDLEEXISTS E_ACCESSDENIED + +/* + * Data is not yet available. + */ +#ifndef E_PENDING +#define E_PENDING 0x8000000AL +#endif + +/* + * Unable to IDirectInputJoyConfig_Acquire because the user + * does not have sufficient privileges to change the joystick + * configuration. + */ +#define DIERR_INSUFFICIENTPRIVS 0x80040200L + +/* + * The device is full. + */ +#define DIERR_DEVICEFULL 0x80040201L + +/* + * Not all the requested information fit into the buffer. + */ +#define DIERR_MOREDATA 0x80040202L + +/* + * The effect is not downloaded. + */ +#define DIERR_NOTDOWNLOADED 0x80040203L + +/* + * The device cannot be reinitialized because there are still effects + * attached to it. + */ +#define DIERR_HASEFFECTS 0x80040204L + +/* + * The operation cannot be performed unless the device is acquired + * in DISCL_EXCLUSIVE mode. + */ +#define DIERR_NOTEXCLUSIVEACQUIRED 0x80040205L + +/* + * The effect could not be downloaded because essential information + * is missing. For example, no axes have been associated with the + * effect, or no type-specific information has been created. + */ +#define DIERR_INCOMPLETEEFFECT 0x80040206L + +/* + * Attempted to read buffered device data from a device that is + * not buffered. + */ +#define DIERR_NOTBUFFERED 0x80040207L + +/* + * An attempt was made to modify parameters of an effect while it is + * playing. Not all hardware devices support altering the parameters + * of an effect while it is playing. + */ +#define DIERR_EFFECTPLAYING 0x80040208L + +/* + * The operation could not be completed because the device is not + * plugged in. + */ +#define DIERR_UNPLUGGED 0x80040209L + +/* + * SendDeviceData failed because more information was requested + * to be sent than can be sent to the device. Some devices have + * restrictions on how much data can be sent to them. (For example, + * there might be a limit on the number of buttons that can be + * pressed at once.) + */ +#define DIERR_REPORTFULL 0x8004020AL + + +/* + * A mapper file function failed because reading or writing the user or IHV + * settings file failed. + */ +#define DIERR_MAPFILEFAIL 0x8004020BL + + +/*--- DINPUT Mapper Definitions: New for Dx8 ---*/ + + +/*--- Keyboard + Physical Keyboard Device ---*/ + +#define DIKEYBOARD_ESCAPE 0x81000401 +#define DIKEYBOARD_1 0x81000402 +#define DIKEYBOARD_2 0x81000403 +#define DIKEYBOARD_3 0x81000404 +#define DIKEYBOARD_4 0x81000405 +#define DIKEYBOARD_5 0x81000406 +#define DIKEYBOARD_6 0x81000407 +#define DIKEYBOARD_7 0x81000408 +#define DIKEYBOARD_8 0x81000409 +#define DIKEYBOARD_9 0x8100040A +#define DIKEYBOARD_0 0x8100040B +#define DIKEYBOARD_MINUS 0x8100040C /* - on main keyboard */ +#define DIKEYBOARD_EQUALS 0x8100040D +#define DIKEYBOARD_BACK 0x8100040E /* backspace */ +#define DIKEYBOARD_TAB 0x8100040F +#define DIKEYBOARD_Q 0x81000410 +#define DIKEYBOARD_W 0x81000411 +#define DIKEYBOARD_E 0x81000412 +#define DIKEYBOARD_R 0x81000413 +#define DIKEYBOARD_T 0x81000414 +#define DIKEYBOARD_Y 0x81000415 +#define DIKEYBOARD_U 0x81000416 +#define DIKEYBOARD_I 0x81000417 +#define DIKEYBOARD_O 0x81000418 +#define DIKEYBOARD_P 0x81000419 +#define DIKEYBOARD_LBRACKET 0x8100041A +#define DIKEYBOARD_RBRACKET 0x8100041B +#define DIKEYBOARD_RETURN 0x8100041C /* Enter on main keyboard */ +#define DIKEYBOARD_LCONTROL 0x8100041D +#define DIKEYBOARD_A 0x8100041E +#define DIKEYBOARD_S 0x8100041F +#define DIKEYBOARD_D 0x81000420 +#define DIKEYBOARD_F 0x81000421 +#define DIKEYBOARD_G 0x81000422 +#define DIKEYBOARD_H 0x81000423 +#define DIKEYBOARD_J 0x81000424 +#define DIKEYBOARD_K 0x81000425 +#define DIKEYBOARD_L 0x81000426 +#define DIKEYBOARD_SEMICOLON 0x81000427 +#define DIKEYBOARD_APOSTROPHE 0x81000428 +#define DIKEYBOARD_GRAVE 0x81000429 /* accent grave */ +#define DIKEYBOARD_LSHIFT 0x8100042A +#define DIKEYBOARD_BACKSLASH 0x8100042B +#define DIKEYBOARD_Z 0x8100042C +#define DIKEYBOARD_X 0x8100042D +#define DIKEYBOARD_C 0x8100042E +#define DIKEYBOARD_V 0x8100042F +#define DIKEYBOARD_B 0x81000430 +#define DIKEYBOARD_N 0x81000431 +#define DIKEYBOARD_M 0x81000432 +#define DIKEYBOARD_COMMA 0x81000433 +#define DIKEYBOARD_PERIOD 0x81000434 /* . on main keyboard */ +#define DIKEYBOARD_SLASH 0x81000435 /* / on main keyboard */ +#define DIKEYBOARD_RSHIFT 0x81000436 +#define DIKEYBOARD_MULTIPLY 0x81000437 /* * on numeric keypad */ +#define DIKEYBOARD_LMENU 0x81000438 /* left Alt */ +#define DIKEYBOARD_SPACE 0x81000439 +#define DIKEYBOARD_CAPITAL 0x8100043A +#define DIKEYBOARD_F1 0x8100043B +#define DIKEYBOARD_F2 0x8100043C +#define DIKEYBOARD_F3 0x8100043D +#define DIKEYBOARD_F4 0x8100043E +#define DIKEYBOARD_F5 0x8100043F +#define DIKEYBOARD_F6 0x81000440 +#define DIKEYBOARD_F7 0x81000441 +#define DIKEYBOARD_F8 0x81000442 +#define DIKEYBOARD_F9 0x81000443 +#define DIKEYBOARD_F10 0x81000444 +#define DIKEYBOARD_NUMLOCK 0x81000445 +#define DIKEYBOARD_SCROLL 0x81000446 /* Scroll Lock */ +#define DIKEYBOARD_NUMPAD7 0x81000447 +#define DIKEYBOARD_NUMPAD8 0x81000448 +#define DIKEYBOARD_NUMPAD9 0x81000449 +#define DIKEYBOARD_SUBTRACT 0x8100044A /* - on numeric keypad */ +#define DIKEYBOARD_NUMPAD4 0x8100044B +#define DIKEYBOARD_NUMPAD5 0x8100044C +#define DIKEYBOARD_NUMPAD6 0x8100044D +#define DIKEYBOARD_ADD 0x8100044E /* + on numeric keypad */ +#define DIKEYBOARD_NUMPAD1 0x8100044F +#define DIKEYBOARD_NUMPAD2 0x81000450 +#define DIKEYBOARD_NUMPAD3 0x81000451 +#define DIKEYBOARD_NUMPAD0 0x81000452 +#define DIKEYBOARD_DECIMAL 0x81000453 /* . on numeric keypad */ +#define DIKEYBOARD_OEM_102 0x81000456 /* <> or \| on RT 102-key keyboard (Non-U.S.) */ +#define DIKEYBOARD_F11 0x81000457 +#define DIKEYBOARD_F12 0x81000458 +#define DIKEYBOARD_F13 0x81000464 /* (NEC PC98) */ +#define DIKEYBOARD_F14 0x81000465 /* (NEC PC98) */ +#define DIKEYBOARD_F15 0x81000466 /* (NEC PC98) */ +#define DIKEYBOARD_KANA 0x81000470 /* (Japanese keyboard) */ +#define DIKEYBOARD_ABNT_C1 0x81000473 /* /? on Brazilian keyboard */ +#define DIKEYBOARD_CONVERT 0x81000479 /* (Japanese keyboard) */ +#define DIKEYBOARD_NOCONVERT 0x8100047B /* (Japanese keyboard) */ +#define DIKEYBOARD_YEN 0x8100047D /* (Japanese keyboard) */ +#define DIKEYBOARD_ABNT_C2 0x8100047E /* Numpad . on Brazilian keyboard */ +#define DIKEYBOARD_NUMPADEQUALS 0x8100048D /* = on numeric keypad (NEC PC98) */ +#define DIKEYBOARD_PREVTRACK 0x81000490 /* Previous Track (DIK_CIRCUMFLEX on Japanese keyboard) */ +#define DIKEYBOARD_AT 0x81000491 /* (NEC PC98) */ +#define DIKEYBOARD_COLON 0x81000492 /* (NEC PC98) */ +#define DIKEYBOARD_UNDERLINE 0x81000493 /* (NEC PC98) */ +#define DIKEYBOARD_KANJI 0x81000494 /* (Japanese keyboard) */ +#define DIKEYBOARD_STOP 0x81000495 /* (NEC PC98) */ +#define DIKEYBOARD_AX 0x81000496 /* (Japan AX) */ +#define DIKEYBOARD_UNLABELED 0x81000497 /* (J3100) */ +#define DIKEYBOARD_NEXTTRACK 0x81000499 /* Next Track */ +#define DIKEYBOARD_NUMPADENTER 0x8100049C /* Enter on numeric keypad */ +#define DIKEYBOARD_RCONTROL 0x8100049D +#define DIKEYBOARD_MUTE 0x810004A0 /* Mute */ +#define DIKEYBOARD_CALCULATOR 0x810004A1 /* Calculator */ +#define DIKEYBOARD_PLAYPAUSE 0x810004A2 /* Play / Pause */ +#define DIKEYBOARD_MEDIASTOP 0x810004A4 /* Media Stop */ +#define DIKEYBOARD_VOLUMEDOWN 0x810004AE /* Volume - */ +#define DIKEYBOARD_VOLUMEUP 0x810004B0 /* Volume + */ +#define DIKEYBOARD_WEBHOME 0x810004B2 /* Web home */ +#define DIKEYBOARD_NUMPADCOMMA 0x810004B3 /* , on numeric keypad (NEC PC98) */ +#define DIKEYBOARD_DIVIDE 0x810004B5 /* / on numeric keypad */ +#define DIKEYBOARD_SYSRQ 0x810004B7 +#define DIKEYBOARD_RMENU 0x810004B8 /* right Alt */ +#define DIKEYBOARD_PAUSE 0x810004C5 /* Pause */ +#define DIKEYBOARD_HOME 0x810004C7 /* Home on arrow keypad */ +#define DIKEYBOARD_UP 0x810004C8 /* UpArrow on arrow keypad */ +#define DIKEYBOARD_PRIOR 0x810004C9 /* PgUp on arrow keypad */ +#define DIKEYBOARD_LEFT 0x810004CB /* LeftArrow on arrow keypad */ +#define DIKEYBOARD_RIGHT 0x810004CD /* RightArrow on arrow keypad */ +#define DIKEYBOARD_END 0x810004CF /* End on arrow keypad */ +#define DIKEYBOARD_DOWN 0x810004D0 /* DownArrow on arrow keypad */ +#define DIKEYBOARD_NEXT 0x810004D1 /* PgDn on arrow keypad */ +#define DIKEYBOARD_INSERT 0x810004D2 /* Insert on arrow keypad */ +#define DIKEYBOARD_DELETE 0x810004D3 /* Delete on arrow keypad */ +#define DIKEYBOARD_LWIN 0x810004DB /* Left Windows key */ +#define DIKEYBOARD_RWIN 0x810004DC /* Right Windows key */ +#define DIKEYBOARD_APPS 0x810004DD /* AppMenu key */ +#define DIKEYBOARD_POWER 0x810004DE /* System Power */ +#define DIKEYBOARD_SLEEP 0x810004DF /* System Sleep */ +#define DIKEYBOARD_WAKE 0x810004E3 /* System Wake */ +#define DIKEYBOARD_WEBSEARCH 0x810004E5 /* Web Search */ +#define DIKEYBOARD_WEBFAVORITES 0x810004E6 /* Web Favorites */ +#define DIKEYBOARD_WEBREFRESH 0x810004E7 /* Web Refresh */ +#define DIKEYBOARD_WEBSTOP 0x810004E8 /* Web Stop */ +#define DIKEYBOARD_WEBFORWARD 0x810004E9 /* Web Forward */ +#define DIKEYBOARD_WEBBACK 0x810004EA /* Web Back */ +#define DIKEYBOARD_MYCOMPUTER 0x810004EB /* My Computer */ +#define DIKEYBOARD_MAIL 0x810004EC /* Mail */ +#define DIKEYBOARD_MEDIASELECT 0x810004ED /* Media Select */ + + +/*--- MOUSE + Physical Mouse Device ---*/ + +#define DIMOUSE_XAXISAB (0x82000200 |DIMOFS_X ) /* X Axis-absolute: Some mice natively report absolute coordinates */ +#define DIMOUSE_YAXISAB (0x82000200 |DIMOFS_Y ) /* Y Axis-absolute: Some mice natively report absolute coordinates */ +#define DIMOUSE_XAXIS (0x82000300 |DIMOFS_X ) /* X Axis */ +#define DIMOUSE_YAXIS (0x82000300 |DIMOFS_Y ) /* Y Axis */ +#define DIMOUSE_WHEEL (0x82000300 |DIMOFS_Z ) /* Z Axis */ +#define DIMOUSE_BUTTON0 (0x82000400 |DIMOFS_BUTTON0) /* Button 0 */ +#define DIMOUSE_BUTTON1 (0x82000400 |DIMOFS_BUTTON1) /* Button 1 */ +#define DIMOUSE_BUTTON2 (0x82000400 |DIMOFS_BUTTON2) /* Button 2 */ +#define DIMOUSE_BUTTON3 (0x82000400 |DIMOFS_BUTTON3) /* Button 3 */ +#define DIMOUSE_BUTTON4 (0x82000400 |DIMOFS_BUTTON4) /* Button 4 */ +#define DIMOUSE_BUTTON5 (0x82000400 |DIMOFS_BUTTON5) /* Button 5 */ +#define DIMOUSE_BUTTON6 (0x82000400 |DIMOFS_BUTTON6) /* Button 6 */ +#define DIMOUSE_BUTTON7 (0x82000400 |DIMOFS_BUTTON7) /* Button 7 */ + + +/*--- VOICE + Physical Dplay Voice Device ---*/ + +#define DIVOICE_CHANNEL1 0x83000401 +#define DIVOICE_CHANNEL2 0x83000402 +#define DIVOICE_CHANNEL3 0x83000403 +#define DIVOICE_CHANNEL4 0x83000404 +#define DIVOICE_CHANNEL5 0x83000405 +#define DIVOICE_CHANNEL6 0x83000406 +#define DIVOICE_CHANNEL7 0x83000407 +#define DIVOICE_CHANNEL8 0x83000408 +#define DIVOICE_TEAM 0x83000409 +#define DIVOICE_ALL 0x8300040A +#define DIVOICE_RECORDMUTE 0x8300040B +#define DIVOICE_PLAYBACKMUTE 0x8300040C +#define DIVOICE_TRANSMIT 0x8300040D + +#define DIVOICE_VOICECOMMAND 0x83000410 + + +/*--- Driving Simulator - Racing + Vehicle control is primary objective ---*/ +#define DIVIRTUAL_DRIVING_RACE 0x01000000 +#define DIAXIS_DRIVINGR_STEER 0x01008A01 /* Steering */ +#define DIAXIS_DRIVINGR_ACCELERATE 0x01039202 /* Accelerate */ +#define DIAXIS_DRIVINGR_BRAKE 0x01041203 /* Brake-Axis */ +#define DIBUTTON_DRIVINGR_SHIFTUP 0x01000C01 /* Shift to next higher gear */ +#define DIBUTTON_DRIVINGR_SHIFTDOWN 0x01000C02 /* Shift to next lower gear */ +#define DIBUTTON_DRIVINGR_VIEW 0x01001C03 /* Cycle through view options */ +#define DIBUTTON_DRIVINGR_MENU 0x010004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIAXIS_DRIVINGR_ACCEL_AND_BRAKE 0x01014A04 /* Some devices combine accelerate and brake in a single axis */ +#define DIHATSWITCH_DRIVINGR_GLANCE 0x01004601 /* Look around */ +#define DIBUTTON_DRIVINGR_BRAKE 0x01004C04 /* Brake-button */ +#define DIBUTTON_DRIVINGR_DASHBOARD 0x01004405 /* Select next dashboard option */ +#define DIBUTTON_DRIVINGR_AIDS 0x01004406 /* Driver correction aids */ +#define DIBUTTON_DRIVINGR_MAP 0x01004407 /* Display Driving Map */ +#define DIBUTTON_DRIVINGR_BOOST 0x01004408 /* Turbo Boost */ +#define DIBUTTON_DRIVINGR_PIT 0x01004409 /* Pit stop notification */ +#define DIBUTTON_DRIVINGR_ACCELERATE_LINK 0x0103D4E0 /* Fallback Accelerate button */ +#define DIBUTTON_DRIVINGR_STEER_LEFT_LINK 0x0100CCE4 /* Fallback Steer Left button */ +#define DIBUTTON_DRIVINGR_STEER_RIGHT_LINK 0x0100CCEC /* Fallback Steer Right button */ +#define DIBUTTON_DRIVINGR_GLANCE_LEFT_LINK 0x0107C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_DRIVINGR_GLANCE_RIGHT_LINK 0x0107C4EC /* Fallback Glance Right button */ +#define DIBUTTON_DRIVINGR_DEVICE 0x010044FE /* Show input device and controls */ +#define DIBUTTON_DRIVINGR_PAUSE 0x010044FC /* Start / Pause / Restart game */ + +/*--- Driving Simulator - Combat + Combat from within a vehicle is primary objective ---*/ +#define DIVIRTUAL_DRIVING_COMBAT 0x02000000 +#define DIAXIS_DRIVINGC_STEER 0x02008A01 /* Steering */ +#define DIAXIS_DRIVINGC_ACCELERATE 0x02039202 /* Accelerate */ +#define DIAXIS_DRIVINGC_BRAKE 0x02041203 /* Brake-axis */ +#define DIBUTTON_DRIVINGC_FIRE 0x02000C01 /* Fire */ +#define DIBUTTON_DRIVINGC_WEAPONS 0x02000C02 /* Select next weapon */ +#define DIBUTTON_DRIVINGC_TARGET 0x02000C03 /* Select next available target */ +#define DIBUTTON_DRIVINGC_MENU 0x020004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIAXIS_DRIVINGC_ACCEL_AND_BRAKE 0x02014A04 /* Some devices combine accelerate and brake in a single axis */ +#define DIHATSWITCH_DRIVINGC_GLANCE 0x02004601 /* Look around */ +#define DIBUTTON_DRIVINGC_SHIFTUP 0x02004C04 /* Shift to next higher gear */ +#define DIBUTTON_DRIVINGC_SHIFTDOWN 0x02004C05 /* Shift to next lower gear */ +#define DIBUTTON_DRIVINGC_DASHBOARD 0x02004406 /* Select next dashboard option */ +#define DIBUTTON_DRIVINGC_AIDS 0x02004407 /* Driver correction aids */ +#define DIBUTTON_DRIVINGC_BRAKE 0x02004C08 /* Brake-button */ +#define DIBUTTON_DRIVINGC_FIRESECONDARY 0x02004C09 /* Alternative fire button */ +#define DIBUTTON_DRIVINGC_ACCELERATE_LINK 0x0203D4E0 /* Fallback Accelerate button */ +#define DIBUTTON_DRIVINGC_STEER_LEFT_LINK 0x0200CCE4 /* Fallback Steer Left button */ +#define DIBUTTON_DRIVINGC_STEER_RIGHT_LINK 0x0200CCEC /* Fallback Steer Right button */ +#define DIBUTTON_DRIVINGC_GLANCE_LEFT_LINK 0x0207C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_DRIVINGC_GLANCE_RIGHT_LINK 0x0207C4EC /* Fallback Glance Right button */ +#define DIBUTTON_DRIVINGC_DEVICE 0x020044FE /* Show input device and controls */ +#define DIBUTTON_DRIVINGC_PAUSE 0x020044FC /* Start / Pause / Restart game */ + +/*--- Driving Simulator - Tank + Combat from withing a tank is primary objective ---*/ +#define DIVIRTUAL_DRIVING_TANK 0x03000000 +#define DIAXIS_DRIVINGT_STEER 0x03008A01 /* Turn tank left / right */ +#define DIAXIS_DRIVINGT_BARREL 0x03010202 /* Raise / lower barrel */ +#define DIAXIS_DRIVINGT_ACCELERATE 0x03039203 /* Accelerate */ +#define DIAXIS_DRIVINGT_ROTATE 0x03020204 /* Turn barrel left / right */ +#define DIBUTTON_DRIVINGT_FIRE 0x03000C01 /* Fire */ +#define DIBUTTON_DRIVINGT_WEAPONS 0x03000C02 /* Select next weapon */ +#define DIBUTTON_DRIVINGT_TARGET 0x03000C03 /* Selects next available target */ +#define DIBUTTON_DRIVINGT_MENU 0x030004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_DRIVINGT_GLANCE 0x03004601 /* Look around */ +#define DIAXIS_DRIVINGT_BRAKE 0x03045205 /* Brake-axis */ +#define DIAXIS_DRIVINGT_ACCEL_AND_BRAKE 0x03014A06 /* Some devices combine accelerate and brake in a single axis */ +#define DIBUTTON_DRIVINGT_VIEW 0x03005C04 /* Cycle through view options */ +#define DIBUTTON_DRIVINGT_DASHBOARD 0x03005C05 /* Select next dashboard option */ +#define DIBUTTON_DRIVINGT_BRAKE 0x03004C06 /* Brake-button */ +#define DIBUTTON_DRIVINGT_FIRESECONDARY 0x03004C07 /* Alternative fire button */ +#define DIBUTTON_DRIVINGT_ACCELERATE_LINK 0x0303D4E0 /* Fallback Accelerate button */ +#define DIBUTTON_DRIVINGT_STEER_LEFT_LINK 0x0300CCE4 /* Fallback Steer Left button */ +#define DIBUTTON_DRIVINGT_STEER_RIGHT_LINK 0x0300CCEC /* Fallback Steer Right button */ +#define DIBUTTON_DRIVINGT_BARREL_UP_LINK 0x030144E0 /* Fallback Barrel up button */ +#define DIBUTTON_DRIVINGT_BARREL_DOWN_LINK 0x030144E8 /* Fallback Barrel down button */ +#define DIBUTTON_DRIVINGT_ROTATE_LEFT_LINK 0x030244E4 /* Fallback Rotate left button */ +#define DIBUTTON_DRIVINGT_ROTATE_RIGHT_LINK 0x030244EC /* Fallback Rotate right button */ +#define DIBUTTON_DRIVINGT_GLANCE_LEFT_LINK 0x0307C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_DRIVINGT_GLANCE_RIGHT_LINK 0x0307C4EC /* Fallback Glance Right button */ +#define DIBUTTON_DRIVINGT_DEVICE 0x030044FE /* Show input device and controls */ +#define DIBUTTON_DRIVINGT_PAUSE 0x030044FC /* Start / Pause / Restart game */ + +/*--- Flight Simulator - Civilian + Plane control is the primary objective ---*/ +#define DIVIRTUAL_FLYING_CIVILIAN 0x04000000 +#define DIAXIS_FLYINGC_BANK 0x04008A01 /* Roll ship left / right */ +#define DIAXIS_FLYINGC_PITCH 0x04010A02 /* Nose up / down */ +#define DIAXIS_FLYINGC_THROTTLE 0x04039203 /* Throttle */ +#define DIBUTTON_FLYINGC_VIEW 0x04002401 /* Cycle through view options */ +#define DIBUTTON_FLYINGC_DISPLAY 0x04002402 /* Select next dashboard / heads up display option */ +#define DIBUTTON_FLYINGC_GEAR 0x04002C03 /* Gear up / down */ +#define DIBUTTON_FLYINGC_MENU 0x040004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FLYINGC_GLANCE 0x04004601 /* Look around */ +#define DIAXIS_FLYINGC_BRAKE 0x04046A04 /* Apply Brake */ +#define DIAXIS_FLYINGC_RUDDER 0x04025205 /* Yaw ship left/right */ +#define DIAXIS_FLYINGC_FLAPS 0x04055A06 /* Flaps */ +#define DIBUTTON_FLYINGC_FLAPSUP 0x04006404 /* Increment stepping up until fully retracted */ +#define DIBUTTON_FLYINGC_FLAPSDOWN 0x04006405 /* Decrement stepping down until fully extended */ +#define DIBUTTON_FLYINGC_BRAKE_LINK 0x04046CE0 /* Fallback brake button */ +#define DIBUTTON_FLYINGC_FASTER_LINK 0x0403D4E0 /* Fallback throttle up button */ +#define DIBUTTON_FLYINGC_SLOWER_LINK 0x0403D4E8 /* Fallback throttle down button */ +#define DIBUTTON_FLYINGC_GLANCE_LEFT_LINK 0x0407C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_FLYINGC_GLANCE_RIGHT_LINK 0x0407C4EC /* Fallback Glance Right button */ +#define DIBUTTON_FLYINGC_GLANCE_UP_LINK 0x0407C4E0 /* Fallback Glance Up button */ +#define DIBUTTON_FLYINGC_GLANCE_DOWN_LINK 0x0407C4E8 /* Fallback Glance Down button */ +#define DIBUTTON_FLYINGC_DEVICE 0x040044FE /* Show input device and controls */ +#define DIBUTTON_FLYINGC_PAUSE 0x040044FC /* Start / Pause / Restart game */ + +/*--- Flight Simulator - Military + Aerial combat is the primary objective ---*/ +#define DIVIRTUAL_FLYING_MILITARY 0x05000000 +#define DIAXIS_FLYINGM_BANK 0x05008A01 /* Bank - Roll ship left / right */ +#define DIAXIS_FLYINGM_PITCH 0x05010A02 /* Pitch - Nose up / down */ +#define DIAXIS_FLYINGM_THROTTLE 0x05039203 /* Throttle - faster / slower */ +#define DIBUTTON_FLYINGM_FIRE 0x05000C01 /* Fire */ +#define DIBUTTON_FLYINGM_WEAPONS 0x05000C02 /* Select next weapon */ +#define DIBUTTON_FLYINGM_TARGET 0x05000C03 /* Selects next available target */ +#define DIBUTTON_FLYINGM_MENU 0x050004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FLYINGM_GLANCE 0x05004601 /* Look around */ +#define DIBUTTON_FLYINGM_COUNTER 0x05005C04 /* Activate counter measures */ +#define DIAXIS_FLYINGM_RUDDER 0x05024A04 /* Rudder - Yaw ship left/right */ +#define DIAXIS_FLYINGM_BRAKE 0x05046205 /* Brake-axis */ +#define DIBUTTON_FLYINGM_VIEW 0x05006405 /* Cycle through view options */ +#define DIBUTTON_FLYINGM_DISPLAY 0x05006406 /* Select next dashboard option */ +#define DIAXIS_FLYINGM_FLAPS 0x05055206 /* Flaps */ +#define DIBUTTON_FLYINGM_FLAPSUP 0x05005407 /* Increment stepping up until fully retracted */ +#define DIBUTTON_FLYINGM_FLAPSDOWN 0x05005408 /* Decrement stepping down until fully extended */ +#define DIBUTTON_FLYINGM_FIRESECONDARY 0x05004C09 /* Alternative fire button */ +#define DIBUTTON_FLYINGM_GEAR 0x0500640A /* Gear up / down */ +#define DIBUTTON_FLYINGM_BRAKE_LINK 0x050464E0 /* Fallback brake button */ +#define DIBUTTON_FLYINGM_FASTER_LINK 0x0503D4E0 /* Fallback throttle up button */ +#define DIBUTTON_FLYINGM_SLOWER_LINK 0x0503D4E8 /* Fallback throttle down button */ +#define DIBUTTON_FLYINGM_GLANCE_LEFT_LINK 0x0507C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_FLYINGM_GLANCE_RIGHT_LINK 0x0507C4EC /* Fallback Glance Right button */ +#define DIBUTTON_FLYINGM_GLANCE_UP_LINK 0x0507C4E0 /* Fallback Glance Up button */ +#define DIBUTTON_FLYINGM_GLANCE_DOWN_LINK 0x0507C4E8 /* Fallback Glance Down button */ +#define DIBUTTON_FLYINGM_DEVICE 0x050044FE /* Show input device and controls */ +#define DIBUTTON_FLYINGM_PAUSE 0x050044FC /* Start / Pause / Restart game */ + +/*--- Flight Simulator - Combat Helicopter + Combat from helicopter is primary objective ---*/ +#define DIVIRTUAL_FLYING_HELICOPTER 0x06000000 +#define DIAXIS_FLYINGH_BANK 0x06008A01 /* Bank - Roll ship left / right */ +#define DIAXIS_FLYINGH_PITCH 0x06010A02 /* Pitch - Nose up / down */ +#define DIAXIS_FLYINGH_COLLECTIVE 0x06018A03 /* Collective - Blade pitch/power */ +#define DIBUTTON_FLYINGH_FIRE 0x06001401 /* Fire */ +#define DIBUTTON_FLYINGH_WEAPONS 0x06001402 /* Select next weapon */ +#define DIBUTTON_FLYINGH_TARGET 0x06001403 /* Selects next available target */ +#define DIBUTTON_FLYINGH_MENU 0x060004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FLYINGH_GLANCE 0x06004601 /* Look around */ +#define DIAXIS_FLYINGH_TORQUE 0x06025A04 /* Torque - Rotate ship around left / right axis */ +#define DIAXIS_FLYINGH_THROTTLE 0x0603DA05 /* Throttle */ +#define DIBUTTON_FLYINGH_COUNTER 0x06005404 /* Activate counter measures */ +#define DIBUTTON_FLYINGH_VIEW 0x06006405 /* Cycle through view options */ +#define DIBUTTON_FLYINGH_GEAR 0x06006406 /* Gear up / down */ +#define DIBUTTON_FLYINGH_FIRESECONDARY 0x06004C07 /* Alternative fire button */ +#define DIBUTTON_FLYINGH_FASTER_LINK 0x0603DCE0 /* Fallback throttle up button */ +#define DIBUTTON_FLYINGH_SLOWER_LINK 0x0603DCE8 /* Fallback throttle down button */ +#define DIBUTTON_FLYINGH_GLANCE_LEFT_LINK 0x0607C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_FLYINGH_GLANCE_RIGHT_LINK 0x0607C4EC /* Fallback Glance Right button */ +#define DIBUTTON_FLYINGH_GLANCE_UP_LINK 0x0607C4E0 /* Fallback Glance Up button */ +#define DIBUTTON_FLYINGH_GLANCE_DOWN_LINK 0x0607C4E8 /* Fallback Glance Down button */ +#define DIBUTTON_FLYINGH_DEVICE 0x060044FE /* Show input device and controls */ +#define DIBUTTON_FLYINGH_PAUSE 0x060044FC /* Start / Pause / Restart game */ + +/*--- Space Simulator - Combat + Space Simulator with weapons ---*/ +#define DIVIRTUAL_SPACESIM 0x07000000 +#define DIAXIS_SPACESIM_LATERAL 0x07008201 /* Move ship left / right */ +#define DIAXIS_SPACESIM_MOVE 0x07010202 /* Move ship forward/backward */ +#define DIAXIS_SPACESIM_THROTTLE 0x07038203 /* Throttle - Engine speed */ +#define DIBUTTON_SPACESIM_FIRE 0x07000401 /* Fire */ +#define DIBUTTON_SPACESIM_WEAPONS 0x07000402 /* Select next weapon */ +#define DIBUTTON_SPACESIM_TARGET 0x07000403 /* Selects next available target */ +#define DIBUTTON_SPACESIM_MENU 0x070004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_SPACESIM_GLANCE 0x07004601 /* Look around */ +#define DIAXIS_SPACESIM_CLIMB 0x0701C204 /* Climb - Pitch ship up/down */ +#define DIAXIS_SPACESIM_ROTATE 0x07024205 /* Rotate - Turn ship left/right */ +#define DIBUTTON_SPACESIM_VIEW 0x07004404 /* Cycle through view options */ +#define DIBUTTON_SPACESIM_DISPLAY 0x07004405 /* Select next dashboard / heads up display option */ +#define DIBUTTON_SPACESIM_RAISE 0x07004406 /* Raise ship while maintaining current pitch */ +#define DIBUTTON_SPACESIM_LOWER 0x07004407 /* Lower ship while maintaining current pitch */ +#define DIBUTTON_SPACESIM_GEAR 0x07004408 /* Gear up / down */ +#define DIBUTTON_SPACESIM_FIRESECONDARY 0x07004409 /* Alternative fire button */ +#define DIBUTTON_SPACESIM_LEFT_LINK 0x0700C4E4 /* Fallback move left button */ +#define DIBUTTON_SPACESIM_RIGHT_LINK 0x0700C4EC /* Fallback move right button */ +#define DIBUTTON_SPACESIM_FORWARD_LINK 0x070144E0 /* Fallback move forward button */ +#define DIBUTTON_SPACESIM_BACKWARD_LINK 0x070144E8 /* Fallback move backwards button */ +#define DIBUTTON_SPACESIM_FASTER_LINK 0x0703C4E0 /* Fallback throttle up button */ +#define DIBUTTON_SPACESIM_SLOWER_LINK 0x0703C4E8 /* Fallback throttle down button */ +#define DIBUTTON_SPACESIM_TURN_LEFT_LINK 0x070244E4 /* Fallback turn left button */ +#define DIBUTTON_SPACESIM_TURN_RIGHT_LINK 0x070244EC /* Fallback turn right button */ +#define DIBUTTON_SPACESIM_GLANCE_LEFT_LINK 0x0707C4E4 /* Fallback Glance Left button */ +#define DIBUTTON_SPACESIM_GLANCE_RIGHT_LINK 0x0707C4EC /* Fallback Glance Right button */ +#define DIBUTTON_SPACESIM_GLANCE_UP_LINK 0x0707C4E0 /* Fallback Glance Up button */ +#define DIBUTTON_SPACESIM_GLANCE_DOWN_LINK 0x0707C4E8 /* Fallback Glance Down button */ +#define DIBUTTON_SPACESIM_DEVICE 0x070044FE /* Show input device and controls */ +#define DIBUTTON_SPACESIM_PAUSE 0x070044FC /* Start / Pause / Restart game */ + +/*--- Fighting - First Person + Hand to Hand combat is primary objective ---*/ +#define DIVIRTUAL_FIGHTING_HAND2HAND 0x08000000 +#define DIAXIS_FIGHTINGH_LATERAL 0x08008201 /* Sidestep left/right */ +#define DIAXIS_FIGHTINGH_MOVE 0x08010202 /* Move forward/backward */ +#define DIBUTTON_FIGHTINGH_PUNCH 0x08000401 /* Punch */ +#define DIBUTTON_FIGHTINGH_KICK 0x08000402 /* Kick */ +#define DIBUTTON_FIGHTINGH_BLOCK 0x08000403 /* Block */ +#define DIBUTTON_FIGHTINGH_CROUCH 0x08000404 /* Crouch */ +#define DIBUTTON_FIGHTINGH_JUMP 0x08000405 /* Jump */ +#define DIBUTTON_FIGHTINGH_SPECIAL1 0x08000406 /* Apply first special move */ +#define DIBUTTON_FIGHTINGH_SPECIAL2 0x08000407 /* Apply second special move */ +#define DIBUTTON_FIGHTINGH_MENU 0x080004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FIGHTINGH_SELECT 0x08004408 /* Select special move */ +#define DIHATSWITCH_FIGHTINGH_SLIDE 0x08004601 /* Look around */ +#define DIBUTTON_FIGHTINGH_DISPLAY 0x08004409 /* Shows next on-screen display option */ +#define DIAXIS_FIGHTINGH_ROTATE 0x08024203 /* Rotate - Turn body left/right */ +#define DIBUTTON_FIGHTINGH_DODGE 0x0800440A /* Dodge */ +#define DIBUTTON_FIGHTINGH_LEFT_LINK 0x0800C4E4 /* Fallback left sidestep button */ +#define DIBUTTON_FIGHTINGH_RIGHT_LINK 0x0800C4EC /* Fallback right sidestep button */ +#define DIBUTTON_FIGHTINGH_FORWARD_LINK 0x080144E0 /* Fallback forward button */ +#define DIBUTTON_FIGHTINGH_BACKWARD_LINK 0x080144E8 /* Fallback backward button */ +#define DIBUTTON_FIGHTINGH_DEVICE 0x080044FE /* Show input device and controls */ +#define DIBUTTON_FIGHTINGH_PAUSE 0x080044FC /* Start / Pause / Restart game */ + +/*--- Fighting - First Person Shooting + Navigation and combat are primary objectives ---*/ +#define DIVIRTUAL_FIGHTING_FPS 0x09000000 +#define DIAXIS_FPS_ROTATE 0x09008201 /* Rotate character left/right */ +#define DIAXIS_FPS_MOVE 0x09010202 /* Move forward/backward */ +#define DIBUTTON_FPS_FIRE 0x09000401 /* Fire */ +#define DIBUTTON_FPS_WEAPONS 0x09000402 /* Select next weapon */ +#define DIBUTTON_FPS_APPLY 0x09000403 /* Use item */ +#define DIBUTTON_FPS_SELECT 0x09000404 /* Select next inventory item */ +#define DIBUTTON_FPS_CROUCH 0x09000405 /* Crouch/ climb down/ swim down */ +#define DIBUTTON_FPS_JUMP 0x09000406 /* Jump/ climb up/ swim up */ +#define DIAXIS_FPS_LOOKUPDOWN 0x09018203 /* Look up / down */ +#define DIBUTTON_FPS_STRAFE 0x09000407 /* Enable strafing while active */ +#define DIBUTTON_FPS_MENU 0x090004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FPS_GLANCE 0x09004601 /* Look around */ +#define DIBUTTON_FPS_DISPLAY 0x09004408 /* Shows next on-screen display option/ map */ +#define DIAXIS_FPS_SIDESTEP 0x09024204 /* Sidestep */ +#define DIBUTTON_FPS_DODGE 0x09004409 /* Dodge */ +#define DIBUTTON_FPS_GLANCEL 0x0900440A /* Glance Left */ +#define DIBUTTON_FPS_GLANCER 0x0900440B /* Glance Right */ +#define DIBUTTON_FPS_FIRESECONDARY 0x0900440C /* Alternative fire button */ +#define DIBUTTON_FPS_ROTATE_LEFT_LINK 0x0900C4E4 /* Fallback rotate left button */ +#define DIBUTTON_FPS_ROTATE_RIGHT_LINK 0x0900C4EC /* Fallback rotate right button */ +#define DIBUTTON_FPS_FORWARD_LINK 0x090144E0 /* Fallback forward button */ +#define DIBUTTON_FPS_BACKWARD_LINK 0x090144E8 /* Fallback backward button */ +#define DIBUTTON_FPS_GLANCE_UP_LINK 0x0901C4E0 /* Fallback look up button */ +#define DIBUTTON_FPS_GLANCE_DOWN_LINK 0x0901C4E8 /* Fallback look down button */ +#define DIBUTTON_FPS_STEP_LEFT_LINK 0x090244E4 /* Fallback step left button */ +#define DIBUTTON_FPS_STEP_RIGHT_LINK 0x090244EC /* Fallback step right button */ +#define DIBUTTON_FPS_DEVICE 0x090044FE /* Show input device and controls */ +#define DIBUTTON_FPS_PAUSE 0x090044FC /* Start / Pause / Restart game */ + +/*--- Fighting - Third Person action + Perspective of camera is behind the main character ---*/ +#define DIVIRTUAL_FIGHTING_THIRDPERSON 0x0A000000 +#define DIAXIS_TPS_TURN 0x0A020201 /* Turn left/right */ +#define DIAXIS_TPS_MOVE 0x0A010202 /* Move forward/backward */ +#define DIBUTTON_TPS_RUN 0x0A000401 /* Run or walk toggle switch */ +#define DIBUTTON_TPS_ACTION 0x0A000402 /* Action Button */ +#define DIBUTTON_TPS_SELECT 0x0A000403 /* Select next weapon */ +#define DIBUTTON_TPS_USE 0x0A000404 /* Use inventory item currently selected */ +#define DIBUTTON_TPS_JUMP 0x0A000405 /* Character Jumps */ +#define DIBUTTON_TPS_MENU 0x0A0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_TPS_GLANCE 0x0A004601 /* Look around */ +#define DIBUTTON_TPS_VIEW 0x0A004406 /* Select camera view */ +#define DIBUTTON_TPS_STEPLEFT 0x0A004407 /* Character takes a left step */ +#define DIBUTTON_TPS_STEPRIGHT 0x0A004408 /* Character takes a right step */ +#define DIAXIS_TPS_STEP 0x0A00C203 /* Character steps left/right */ +#define DIBUTTON_TPS_DODGE 0x0A004409 /* Character dodges or ducks */ +#define DIBUTTON_TPS_INVENTORY 0x0A00440A /* Cycle through inventory */ +#define DIBUTTON_TPS_TURN_LEFT_LINK 0x0A0244E4 /* Fallback turn left button */ +#define DIBUTTON_TPS_TURN_RIGHT_LINK 0x0A0244EC /* Fallback turn right button */ +#define DIBUTTON_TPS_FORWARD_LINK 0x0A0144E0 /* Fallback forward button */ +#define DIBUTTON_TPS_BACKWARD_LINK 0x0A0144E8 /* Fallback backward button */ +#define DIBUTTON_TPS_GLANCE_UP_LINK 0x0A07C4E0 /* Fallback look up button */ +#define DIBUTTON_TPS_GLANCE_DOWN_LINK 0x0A07C4E8 /* Fallback look down button */ +#define DIBUTTON_TPS_GLANCE_LEFT_LINK 0x0A07C4E4 /* Fallback glance up button */ +#define DIBUTTON_TPS_GLANCE_RIGHT_LINK 0x0A07C4EC /* Fallback glance right button */ +#define DIBUTTON_TPS_DEVICE 0x0A0044FE /* Show input device and controls */ +#define DIBUTTON_TPS_PAUSE 0x0A0044FC /* Start / Pause / Restart game */ + +/*--- Strategy - Role Playing + Navigation and problem solving are primary actions ---*/ +#define DIVIRTUAL_STRATEGY_ROLEPLAYING 0x0B000000 +#define DIAXIS_STRATEGYR_LATERAL 0x0B008201 /* sidestep - left/right */ +#define DIAXIS_STRATEGYR_MOVE 0x0B010202 /* move forward/backward */ +#define DIBUTTON_STRATEGYR_GET 0x0B000401 /* Acquire item */ +#define DIBUTTON_STRATEGYR_APPLY 0x0B000402 /* Use selected item */ +#define DIBUTTON_STRATEGYR_SELECT 0x0B000403 /* Select nextitem */ +#define DIBUTTON_STRATEGYR_ATTACK 0x0B000404 /* Attack */ +#define DIBUTTON_STRATEGYR_CAST 0x0B000405 /* Cast Spell */ +#define DIBUTTON_STRATEGYR_CROUCH 0x0B000406 /* Crouch */ +#define DIBUTTON_STRATEGYR_JUMP 0x0B000407 /* Jump */ +#define DIBUTTON_STRATEGYR_MENU 0x0B0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_STRATEGYR_GLANCE 0x0B004601 /* Look around */ +#define DIBUTTON_STRATEGYR_MAP 0x0B004408 /* Cycle through map options */ +#define DIBUTTON_STRATEGYR_DISPLAY 0x0B004409 /* Shows next on-screen display option */ +#define DIAXIS_STRATEGYR_ROTATE 0x0B024203 /* Turn body left/right */ +#define DIBUTTON_STRATEGYR_LEFT_LINK 0x0B00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_STRATEGYR_RIGHT_LINK 0x0B00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_STRATEGYR_FORWARD_LINK 0x0B0144E0 /* Fallback move forward button */ +#define DIBUTTON_STRATEGYR_BACK_LINK 0x0B0144E8 /* Fallback move backward button */ +#define DIBUTTON_STRATEGYR_ROTATE_LEFT_LINK 0x0B0244E4 /* Fallback turn body left button */ +#define DIBUTTON_STRATEGYR_ROTATE_RIGHT_LINK 0x0B0244EC /* Fallback turn body right button */ +#define DIBUTTON_STRATEGYR_DEVICE 0x0B0044FE /* Show input device and controls */ +#define DIBUTTON_STRATEGYR_PAUSE 0x0B0044FC /* Start / Pause / Restart game */ + +/*--- Strategy - Turn based + Navigation and problem solving are primary actions ---*/ +#define DIVIRTUAL_STRATEGY_TURN 0x0C000000 +#define DIAXIS_STRATEGYT_LATERAL 0x0C008201 /* Sidestep left/right */ +#define DIAXIS_STRATEGYT_MOVE 0x0C010202 /* Move forward/backwards */ +#define DIBUTTON_STRATEGYT_SELECT 0x0C000401 /* Select unit or object */ +#define DIBUTTON_STRATEGYT_INSTRUCT 0x0C000402 /* Cycle through instructions */ +#define DIBUTTON_STRATEGYT_APPLY 0x0C000403 /* Apply selected instruction */ +#define DIBUTTON_STRATEGYT_TEAM 0x0C000404 /* Select next team / cycle through all */ +#define DIBUTTON_STRATEGYT_TURN 0x0C000405 /* Indicate turn over */ +#define DIBUTTON_STRATEGYT_MENU 0x0C0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_STRATEGYT_ZOOM 0x0C004406 /* Zoom - in / out */ +#define DIBUTTON_STRATEGYT_MAP 0x0C004407 /* cycle through map options */ +#define DIBUTTON_STRATEGYT_DISPLAY 0x0C004408 /* shows next on-screen display options */ +#define DIBUTTON_STRATEGYT_LEFT_LINK 0x0C00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_STRATEGYT_RIGHT_LINK 0x0C00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_STRATEGYT_FORWARD_LINK 0x0C0144E0 /* Fallback move forward button */ +#define DIBUTTON_STRATEGYT_BACK_LINK 0x0C0144E8 /* Fallback move back button */ +#define DIBUTTON_STRATEGYT_DEVICE 0x0C0044FE /* Show input device and controls */ +#define DIBUTTON_STRATEGYT_PAUSE 0x0C0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Hunting + Hunting ---*/ +#define DIVIRTUAL_SPORTS_HUNTING 0x0D000000 +#define DIAXIS_HUNTING_LATERAL 0x0D008201 /* sidestep left/right */ +#define DIAXIS_HUNTING_MOVE 0x0D010202 /* move forward/backwards */ +#define DIBUTTON_HUNTING_FIRE 0x0D000401 /* Fire selected weapon */ +#define DIBUTTON_HUNTING_AIM 0x0D000402 /* Select aim/move */ +#define DIBUTTON_HUNTING_WEAPON 0x0D000403 /* Select next weapon */ +#define DIBUTTON_HUNTING_BINOCULAR 0x0D000404 /* Look through Binoculars */ +#define DIBUTTON_HUNTING_CALL 0x0D000405 /* Make animal call */ +#define DIBUTTON_HUNTING_MAP 0x0D000406 /* View Map */ +#define DIBUTTON_HUNTING_SPECIAL 0x0D000407 /* Special game operation */ +#define DIBUTTON_HUNTING_MENU 0x0D0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_HUNTING_GLANCE 0x0D004601 /* Look around */ +#define DIBUTTON_HUNTING_DISPLAY 0x0D004408 /* show next on-screen display option */ +#define DIAXIS_HUNTING_ROTATE 0x0D024203 /* Turn body left/right */ +#define DIBUTTON_HUNTING_CROUCH 0x0D004409 /* Crouch/ Climb / Swim down */ +#define DIBUTTON_HUNTING_JUMP 0x0D00440A /* Jump/ Climb up / Swim up */ +#define DIBUTTON_HUNTING_FIRESECONDARY 0x0D00440B /* Alternative fire button */ +#define DIBUTTON_HUNTING_LEFT_LINK 0x0D00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_HUNTING_RIGHT_LINK 0x0D00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_HUNTING_FORWARD_LINK 0x0D0144E0 /* Fallback move forward button */ +#define DIBUTTON_HUNTING_BACK_LINK 0x0D0144E8 /* Fallback move back button */ +#define DIBUTTON_HUNTING_ROTATE_LEFT_LINK 0x0D0244E4 /* Fallback turn body left button */ +#define DIBUTTON_HUNTING_ROTATE_RIGHT_LINK 0x0D0244EC /* Fallback turn body right button */ +#define DIBUTTON_HUNTING_DEVICE 0x0D0044FE /* Show input device and controls */ +#define DIBUTTON_HUNTING_PAUSE 0x0D0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Fishing + Catching Fish is primary objective ---*/ +#define DIVIRTUAL_SPORTS_FISHING 0x0E000000 +#define DIAXIS_FISHING_LATERAL 0x0E008201 /* sidestep left/right */ +#define DIAXIS_FISHING_MOVE 0x0E010202 /* move forward/backwards */ +#define DIBUTTON_FISHING_CAST 0x0E000401 /* Cast line */ +#define DIBUTTON_FISHING_TYPE 0x0E000402 /* Select cast type */ +#define DIBUTTON_FISHING_BINOCULAR 0x0E000403 /* Look through Binocular */ +#define DIBUTTON_FISHING_BAIT 0x0E000404 /* Select type of Bait */ +#define DIBUTTON_FISHING_MAP 0x0E000405 /* View Map */ +#define DIBUTTON_FISHING_MENU 0x0E0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_FISHING_GLANCE 0x0E004601 /* Look around */ +#define DIBUTTON_FISHING_DISPLAY 0x0E004406 /* Show next on-screen display option */ +#define DIAXIS_FISHING_ROTATE 0x0E024203 /* Turn character left / right */ +#define DIBUTTON_FISHING_CROUCH 0x0E004407 /* Crouch/ Climb / Swim down */ +#define DIBUTTON_FISHING_JUMP 0x0E004408 /* Jump/ Climb up / Swim up */ +#define DIBUTTON_FISHING_LEFT_LINK 0x0E00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_FISHING_RIGHT_LINK 0x0E00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_FISHING_FORWARD_LINK 0x0E0144E0 /* Fallback move forward button */ +#define DIBUTTON_FISHING_BACK_LINK 0x0E0144E8 /* Fallback move back button */ +#define DIBUTTON_FISHING_ROTATE_LEFT_LINK 0x0E0244E4 /* Fallback turn body left button */ +#define DIBUTTON_FISHING_ROTATE_RIGHT_LINK 0x0E0244EC /* Fallback turn body right button */ +#define DIBUTTON_FISHING_DEVICE 0x0E0044FE /* Show input device and controls */ +#define DIBUTTON_FISHING_PAUSE 0x0E0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Baseball - Batting + Batter control is primary objective ---*/ +#define DIVIRTUAL_SPORTS_BASEBALL_BAT 0x0F000000 +#define DIAXIS_BASEBALLB_LATERAL 0x0F008201 /* Aim left / right */ +#define DIAXIS_BASEBALLB_MOVE 0x0F010202 /* Aim up / down */ +#define DIBUTTON_BASEBALLB_SELECT 0x0F000401 /* cycle through swing options */ +#define DIBUTTON_BASEBALLB_NORMAL 0x0F000402 /* normal swing */ +#define DIBUTTON_BASEBALLB_POWER 0x0F000403 /* swing for the fence */ +#define DIBUTTON_BASEBALLB_BUNT 0x0F000404 /* bunt */ +#define DIBUTTON_BASEBALLB_STEAL 0x0F000405 /* Base runner attempts to steal a base */ +#define DIBUTTON_BASEBALLB_BURST 0x0F000406 /* Base runner invokes burst of speed */ +#define DIBUTTON_BASEBALLB_SLIDE 0x0F000407 /* Base runner slides into base */ +#define DIBUTTON_BASEBALLB_CONTACT 0x0F000408 /* Contact swing */ +#define DIBUTTON_BASEBALLB_MENU 0x0F0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_BASEBALLB_NOSTEAL 0x0F004409 /* Base runner goes back to a base */ +#define DIBUTTON_BASEBALLB_BOX 0x0F00440A /* Enter or exit batting box */ +#define DIBUTTON_BASEBALLB_LEFT_LINK 0x0F00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_BASEBALLB_RIGHT_LINK 0x0F00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_BASEBALLB_FORWARD_LINK 0x0F0144E0 /* Fallback move forward button */ +#define DIBUTTON_BASEBALLB_BACK_LINK 0x0F0144E8 /* Fallback move back button */ +#define DIBUTTON_BASEBALLB_DEVICE 0x0F0044FE /* Show input device and controls */ +#define DIBUTTON_BASEBALLB_PAUSE 0x0F0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Baseball - Pitching + Pitcher control is primary objective ---*/ +#define DIVIRTUAL_SPORTS_BASEBALL_PITCH 0x10000000 +#define DIAXIS_BASEBALLP_LATERAL 0x10008201 /* Aim left / right */ +#define DIAXIS_BASEBALLP_MOVE 0x10010202 /* Aim up / down */ +#define DIBUTTON_BASEBALLP_SELECT 0x10000401 /* cycle through pitch selections */ +#define DIBUTTON_BASEBALLP_PITCH 0x10000402 /* throw pitch */ +#define DIBUTTON_BASEBALLP_BASE 0x10000403 /* select base to throw to */ +#define DIBUTTON_BASEBALLP_THROW 0x10000404 /* throw to base */ +#define DIBUTTON_BASEBALLP_FAKE 0x10000405 /* Fake a throw to a base */ +#define DIBUTTON_BASEBALLP_MENU 0x100004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_BASEBALLP_WALK 0x10004406 /* Throw intentional walk / pitch out */ +#define DIBUTTON_BASEBALLP_LOOK 0x10004407 /* Look at runners on bases */ +#define DIBUTTON_BASEBALLP_LEFT_LINK 0x1000C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_BASEBALLP_RIGHT_LINK 0x1000C4EC /* Fallback sidestep right button */ +#define DIBUTTON_BASEBALLP_FORWARD_LINK 0x100144E0 /* Fallback move forward button */ +#define DIBUTTON_BASEBALLP_BACK_LINK 0x100144E8 /* Fallback move back button */ +#define DIBUTTON_BASEBALLP_DEVICE 0x100044FE /* Show input device and controls */ +#define DIBUTTON_BASEBALLP_PAUSE 0x100044FC /* Start / Pause / Restart game */ + +/*--- Sports - Baseball - Fielding + Fielder control is primary objective ---*/ +#define DIVIRTUAL_SPORTS_BASEBALL_FIELD 0x11000000 +#define DIAXIS_BASEBALLF_LATERAL 0x11008201 /* Aim left / right */ +#define DIAXIS_BASEBALLF_MOVE 0x11010202 /* Aim up / down */ +#define DIBUTTON_BASEBALLF_NEAREST 0x11000401 /* Switch to fielder nearest to the ball */ +#define DIBUTTON_BASEBALLF_THROW1 0x11000402 /* Make conservative throw */ +#define DIBUTTON_BASEBALLF_THROW2 0x11000403 /* Make aggressive throw */ +#define DIBUTTON_BASEBALLF_BURST 0x11000404 /* Invoke burst of speed */ +#define DIBUTTON_BASEBALLF_JUMP 0x11000405 /* Jump to catch ball */ +#define DIBUTTON_BASEBALLF_DIVE 0x11000406 /* Dive to catch ball */ +#define DIBUTTON_BASEBALLF_MENU 0x110004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_BASEBALLF_SHIFTIN 0x11004407 /* Shift the infield positioning */ +#define DIBUTTON_BASEBALLF_SHIFTOUT 0x11004408 /* Shift the outfield positioning */ +#define DIBUTTON_BASEBALLF_AIM_LEFT_LINK 0x1100C4E4 /* Fallback aim left button */ +#define DIBUTTON_BASEBALLF_AIM_RIGHT_LINK 0x1100C4EC /* Fallback aim right button */ +#define DIBUTTON_BASEBALLF_FORWARD_LINK 0x110144E0 /* Fallback move forward button */ +#define DIBUTTON_BASEBALLF_BACK_LINK 0x110144E8 /* Fallback move back button */ +#define DIBUTTON_BASEBALLF_DEVICE 0x110044FE /* Show input device and controls */ +#define DIBUTTON_BASEBALLF_PAUSE 0x110044FC /* Start / Pause / Restart game */ + +/*--- Sports - Basketball - Offense + Offense ---*/ +#define DIVIRTUAL_SPORTS_BASKETBALL_OFFENSE 0x12000000 +#define DIAXIS_BBALLO_LATERAL 0x12008201 /* left / right */ +#define DIAXIS_BBALLO_MOVE 0x12010202 /* up / down */ +#define DIBUTTON_BBALLO_SHOOT 0x12000401 /* shoot basket */ +#define DIBUTTON_BBALLO_DUNK 0x12000402 /* dunk basket */ +#define DIBUTTON_BBALLO_PASS 0x12000403 /* throw pass */ +#define DIBUTTON_BBALLO_FAKE 0x12000404 /* fake shot or pass */ +#define DIBUTTON_BBALLO_SPECIAL 0x12000405 /* apply special move */ +#define DIBUTTON_BBALLO_PLAYER 0x12000406 /* select next player */ +#define DIBUTTON_BBALLO_BURST 0x12000407 /* invoke burst */ +#define DIBUTTON_BBALLO_CALL 0x12000408 /* call for ball / pass to me */ +#define DIBUTTON_BBALLO_MENU 0x120004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_BBALLO_GLANCE 0x12004601 /* scroll view */ +#define DIBUTTON_BBALLO_SCREEN 0x12004409 /* Call for screen */ +#define DIBUTTON_BBALLO_PLAY 0x1200440A /* Call for specific offensive play */ +#define DIBUTTON_BBALLO_JAB 0x1200440B /* Initiate fake drive to basket */ +#define DIBUTTON_BBALLO_POST 0x1200440C /* Perform post move */ +#define DIBUTTON_BBALLO_TIMEOUT 0x1200440D /* Time Out */ +#define DIBUTTON_BBALLO_SUBSTITUTE 0x1200440E /* substitute one player for another */ +#define DIBUTTON_BBALLO_LEFT_LINK 0x1200C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_BBALLO_RIGHT_LINK 0x1200C4EC /* Fallback sidestep right button */ +#define DIBUTTON_BBALLO_FORWARD_LINK 0x120144E0 /* Fallback move forward button */ +#define DIBUTTON_BBALLO_BACK_LINK 0x120144E8 /* Fallback move back button */ +#define DIBUTTON_BBALLO_DEVICE 0x120044FE /* Show input device and controls */ +#define DIBUTTON_BBALLO_PAUSE 0x120044FC /* Start / Pause / Restart game */ + +/*--- Sports - Basketball - Defense + Defense ---*/ +#define DIVIRTUAL_SPORTS_BASKETBALL_DEFENSE 0x13000000 +#define DIAXIS_BBALLD_LATERAL 0x13008201 /* left / right */ +#define DIAXIS_BBALLD_MOVE 0x13010202 /* up / down */ +#define DIBUTTON_BBALLD_JUMP 0x13000401 /* jump to block shot */ +#define DIBUTTON_BBALLD_STEAL 0x13000402 /* attempt to steal ball */ +#define DIBUTTON_BBALLD_FAKE 0x13000403 /* fake block or steal */ +#define DIBUTTON_BBALLD_SPECIAL 0x13000404 /* apply special move */ +#define DIBUTTON_BBALLD_PLAYER 0x13000405 /* select next player */ +#define DIBUTTON_BBALLD_BURST 0x13000406 /* invoke burst */ +#define DIBUTTON_BBALLD_PLAY 0x13000407 /* call for specific defensive play */ +#define DIBUTTON_BBALLD_MENU 0x130004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_BBALLD_GLANCE 0x13004601 /* scroll view */ +#define DIBUTTON_BBALLD_TIMEOUT 0x13004408 /* Time Out */ +#define DIBUTTON_BBALLD_SUBSTITUTE 0x13004409 /* substitute one player for another */ +#define DIBUTTON_BBALLD_LEFT_LINK 0x1300C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_BBALLD_RIGHT_LINK 0x1300C4EC /* Fallback sidestep right button */ +#define DIBUTTON_BBALLD_FORWARD_LINK 0x130144E0 /* Fallback move forward button */ +#define DIBUTTON_BBALLD_BACK_LINK 0x130144E8 /* Fallback move back button */ +#define DIBUTTON_BBALLD_DEVICE 0x130044FE /* Show input device and controls */ +#define DIBUTTON_BBALLD_PAUSE 0x130044FC /* Start / Pause / Restart game */ + +/*--- Sports - Football - Play + Play selection ---*/ +#define DIVIRTUAL_SPORTS_FOOTBALL_FIELD 0x14000000 +#define DIBUTTON_FOOTBALLP_PLAY 0x14000401 /* cycle through available plays */ +#define DIBUTTON_FOOTBALLP_SELECT 0x14000402 /* select play */ +#define DIBUTTON_FOOTBALLP_HELP 0x14000403 /* Bring up pop-up help */ +#define DIBUTTON_FOOTBALLP_MENU 0x140004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FOOTBALLP_DEVICE 0x140044FE /* Show input device and controls */ +#define DIBUTTON_FOOTBALLP_PAUSE 0x140044FC /* Start / Pause / Restart game */ + +/*--- Sports - Football - QB + Offense: Quarterback / Kicker ---*/ +#define DIVIRTUAL_SPORTS_FOOTBALL_QBCK 0x15000000 +#define DIAXIS_FOOTBALLQ_LATERAL 0x15008201 /* Move / Aim: left / right */ +#define DIAXIS_FOOTBALLQ_MOVE 0x15010202 /* Move / Aim: up / down */ +#define DIBUTTON_FOOTBALLQ_SELECT 0x15000401 /* Select */ +#define DIBUTTON_FOOTBALLQ_SNAP 0x15000402 /* snap ball - start play */ +#define DIBUTTON_FOOTBALLQ_JUMP 0x15000403 /* jump over defender */ +#define DIBUTTON_FOOTBALLQ_SLIDE 0x15000404 /* Dive/Slide */ +#define DIBUTTON_FOOTBALLQ_PASS 0x15000405 /* throws pass to receiver */ +#define DIBUTTON_FOOTBALLQ_FAKE 0x15000406 /* pump fake pass or fake kick */ +#define DIBUTTON_FOOTBALLQ_MENU 0x150004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FOOTBALLQ_FAKESNAP 0x15004407 /* Fake snap */ +#define DIBUTTON_FOOTBALLQ_MOTION 0x15004408 /* Send receivers in motion */ +#define DIBUTTON_FOOTBALLQ_AUDIBLE 0x15004409 /* Change offensive play at line of scrimmage */ +#define DIBUTTON_FOOTBALLQ_LEFT_LINK 0x1500C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_FOOTBALLQ_RIGHT_LINK 0x1500C4EC /* Fallback sidestep right button */ +#define DIBUTTON_FOOTBALLQ_FORWARD_LINK 0x150144E0 /* Fallback move forward button */ +#define DIBUTTON_FOOTBALLQ_BACK_LINK 0x150144E8 /* Fallback move back button */ +#define DIBUTTON_FOOTBALLQ_DEVICE 0x150044FE /* Show input device and controls */ +#define DIBUTTON_FOOTBALLQ_PAUSE 0x150044FC /* Start / Pause / Restart game */ + +/*--- Sports - Football - Offense + Offense - Runner ---*/ +#define DIVIRTUAL_SPORTS_FOOTBALL_OFFENSE 0x16000000 +#define DIAXIS_FOOTBALLO_LATERAL 0x16008201 /* Move / Aim: left / right */ +#define DIAXIS_FOOTBALLO_MOVE 0x16010202 /* Move / Aim: up / down */ +#define DIBUTTON_FOOTBALLO_JUMP 0x16000401 /* jump or hurdle over defender */ +#define DIBUTTON_FOOTBALLO_LEFTARM 0x16000402 /* holds out left arm */ +#define DIBUTTON_FOOTBALLO_RIGHTARM 0x16000403 /* holds out right arm */ +#define DIBUTTON_FOOTBALLO_THROW 0x16000404 /* throw pass or lateral ball to another runner */ +#define DIBUTTON_FOOTBALLO_SPIN 0x16000405 /* Spin to avoid defenders */ +#define DIBUTTON_FOOTBALLO_MENU 0x160004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FOOTBALLO_JUKE 0x16004406 /* Use special move to avoid defenders */ +#define DIBUTTON_FOOTBALLO_SHOULDER 0x16004407 /* Lower shoulder to run over defenders */ +#define DIBUTTON_FOOTBALLO_TURBO 0x16004408 /* Speed burst past defenders */ +#define DIBUTTON_FOOTBALLO_DIVE 0x16004409 /* Dive over defenders */ +#define DIBUTTON_FOOTBALLO_ZOOM 0x1600440A /* Zoom view in / out */ +#define DIBUTTON_FOOTBALLO_SUBSTITUTE 0x1600440B /* substitute one player for another */ +#define DIBUTTON_FOOTBALLO_LEFT_LINK 0x1600C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_FOOTBALLO_RIGHT_LINK 0x1600C4EC /* Fallback sidestep right button */ +#define DIBUTTON_FOOTBALLO_FORWARD_LINK 0x160144E0 /* Fallback move forward button */ +#define DIBUTTON_FOOTBALLO_BACK_LINK 0x160144E8 /* Fallback move back button */ +#define DIBUTTON_FOOTBALLO_DEVICE 0x160044FE /* Show input device and controls */ +#define DIBUTTON_FOOTBALLO_PAUSE 0x160044FC /* Start / Pause / Restart game */ + +/*--- Sports - Football - Defense + Defense ---*/ +#define DIVIRTUAL_SPORTS_FOOTBALL_DEFENSE 0x17000000 +#define DIAXIS_FOOTBALLD_LATERAL 0x17008201 /* Move / Aim: left / right */ +#define DIAXIS_FOOTBALLD_MOVE 0x17010202 /* Move / Aim: up / down */ +#define DIBUTTON_FOOTBALLD_PLAY 0x17000401 /* cycle through available plays */ +#define DIBUTTON_FOOTBALLD_SELECT 0x17000402 /* select player closest to the ball */ +#define DIBUTTON_FOOTBALLD_JUMP 0x17000403 /* jump to intercept or block */ +#define DIBUTTON_FOOTBALLD_TACKLE 0x17000404 /* tackler runner */ +#define DIBUTTON_FOOTBALLD_FAKE 0x17000405 /* hold down to fake tackle or intercept */ +#define DIBUTTON_FOOTBALLD_SUPERTACKLE 0x17000406 /* Initiate special tackle */ +#define DIBUTTON_FOOTBALLD_MENU 0x170004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_FOOTBALLD_SPIN 0x17004407 /* Spin to beat offensive line */ +#define DIBUTTON_FOOTBALLD_SWIM 0x17004408 /* Swim to beat the offensive line */ +#define DIBUTTON_FOOTBALLD_BULLRUSH 0x17004409 /* Bull rush the offensive line */ +#define DIBUTTON_FOOTBALLD_RIP 0x1700440A /* Rip the offensive line */ +#define DIBUTTON_FOOTBALLD_AUDIBLE 0x1700440B /* Change defensive play at the line of scrimmage */ +#define DIBUTTON_FOOTBALLD_ZOOM 0x1700440C /* Zoom view in / out */ +#define DIBUTTON_FOOTBALLD_SUBSTITUTE 0x1700440D /* substitute one player for another */ +#define DIBUTTON_FOOTBALLD_LEFT_LINK 0x1700C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_FOOTBALLD_RIGHT_LINK 0x1700C4EC /* Fallback sidestep right button */ +#define DIBUTTON_FOOTBALLD_FORWARD_LINK 0x170144E0 /* Fallback move forward button */ +#define DIBUTTON_FOOTBALLD_BACK_LINK 0x170144E8 /* Fallback move back button */ +#define DIBUTTON_FOOTBALLD_DEVICE 0x170044FE /* Show input device and controls */ +#define DIBUTTON_FOOTBALLD_PAUSE 0x170044FC /* Start / Pause / Restart game */ + +/*--- Sports - Golf + ---*/ +#define DIVIRTUAL_SPORTS_GOLF 0x18000000 +#define DIAXIS_GOLF_LATERAL 0x18008201 /* Move / Aim: left / right */ +#define DIAXIS_GOLF_MOVE 0x18010202 /* Move / Aim: up / down */ +#define DIBUTTON_GOLF_SWING 0x18000401 /* swing club */ +#define DIBUTTON_GOLF_SELECT 0x18000402 /* cycle between: club / swing strength / ball arc / ball spin */ +#define DIBUTTON_GOLF_UP 0x18000403 /* increase selection */ +#define DIBUTTON_GOLF_DOWN 0x18000404 /* decrease selection */ +#define DIBUTTON_GOLF_TERRAIN 0x18000405 /* shows terrain detail */ +#define DIBUTTON_GOLF_FLYBY 0x18000406 /* view the hole via a flyby */ +#define DIBUTTON_GOLF_MENU 0x180004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_GOLF_SCROLL 0x18004601 /* scroll view */ +#define DIBUTTON_GOLF_ZOOM 0x18004407 /* Zoom view in / out */ +#define DIBUTTON_GOLF_TIMEOUT 0x18004408 /* Call for time out */ +#define DIBUTTON_GOLF_SUBSTITUTE 0x18004409 /* substitute one player for another */ +#define DIBUTTON_GOLF_LEFT_LINK 0x1800C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_GOLF_RIGHT_LINK 0x1800C4EC /* Fallback sidestep right button */ +#define DIBUTTON_GOLF_FORWARD_LINK 0x180144E0 /* Fallback move forward button */ +#define DIBUTTON_GOLF_BACK_LINK 0x180144E8 /* Fallback move back button */ +#define DIBUTTON_GOLF_DEVICE 0x180044FE /* Show input device and controls */ +#define DIBUTTON_GOLF_PAUSE 0x180044FC /* Start / Pause / Restart game */ + +/*--- Sports - Hockey - Offense + Offense ---*/ +#define DIVIRTUAL_SPORTS_HOCKEY_OFFENSE 0x19000000 +#define DIAXIS_HOCKEYO_LATERAL 0x19008201 /* Move / Aim: left / right */ +#define DIAXIS_HOCKEYO_MOVE 0x19010202 /* Move / Aim: up / down */ +#define DIBUTTON_HOCKEYO_SHOOT 0x19000401 /* Shoot */ +#define DIBUTTON_HOCKEYO_PASS 0x19000402 /* pass the puck */ +#define DIBUTTON_HOCKEYO_BURST 0x19000403 /* invoke speed burst */ +#define DIBUTTON_HOCKEYO_SPECIAL 0x19000404 /* invoke special move */ +#define DIBUTTON_HOCKEYO_FAKE 0x19000405 /* hold down to fake pass or kick */ +#define DIBUTTON_HOCKEYO_MENU 0x190004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_HOCKEYO_SCROLL 0x19004601 /* scroll view */ +#define DIBUTTON_HOCKEYO_ZOOM 0x19004406 /* Zoom view in / out */ +#define DIBUTTON_HOCKEYO_STRATEGY 0x19004407 /* Invoke coaching menu for strategy help */ +#define DIBUTTON_HOCKEYO_TIMEOUT 0x19004408 /* Call for time out */ +#define DIBUTTON_HOCKEYO_SUBSTITUTE 0x19004409 /* substitute one player for another */ +#define DIBUTTON_HOCKEYO_LEFT_LINK 0x1900C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_HOCKEYO_RIGHT_LINK 0x1900C4EC /* Fallback sidestep right button */ +#define DIBUTTON_HOCKEYO_FORWARD_LINK 0x190144E0 /* Fallback move forward button */ +#define DIBUTTON_HOCKEYO_BACK_LINK 0x190144E8 /* Fallback move back button */ +#define DIBUTTON_HOCKEYO_DEVICE 0x190044FE /* Show input device and controls */ +#define DIBUTTON_HOCKEYO_PAUSE 0x190044FC /* Start / Pause / Restart game */ + +/*--- Sports - Hockey - Defense + Defense ---*/ +#define DIVIRTUAL_SPORTS_HOCKEY_DEFENSE 0x1A000000 +#define DIAXIS_HOCKEYD_LATERAL 0x1A008201 /* Move / Aim: left / right */ +#define DIAXIS_HOCKEYD_MOVE 0x1A010202 /* Move / Aim: up / down */ +#define DIBUTTON_HOCKEYD_PLAYER 0x1A000401 /* control player closest to the puck */ +#define DIBUTTON_HOCKEYD_STEAL 0x1A000402 /* attempt steal */ +#define DIBUTTON_HOCKEYD_BURST 0x1A000403 /* speed burst or body check */ +#define DIBUTTON_HOCKEYD_BLOCK 0x1A000404 /* block puck */ +#define DIBUTTON_HOCKEYD_FAKE 0x1A000405 /* hold down to fake tackle or intercept */ +#define DIBUTTON_HOCKEYD_MENU 0x1A0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_HOCKEYD_SCROLL 0x1A004601 /* scroll view */ +#define DIBUTTON_HOCKEYD_ZOOM 0x1A004406 /* Zoom view in / out */ +#define DIBUTTON_HOCKEYD_STRATEGY 0x1A004407 /* Invoke coaching menu for strategy help */ +#define DIBUTTON_HOCKEYD_TIMEOUT 0x1A004408 /* Call for time out */ +#define DIBUTTON_HOCKEYD_SUBSTITUTE 0x1A004409 /* substitute one player for another */ +#define DIBUTTON_HOCKEYD_LEFT_LINK 0x1A00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_HOCKEYD_RIGHT_LINK 0x1A00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_HOCKEYD_FORWARD_LINK 0x1A0144E0 /* Fallback move forward button */ +#define DIBUTTON_HOCKEYD_BACK_LINK 0x1A0144E8 /* Fallback move back button */ +#define DIBUTTON_HOCKEYD_DEVICE 0x1A0044FE /* Show input device and controls */ +#define DIBUTTON_HOCKEYD_PAUSE 0x1A0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Hockey - Goalie + Goal tending ---*/ +#define DIVIRTUAL_SPORTS_HOCKEY_GOALIE 0x1B000000 +#define DIAXIS_HOCKEYG_LATERAL 0x1B008201 /* Move / Aim: left / right */ +#define DIAXIS_HOCKEYG_MOVE 0x1B010202 /* Move / Aim: up / down */ +#define DIBUTTON_HOCKEYG_PASS 0x1B000401 /* pass puck */ +#define DIBUTTON_HOCKEYG_POKE 0x1B000402 /* poke / check / hack */ +#define DIBUTTON_HOCKEYG_STEAL 0x1B000403 /* attempt steal */ +#define DIBUTTON_HOCKEYG_BLOCK 0x1B000404 /* block puck */ +#define DIBUTTON_HOCKEYG_MENU 0x1B0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_HOCKEYG_SCROLL 0x1B004601 /* scroll view */ +#define DIBUTTON_HOCKEYG_ZOOM 0x1B004405 /* Zoom view in / out */ +#define DIBUTTON_HOCKEYG_STRATEGY 0x1B004406 /* Invoke coaching menu for strategy help */ +#define DIBUTTON_HOCKEYG_TIMEOUT 0x1B004407 /* Call for time out */ +#define DIBUTTON_HOCKEYG_SUBSTITUTE 0x1B004408 /* substitute one player for another */ +#define DIBUTTON_HOCKEYG_LEFT_LINK 0x1B00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_HOCKEYG_RIGHT_LINK 0x1B00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_HOCKEYG_FORWARD_LINK 0x1B0144E0 /* Fallback move forward button */ +#define DIBUTTON_HOCKEYG_BACK_LINK 0x1B0144E8 /* Fallback move back button */ +#define DIBUTTON_HOCKEYG_DEVICE 0x1B0044FE /* Show input device and controls */ +#define DIBUTTON_HOCKEYG_PAUSE 0x1B0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Mountain Biking + ---*/ +#define DIVIRTUAL_SPORTS_BIKING_MOUNTAIN 0x1C000000 +#define DIAXIS_BIKINGM_TURN 0x1C008201 /* left / right */ +#define DIAXIS_BIKINGM_PEDAL 0x1C010202 /* Pedal faster / slower / brake */ +#define DIBUTTON_BIKINGM_JUMP 0x1C000401 /* jump over obstacle */ +#define DIBUTTON_BIKINGM_CAMERA 0x1C000402 /* switch camera view */ +#define DIBUTTON_BIKINGM_SPECIAL1 0x1C000403 /* perform first special move */ +#define DIBUTTON_BIKINGM_SELECT 0x1C000404 /* Select */ +#define DIBUTTON_BIKINGM_SPECIAL2 0x1C000405 /* perform second special move */ +#define DIBUTTON_BIKINGM_MENU 0x1C0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_BIKINGM_SCROLL 0x1C004601 /* scroll view */ +#define DIBUTTON_BIKINGM_ZOOM 0x1C004406 /* Zoom view in / out */ +#define DIAXIS_BIKINGM_BRAKE 0x1C044203 /* Brake axis */ +#define DIBUTTON_BIKINGM_LEFT_LINK 0x1C00C4E4 /* Fallback turn left button */ +#define DIBUTTON_BIKINGM_RIGHT_LINK 0x1C00C4EC /* Fallback turn right button */ +#define DIBUTTON_BIKINGM_FASTER_LINK 0x1C0144E0 /* Fallback pedal faster button */ +#define DIBUTTON_BIKINGM_SLOWER_LINK 0x1C0144E8 /* Fallback pedal slower button */ +#define DIBUTTON_BIKINGM_BRAKE_BUTTON_LINK 0x1C0444E8 /* Fallback brake button */ +#define DIBUTTON_BIKINGM_DEVICE 0x1C0044FE /* Show input device and controls */ +#define DIBUTTON_BIKINGM_PAUSE 0x1C0044FC /* Start / Pause / Restart game */ + +/*--- Sports: Skiing / Snowboarding / Skateboarding + ---*/ +#define DIVIRTUAL_SPORTS_SKIING 0x1D000000 +#define DIAXIS_SKIING_TURN 0x1D008201 /* left / right */ +#define DIAXIS_SKIING_SPEED 0x1D010202 /* faster / slower */ +#define DIBUTTON_SKIING_JUMP 0x1D000401 /* Jump */ +#define DIBUTTON_SKIING_CROUCH 0x1D000402 /* crouch down */ +#define DIBUTTON_SKIING_CAMERA 0x1D000403 /* switch camera view */ +#define DIBUTTON_SKIING_SPECIAL1 0x1D000404 /* perform first special move */ +#define DIBUTTON_SKIING_SELECT 0x1D000405 /* Select */ +#define DIBUTTON_SKIING_SPECIAL2 0x1D000406 /* perform second special move */ +#define DIBUTTON_SKIING_MENU 0x1D0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_SKIING_GLANCE 0x1D004601 /* scroll view */ +#define DIBUTTON_SKIING_ZOOM 0x1D004407 /* Zoom view in / out */ +#define DIBUTTON_SKIING_LEFT_LINK 0x1D00C4E4 /* Fallback turn left button */ +#define DIBUTTON_SKIING_RIGHT_LINK 0x1D00C4EC /* Fallback turn right button */ +#define DIBUTTON_SKIING_FASTER_LINK 0x1D0144E0 /* Fallback increase speed button */ +#define DIBUTTON_SKIING_SLOWER_LINK 0x1D0144E8 /* Fallback decrease speed button */ +#define DIBUTTON_SKIING_DEVICE 0x1D0044FE /* Show input device and controls */ +#define DIBUTTON_SKIING_PAUSE 0x1D0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Soccer - Offense + Offense ---*/ +#define DIVIRTUAL_SPORTS_SOCCER_OFFENSE 0x1E000000 +#define DIAXIS_SOCCERO_LATERAL 0x1E008201 /* Move / Aim: left / right */ +#define DIAXIS_SOCCERO_MOVE 0x1E010202 /* Move / Aim: up / down */ +#define DIAXIS_SOCCERO_BEND 0x1E018203 /* Bend to soccer shot/pass */ +#define DIBUTTON_SOCCERO_SHOOT 0x1E000401 /* Shoot the ball */ +#define DIBUTTON_SOCCERO_PASS 0x1E000402 /* Pass */ +#define DIBUTTON_SOCCERO_FAKE 0x1E000403 /* Fake */ +#define DIBUTTON_SOCCERO_PLAYER 0x1E000404 /* Select next player */ +#define DIBUTTON_SOCCERO_SPECIAL1 0x1E000405 /* Apply special move */ +#define DIBUTTON_SOCCERO_SELECT 0x1E000406 /* Select special move */ +#define DIBUTTON_SOCCERO_MENU 0x1E0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_SOCCERO_GLANCE 0x1E004601 /* scroll view */ +#define DIBUTTON_SOCCERO_SUBSTITUTE 0x1E004407 /* Substitute one player for another */ +#define DIBUTTON_SOCCERO_SHOOTLOW 0x1E004408 /* Shoot the ball low */ +#define DIBUTTON_SOCCERO_SHOOTHIGH 0x1E004409 /* Shoot the ball high */ +#define DIBUTTON_SOCCERO_PASSTHRU 0x1E00440A /* Make a thru pass */ +#define DIBUTTON_SOCCERO_SPRINT 0x1E00440B /* Sprint / turbo boost */ +#define DIBUTTON_SOCCERO_CONTROL 0x1E00440C /* Obtain control of the ball */ +#define DIBUTTON_SOCCERO_HEAD 0x1E00440D /* Attempt to head the ball */ +#define DIBUTTON_SOCCERO_LEFT_LINK 0x1E00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_SOCCERO_RIGHT_LINK 0x1E00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_SOCCERO_FORWARD_LINK 0x1E0144E0 /* Fallback move forward button */ +#define DIBUTTON_SOCCERO_BACK_LINK 0x1E0144E8 /* Fallback move back button */ +#define DIBUTTON_SOCCERO_DEVICE 0x1E0044FE /* Show input device and controls */ +#define DIBUTTON_SOCCERO_PAUSE 0x1E0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Soccer - Defense + Defense ---*/ +#define DIVIRTUAL_SPORTS_SOCCER_DEFENSE 0x1F000000 +#define DIAXIS_SOCCERD_LATERAL 0x1F008201 /* Move / Aim: left / right */ +#define DIAXIS_SOCCERD_MOVE 0x1F010202 /* Move / Aim: up / down */ +#define DIBUTTON_SOCCERD_BLOCK 0x1F000401 /* Attempt to block shot */ +#define DIBUTTON_SOCCERD_STEAL 0x1F000402 /* Attempt to steal ball */ +#define DIBUTTON_SOCCERD_FAKE 0x1F000403 /* Fake a block or a steal */ +#define DIBUTTON_SOCCERD_PLAYER 0x1F000404 /* Select next player */ +#define DIBUTTON_SOCCERD_SPECIAL 0x1F000405 /* Apply special move */ +#define DIBUTTON_SOCCERD_SELECT 0x1F000406 /* Select special move */ +#define DIBUTTON_SOCCERD_SLIDE 0x1F000407 /* Attempt a slide tackle */ +#define DIBUTTON_SOCCERD_MENU 0x1F0004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_SOCCERD_GLANCE 0x1F004601 /* scroll view */ +#define DIBUTTON_SOCCERD_FOUL 0x1F004408 /* Initiate a foul / hard-foul */ +#define DIBUTTON_SOCCERD_HEAD 0x1F004409 /* Attempt a Header */ +#define DIBUTTON_SOCCERD_CLEAR 0x1F00440A /* Attempt to clear the ball down the field */ +#define DIBUTTON_SOCCERD_GOALIECHARGE 0x1F00440B /* Make the goalie charge out of the box */ +#define DIBUTTON_SOCCERD_SUBSTITUTE 0x1F00440C /* Substitute one player for another */ +#define DIBUTTON_SOCCERD_LEFT_LINK 0x1F00C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_SOCCERD_RIGHT_LINK 0x1F00C4EC /* Fallback sidestep right button */ +#define DIBUTTON_SOCCERD_FORWARD_LINK 0x1F0144E0 /* Fallback move forward button */ +#define DIBUTTON_SOCCERD_BACK_LINK 0x1F0144E8 /* Fallback move back button */ +#define DIBUTTON_SOCCERD_DEVICE 0x1F0044FE /* Show input device and controls */ +#define DIBUTTON_SOCCERD_PAUSE 0x1F0044FC /* Start / Pause / Restart game */ + +/*--- Sports - Racquet + Tennis - Table-Tennis - Squash ---*/ +#define DIVIRTUAL_SPORTS_RACQUET 0x20000000 +#define DIAXIS_RACQUET_LATERAL 0x20008201 /* Move / Aim: left / right */ +#define DIAXIS_RACQUET_MOVE 0x20010202 /* Move / Aim: up / down */ +#define DIBUTTON_RACQUET_SWING 0x20000401 /* Swing racquet */ +#define DIBUTTON_RACQUET_BACKSWING 0x20000402 /* Swing backhand */ +#define DIBUTTON_RACQUET_SMASH 0x20000403 /* Smash shot */ +#define DIBUTTON_RACQUET_SPECIAL 0x20000404 /* Special shot */ +#define DIBUTTON_RACQUET_SELECT 0x20000405 /* Select special shot */ +#define DIBUTTON_RACQUET_MENU 0x200004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_RACQUET_GLANCE 0x20004601 /* scroll view */ +#define DIBUTTON_RACQUET_TIMEOUT 0x20004406 /* Call for time out */ +#define DIBUTTON_RACQUET_SUBSTITUTE 0x20004407 /* Substitute one player for another */ +#define DIBUTTON_RACQUET_LEFT_LINK 0x2000C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_RACQUET_RIGHT_LINK 0x2000C4EC /* Fallback sidestep right button */ +#define DIBUTTON_RACQUET_FORWARD_LINK 0x200144E0 /* Fallback move forward button */ +#define DIBUTTON_RACQUET_BACK_LINK 0x200144E8 /* Fallback move back button */ +#define DIBUTTON_RACQUET_DEVICE 0x200044FE /* Show input device and controls */ +#define DIBUTTON_RACQUET_PAUSE 0x200044FC /* Start / Pause / Restart game */ + +/*--- Arcade- 2D + Side to Side movement ---*/ +#define DIVIRTUAL_ARCADE_SIDE2SIDE 0x21000000 +#define DIAXIS_ARCADES_LATERAL 0x21008201 /* left / right */ +#define DIAXIS_ARCADES_MOVE 0x21010202 /* up / down */ +#define DIBUTTON_ARCADES_THROW 0x21000401 /* throw object */ +#define DIBUTTON_ARCADES_CARRY 0x21000402 /* carry object */ +#define DIBUTTON_ARCADES_ATTACK 0x21000403 /* attack */ +#define DIBUTTON_ARCADES_SPECIAL 0x21000404 /* apply special move */ +#define DIBUTTON_ARCADES_SELECT 0x21000405 /* select special move */ +#define DIBUTTON_ARCADES_MENU 0x210004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_ARCADES_VIEW 0x21004601 /* scroll view left / right / up / down */ +#define DIBUTTON_ARCADES_LEFT_LINK 0x2100C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_ARCADES_RIGHT_LINK 0x2100C4EC /* Fallback sidestep right button */ +#define DIBUTTON_ARCADES_FORWARD_LINK 0x210144E0 /* Fallback move forward button */ +#define DIBUTTON_ARCADES_BACK_LINK 0x210144E8 /* Fallback move back button */ +#define DIBUTTON_ARCADES_VIEW_UP_LINK 0x2107C4E0 /* Fallback scroll view up button */ +#define DIBUTTON_ARCADES_VIEW_DOWN_LINK 0x2107C4E8 /* Fallback scroll view down button */ +#define DIBUTTON_ARCADES_VIEW_LEFT_LINK 0x2107C4E4 /* Fallback scroll view left button */ +#define DIBUTTON_ARCADES_VIEW_RIGHT_LINK 0x2107C4EC /* Fallback scroll view right button */ +#define DIBUTTON_ARCADES_DEVICE 0x210044FE /* Show input device and controls */ +#define DIBUTTON_ARCADES_PAUSE 0x210044FC /* Start / Pause / Restart game */ + +/*--- Arcade - Platform Game + Character moves around on screen ---*/ +#define DIVIRTUAL_ARCADE_PLATFORM 0x22000000 +#define DIAXIS_ARCADEP_LATERAL 0x22008201 /* Left / right */ +#define DIAXIS_ARCADEP_MOVE 0x22010202 /* Up / down */ +#define DIBUTTON_ARCADEP_JUMP 0x22000401 /* Jump */ +#define DIBUTTON_ARCADEP_FIRE 0x22000402 /* Fire */ +#define DIBUTTON_ARCADEP_CROUCH 0x22000403 /* Crouch */ +#define DIBUTTON_ARCADEP_SPECIAL 0x22000404 /* Apply special move */ +#define DIBUTTON_ARCADEP_SELECT 0x22000405 /* Select special move */ +#define DIBUTTON_ARCADEP_MENU 0x220004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_ARCADEP_VIEW 0x22004601 /* Scroll view */ +#define DIBUTTON_ARCADEP_FIRESECONDARY 0x22004406 /* Alternative fire button */ +#define DIBUTTON_ARCADEP_LEFT_LINK 0x2200C4E4 /* Fallback sidestep left button */ +#define DIBUTTON_ARCADEP_RIGHT_LINK 0x2200C4EC /* Fallback sidestep right button */ +#define DIBUTTON_ARCADEP_FORWARD_LINK 0x220144E0 /* Fallback move forward button */ +#define DIBUTTON_ARCADEP_BACK_LINK 0x220144E8 /* Fallback move back button */ +#define DIBUTTON_ARCADEP_VIEW_UP_LINK 0x2207C4E0 /* Fallback scroll view up button */ +#define DIBUTTON_ARCADEP_VIEW_DOWN_LINK 0x2207C4E8 /* Fallback scroll view down button */ +#define DIBUTTON_ARCADEP_VIEW_LEFT_LINK 0x2207C4E4 /* Fallback scroll view left button */ +#define DIBUTTON_ARCADEP_VIEW_RIGHT_LINK 0x2207C4EC /* Fallback scroll view right button */ +#define DIBUTTON_ARCADEP_DEVICE 0x220044FE /* Show input device and controls */ +#define DIBUTTON_ARCADEP_PAUSE 0x220044FC /* Start / Pause / Restart game */ + +/*--- CAD - 2D Object Control + Controls to select and move objects in 2D ---*/ +#define DIVIRTUAL_CAD_2DCONTROL 0x23000000 +#define DIAXIS_2DCONTROL_LATERAL 0x23008201 /* Move view left / right */ +#define DIAXIS_2DCONTROL_MOVE 0x23010202 /* Move view up / down */ +#define DIAXIS_2DCONTROL_INOUT 0x23018203 /* Zoom - in / out */ +#define DIBUTTON_2DCONTROL_SELECT 0x23000401 /* Select Object */ +#define DIBUTTON_2DCONTROL_SPECIAL1 0x23000402 /* Do first special operation */ +#define DIBUTTON_2DCONTROL_SPECIAL 0x23000403 /* Select special operation */ +#define DIBUTTON_2DCONTROL_SPECIAL2 0x23000404 /* Do second special operation */ +#define DIBUTTON_2DCONTROL_MENU 0x230004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_2DCONTROL_HATSWITCH 0x23004601 /* Hat switch */ +#define DIAXIS_2DCONTROL_ROTATEZ 0x23024204 /* Rotate view clockwise / counterclockwise */ +#define DIBUTTON_2DCONTROL_DISPLAY 0x23004405 /* Shows next on-screen display options */ +#define DIBUTTON_2DCONTROL_DEVICE 0x230044FE /* Show input device and controls */ +#define DIBUTTON_2DCONTROL_PAUSE 0x230044FC /* Start / Pause / Restart game */ + +/*--- CAD - 3D object control + Controls to select and move objects within a 3D environment ---*/ +#define DIVIRTUAL_CAD_3DCONTROL 0x24000000 +#define DIAXIS_3DCONTROL_LATERAL 0x24008201 /* Move view left / right */ +#define DIAXIS_3DCONTROL_MOVE 0x24010202 /* Move view up / down */ +#define DIAXIS_3DCONTROL_INOUT 0x24018203 /* Zoom - in / out */ +#define DIBUTTON_3DCONTROL_SELECT 0x24000401 /* Select Object */ +#define DIBUTTON_3DCONTROL_SPECIAL1 0x24000402 /* Do first special operation */ +#define DIBUTTON_3DCONTROL_SPECIAL 0x24000403 /* Select special operation */ +#define DIBUTTON_3DCONTROL_SPECIAL2 0x24000404 /* Do second special operation */ +#define DIBUTTON_3DCONTROL_MENU 0x240004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_3DCONTROL_HATSWITCH 0x24004601 /* Hat switch */ +#define DIAXIS_3DCONTROL_ROTATEX 0x24034204 /* Rotate view forward or up / backward or down */ +#define DIAXIS_3DCONTROL_ROTATEY 0x2402C205 /* Rotate view clockwise / counterclockwise */ +#define DIAXIS_3DCONTROL_ROTATEZ 0x24024206 /* Rotate view left / right */ +#define DIBUTTON_3DCONTROL_DISPLAY 0x24004405 /* Show next on-screen display options */ +#define DIBUTTON_3DCONTROL_DEVICE 0x240044FE /* Show input device and controls */ +#define DIBUTTON_3DCONTROL_PAUSE 0x240044FC /* Start / Pause / Restart game */ + +/*--- CAD - 3D Navigation - Fly through + Controls for 3D modeling ---*/ +#define DIVIRTUAL_CAD_FLYBY 0x25000000 +#define DIAXIS_CADF_LATERAL 0x25008201 /* move view left / right */ +#define DIAXIS_CADF_MOVE 0x25010202 /* move view up / down */ +#define DIAXIS_CADF_INOUT 0x25018203 /* in / out */ +#define DIBUTTON_CADF_SELECT 0x25000401 /* Select Object */ +#define DIBUTTON_CADF_SPECIAL1 0x25000402 /* do first special operation */ +#define DIBUTTON_CADF_SPECIAL 0x25000403 /* Select special operation */ +#define DIBUTTON_CADF_SPECIAL2 0x25000404 /* do second special operation */ +#define DIBUTTON_CADF_MENU 0x250004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_CADF_HATSWITCH 0x25004601 /* Hat switch */ +#define DIAXIS_CADF_ROTATEX 0x25034204 /* Rotate view forward or up / backward or down */ +#define DIAXIS_CADF_ROTATEY 0x2502C205 /* Rotate view clockwise / counterclockwise */ +#define DIAXIS_CADF_ROTATEZ 0x25024206 /* Rotate view left / right */ +#define DIBUTTON_CADF_DISPLAY 0x25004405 /* shows next on-screen display options */ +#define DIBUTTON_CADF_DEVICE 0x250044FE /* Show input device and controls */ +#define DIBUTTON_CADF_PAUSE 0x250044FC /* Start / Pause / Restart game */ + +/*--- CAD - 3D Model Control + Controls for 3D modeling ---*/ +#define DIVIRTUAL_CAD_MODEL 0x26000000 +#define DIAXIS_CADM_LATERAL 0x26008201 /* move view left / right */ +#define DIAXIS_CADM_MOVE 0x26010202 /* move view up / down */ +#define DIAXIS_CADM_INOUT 0x26018203 /* in / out */ +#define DIBUTTON_CADM_SELECT 0x26000401 /* Select Object */ +#define DIBUTTON_CADM_SPECIAL1 0x26000402 /* do first special operation */ +#define DIBUTTON_CADM_SPECIAL 0x26000403 /* Select special operation */ +#define DIBUTTON_CADM_SPECIAL2 0x26000404 /* do second special operation */ +#define DIBUTTON_CADM_MENU 0x260004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIHATSWITCH_CADM_HATSWITCH 0x26004601 /* Hat switch */ +#define DIAXIS_CADM_ROTATEX 0x26034204 /* Rotate view forward or up / backward or down */ +#define DIAXIS_CADM_ROTATEY 0x2602C205 /* Rotate view clockwise / counterclockwise */ +#define DIAXIS_CADM_ROTATEZ 0x26024206 /* Rotate view left / right */ +#define DIBUTTON_CADM_DISPLAY 0x26004405 /* shows next on-screen display options */ +#define DIBUTTON_CADM_DEVICE 0x260044FE /* Show input device and controls */ +#define DIBUTTON_CADM_PAUSE 0x260044FC /* Start / Pause / Restart game */ + +/*--- Control - Media Equipment + Remote ---*/ +#define DIVIRTUAL_REMOTE_CONTROL 0x27000000 +#define DIAXIS_REMOTE_SLIDER 0x27050201 /* Slider for adjustment: volume / color / bass / etc */ +#define DIBUTTON_REMOTE_MUTE 0x27000401 /* Set volume on current device to zero */ +#define DIBUTTON_REMOTE_SELECT 0x27000402 /* Next/previous: channel/ track / chapter / picture / station */ +#define DIBUTTON_REMOTE_PLAY 0x27002403 /* Start or pause entertainment on current device */ +#define DIBUTTON_REMOTE_CUE 0x27002404 /* Move through current media */ +#define DIBUTTON_REMOTE_REVIEW 0x27002405 /* Move through current media */ +#define DIBUTTON_REMOTE_CHANGE 0x27002406 /* Select next device */ +#define DIBUTTON_REMOTE_RECORD 0x27002407 /* Start recording the current media */ +#define DIBUTTON_REMOTE_MENU 0x270004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIAXIS_REMOTE_SLIDER2 0x27054202 /* Slider for adjustment: volume */ +#define DIBUTTON_REMOTE_TV 0x27005C08 /* Select TV */ +#define DIBUTTON_REMOTE_CABLE 0x27005C09 /* Select cable box */ +#define DIBUTTON_REMOTE_CD 0x27005C0A /* Select CD player */ +#define DIBUTTON_REMOTE_VCR 0x27005C0B /* Select VCR */ +#define DIBUTTON_REMOTE_TUNER 0x27005C0C /* Select tuner */ +#define DIBUTTON_REMOTE_DVD 0x27005C0D /* Select DVD player */ +#define DIBUTTON_REMOTE_ADJUST 0x27005C0E /* Enter device adjustment menu */ +#define DIBUTTON_REMOTE_DIGIT0 0x2700540F /* Digit 0 */ +#define DIBUTTON_REMOTE_DIGIT1 0x27005410 /* Digit 1 */ +#define DIBUTTON_REMOTE_DIGIT2 0x27005411 /* Digit 2 */ +#define DIBUTTON_REMOTE_DIGIT3 0x27005412 /* Digit 3 */ +#define DIBUTTON_REMOTE_DIGIT4 0x27005413 /* Digit 4 */ +#define DIBUTTON_REMOTE_DIGIT5 0x27005414 /* Digit 5 */ +#define DIBUTTON_REMOTE_DIGIT6 0x27005415 /* Digit 6 */ +#define DIBUTTON_REMOTE_DIGIT7 0x27005416 /* Digit 7 */ +#define DIBUTTON_REMOTE_DIGIT8 0x27005417 /* Digit 8 */ +#define DIBUTTON_REMOTE_DIGIT9 0x27005418 /* Digit 9 */ +#define DIBUTTON_REMOTE_DEVICE 0x270044FE /* Show input device and controls */ +#define DIBUTTON_REMOTE_PAUSE 0x270044FC /* Start / Pause / Restart game */ + +/*--- Control- Web + Help or Browser ---*/ +#define DIVIRTUAL_BROWSER_CONTROL 0x28000000 +#define DIAXIS_BROWSER_LATERAL 0x28008201 /* Move on screen pointer */ +#define DIAXIS_BROWSER_MOVE 0x28010202 /* Move on screen pointer */ +#define DIBUTTON_BROWSER_SELECT 0x28000401 /* Select current item */ +#define DIAXIS_BROWSER_VIEW 0x28018203 /* Move view up/down */ +#define DIBUTTON_BROWSER_REFRESH 0x28000402 /* Refresh */ +#define DIBUTTON_BROWSER_MENU 0x280004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_BROWSER_SEARCH 0x28004403 /* Use search tool */ +#define DIBUTTON_BROWSER_STOP 0x28004404 /* Cease current update */ +#define DIBUTTON_BROWSER_HOME 0x28004405 /* Go directly to "home" location */ +#define DIBUTTON_BROWSER_FAVORITES 0x28004406 /* Mark current site as favorite */ +#define DIBUTTON_BROWSER_NEXT 0x28004407 /* Select Next page */ +#define DIBUTTON_BROWSER_PREVIOUS 0x28004408 /* Select Previous page */ +#define DIBUTTON_BROWSER_HISTORY 0x28004409 /* Show/Hide History */ +#define DIBUTTON_BROWSER_PRINT 0x2800440A /* Print current page */ +#define DIBUTTON_BROWSER_DEVICE 0x280044FE /* Show input device and controls */ +#define DIBUTTON_BROWSER_PAUSE 0x280044FC /* Start / Pause / Restart game */ + +/*--- Driving Simulator - Giant Walking Robot + Walking tank with weapons ---*/ +#define DIVIRTUAL_DRIVING_MECHA 0x29000000 +#define DIAXIS_MECHA_STEER 0x29008201 /* Turns mecha left/right */ +#define DIAXIS_MECHA_TORSO 0x29010202 /* Tilts torso forward/backward */ +#define DIAXIS_MECHA_ROTATE 0x29020203 /* Turns torso left/right */ +#define DIAXIS_MECHA_THROTTLE 0x29038204 /* Engine Speed */ +#define DIBUTTON_MECHA_FIRE 0x29000401 /* Fire */ +#define DIBUTTON_MECHA_WEAPONS 0x29000402 /* Select next weapon group */ +#define DIBUTTON_MECHA_TARGET 0x29000403 /* Select closest enemy available target */ +#define DIBUTTON_MECHA_REVERSE 0x29000404 /* Toggles throttle in/out of reverse */ +#define DIBUTTON_MECHA_ZOOM 0x29000405 /* Zoom in/out targeting reticule */ +#define DIBUTTON_MECHA_JUMP 0x29000406 /* Fires jump jets */ +#define DIBUTTON_MECHA_MENU 0x290004FD /* Show menu options */ +/*--- Priority 2 controls ---*/ + +#define DIBUTTON_MECHA_CENTER 0x29004407 /* Center torso to legs */ +#define DIHATSWITCH_MECHA_GLANCE 0x29004601 /* Look around */ +#define DIBUTTON_MECHA_VIEW 0x29004408 /* Cycle through view options */ +#define DIBUTTON_MECHA_FIRESECONDARY 0x29004409 /* Alternative fire button */ +#define DIBUTTON_MECHA_LEFT_LINK 0x2900C4E4 /* Fallback steer left button */ +#define DIBUTTON_MECHA_RIGHT_LINK 0x2900C4EC /* Fallback steer right button */ +#define DIBUTTON_MECHA_FORWARD_LINK 0x290144E0 /* Fallback tilt torso forward button */ +#define DIBUTTON_MECHA_BACK_LINK 0x290144E8 /* Fallback tilt toroso backward button */ +#define DIBUTTON_MECHA_ROTATE_LEFT_LINK 0x290244E4 /* Fallback rotate toroso right button */ +#define DIBUTTON_MECHA_ROTATE_RIGHT_LINK 0x290244EC /* Fallback rotate torso left button */ +#define DIBUTTON_MECHA_FASTER_LINK 0x2903C4E0 /* Fallback increase engine speed */ +#define DIBUTTON_MECHA_SLOWER_LINK 0x2903C4E8 /* Fallback decrease engine speed */ +#define DIBUTTON_MECHA_DEVICE 0x290044FE /* Show input device and controls */ +#define DIBUTTON_MECHA_PAUSE 0x290044FC /* Start / Pause / Restart game */ + +/* + * "ANY" semantics can be used as a last resort to get mappings for actions + * that match nothing in the chosen virtual genre. These semantics will be + * mapped at a lower priority that virtual genre semantics. Also, hardware + * vendors will not be able to provide sensible mappings for these unless + * they provide application specific mappings. + */ +#define DIAXIS_ANY_X_1 0xFF00C201 +#define DIAXIS_ANY_X_2 0xFF00C202 +#define DIAXIS_ANY_Y_1 0xFF014201 +#define DIAXIS_ANY_Y_2 0xFF014202 +#define DIAXIS_ANY_Z_1 0xFF01C201 +#define DIAXIS_ANY_Z_2 0xFF01C202 +#define DIAXIS_ANY_R_1 0xFF024201 +#define DIAXIS_ANY_R_2 0xFF024202 +#define DIAXIS_ANY_U_1 0xFF02C201 +#define DIAXIS_ANY_U_2 0xFF02C202 +#define DIAXIS_ANY_V_1 0xFF034201 +#define DIAXIS_ANY_V_2 0xFF034202 +#define DIAXIS_ANY_A_1 0xFF03C201 +#define DIAXIS_ANY_A_2 0xFF03C202 +#define DIAXIS_ANY_B_1 0xFF044201 +#define DIAXIS_ANY_B_2 0xFF044202 +#define DIAXIS_ANY_C_1 0xFF04C201 +#define DIAXIS_ANY_C_2 0xFF04C202 +#define DIAXIS_ANY_S_1 0xFF054201 +#define DIAXIS_ANY_S_2 0xFF054202 + +#define DIAXIS_ANY_1 0xFF004201 +#define DIAXIS_ANY_2 0xFF004202 +#define DIAXIS_ANY_3 0xFF004203 +#define DIAXIS_ANY_4 0xFF004204 + +#define DIPOV_ANY_1 0xFF004601 +#define DIPOV_ANY_2 0xFF004602 +#define DIPOV_ANY_3 0xFF004603 +#define DIPOV_ANY_4 0xFF004604 + +#define DIBUTTON_ANY(instance) ( 0xFF004400 | instance ) + + +#ifdef __cplusplus +}; +#endif + +#endif /* __DINPUT_INCLUDED__ */ + +/**************************************************************************** + * + * Definitions for non-IDirectInput (VJoyD) features defined more recently + * than the current sdk files + * + ****************************************************************************/ + +#ifdef _INC_MMSYSTEM +#ifndef MMNOJOY + +#ifndef __VJOYDX_INCLUDED__ +#define __VJOYDX_INCLUDED__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Flag to indicate that the dwReserved2 field of the JOYINFOEX structure + * contains mini-driver specific data to be passed by VJoyD to the mini- + * driver instead of doing a poll. + */ +#define JOY_PASSDRIVERDATA 0x10000000l + +/* + * Informs the joystick driver that the configuration has been changed + * and should be reloaded from the registery. + * dwFlags is reserved and should be set to zero + */ +WINMMAPI MMRESULT WINAPI joyConfigChanged( DWORD dwFlags ); + + +/* + * Hardware Setting indicating that the device is a headtracker + */ +#define JOY_HWS_ISHEADTRACKER 0x02000000l + +/* + * Hardware Setting indicating that the VxD is used to replace + * the standard analog polling + */ +#define JOY_HWS_ISGAMEPORTDRIVER 0x04000000l + +/* + * Hardware Setting indicating that the driver needs a standard + * gameport in order to communicate with the device. + */ +#define JOY_HWS_ISANALOGPORTDRIVER 0x08000000l + +/* + * Hardware Setting indicating that VJoyD should not load this + * driver, it will be loaded externally and will register with + * VJoyD of it's own accord. + */ +#define JOY_HWS_AUTOLOAD 0x10000000l + +/* + * Hardware Setting indicating that the driver acquires any + * resources needed without needing a devnode through VJoyD. + */ +#define JOY_HWS_NODEVNODE 0x20000000l + + +/* + * Hardware Setting indicating that the device is a gameport bus + */ +#define JOY_HWS_ISGAMEPORTBUS 0x80000000l +#define JOY_HWS_GAMEPORTBUSBUSY 0x00000001l + +/* + * Usage Setting indicating that the settings are volatile and + * should be removed if still present on a reboot. + */ +#define JOY_US_VOLATILE 0x00000008L + +#ifdef __cplusplus +}; +#endif + +#endif /* __VJOYDX_INCLUDED__ */ + +#endif /* not MMNOJOY */ +#endif /* _INC_MMSYSTEM */ + +/**************************************************************************** + * + * Definitions for non-IDirectInput (VJoyD) features defined more recently + * than the current ddk files + * + ****************************************************************************/ + +#ifndef DIJ_RINGZERO + +#ifdef _INC_MMDDK +#ifndef MMNOJOYDEV + +#ifndef __VJOYDXD_INCLUDED__ +#define __VJOYDXD_INCLUDED__ +/* + * Poll type in which the do_other field of the JOYOEMPOLLDATA + * structure contains mini-driver specific data passed from an app. + */ +#define JOY_OEMPOLL_PASSDRIVERDATA 7 + +#endif /* __VJOYDXD_INCLUDED__ */ + +#endif /* not MMNOJOYDEV */ +#endif /* _INC_MMDDK */ + +#endif /* DIJ_RINGZERO */ + diff --git a/client_files/native_autoloot/eq-core-dll/eq-core-dll-visualstudio2019.sln b/client_files/native_autoloot/eq-core-dll/eq-core-dll-visualstudio2019.sln new file mode 100644 index 0000000000..8ff0c17b9f --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/eq-core-dll-visualstudio2019.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 2012 for Windows Desktop +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eq-core-dll", "src\eq-core-dll-vs2019.vcxproj", "{78B33BC6-FD0D-456F-B152-5BB245677C25}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {78B33BC6-FD0D-456F-B152-5BB245677C25}.Debug|Win32.ActiveCfg = Debug|Win32 + {78B33BC6-FD0D-456F-B152-5BB245677C25}.Debug|Win32.Build.0 = Debug|Win32 + {78B33BC6-FD0D-456F-B152-5BB245677C25}.Release|Win32.ActiveCfg = Release|Win32 + {78B33BC6-FD0D-456F-B152-5BB245677C25}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/client_files/native_autoloot/eq-core-dll/eq-core-dll-visualstudio2022.sln b/client_files/native_autoloot/eq-core-dll/eq-core-dll-visualstudio2022.sln new file mode 100644 index 0000000000..ae52b849e1 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/eq-core-dll-visualstudio2022.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Express 2012 for Windows Desktop +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "eq-core-dll", "src\eq-core-dll-vs2022.vcxproj", "{78B33BC6-FD0D-456F-B152-5BB245677C25}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {78B33BC6-FD0D-456F-B152-5BB245677C25}.Debug|Win32.ActiveCfg = Debug|Win32 + {78B33BC6-FD0D-456F-B152-5BB245677C25}.Debug|Win32.Build.0 = Debug|Win32 + {78B33BC6-FD0D-456F-B152-5BB245677C25}.Release|Win32.ActiveCfg = Release|Win32 + {78B33BC6-FD0D-456F-B152-5BB245677C25}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/client_files/native_autoloot/eq-core-dll/src/AddressLookupTable.h b/client_files/native_autoloot/eq-core-dll/src/AddressLookupTable.h new file mode 100644 index 0000000000..be28c79766 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/AddressLookupTable.h @@ -0,0 +1,101 @@ +#pragma once + +#include +#include + +constexpr UINT MaxIndex = 6; + +template +class AddressLookupTable +{ +public: + explicit AddressLookupTable() {} + ~AddressLookupTable() + { + ConstructorFlag = true; + + for (const auto& cache : g_map) + { + for (const auto& entry : cache) + { + entry.second->DeleteMe(); + } + } + } + + template + struct AddressCacheIndex { static constexpr UINT CacheIndex = 0; }; + template <> + struct AddressCacheIndex { static constexpr UINT CacheIndex = 1; }; + template <> + struct AddressCacheIndex { static constexpr UINT CacheIndex = 2; }; + template <> + struct AddressCacheIndex { static constexpr UINT CacheIndex = 3; }; + template <> + struct AddressCacheIndex { static constexpr UINT CacheIndex = 4; }; + template <> + struct AddressCacheIndex { static constexpr UINT CacheIndex = 5; }; + + template + T *FindAddress(void *Proxy) + { + if (!Proxy) + { + return nullptr; + } + + constexpr UINT CacheIndex = AddressCacheIndex::CacheIndex; + auto it = g_map[CacheIndex].find(Proxy); + + if (it != std::end(g_map[CacheIndex])) + { + return static_cast(it->second); + } + + return new T(static_cast(Proxy)); + } + + template + void SaveAddress(T *Wrapper, void *Proxy) + { + constexpr UINT CacheIndex = AddressCacheIndex::CacheIndex; + if (Wrapper && Proxy) + { + g_map[CacheIndex][Proxy] = Wrapper; + } + } + + template + void DeleteAddress(T *Wrapper) + { + if (!Wrapper || ConstructorFlag) + { + return; + } + + constexpr UINT CacheIndex = AddressCacheIndex::CacheIndex; + auto it = std::find_if(g_map[CacheIndex].begin(), g_map[CacheIndex].end(), + [=](auto Map) -> bool { return Map.second == Wrapper; }); + + if (it != std::end(g_map[CacheIndex])) + { + it = g_map[CacheIndex].erase(it); + } + } + +private: + bool ConstructorFlag = false; + D *unused = nullptr; + std::unordered_map g_map[MaxIndex]; +}; + +class AddressLookupTableObject +{ +public: + virtual ~AddressLookupTableObject() { } + + void DeleteMe() + { + delete this; + } +}; diff --git a/hc/zone.cpp b/client_files/native_autoloot/eq-core-dll/src/DetoursAPI.cpp similarity index 100% rename from hc/zone.cpp rename to client_files/native_autoloot/eq-core-dll/src/DetoursAPI.cpp diff --git a/client_files/native_autoloot/eq-core-dll/src/EQClasses.cpp b/client_files/native_autoloot/eq-core-dll/src/EQClasses.cpp new file mode 100644 index 0000000000..02135dc008 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/EQClasses.cpp @@ -0,0 +1,9645 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#define DBG_SPEW + + +#include "MQ2Main.h" + +enum UIType CXWnd::GetType() +{ + if (CXMLData *pXMLData=GetXMLData()) + return pXMLData->Type; + return UI_Unknown; +} + +enum UIType CSidlScreenWnd::GetType() +{ + if (CXMLData *pXMLData=GetXMLData()) + return pXMLData->Type; + return UI_Unknown; +} + +class CXMLData * CXWnd::GetXMLData() +{ + if (XMLIndex) + return ((CXMLDataManager*)&((PCSIDLMGR)pSidlMgr)->pXMLDataMgr)->GetXMLData(XMLIndex>>16,XMLIndex&0xFFFF); + //DebugSpew("CXWnd::GetXMLData()=0"); + return 0; +} +class CXMLData * CSidlScreenWnd::GetXMLData() +{ + if (XMLIndex) + return ((CXMLDataManager*)&((PCSIDLMGR)pSidlMgr)->pXMLDataMgr)->GetXMLData(XMLIndex>>16,XMLIndex&0xFFFF); + //DebugSpew("CSidlScreenWnd::GetXMLData()=0"); + return 0; +} + +// fuck -- if you try to use the native GetChildItem, then +// it fails to find things without a ScreenID + +class CXWnd *RecurseAndFindName(class CXWnd *pWnd, PCHAR Name) +{ + CHAR Buffer[MAX_STRING]={0}; + class CXWnd *tmp; + + if (!pWnd) return pWnd; + + if (CXMLData *pXMLData=pWnd->GetXMLData()) { + if (GetCXStr(pXMLData->Name.Ptr,Buffer,MAX_STRING) && !stricmp(Buffer,Name)) { + return pWnd; + } + //DebugSpew("RecurseAndFindName looking for %s but found %s", Name, Buffer); + if (GetCXStr(pXMLData->ScreenID.Ptr,Buffer,MAX_STRING) && !stricmp(Buffer,Name)) { + return pWnd; + } + } + + if (pWnd->pFirstChildWnd) { + tmp = RecurseAndFindName((class CXWnd *)pWnd->pFirstChildWnd, Name); + if (tmp) + return tmp; + } + return RecurseAndFindName((class CXWnd *)pWnd->pNextSiblingWnd, Name); +} + +class CXWnd * CXWnd::GetChildItem(PCHAR Name) +{ + //return GetChildItem(CXStr(Name)); + return RecurseAndFindName(this, Name); +} + +class CXWnd * CSidlScreenWnd::GetChildItem(PCHAR Name) +{ + return RecurseAndFindName((class CXWnd *)this, Name); +} + +class CScreenPieceTemplate * CSidlManager::FindScreenPieceTemplate(char *str) +{ + return FindScreenPieceTemplate(&CXStr(str)); +} +void CComboWnd::InsertChoice(char *str) +{ + InsertChoice(&CXStr(str),0); +} + +int CListWnd::AddString(const char *Str, COLORREF Color, uint32_t Data, const CTextureAnimation *pTa, const char* TooltipStr) +{ + return AddString(CXStr(Str), Color, Data, pTa, TooltipStr); +} + +void CEditBaseWnd::SetMaxChars(int maxChars) +{ + this->MaxChars = maxChars; + int len = 0; + + if(this->InputText) + { + len = this->InputText->Length; + } + + if(len > maxChars) + { + ((CXWnd*)this)->SetWindowTextA(CXStr(this->InputText->Text)); + } +} + +CXPoint CXRect::CenterPoint()const +{ + CXPoint p; + + p.A = this->A + ((this->C - this->A) / 2); + p.B = this->B + ((this->D - this->B) / 2); // (bottom - top / 2) + top + + return p; +} + +// MANUAL IMPORTS +#ifdef CMyInventory__GetSlot_x +FUNCTION_AT_ADDRESS(struct _CONTENTS* CMyInventory::GetSlot(int), CMyInventory__GetSlot); +#endif + +#ifdef EQ_Item__CreateItemTagString_x +FUNCTION_AT_ADDRESS(char * EQ_Item::CreateItemTagString(char *, int),EQ_Item__CreateItemTagString); // Lax 11-14-2003 +#endif +#ifdef CStmlWnd__AppendSTML_x +FUNCTION_AT_ADDRESS(class CXSize CStmlWnd::AppendSTML(class CXStr),CStmlWnd__AppendSTML); +#endif +#ifdef EQ_Item__CanDrop_x +FUNCTION_AT_ADDRESS(int EQ_Item::CanDrop(bool,int,int,int),EQ_Item__CanDrop); // dkaa 2-11-2011 +#endif + +/////////////////////////////////////////////////////////////////// +// gah, i hate sony +#ifdef EQ_Character__Max_Endurance_x +FUNCTION_AT_ADDRESS(int EQ_Character1::Max_Endurance(int),EQ_Character__Max_Endurance); +#endif +//fuck virtual +#ifdef EQ_Character__Max_Mana_x +FUNCTION_AT_ADDRESS(int EQ_Character1::Max_Mana(int), EQ_Character__Max_Mana); +#endif +#ifdef EQ_Character__Max_HP_x +FUNCTION_AT_ADDRESS(int EQ_Character1::Max_HP(int,int),EQ_Character__Max_HP); +#endif +///////////////////////////////////////////////////////////////////// + +#ifdef EQ_Character__doCombatAbility_x +FUNCTION_AT_ADDRESS(bool EQ_Character::DoCombatAbility(int spellID, int dummy), EQ_Character__doCombatAbility); +#endif + + +FUNCTION_AT_VIRTUAL_ADDRESS(void CChatWindow::operator delete[](void*),0x04); + +FUNCTION_AT_VIRTUAL_ADDRESS(bool CXWnd::IsValid(void)const,0); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::WndNotification(class CXWnd *,unsigned __int32,void *),0x88); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::OnResize(int,int),0x098); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::Show(bool,bool,bool),0x0d8); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::SetVScrollPos(int),0x134); +FUNCTION_AT_VIRTUAL_ADDRESS(void CXWnd::SetWindowTextA(class CXStr &),0x124); + +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::HandleLButtonDown(class CXPoint *,unsigned __int32),0x38); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::HandleLButtonUp(class CXPoint *,unsigned __int32),0x3c); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::HandleLButtonHeld(class CXPoint *,unsigned __int32),0x40); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::HandleLButtonUpAfterHeld(class CXPoint *,unsigned __int32),0x44); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::HandleRButtonDown(class CXPoint *,unsigned __int32),0x48); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::HandleRButtonUp(class CXPoint *,unsigned __int32),0x4c); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::HandleRButtonHeld(class CXPoint *,unsigned __int32),0x50); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::HandleRButtonUpAfterHeld(class CXPoint *,unsigned __int32),0x54); +FUNCTION_AT_VIRTUAL_ADDRESS(int CXWnd::OnMinimizeBox(void),0xa8); + + +FUNCTION_AT_VIRTUAL_ADDRESS(void CListWnd::DeleteAll(void),0x17c); + + +// AUTO IMPORTS + +#ifdef CAAWnd__CAAWnd_x +FUNCTION_AT_ADDRESS( CAAWnd::CAAWnd(class CXWnd *),CAAWnd__CAAWnd); +#endif +#ifdef CAAWnd__Update_x +FUNCTION_AT_ADDRESS(void CAAWnd::Update(void),CAAWnd__Update); +#endif +#ifdef CAAWnd__UpdateSelected_x +FUNCTION_AT_ADDRESS(void CAAWnd::UpdateSelected(void),CAAWnd__UpdateSelected); +#endif +#ifdef CAAWnd__UpdateTimer_x +FUNCTION_AT_ADDRESS(void CAAWnd::UpdateTimer(void),CAAWnd__UpdateTimer); +#endif +#ifdef CAAWnd__Init_x +FUNCTION_AT_ADDRESS(void CAAWnd::Init(void),CAAWnd__Init); +#endif +#ifdef CAAWnd__Activate_x +FUNCTION_AT_ADDRESS(void CAAWnd::Activate(void),CAAWnd__Activate); +#endif +#ifdef CAAWnd__ShowAbility_x +FUNCTION_AT_ADDRESS(void CAAWnd::ShowAbility(int),CAAWnd__ShowAbility); +#endif +#ifdef CAAWnd__SendNewPercent_x +FUNCTION_AT_ADDRESS(void CAAWnd::SendNewPercent(void),CAAWnd__SendNewPercent); +#endif +#ifdef CAAWnd__ConfirmAASpend_x +FUNCTION_AT_ADDRESS(void CAAWnd::ConfirmAASpend(void),CAAWnd__ConfirmAASpend); +#endif +#ifdef CXStr__CXStr_x +FUNCTION_AT_ADDRESS( CXStr::CXStr(class CXStr const &),CXStr__CXStr); +#endif +#ifdef CXMLSOMCursor__dCXMLSOMCursor_x +FUNCTION_AT_ADDRESS( CXMLSOMCursor::~CXMLSOMCursor(void),CXMLSOMCursor__dCXMLSOMCursor); +#endif +#ifdef CKeyCXStrValueInt32__dCKeyCXStrValueInt32_x +FUNCTION_AT_ADDRESS( CKeyCXStrValueInt32::~CKeyCXStrValueInt32(void),CKeyCXStrValueInt32__dCKeyCXStrValueInt32); +#endif +#ifdef COptionsWnd__KeyboardAssignmentData__dKeyboardAssignmentData_x +//FUNCTION_AT_ADDRESS( COptionsWnd::KeyboardAssignmentData::~KeyboardAssignmentData(void),COptionsWnd__KeyboardAssignmentData__dKeyboardAssignmentData); +#endif +#ifdef CXStr__dCXStr_x +FUNCTION_AT_ADDRESS( CXStr::~CXStr(void),CXStr__dCXStr); +#endif +#ifdef CUITextureInfo__CUITextureInfo_x +FUNCTION_AT_ADDRESS( CUITextureInfo::CUITextureInfo(class CXStr,int),CUITextureInfo__CUITextureInfo); +#endif +#ifdef CXMLSOMNodePtr__dCXMLSOMNodePtr_x +FUNCTION_AT_ADDRESS( CXMLSOMNodePtr::~CXMLSOMNodePtr(void),CXMLSOMNodePtr__dCXMLSOMNodePtr); +#endif +#ifdef CXMLSOMNode__dCXMLSOMNode_x +FUNCTION_AT_ADDRESS( CXMLSOMNode::~CXMLSOMNode(void),CXMLSOMNode__dCXMLSOMNode); +#endif +#ifdef CXMLSOMAttribute__dCXMLSOMAttribute_x +FUNCTION_AT_ADDRESS( CXMLSOMAttribute::~CXMLSOMAttribute(void),CXMLSOMAttribute__dCXMLSOMAttribute); +#endif +#ifdef CActionsWnd__CActionsWnd_x +FUNCTION_AT_ADDRESS( CActionsWnd::CActionsWnd(class CXWnd *),CActionsWnd__CActionsWnd); +#endif +#ifdef CActionsWnd__Activate_x +FUNCTION_AT_ADDRESS(void CActionsWnd::Activate(int),CActionsWnd__Activate); +#endif +#ifdef CActionsWnd__UpdateButtonText_x +FUNCTION_AT_ADDRESS(void CActionsWnd::UpdateButtonText(void),CActionsWnd__UpdateButtonText); +#endif +#ifdef CActionsWnd__GetCurrentPageEnum_x +FUNCTION_AT_ADDRESS(int CActionsWnd::GetCurrentPageEnum(void)const ,CActionsWnd__GetCurrentPageEnum); +#endif +/* OTHER FUNCTIONS IMPORTED FROM EQ */ +#ifdef __CastRay_x +FUNCTION_AT_ADDRESS(int CastRay(PSPAWNINFO, float y, float x, float z), __CastRay); +#endif +#ifdef Util__FastTime_x +FUNCTION_AT_ADDRESS(unsigned long GetFastTime(void), Util__FastTime); +#endif +#ifdef __GetXTargetType_x +FUNCTION_AT_ADDRESS(char* __stdcall GetXtargetType(DWORD type), __GetXTargetType); +#endif +#ifdef __EQGetTime_x +FUNCTION_AT_ADDRESS(DWORD EQGetTime(), __EQGetTime); +#endif +#ifdef CActionsWnd__KeyMapUpdated_x +FUNCTION_AT_ADDRESS(void CActionsWnd::KeyMapUpdated(void),CActionsWnd__KeyMapUpdated); +#endif +#ifdef CActionsWnd__SelectSkillForAbilityBtn_x +FUNCTION_AT_ADDRESS(void CActionsWnd::SelectSkillForAbilityBtn(int),CActionsWnd__SelectSkillForAbilityBtn); +#endif +#ifdef CActionsWnd__GetAbilityBtn_x +FUNCTION_AT_ADDRESS(class CButtonWnd * CActionsWnd::GetAbilityBtn(int),CActionsWnd__GetAbilityBtn); +#endif +#ifdef CActionsWnd__SelectSkillForCombatBtn_x +FUNCTION_AT_ADDRESS(void CActionsWnd::SelectSkillForCombatBtn(int),CActionsWnd__SelectSkillForCombatBtn); +#endif +#ifdef CActionsWnd__GetCombatBtn_x +FUNCTION_AT_ADDRESS(class CButtonWnd * CActionsWnd::GetCombatBtn(int),CActionsWnd__GetCombatBtn); +#endif +#ifdef CActionsWnd__GetMenuBtn_x +FUNCTION_AT_ADDRESS(class CButtonWnd * CActionsWnd::GetMenuBtn(int),CActionsWnd__GetMenuBtn); +#endif +#ifdef CActionsWnd__RedirectActivateTo_x +FUNCTION_AT_ADDRESS(int CActionsWnd::RedirectActivateTo(class CPageWnd *),CActionsWnd__RedirectActivateTo); +#endif +#ifdef CActionsWnd__RedirectDeactivateTo_x +FUNCTION_AT_ADDRESS(int CActionsWnd::RedirectDeactivateTo(class CPageWnd *),CActionsWnd__RedirectDeactivateTo); +#endif +#ifdef CActionsWnd__RedirectOnProcessFrameTo_x +FUNCTION_AT_ADDRESS(int CActionsWnd::RedirectOnProcessFrameTo(class CPageWnd *),CActionsWnd__RedirectOnProcessFrameTo); +#endif +#ifdef CActionsWnd__RedirectWndNotificationTo_x +FUNCTION_AT_ADDRESS(int CActionsWnd::RedirectWndNotificationTo(class CPageWnd *,class CXWnd *,unsigned __int32,void *),CActionsWnd__RedirectWndNotificationTo); +#endif +#ifdef CActionsWnd__MainPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int CActionsWnd::MainPageOnProcessFrame(void),CActionsWnd__MainPageOnProcessFrame); +#endif +#ifdef CActionsWnd__MainPageWndNotification_x +FUNCTION_AT_ADDRESS(int CActionsWnd::MainPageWndNotification(class CXWnd *,unsigned __int32,void *),CActionsWnd__MainPageWndNotification); +#endif +#ifdef CActionsWnd__AbilitiesPageActivate_x +FUNCTION_AT_ADDRESS(int CActionsWnd::AbilitiesPageActivate(void),CActionsWnd__AbilitiesPageActivate); +#endif +#ifdef CActionsWnd__AbilitiesPageDeactivate_x +FUNCTION_AT_ADDRESS(int CActionsWnd::AbilitiesPageDeactivate(void),CActionsWnd__AbilitiesPageDeactivate); +#endif +#ifdef CActionsWnd__AbilitiesPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int CActionsWnd::AbilitiesPageOnProcessFrame(void),CActionsWnd__AbilitiesPageOnProcessFrame); +#endif +#ifdef CActionsWnd__AbilitiesPageWndNotification_x +FUNCTION_AT_ADDRESS(int CActionsWnd::AbilitiesPageWndNotification(class CXWnd *,unsigned __int32,void *),CActionsWnd__AbilitiesPageWndNotification); +#endif +#ifdef CActionsWnd__CombatPageActivate_x +FUNCTION_AT_ADDRESS(int CActionsWnd::CombatPageActivate(void),CActionsWnd__CombatPageActivate); +#endif +#ifdef CActionsWnd__CombatPageDeactivate_x +FUNCTION_AT_ADDRESS(int CActionsWnd::CombatPageDeactivate(void),CActionsWnd__CombatPageDeactivate); +#endif +#ifdef CActionsWnd__CombatPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int CActionsWnd::CombatPageOnProcessFrame(void),CActionsWnd__CombatPageOnProcessFrame); +#endif +#ifdef CActionsWnd__CombatPageWndNotification_x +FUNCTION_AT_ADDRESS(int CActionsWnd::CombatPageWndNotification(class CXWnd *,unsigned __int32,void *),CActionsWnd__CombatPageWndNotification); +#endif +#ifdef CActionsWnd__SocialsPageActivate_x +FUNCTION_AT_ADDRESS(int CActionsWnd::SocialsPageActivate(void),CActionsWnd__SocialsPageActivate); +#endif +#ifdef CActionsWnd__SocialsPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int CActionsWnd::SocialsPageOnProcessFrame(void),CActionsWnd__SocialsPageOnProcessFrame); +#endif +#ifdef CActionsWnd__SocialsPageWndNotification_x +FUNCTION_AT_ADDRESS(int CActionsWnd::SocialsPageWndNotification(class CXWnd *,unsigned __int32,void *),CActionsWnd__SocialsPageWndNotification); +#endif +#ifdef CAlarmWnd__CAlarmWnd_x +FUNCTION_AT_ADDRESS( CAlarmWnd::CAlarmWnd(class CXWnd *),CAlarmWnd__CAlarmWnd); +#endif +#ifdef CAlarmWnd__Activate_x +FUNCTION_AT_ADDRESS(void CAlarmWnd::Activate(void),CAlarmWnd__Activate); +#endif +#ifdef CAlarmWnd__DoNeverButton_x +FUNCTION_AT_ADDRESS(void CAlarmWnd::DoNeverButton(void),CAlarmWnd__DoNeverButton); +#endif +#ifdef CEditBaseWnd__SetMaxChars_x +FUNCTION_AT_ADDRESS(void CEditBaseWnd::SetMaxChars(int),CEditBaseWnd__SetMaxChars); +#endif +#ifdef CBankWnd__CBankWnd_x +FUNCTION_AT_ADDRESS( CBankWnd::CBankWnd(class CXWnd *,class CXStr),CBankWnd__CBankWnd); +#endif +#ifdef CBankWnd__Init_x +FUNCTION_AT_ADDRESS(void CBankWnd::Init(void),CBankWnd__Init); +#endif +#ifdef CBankWnd__Activate_x +FUNCTION_AT_ADDRESS(void CBankWnd::Activate(class EQPlayer *),CBankWnd__Activate); +#endif +#ifdef CBankWnd__Deactivate_x +FUNCTION_AT_ADDRESS(void CBankWnd::Deactivate(bool),CBankWnd__Deactivate); +#endif +#ifdef CBankWnd__ClickedMoneyButton_x +FUNCTION_AT_ADDRESS(void CBankWnd::ClickedMoneyButton(int,int),CBankWnd__ClickedMoneyButton); +#endif +#ifdef CBankWnd__GetBankQtyFromCoinType_x +FUNCTION_AT_ADDRESS(long CBankWnd::GetBankQtyFromCoinType(int),CBankWnd__GetBankQtyFromCoinType); +#endif +#ifdef CBankWnd__UpdateMoneyDisplay_x +FUNCTION_AT_ADDRESS(void CBankWnd::UpdateMoneyDisplay(void),CBankWnd__UpdateMoneyDisplay); +#endif +#ifdef CBankWnd__GetNumBankSlots_x +FUNCTION_AT_ADDRESS(int CBankWnd::GetNumBankSlots(void)const ,CBankWnd__GetNumBankSlots); +#endif +#ifdef CXRect__CenterPoint_x +FUNCTION_AT_ADDRESS(class CXPoint CXRect::CenterPoint(void)const ,CXRect__CenterPoint); +#endif +#ifdef CBazaarSearchWnd__CBazaarSearchWnd_x +FUNCTION_AT_ADDRESS( CBazaarSearchWnd::CBazaarSearchWnd(class CXWnd *),CBazaarSearchWnd__CBazaarSearchWnd); +#endif +#ifdef CBazaarSearchWnd__InitListArray_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::InitListArray(void),CBazaarSearchWnd__InitListArray); +#endif +#ifdef CBazaarSearchWnd__Init_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::Init(void),CBazaarSearchWnd__Init); +#endif +#ifdef CBazaarSearchWnd__UpdatePlayerUpdateButton_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::UpdatePlayerUpdateButton(bool),CBazaarSearchWnd__UpdatePlayerUpdateButton); +#endif +#ifdef CBazaarSearchWnd__UpdatePlayerCombo_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::UpdatePlayerCombo(void),CBazaarSearchWnd__UpdatePlayerCombo); +#endif +#ifdef CBazaarSearchWnd__Activate_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::Activate(void),CBazaarSearchWnd__Activate); +#endif +#ifdef CBazaarSearchWnd__GetPriceString_x +FUNCTION_AT_ADDRESS(char * CBazaarSearchWnd::GetPriceString(unsigned long),CBazaarSearchWnd__GetPriceString); +#endif +#ifdef CBazaarSearchWnd__SortItemList_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::SortItemList(int),CBazaarSearchWnd__SortItemList); +#endif +#ifdef CBazaarSearchWnd__AddItemtoList_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::AddItemtoList(char *,unsigned long,char *,int,int),CBazaarSearchWnd__AddItemtoList); +#endif +#ifdef CBazaarSearchWnd__UpdateComboButtons_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::UpdateComboButtons(void),CBazaarSearchWnd__UpdateComboButtons); +#endif +#ifdef CBazaarSearchWnd__HandleBazaarMsg_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::HandleBazaarMsg(char *,int),CBazaarSearchWnd__HandleBazaarMsg); +#endif +#ifdef CBazaarSearchWnd__doQuery_x +FUNCTION_AT_ADDRESS(void CBazaarSearchWnd::doQuery(void),CBazaarSearchWnd__doQuery); +#endif +#ifdef CBazaarWnd__CBazaarWnd_x +FUNCTION_AT_ADDRESS( CBazaarWnd::CBazaarWnd(class CXWnd *),CBazaarWnd__CBazaarWnd); +#endif +#ifdef CBazaarWnd__Init_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::Init(void),CBazaarWnd__Init); +#endif +#ifdef CBazaarWnd__CreateBZRIniFilename_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::CreateBZRIniFilename(void),CBazaarWnd__CreateBZRIniFilename); +#endif +#ifdef CBazaarWnd__AddBazaarText_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::AddBazaarText(char *,int),CBazaarWnd__AddBazaarText); +#endif +#ifdef CBazaarWnd__ReturnItemByIndex_x +FUNCTION_AT_ADDRESS(class EQ_Item * CBazaarWnd::ReturnItemByIndex(int),CBazaarWnd__ReturnItemByIndex); +#endif +#ifdef CBazaarWnd__GetPriceString_x +FUNCTION_AT_ADDRESS(char * CBazaarWnd::GetPriceString(unsigned long),CBazaarWnd__GetPriceString); +#endif +#ifdef CBazaarWnd__HandleTraderMsg_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::HandleTraderMsg(char *),CBazaarWnd__HandleTraderMsg); +#endif +#ifdef CBazaarWnd__RebuildItemArray_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::RebuildItemArray(void),CBazaarWnd__RebuildItemArray); +#endif +#ifdef CBazaarWnd__BuildBazaarItemArray_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::BuildBazaarItemArray(void),CBazaarWnd__BuildBazaarItemArray); +#endif +#ifdef CBazaarWnd__AddEquipmentToBazaarArray_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::AddEquipmentToBazaarArray(class EQ_Item *,int,unsigned long),CBazaarWnd__AddEquipmentToBazaarArray); +#endif +#ifdef CBazaarWnd__Activate_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::Activate(void),CBazaarWnd__Activate); +#endif +#ifdef CBazaarWnd__UpdatePriceButtons_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::UpdatePriceButtons(void),CBazaarWnd__UpdatePriceButtons); +#endif +#ifdef CBazaarWnd__StoreSelectedPrice_x +FUNCTION_AT_ADDRESS(bool CBazaarWnd::StoreSelectedPrice(void),CBazaarWnd__StoreSelectedPrice); +#endif +#ifdef CBazaarWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::UpdateButtons(void),CBazaarWnd__UpdateButtons); +#endif +#ifdef CBazaarWnd__SelectBazaarSlotItem_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::SelectBazaarSlotItem(int,class CTextureAnimation *),CBazaarWnd__SelectBazaarSlotItem); +#endif +#ifdef CBazaarWnd__SetMoneyButton_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::SetMoneyButton(int,int),CBazaarWnd__SetMoneyButton); +#endif +#ifdef CBazaarWnd__GetQtyFromCoinType_x +FUNCTION_AT_ADDRESS(long CBazaarWnd::GetQtyFromCoinType(int),CBazaarWnd__GetQtyFromCoinType); +#endif +#ifdef CBazaarWnd__ClickedMoneyButton_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::ClickedMoneyButton(int,int),CBazaarWnd__ClickedMoneyButton); +#endif +#ifdef CBazaarWnd__GetPrice_x +FUNCTION_AT_ADDRESS(unsigned long CBazaarWnd::GetPrice(void),CBazaarWnd__GetPrice); +#endif +#ifdef CBazaarWnd__UpdateBazaarListtoServer_x +FUNCTION_AT_ADDRESS(int CBazaarWnd::UpdateBazaarListtoServer(void),CBazaarWnd__UpdateBazaarListtoServer); +#endif +#ifdef CBazaarWnd__ToggleBzrItemActive_x +FUNCTION_AT_ADDRESS(void CBazaarWnd::ToggleBzrItemActive(int,bool),CBazaarWnd__ToggleBzrItemActive); +#endif +#ifdef CXWnd__GetWindowTextA_x +FUNCTION_AT_ADDRESS(class CXStr CXWnd::GetWindowTextA(void)const ,CXWnd__GetWindowTextA); +#endif +#ifdef CBodyTintWnd__CBodyTintWnd_x +FUNCTION_AT_ADDRESS( CBodyTintWnd::CBodyTintWnd(class CXWnd *),CBodyTintWnd__CBodyTintWnd); +#endif +#ifdef CBodyTintWnd__Activate_x +FUNCTION_AT_ADDRESS(void CBodyTintWnd::Activate(void),CBodyTintWnd__Activate); +#endif +#ifdef CBodyTintWnd__GetTintChangeCount_x +FUNCTION_AT_ADDRESS(void CBodyTintWnd::GetTintChangeCount(void),CBodyTintWnd__GetTintChangeCount); +#endif +#ifdef CBodyTintWnd__GetReagentCount_x +FUNCTION_AT_ADDRESS(void CBodyTintWnd::GetReagentCount(void),CBodyTintWnd__GetReagentCount); +#endif +#ifdef CBodyTintWnd__BuildRBGTooltip_x +FUNCTION_AT_ADDRESS(char * CBodyTintWnd::BuildRBGTooltip(unsigned long,char * const),CBodyTintWnd__BuildRBGTooltip); +#endif +#ifdef CBodyTintWnd__GetItemTint_x +FUNCTION_AT_ADDRESS(unsigned long CBodyTintWnd::GetItemTint(int),CBodyTintWnd__GetItemTint); +#endif +#ifdef CBodyTintWnd__SetSlotLabels_x +FUNCTION_AT_ADDRESS(void CBodyTintWnd::SetSlotLabels(bool),CBodyTintWnd__SetSlotLabels); +#endif +#ifdef CBodyTintWnd__UpdateLocalTintColor_x +FUNCTION_AT_ADDRESS(void CBodyTintWnd::UpdateLocalTintColor(unsigned long),CBodyTintWnd__UpdateLocalTintColor); +#endif +#ifdef CBodyTintWnd__UpdateMaterialTintLocal_x +FUNCTION_AT_ADDRESS(void CBodyTintWnd::UpdateMaterialTintLocal(unsigned long),CBodyTintWnd__UpdateMaterialTintLocal); +#endif +#ifdef CBodyTintWnd__UpdateLabelsAndButtons_x +FUNCTION_AT_ADDRESS(void CBodyTintWnd::UpdateLabelsAndButtons(void),CBodyTintWnd__UpdateLabelsAndButtons); +#endif +#ifdef CBodyTintWnd__GetButtonTint_x +FUNCTION_AT_ADDRESS(unsigned long CBodyTintWnd::GetButtonTint(int),CBodyTintWnd__GetButtonTint); +#endif +#ifdef CBodyTintWnd__StoreModifiedBodyTints_x +FUNCTION_AT_ADDRESS(void CBodyTintWnd::StoreModifiedBodyTints(void),CBodyTintWnd__StoreModifiedBodyTints); +#endif +#ifdef CBodyTintWnd__ResetToOrigBodyTints_x +FUNCTION_AT_ADDRESS(void CBodyTintWnd::ResetToOrigBodyTints(void),CBodyTintWnd__ResetToOrigBodyTints); +#endif +#ifdef CXWnd__SetTooltip_x +FUNCTION_AT_ADDRESS(void CXWnd::SetTooltip(class CXStr),CXWnd__SetTooltip); +#endif +#ifdef CBookWnd__CBookWnd_x +FUNCTION_AT_ADDRESS( CBookWnd::CBookWnd(class CXWnd *),CBookWnd__CBookWnd); +#endif +#ifdef CBookWnd__Activate_x +FUNCTION_AT_ADDRESS(void CBookWnd::Activate(void),CBookWnd__Activate); +#endif +#ifdef CBookWnd__SetBook_x +FUNCTION_AT_ADDRESS(void CBookWnd::SetBook(char *),CBookWnd__SetBook); +#endif +#ifdef CBookWnd__CheckBook_x +FUNCTION_AT_ADDRESS(bool CBookWnd::CheckBook(class EQ_Note *),CBookWnd__CheckBook); +#endif +#ifdef CBookWnd__DisplayText_x +FUNCTION_AT_ADDRESS(void CBookWnd::DisplayText(void),CBookWnd__DisplayText); +#endif +#ifdef CBookWnd__CleanPages_x +FUNCTION_AT_ADDRESS(void CBookWnd::CleanPages(void),CBookWnd__CleanPages); +#endif +#ifdef CBookWnd__ProcessText_x +FUNCTION_AT_ADDRESS(void CBookWnd::ProcessText(void),CBookWnd__ProcessText); +#endif +#ifdef CBookWnd__ShowButtons_x +FUNCTION_AT_ADDRESS(void CBookWnd::ShowButtons(void),CBookWnd__ShowButtons); +#endif +#ifdef COptionsWnd__KeyboardAssignmentData__KeyboardAssignmentData_x +//FUNCTION_AT_ADDRESS( COptionsWnd::KeyboardAssignmentData::KeyboardAssignmentData(void),COptionsWnd__KeyboardAssignmentData__KeyboardAssignmentData); +#endif +#ifdef CXStr__CXStr1_x +FUNCTION_AT_ADDRESS( CXStr::CXStr(void),CXStr__CXStr1); +#endif +#ifdef CBreathWnd__CBreathWnd_x +FUNCTION_AT_ADDRESS( CBreathWnd::CBreathWnd(class CXWnd *),CBreathWnd__CBreathWnd); +#endif +#ifdef CBreathWnd__Init_x +FUNCTION_AT_ADDRESS(void CBreathWnd::Init(void),CBreathWnd__Init); +#endif +#ifdef CBreathWnd__Activate_x +FUNCTION_AT_ADDRESS(void CBreathWnd::Activate(void),CBreathWnd__Activate); +#endif +#ifdef CBuffWindow__CBuffWindow_x +//FUNCTION_AT_ADDRESS( CBuffWindow::CBuffWindow(class CXWnd *,enum BuffWindowType),CBuffWindow__CBuffWindow); +#endif +#ifdef CTextureAnimation__operator_equal_x +FUNCTION_AT_ADDRESS(class CTextureAnimation & CTextureAnimation::operator=(class CTextureAnimation const &),CTextureAnimation__operator_equal); +#endif +#ifdef CBuffWindow__Init_x +FUNCTION_AT_ADDRESS(void CBuffWindow::Init(void),CBuffWindow__Init); +#endif +#ifdef CBuffWindow__Activate_x +FUNCTION_AT_ADDRESS(void CBuffWindow::Activate(void),CBuffWindow__Activate); +#endif +#ifdef CBuffWindow__HandleSpellInfoDisplay_x +FUNCTION_AT_ADDRESS(void CBuffWindow::HandleSpellInfoDisplay(class CXWnd *),CBuffWindow__HandleSpellInfoDisplay); +#endif +#ifdef CBuffWindow__RefreshIconArrangement_x +FUNCTION_AT_ADDRESS(void CBuffWindow::RefreshIconArrangement(void),CBuffWindow__RefreshIconArrangement); +#endif +#ifdef CBuffWindow__RefreshBuffDisplay_x +FUNCTION_AT_ADDRESS(void CBuffWindow::RefreshBuffDisplay(void),CBuffWindow__RefreshBuffDisplay); +#endif +#ifdef CBuffWindow__SetBuffIcon_x +FUNCTION_AT_ADDRESS(void CBuffWindow::SetBuffIcon(class CButtonWnd *,int,int),CBuffWindow__SetBuffIcon); +#endif +#ifdef CXRect__Move_x +FUNCTION_AT_ADDRESS(void CXRect::Move(class CXPoint),CXRect__Move); +#endif +#ifdef CTAFrameDraw__GetFrameSize_x +FUNCTION_AT_ADDRESS(class CXSize CTAFrameDraw::GetFrameSize(void)const ,CTAFrameDraw__GetFrameSize); +#endif +#ifdef STextureAnimationFrame__STextureAnimationFrame_x +FUNCTION_AT_ADDRESS( STextureAnimationFrame::STextureAnimationFrame(void),STextureAnimationFrame__STextureAnimationFrame); +#endif +#ifdef CUITexturePiece__CUITexturePiece_x +FUNCTION_AT_ADDRESS( CUITexturePiece::CUITexturePiece(void),CUITexturePiece__CUITexturePiece); +#endif +#ifdef STextureAnimationFrame__operator_equal_x +FUNCTION_AT_ADDRESS(class STextureAnimationFrame & STextureAnimationFrame::operator=(class STextureAnimationFrame const &),STextureAnimationFrame__operator_equal); +#endif +#ifdef CUITexturePiece__operator_equal_x +FUNCTION_AT_ADDRESS(class CUITexturePiece & CUITexturePiece::operator=(class CUITexturePiece const &),CUITexturePiece__operator_equal); +#endif +#ifdef CBugReportWnd__CBugReportWnd_x +FUNCTION_AT_ADDRESS( CBugReportWnd::CBugReportWnd(class CXWnd *),CBugReportWnd__CBugReportWnd); +#endif +#ifdef CBugReportWnd__Activate_x +FUNCTION_AT_ADDRESS(void CBugReportWnd::Activate(void),CBugReportWnd__Activate); +#endif +#ifdef CBugReportWnd__UpdateLocation_x +FUNCTION_AT_ADDRESS(void CBugReportWnd::UpdateLocation(void),CBugReportWnd__UpdateLocation); +#endif +#ifdef CCastingWnd__CCastingWnd_x +FUNCTION_AT_ADDRESS( CCastingWnd::CCastingWnd(class CXWnd *),CCastingWnd__CCastingWnd); +#endif +#ifdef CCastingWnd__Activate_x +FUNCTION_AT_ADDRESS(void CCastingWnd::Activate(void),CCastingWnd__Activate); +#endif +#ifdef CVideoModesWnd__Activate_x +FUNCTION_AT_ADDRESS(void CVideoModesWnd::Activate(void),CVideoModesWnd__Activate); +#endif +#ifdef CCastSpellWnd__CCastSpellWnd_x +FUNCTION_AT_ADDRESS( CCastSpellWnd::CCastSpellWnd(class CXWnd *),CCastSpellWnd__CCastSpellWnd); +#endif +#ifdef CCastSpellWnd__Init_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::Init(void),CCastSpellWnd__Init); +#endif +#ifdef CCastSpellWnd__Activate_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::Activate(void),CCastSpellWnd__Activate); +#endif +#ifdef CCastSpellWnd__HandleSpellInfoDisplay_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::HandleSpellInfoDisplay(class CXWnd *),CCastSpellWnd__HandleSpellInfoDisplay); +#endif +#ifdef CCastSpellWnd__HandleSpellLeftClick_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::HandleSpellLeftClick(int),CCastSpellWnd__HandleSpellLeftClick); +#endif +#ifdef CCastSpellWnd__Unmemorize_x +FUNCTION_AT_ADDRESS(void __cdecl CCastSpellWnd::Unmemorize(int),CCastSpellWnd__Unmemorize); +#endif +#ifdef CCastSpellWnd__UnmemorizeList_x +FUNCTION_AT_ADDRESS(void __cdecl CCastSpellWnd::UnmemorizeList(int *,int),CCastSpellWnd__UnmemorizeList); +#endif +#ifdef CCastSpellWnd__HandleSpellRightClick_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::HandleSpellRightClick(int),CCastSpellWnd__HandleSpellRightClick); +#endif +#ifdef CCastSpellWnd__ForgetMemorizedSpell_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::ForgetMemorizedSpell(int),CCastSpellWnd__ForgetMemorizedSpell); +#endif +#ifdef CCastSpellWnd__IsBardSongPlaying_x +FUNCTION_AT_ADDRESS(bool CCastSpellWnd::IsBardSongPlaying(void),CCastSpellWnd__IsBardSongPlaying); +#endif +#ifdef CCastSpellWnd__RefreshSpellGemButtons_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::RefreshSpellGemButtons(void),CCastSpellWnd__RefreshSpellGemButtons); +#endif +#ifdef CCastSpellWnd__UpdateSpellGems_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::UpdateSpellGems(int),CCastSpellWnd__UpdateSpellGems); +#endif +#ifdef CCastSpellWnd__UpdateSpellGemTooltips_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::UpdateSpellGemTooltips(int),CCastSpellWnd__UpdateSpellGemTooltips); +#endif +#ifdef CCastSpellWnd__GetSpellGemColor_x +FUNCTION_AT_ADDRESS(unsigned long CCastSpellWnd::GetSpellGemColor(class EQ_Spell *),CCastSpellWnd__GetSpellGemColor); +#endif +#ifdef CCastSpellWnd__SpellBookDeactivating_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::SpellBookDeactivating(void),CCastSpellWnd__SpellBookDeactivating); +#endif +#ifdef CCastSpellWnd__KeyMapUpdated_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::KeyMapUpdated(void),CCastSpellWnd__KeyMapUpdated); +#endif +#ifdef CCastSpellWnd__ClearSpellCategories_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::ClearSpellCategories(void),CCastSpellWnd__ClearSpellCategories); +#endif +#ifdef CCastSpellWnd__SpellCategoryMajor__dSpellCategoryMajor_x +//FUNCTION_AT_ADDRESS( CCastSpellWnd::SpellCategoryMajor::~SpellCategoryMajor(void),CCastSpellWnd__SpellCategoryMajor__dSpellCategoryMajor); +#endif +#ifdef CCastSpellWnd__SpellCategoryMinor__dSpellCategoryMinor_x +//FUNCTION_AT_ADDRESS( CCastSpellWnd::SpellCategoryMinor::~SpellCategoryMinor(void),CCastSpellWnd__SpellCategoryMinor__dSpellCategoryMinor); +#endif +#ifdef CCastSpellWnd__RecacheCategorizedSpells_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::RecacheCategorizedSpells(void),CCastSpellWnd__RecacheCategorizedSpells); +#endif +#ifdef CCastSpellWnd__MakeSpellSelectMenu_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::MakeSpellSelectMenu(void),CCastSpellWnd__MakeSpellSelectMenu); +#endif +#ifdef CCastSpellWnd__CategorizeSpell_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::CategorizeSpell(int,int,int,int),CCastSpellWnd__CategorizeSpell); +#endif +#ifdef CCastSpellWnd__RecacheLoadoutContextMenu_x +FUNCTION_AT_ADDRESS(void CCastSpellWnd::RecacheLoadoutContextMenu(void),CCastSpellWnd__RecacheLoadoutContextMenu); +#endif +#ifdef CCharacterCreation__CCharacterCreation_x +FUNCTION_AT_ADDRESS( CCharacterCreation::CCharacterCreation(class CXWnd *),CCharacterCreation__CCharacterCreation); +#endif +#ifdef CCharacterCreation__Init_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::Init(void),CCharacterCreation__Init); +#endif +#ifdef CCharacterCreation__Activate_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::Activate(void),CCharacterCreation__Activate); +#endif +#ifdef CCharacterCreation__NameGenerated_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::NameGenerated(char *),CCharacterCreation__NameGenerated); +#endif +#ifdef CCharacterCreation__DoBackButton_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::DoBackButton(void),CCharacterCreation__DoBackButton); +#endif +#ifdef CCharacterCreation__DoNextButton_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::DoNextButton(void),CCharacterCreation__DoNextButton); +#endif +#ifdef CCharacterCreation__DoStatButton_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::DoStatButton(int),CCharacterCreation__DoStatButton); +#endif +#ifdef CCharacterCreation__ActivateScreen_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::ActivateScreen(int),CCharacterCreation__ActivateScreen); +#endif +#ifdef CCharacterCreation__RandomizeCharacter_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::RandomizeCharacter(bool,bool),CCharacterCreation__RandomizeCharacter); +#endif +#ifdef CCharacterCreation__RandomizeFacialFeatures_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::RandomizeFacialFeatures(void),CCharacterCreation__RandomizeFacialFeatures); +#endif +#ifdef CCharacterCreation__InitStats_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::InitStats(bool),CCharacterCreation__InitStats); +#endif +#ifdef CCharacterCreation__InitNewPC_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::InitNewPC(void),CCharacterCreation__InitNewPC); +#endif +#ifdef CCharacterCreation__InitStartingCities_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::InitStartingCities(void),CCharacterCreation__InitStartingCities); +#endif +#ifdef CCharacterCreation__SetNewPCDeityFromBtnIndex_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::SetNewPCDeityFromBtnIndex(int),CCharacterCreation__SetNewPCDeityFromBtnIndex); +#endif +#ifdef CCharacterCreation__UpdatePlayerFromNewPC_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::UpdatePlayerFromNewPC(void),CCharacterCreation__UpdatePlayerFromNewPC); +#endif +#ifdef CCharacterCreation__UpdateScreenZeroButtons_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::UpdateScreenZeroButtons(bool),CCharacterCreation__UpdateScreenZeroButtons); +#endif +#ifdef CCharacterCreation__GetRaceButtonIndex_x +FUNCTION_AT_ADDRESS(int CCharacterCreation::GetRaceButtonIndex(int),CCharacterCreation__GetRaceButtonIndex); +#endif +#ifdef CCharacterCreation__GetClassButtonIndex_x +FUNCTION_AT_ADDRESS(int CCharacterCreation::GetClassButtonIndex(int),CCharacterCreation__GetClassButtonIndex); +#endif +#ifdef CCharacterCreation__IsLackingExpansion_x +FUNCTION_AT_ADDRESS(bool CCharacterCreation::IsLackingExpansion(bool,bool),CCharacterCreation__IsLackingExpansion); +#endif +#ifdef CCharacterCreation__SelectStartingCity_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::SelectStartingCity(int),CCharacterCreation__SelectStartingCity); +#endif +#ifdef CCharacterCreation__SelectedRaceButton_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::SelectedRaceButton(int),CCharacterCreation__SelectedRaceButton); +#endif +#ifdef CCharacterCreation__SelectedClassButton_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::SelectedClassButton(int),CCharacterCreation__SelectedClassButton); +#endif +#ifdef CCharacterCreation__SetPlayerAppearanceFromNewPC_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::SetPlayerAppearanceFromNewPC(class EQPlayer *,class EQ_PC *,bool),CCharacterCreation__SetPlayerAppearanceFromNewPC); +#endif +#ifdef CCharacterCreation__HandleNameApprovalResponse_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::HandleNameApprovalResponse(int),CCharacterCreation__HandleNameApprovalResponse); +#endif +#ifdef CCharacterCreation__SubmitNameToWorld_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::SubmitNameToWorld(void),CCharacterCreation__SubmitNameToWorld); +#endif +#ifdef CCharacterCreation__FinalizeNewPCAndSendToWorld_x +FUNCTION_AT_ADDRESS(void CCharacterCreation::FinalizeNewPCAndSendToWorld(void),CCharacterCreation__FinalizeNewPCAndSendToWorld); +#endif +#ifdef CCharacterCreation__GetCharCreateText_x +FUNCTION_AT_ADDRESS(char * CCharacterCreation::GetCharCreateText(char *,int,int,int,int),CCharacterCreation__GetCharCreateText); +#endif +#ifdef CCharacterSelect__CCharacterSelect_x +FUNCTION_AT_ADDRESS( CCharacterSelect::CCharacterSelect(class CXWnd *),CCharacterSelect__CCharacterSelect); +#endif +#ifdef CCharacterSelect__Init_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::Init(void),CCharacterSelect__Init); +#endif +#ifdef CCharacterSelect__Activate_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::Activate(void),CCharacterSelect__Activate); +#endif +#ifdef CCharacterSelect__EnableButtons_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::EnableButtons(bool),CCharacterSelect__EnableButtons); +#endif +#ifdef CCharacterSelect__EnableEqMovementCommands_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::EnableEqMovementCommands(bool),CCharacterSelect__EnableEqMovementCommands); +#endif +#ifdef CCharacterSelect__EnterWorld_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::EnterWorld(void),CCharacterSelect__EnterWorld); +#endif +#ifdef CCharacterSelect__Quit_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::Quit(void),CCharacterSelect__Quit); +#endif +#ifdef CCharacterSelect__EnterExplorationMode_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::EnterExplorationMode(void),CCharacterSelect__EnterExplorationMode); +#endif +#ifdef CCharacterSelect__LeaveExplorationMode_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::LeaveExplorationMode(void),CCharacterSelect__LeaveExplorationMode); +#endif +#ifdef CCharacterSelect__IsValidCharacterSelected_x +FUNCTION_AT_ADDRESS(int CCharacterSelect::IsValidCharacterSelected(void),CCharacterSelect__IsValidCharacterSelected); +#endif +#ifdef CCharacterSelect__IsEmptyCharacterSlot_x +FUNCTION_AT_ADDRESS(int CCharacterSelect::IsEmptyCharacterSlot(int),CCharacterSelect__IsEmptyCharacterSlot); +#endif +#ifdef CCharacterSelect__NumberOfCharacters_x +FUNCTION_AT_ADDRESS(int CCharacterSelect::NumberOfCharacters(void),CCharacterSelect__NumberOfCharacters); +#endif +#ifdef CCharacterSelect__IsEvil_x +FUNCTION_AT_ADDRESS(unsigned char CCharacterSelect::IsEvil(int,int,int),CCharacterSelect__IsEvil); +#endif +#ifdef CCharacterSelect__SelectCharacter_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::SelectCharacter(int,int),CCharacterSelect__SelectCharacter); +#endif +#ifdef CCharacterSelect__SetLoadZonePlayerLocation_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::SetLoadZonePlayerLocation(void),CCharacterSelect__SetLoadZonePlayerLocation); +#endif +#ifdef CCharacterSelect__DeleteCharacter_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::DeleteCharacter(void),CCharacterSelect__DeleteCharacter); +#endif +#ifdef CCharacterSelect__UpdateButtonNames_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::UpdateButtonNames(void),CCharacterSelect__UpdateButtonNames); +#endif +#ifdef CCharacterSelect__SetLocationByClass_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::SetLocationByClass(class EQPlayer *,bool,int),CCharacterSelect__SetLocationByClass); +#endif +#ifdef CCharacterSelect__CreateExplorationModePlayers_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::CreateExplorationModePlayers(void),CCharacterSelect__CreateExplorationModePlayers); +#endif +#ifdef CCharacterSelect__RemoveExplorationModePlayers_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::RemoveExplorationModePlayers(void),CCharacterSelect__RemoveExplorationModePlayers); +#endif +#ifdef CCharacterSelect__SetRoomLocationByIndex_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::SetRoomLocationByIndex(int,class EQPlayer *),CCharacterSelect__SetRoomLocationByIndex); +#endif +#ifdef CCharacterSelect__SwitchModel_x +FUNCTION_AT_ADDRESS(void CCharacterSelect::SwitchModel(class EQPlayer *,unsigned char,int,unsigned char,unsigned char),CCharacterSelect__SwitchModel); +#endif +#ifdef CChatManager__CChatManager_x +FUNCTION_AT_ADDRESS( CChatManager::CChatManager(void),CChatManager__CChatManager); +#endif +#ifdef CChatManager__dCChatManager_x +FUNCTION_AT_ADDRESS( CChatManager::~CChatManager(void),CChatManager__dCChatManager); +#endif +#ifdef CBookWnd__Init_x +FUNCTION_AT_ADDRESS(void CBookWnd::Init(void),CBookWnd__Init); +#endif +#ifdef CColorPickerWnd__Init_x +FUNCTION_AT_ADDRESS(void CColorPickerWnd::Init(void),CColorPickerWnd__Init); +#endif +#ifdef CCompassWnd__Init_x +FUNCTION_AT_ADDRESS(void CCompassWnd::Init(void),CCompassWnd__Init); +#endif +#ifdef CContainerWnd__Init_x +FUNCTION_AT_ADDRESS(void CContainerWnd::Init(void),CContainerWnd__Init); +#endif +#ifdef CGiveWnd__Init_x +FUNCTION_AT_ADDRESS(void CGiveWnd::Init(void),CGiveWnd__Init); +#endif +#ifdef CHelpWnd__Init_x +FUNCTION_AT_ADDRESS(void CHelpWnd::Init(void),CHelpWnd__Init); +#endif +#ifdef CMusicPlayerWnd__Init_x +FUNCTION_AT_ADDRESS(void CMusicPlayerWnd::Init(void),CMusicPlayerWnd__Init); +#endif +#ifdef CNoteWnd__Init_x +FUNCTION_AT_ADDRESS(void CNoteWnd::Init(void),CNoteWnd__Init); +#endif +#ifdef CPetInfoWnd__Init_x +FUNCTION_AT_ADDRESS(void CPetInfoWnd::Init(void),CPetInfoWnd__Init); +#endif +#ifdef CPlayerNotesWnd__Init_x +FUNCTION_AT_ADDRESS(void CPlayerNotesWnd::Init(void),CPlayerNotesWnd__Init); +#endif +#ifdef CTargetWnd__Init_x +FUNCTION_AT_ADDRESS(void CTargetWnd::Init(void),CTargetWnd__Init); +#endif +#ifdef UdpManager__ProcessIcmpErrors_x +FUNCTION_AT_ADDRESS(void UdpManager::ProcessIcmpErrors(void),UdpManager__ProcessIcmpErrors); +#endif +#ifdef CRaid__dCRaid_x +FUNCTION_AT_ADDRESS( CRaid::~CRaid(void),CRaid__dCRaid); +#endif +#ifdef EQ_Note__dEQ_Note_x +FUNCTION_AT_ADDRESS( EQ_Note::~EQ_Note(void),EQ_Note__dEQ_Note); +#endif +#ifdef EQ_Skill__dEQ_Skill_x +FUNCTION_AT_ADDRESS( EQ_Skill::~EQ_Skill(void),EQ_Skill__dEQ_Skill); +#endif +#ifdef EQAnimation__dEQAnimation_x +FUNCTION_AT_ADDRESS( EQAnimation::~EQAnimation(void),EQAnimation__dEQAnimation); +#endif +#ifdef KeypressHandler__dKeypressHandler_x +FUNCTION_AT_ADDRESS( KeypressHandler::~KeypressHandler(void),KeypressHandler__dKeypressHandler); +#endif +#ifdef EQNewPlayerAnimation__InitAnimationData_x +FUNCTION_AT_ADDRESS(void __cdecl EQNewPlayerAnimation::InitAnimationData(void),EQNewPlayerAnimation__InitAnimationData); +#endif +#ifdef CAAWnd__CancelAASpend_x +FUNCTION_AT_ADDRESS(void CAAWnd::CancelAASpend(void),CAAWnd__CancelAASpend); +#endif +#ifdef CChatManager__Process_x +FUNCTION_AT_ADDRESS(void CChatManager::Process(void),CChatManager__Process); +#endif +#ifdef CDisplay__DefineSoloMode_x +FUNCTION_AT_ADDRESS(void CDisplay::DefineSoloMode(void),CDisplay__DefineSoloMode); +#endif +#ifdef CEverQuest__InitCommands_x +FUNCTION_AT_ADDRESS(void CEverQuest::InitCommands(void),CEverQuest__InitCommands); +#endif +#ifdef CInvSlotMgr__Process_x +FUNCTION_AT_ADDRESS(void CInvSlotMgr::Process(void),CInvSlotMgr__Process); +#endif +#ifdef EQMissile__LeaveTrail_x +FUNCTION_AT_ADDRESS(void EQMissile::LeaveTrail(void),EQMissile__LeaveTrail); +#endif +#ifdef CChatManager__Activate_x +FUNCTION_AT_ADDRESS(void CChatManager::Activate(void),CChatManager__Activate); +#endif +#ifdef CChatManager__Deactivate_x +FUNCTION_AT_ADDRESS(void CChatManager::Deactivate(void),CChatManager__Deactivate); +#endif +#ifdef CChatManager__LoadChatInis_x +FUNCTION_AT_ADDRESS(void CChatManager::LoadChatInis(void),CChatManager__LoadChatInis); +#endif +#ifdef CChatManager__CreateChatWindow_x +FUNCTION_AT_ADDRESS(void CChatManager::CreateChatWindow(void),CChatManager__CreateChatWindow); +#endif +#ifdef CChatManager__CreateChatWindow1_x +FUNCTION_AT_ADDRESS(void CChatManager::CreateChatWindow(char *,char *,int,int,int,char *,int),CChatManager__CreateChatWindow1); +#endif +#ifdef CChatManager__FreeChatWindow_x +FUNCTION_AT_ADDRESS(void CChatManager::FreeChatWindow(class CChatWindow *),CChatManager__FreeChatWindow); +#endif +#ifdef CChatManager__GetActiveChatWindow_x +FUNCTION_AT_ADDRESS(class CChatWindow * CChatManager::GetActiveChatWindow(void),CChatManager__GetActiveChatWindow); +#endif +#ifdef CChatManager__AddText_x +FUNCTION_AT_ADDRESS(void CChatManager::AddText(class CXStr,int),CChatManager__AddText); +#endif +#ifdef CChatManager__SetChannelMap_x +FUNCTION_AT_ADDRESS(void CChatManager::SetChannelMap(int,class CChatWindow *),CChatManager__SetChannelMap); +#endif +#ifdef CChatManager__ClearChannelMap_x +FUNCTION_AT_ADDRESS(void CChatManager::ClearChannelMap(int),CChatManager__ClearChannelMap); +#endif +#ifdef CChatManager__GetChannelFromColor_x +FUNCTION_AT_ADDRESS(int CChatManager::GetChannelFromColor(int),CChatManager__GetChannelFromColor); +#endif +#ifdef CChatManager__GetChannelMap_x +FUNCTION_AT_ADDRESS(class CChatWindow * CChatManager::GetChannelMap(int),CChatManager__GetChannelMap); +#endif +#ifdef CChatManager__ClearChannelMaps_x +FUNCTION_AT_ADDRESS(void CChatManager::ClearChannelMaps(class CChatWindow *),CChatManager__ClearChannelMaps); +#endif +#ifdef CChatManager__SetActiveChatWindow_x +FUNCTION_AT_ADDRESS(void CChatManager::SetActiveChatWindow(class CChatWindow *),CChatManager__SetActiveChatWindow); +#endif +#ifdef CChatManager__SetLockedActiveChatWindow_x +FUNCTION_AT_ADDRESS(void CChatManager::SetLockedActiveChatWindow(class CChatWindow *),CChatManager__SetLockedActiveChatWindow); +#endif +#ifdef CChatManager__GetRGBAFromIndex_x +FUNCTION_AT_ADDRESS(unsigned long CChatManager::GetRGBAFromIndex(int),CChatManager__GetRGBAFromIndex); +#endif +#ifdef CChatManager__InitContextMenu_x +FUNCTION_AT_ADDRESS(int CChatManager::InitContextMenu(class CChatWindow *),CChatManager__InitContextMenu); +#endif +#ifdef CChatManager__UpdateContextMenus_x +FUNCTION_AT_ADDRESS(void CChatManager::UpdateContextMenus(class CChatWindow *),CChatManager__UpdateContextMenus); +#endif +#ifdef CChatManager__UpdateTellMenus_x +FUNCTION_AT_ADDRESS(void CChatManager::UpdateTellMenus(class CChatWindow *),CChatManager__UpdateTellMenus); +#endif +#ifdef CChatManager__GetAllVisibleText_x +FUNCTION_AT_ADDRESS(class CXStr CChatManager::GetAllVisibleText(class CXStr),CChatManager__GetAllVisibleText); +#endif +#ifdef CChatWindow__GetOutputWnd_x +FUNCTION_AT_ADDRESS(class CStmlWnd * CChatWindow::GetOutputWnd(void),CChatWindow__GetOutputWnd); +#endif +#ifdef CContextMenuManager__GetDefaultMenuIndex_x +FUNCTION_AT_ADDRESS(int CContextMenuManager::GetDefaultMenuIndex(void),CContextMenuManager__GetDefaultMenuIndex); +#endif +#ifdef CChatWindow__CChatWindow_x +FUNCTION_AT_ADDRESS( CChatWindow::CChatWindow(class CXWnd *),CChatWindow__CChatWindow); +#endif +#ifdef CChatWindow__AddOutputText_x +FUNCTION_AT_ADDRESS(void CChatWindow::AddOutputText(class CXStr,int),CChatWindow__AddOutputText); +#endif +#ifdef CChatWindow__HistoryBack_x +FUNCTION_AT_ADDRESS(void CChatWindow::HistoryBack(void),CChatWindow__HistoryBack); +#endif +#ifdef CChatWindow__HistoryForward_x +FUNCTION_AT_ADDRESS(void CChatWindow::HistoryForward(void),CChatWindow__HistoryForward); +#endif +#ifdef CChatWindow__AddHistory_x +FUNCTION_AT_ADDRESS(void CChatWindow::AddHistory(class CXStr),CChatWindow__AddHistory); +#endif +#ifdef CChatWindow__GetInputText_x +FUNCTION_AT_ADDRESS(class CXStr CChatWindow::GetInputText(void),CChatWindow__GetInputText); +#endif +#ifdef CChatWindow__PageUp_x +FUNCTION_AT_ADDRESS(void CChatWindow::PageUp(void),CChatWindow__PageUp); +#endif +#ifdef CChatWindow__PageDown_x +FUNCTION_AT_ADDRESS(void CChatWindow::PageDown(void),CChatWindow__PageDown); +#endif +#ifdef CChatWindow__SetChatFont_x +FUNCTION_AT_ADDRESS(void CChatWindow::SetChatFont(int),CChatWindow__SetChatFont); +#endif +#ifdef CChatWindow__Clear_x +FUNCTION_AT_ADDRESS(void CChatWindow::Clear(void),CChatWindow__Clear); +#endif +#ifdef CStmlWnd__GetSTMLText_x +FUNCTION_AT_ADDRESS(class CXStr CStmlWnd::GetSTMLText(void)const, CStmlWnd__GetSTMLText); +#endif +#ifdef CChatWindow__GetInputWnd_x +FUNCTION_AT_ADDRESS(class CEditWnd * CChatWindow::GetInputWnd(void),CChatWindow__GetInputWnd); +#endif +#ifdef CChatWindow__WndNotification_x +FUNCTION_AT_ADDRESS(int CChatWindow::WndNotification(class CXWnd *,unsigned __int32,void *),CChatWindow__WndNotification); +#endif +#ifdef CColorPickerWnd__CColorPickerWnd_x +FUNCTION_AT_ADDRESS( CColorPickerWnd::CColorPickerWnd(class CXWnd *),CColorPickerWnd__CColorPickerWnd); +#endif +#ifdef CColorPickerWnd__SetTemplateColor_x +FUNCTION_AT_ADDRESS(void CColorPickerWnd::SetTemplateColor(int,unsigned long),CColorPickerWnd__SetTemplateColor); +#endif +#ifdef CColorPickerWnd__Activate_x +FUNCTION_AT_ADDRESS(void CColorPickerWnd::Activate(class CXWnd *,unsigned long),CColorPickerWnd__Activate); +#endif +#ifdef CColorPickerWnd__SetCurrentColor_x +FUNCTION_AT_ADDRESS(void CColorPickerWnd::SetCurrentColor(unsigned long),CColorPickerWnd__SetCurrentColor); +#endif +#ifdef CColorPickerWnd__UpdateCurrentColor_x +FUNCTION_AT_ADDRESS(void CColorPickerWnd::UpdateCurrentColor(void),CColorPickerWnd__UpdateCurrentColor); +#endif +#ifdef CColorPickerWnd__CheckMaxEditWnd_x +FUNCTION_AT_ADDRESS(void CColorPickerWnd::CheckMaxEditWnd(void),CColorPickerWnd__CheckMaxEditWnd); +#endif +#ifdef CColorPickerWnd__UpdateEditWndFromSlider_x +FUNCTION_AT_ADDRESS(void CColorPickerWnd::UpdateEditWndFromSlider(class CSliderWnd *,class CEditWnd *,int *),CColorPickerWnd__UpdateEditWndFromSlider); +#endif +#ifdef CColorPickerWnd__UpdateSliderFromEditWnd_x +FUNCTION_AT_ADDRESS(void CColorPickerWnd::UpdateSliderFromEditWnd(class CSliderWnd *,class CEditWnd *,int *),CColorPickerWnd__UpdateSliderFromEditWnd); +#endif +#ifdef CCompassWnd__CCompassWnd_x +FUNCTION_AT_ADDRESS( CCompassWnd::CCompassWnd(class CXWnd *),CCompassWnd__CCompassWnd); +#endif +#ifdef CCompassWnd__Activate_x +FUNCTION_AT_ADDRESS(void CCompassWnd::Activate(void),CCompassWnd__Activate); +#endif +#ifdef CCompassWnd__PickNewTarget_x +FUNCTION_AT_ADDRESS(void CCompassWnd::PickNewTarget(void),CCompassWnd__PickNewTarget); +#endif +#ifdef CCompassWnd__SetSpeed_x +FUNCTION_AT_ADDRESS(void CCompassWnd::SetSpeed(void),CCompassWnd__SetSpeed); +#endif +#ifdef CCompassWnd__SenseHeading_x +FUNCTION_AT_ADDRESS(void CCompassWnd::SenseHeading(void),CCompassWnd__SenseHeading); +#endif +#ifdef CConfirmationDialog__CConfirmationDialog_x +FUNCTION_AT_ADDRESS( CConfirmationDialog::CConfirmationDialog(class CXWnd *),CConfirmationDialog__CConfirmationDialog); +#endif +#ifdef CConfirmationDialog__Init_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::Init(void),CConfirmationDialog__Init); +#endif +#ifdef CConfirmationDialog__Activate_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::Activate(int,unsigned int,char const *,int,int,int,int),CConfirmationDialog__Activate); +#endif +#ifdef CConfirmationDialog__Deactivate_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::Deactivate(void),CConfirmationDialog__Deactivate); +#endif +#ifdef CConfirmationDialog__ExpireCurrentDialog_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::ExpireCurrentDialog(void),CConfirmationDialog__ExpireCurrentDialog); +#endif +#ifdef CConfirmationDialog__HandleButtonYesPressed_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::HandleButtonYesPressed(void),CConfirmationDialog__HandleButtonYesPressed); +#endif +#ifdef CConfirmationDialog__HandleButtonNoPressed_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::HandleButtonNoPressed(void),CConfirmationDialog__HandleButtonNoPressed); +#endif +#ifdef CConfirmationDialog__HandleButtonOkPressed_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::HandleButtonOkPressed(void),CConfirmationDialog__HandleButtonOkPressed); +#endif +#ifdef CConfirmationDialog__ProcessYes_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::ProcessYes(void),CConfirmationDialog__ProcessYes); +#endif +#ifdef CConfirmationDialog__ResetFocusOnClose_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::ResetFocusOnClose(void),CConfirmationDialog__ResetFocusOnClose); +#endif +#ifdef CConfirmationDialog__ProcessNo_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::ProcessNo(int),CConfirmationDialog__ProcessNo); +#endif +#ifdef CConfirmationDialog__SetNameApprovalData_x +FUNCTION_AT_ADDRESS(void CConfirmationDialog::SetNameApprovalData(char *,char *,int,int,char *),CConfirmationDialog__SetNameApprovalData); +#endif +#ifdef CConfirmationDialog__WndNotification_x +FUNCTION_AT_ADDRESS( int CConfirmationDialog::WndNotification(class CXWnd *,unsigned __int32,void *),CConfirmationDialog__WndNotification); +#endif +#ifdef CContainerMgr__GetFreeContainerWnd_x +FUNCTION_AT_ADDRESS(class CContainerWnd * CContainerMgr::GetFreeContainerWnd(void),CContainerMgr__GetFreeContainerWnd); +#endif +#ifdef CContainerMgr__CContainerMgr_x +FUNCTION_AT_ADDRESS( CContainerMgr::CContainerMgr(void),CContainerMgr__CContainerMgr); +#endif +#ifdef CContainerMgr__Process_x +FUNCTION_AT_ADDRESS(void CContainerMgr::Process(void),CContainerMgr__Process); +#endif +#ifdef CContainerMgr__OpenWorldContainer_x +FUNCTION_AT_ADDRESS(void CContainerMgr::OpenWorldContainer(class EQ_Container *,unsigned long),CContainerMgr__OpenWorldContainer); +#endif +#ifdef CContainerMgr__SetWorldContainerItem_x +FUNCTION_AT_ADDRESS(void CContainerMgr::SetWorldContainerItem(class EQ_Item *,int),CContainerMgr__SetWorldContainerItem); +#endif +#ifdef CContainerMgr__GetWorldContainerItem_x +FUNCTION_AT_ADDRESS(class EQ_Item * CContainerMgr::GetWorldContainerItem(int),CContainerMgr__GetWorldContainerItem); +#endif +#ifdef CContainerMgr__ClearWorldContainerItems_x +FUNCTION_AT_ADDRESS(void CContainerMgr::ClearWorldContainerItems(void),CContainerMgr__ClearWorldContainerItems); +#endif +#ifdef CContainerMgr__OpenContainer_x +FUNCTION_AT_ADDRESS(void CContainerMgr::OpenContainer(class EQ_Container *,int),CContainerMgr__OpenContainer); +#endif +#ifdef CContainerMgr__CloseEQContainer_x +FUNCTION_AT_ADDRESS(void CContainerMgr::CloseEQContainer(class EQ_Container *),CContainerMgr__CloseEQContainer); +#endif +#ifdef CContainerMgr__CloseContainer_x +FUNCTION_AT_ADDRESS(void CContainerMgr::CloseContainer(class EQ_Container *,bool),CContainerMgr__CloseContainer); +#endif +#ifdef CContainerMgr__CloseAllContainers_x +FUNCTION_AT_ADDRESS(bool CContainerMgr::CloseAllContainers(void),CContainerMgr__CloseAllContainers); +#endif +#ifdef CContainerWnd__CContainerWnd_x +FUNCTION_AT_ADDRESS( CContainerWnd::CContainerWnd(class CXWnd *),CContainerWnd__CContainerWnd); +#endif +#ifdef CContainerWnd__Activate_x +FUNCTION_AT_ADDRESS(void CContainerWnd::Activate(void),CContainerWnd__Activate); +#endif +#ifdef CHelpWnd__Activate_x +FUNCTION_AT_ADDRESS(void CHelpWnd::Activate(void),CHelpWnd__Activate); +#endif +#ifdef CContainerWnd__HandleCombine_x +FUNCTION_AT_ADDRESS(void CContainerWnd::HandleCombine(void),CContainerWnd__HandleCombine); +#endif +#ifdef CContainerWnd__SetContainer_x +FUNCTION_AT_ADDRESS(void CContainerWnd::SetContainer(class EQ_Container *,int),CContainerWnd__SetContainer); +#endif +#ifdef CContainerWnd__CheckCloseable_x +FUNCTION_AT_ADDRESS(void CContainerWnd::CheckCloseable(void),CContainerWnd__CheckCloseable); +#endif +#ifdef CContainerWnd__ContainsNoDrop_x +FUNCTION_AT_ADDRESS(bool CContainerWnd::ContainsNoDrop(void),CContainerWnd__ContainsNoDrop); +#endif +#ifdef CXRect__operator_or_x +FUNCTION_AT_ADDRESS(class CXRect CXRect::operator|(class CXRect)const ,CXRect__operator_or); +#endif +#ifdef CContextMenu__CContextMenu_x +FUNCTION_AT_ADDRESS( CContextMenu::CContextMenu(class CXWnd *,unsigned __int32,class CXRect),CContextMenu__CContextMenu); +#endif +#ifdef CContextMenu__AddMenuItem_x +FUNCTION_AT_ADDRESS(int CContextMenu::AddMenuItem(class CXStr,unsigned int,bool,unsigned long),CContextMenu__AddMenuItem); +#endif +#ifdef CContextMenu__AddSeparator_x +FUNCTION_AT_ADDRESS(int CContextMenu::AddSeparator(void),CContextMenu__AddSeparator); +#endif +#ifdef CContextMenu__RemoveAllMenuItems_x +FUNCTION_AT_ADDRESS(void CContextMenu::RemoveAllMenuItems(void),CContextMenu__RemoveAllMenuItems); +#endif +#ifdef CContextMenu__EnableMenuItem_x +FUNCTION_AT_ADDRESS(void CContextMenu::EnableMenuItem(int,bool),CContextMenu__EnableMenuItem); +#endif +#ifdef CContextMenu__CheckMenuItem_x +FUNCTION_AT_ADDRESS(void CContextMenu::CheckMenuItem(int,bool,bool),CContextMenu__CheckMenuItem); +#endif +#ifdef CContextMenu__Activate_x +FUNCTION_AT_ADDRESS(void CContextMenu::Activate(class CXPoint,int,int),CContextMenu__Activate); +#endif +#ifdef CContextMenuManager__CContextMenuManager_x +FUNCTION_AT_ADDRESS( CContextMenuManager::CContextMenuManager(class CXWnd *,unsigned __int32,class CXRect),CContextMenuManager__CContextMenuManager); +#endif +#ifdef CContextMenuManager__RemoveMenu_x +FUNCTION_AT_ADDRESS(int CContextMenuManager::RemoveMenu(int,bool),CContextMenuManager__RemoveMenu); +#endif +#ifdef CContextMenuManager__AddMenu_x +FUNCTION_AT_ADDRESS(int CContextMenuManager::AddMenu(class CContextMenu *),CContextMenuManager__AddMenu); +#endif +#ifdef CContextMenuManager__PopupMenu_x +FUNCTION_AT_ADDRESS(int CContextMenuManager::PopupMenu(int,class CXPoint,class CXWnd *),CContextMenuManager__PopupMenu); +#endif +#ifdef CContextMenuManager__Flush_x +FUNCTION_AT_ADDRESS(void CContextMenuManager::Flush(void),CContextMenuManager__Flush); +#endif +#ifdef CContextMenuManager__CreateDefaultMenu_x +FUNCTION_AT_ADDRESS(void CContextMenuManager::CreateDefaultMenu(void),CContextMenuManager__CreateDefaultMenu); +#endif +#ifdef CContextMenuManager__WarnDefaultMenu_x +FUNCTION_AT_ADDRESS(void CContextMenuManager::WarnDefaultMenu(class CXWnd *),CContextMenuManager__WarnDefaultMenu); +#endif +#ifdef CContextMenuManager__HandleWindowMenuCommands_x +FUNCTION_AT_ADDRESS(int CContextMenuManager::HandleWindowMenuCommands(class CXWnd *,int),CContextMenuManager__HandleWindowMenuCommands); +#endif +#ifdef CXRect__Width_x +FUNCTION_AT_ADDRESS(int CXRect::Width(void)const ,CXRect__Width); +#endif +#ifdef CCursorAttachment__CCursorAttachment_x +FUNCTION_AT_ADDRESS( CCursorAttachment::CCursorAttachment(class CXWnd *),CCursorAttachment__CCursorAttachment); +#endif +#ifdef CCursorAttachment__Init_x +FUNCTION_AT_ADDRESS(void CCursorAttachment::Init(void),CCursorAttachment__Init); +#endif +#ifdef CCursorAttachment__Activate_x +FUNCTION_AT_ADDRESS(void CCursorAttachment::Activate(class CTextureAnimation *,int,int,int),CCursorAttachment__Activate); +#endif +#ifdef CCursorAttachment__DrawButtonText_x +FUNCTION_AT_ADDRESS(void CCursorAttachment::DrawButtonText(void)const ,CCursorAttachment__DrawButtonText); +#endif +#ifdef CCursorAttachment__DrawQuantity_x +FUNCTION_AT_ADDRESS(void CCursorAttachment::DrawQuantity(void)const ,CCursorAttachment__DrawQuantity); +#endif +#ifdef CCursorAttachment__IsOkToActivate_x +FUNCTION_AT_ADDRESS(bool CCursorAttachment::IsOkToActivate(int),CCursorAttachment__IsOkToActivate); +#endif +#ifdef CCursorAttachment__RemoveAttachment_x +FUNCTION_AT_ADDRESS(bool CCursorAttachment::RemoveAttachment(void),CCursorAttachment__RemoveAttachment); +#endif +#ifdef CTextureAnimation__Reset_x +FUNCTION_AT_ADDRESS(void CTextureAnimation::Reset(void),CTextureAnimation__Reset); +#endif +#ifdef CEditLabelWnd__CEditLabelWnd_x +FUNCTION_AT_ADDRESS( CEditLabelWnd::CEditLabelWnd(class CXWnd *),CEditLabelWnd__CEditLabelWnd); +#endif +#ifdef CEditLabelWnd__Activate_x +FUNCTION_AT_ADDRESS(void CEditLabelWnd::Activate(class CXWnd *,char *,int,unsigned long),CEditLabelWnd__Activate); +#endif +#ifdef CEQSuiteTextureLoader__dCEQSuiteTextureLoader_x +FUNCTION_AT_ADDRESS( CEQSuiteTextureLoader::~CEQSuiteTextureLoader(void),CEQSuiteTextureLoader__dCEQSuiteTextureLoader); +#endif +#ifdef CEQSuiteTextureLoader__CreateTexture_x +FUNCTION_AT_ADDRESS(unsigned int CEQSuiteTextureLoader::CreateTexture(class CUITextureInfo const &),CEQSuiteTextureLoader__CreateTexture); +#endif +#ifdef CEQSuiteTextureLoader__UnloadAllTextures_x +FUNCTION_AT_ADDRESS(void CEQSuiteTextureLoader::UnloadAllTextures(void),CEQSuiteTextureLoader__UnloadAllTextures); +#endif +#ifdef CEQSuiteTextureLoader__GetTexture_x +FUNCTION_AT_ADDRESS(struct T3D_tagBMINFO * CEQSuiteTextureLoader::GetTexture(class CUITextureInfo const &),CEQSuiteTextureLoader__GetTexture); +#endif +#ifdef CUITextureInfo__GetName_x +FUNCTION_AT_ADDRESS(class CXStr CUITextureInfo::GetName(void)const ,CUITextureInfo__GetName); +#endif +#ifdef CEQSuiteTextureLoader__CEQSuiteTextureLoader_x +FUNCTION_AT_ADDRESS( CEQSuiteTextureLoader::CEQSuiteTextureLoader(void),CEQSuiteTextureLoader__CEQSuiteTextureLoader); +#endif +#ifdef CExploreModeWnd__CExploreModeWnd_x +FUNCTION_AT_ADDRESS( CExploreModeWnd::CExploreModeWnd(class CXWnd *),CExploreModeWnd__CExploreModeWnd); +#endif +#ifdef CExploreModeWnd__Activate_x +FUNCTION_AT_ADDRESS(void CExploreModeWnd::Activate(void),CExploreModeWnd__Activate); +#endif +#ifdef CFacePick__CFacePick_x +FUNCTION_AT_ADDRESS( CFacePick::CFacePick(class CXWnd *),CFacePick__CFacePick); +#endif +#ifdef CFacePick__Init_x +FUNCTION_AT_ADDRESS(void CFacePick::Init(void),CFacePick__Init); +#endif +#ifdef CFacePick__ShowButtonGroup_x +FUNCTION_AT_ADDRESS(void CFacePick::ShowButtonGroup(int,bool),CFacePick__ShowButtonGroup); +#endif +#ifdef CFacePick__Activate_x +FUNCTION_AT_ADDRESS(void CFacePick::Activate(void),CFacePick__Activate); +#endif +#ifdef CFacePick__SetFaceSelectionsFromPlayer_x +FUNCTION_AT_ADDRESS(void CFacePick::SetFaceSelectionsFromPlayer(void),CFacePick__SetFaceSelectionsFromPlayer); +#endif +#ifdef CFacePick__CycleThroughFHEB_x +FUNCTION_AT_ADDRESS(void CFacePick::CycleThroughFHEB(int,int),CFacePick__CycleThroughFHEB); +#endif +#ifdef CFeedbackWnd__CFeedbackWnd_x +FUNCTION_AT_ADDRESS( CFeedbackWnd::CFeedbackWnd(class CXWnd *),CFeedbackWnd__CFeedbackWnd); +#endif +#ifdef CFeedbackWnd__Activate_x +FUNCTION_AT_ADDRESS(void CFeedbackWnd::Activate(void),CFeedbackWnd__Activate); +#endif +#ifdef CFileSelectionWnd__CFileSelectionWnd_x +FUNCTION_AT_ADDRESS( CFileSelectionWnd::CFileSelectionWnd(class CXWnd *),CFileSelectionWnd__CFileSelectionWnd); +#endif +#ifdef CFileSelectionWnd__Activate_x +FUNCTION_AT_ADDRESS(void CFileSelectionWnd::Activate(class CXWnd *,int),CFileSelectionWnd__Activate); +#endif +#ifdef CFileSelectionWnd__Callback_x +FUNCTION_AT_ADDRESS(void CFileSelectionWnd::Callback(bool),CFileSelectionWnd__Callback); +#endif +#ifdef CFileSelectionWnd__MakeFilePath_x +FUNCTION_AT_ADDRESS(void CFileSelectionWnd::MakeFilePath(void),CFileSelectionWnd__MakeFilePath); +#endif +#ifdef CFileSelectionWnd__GoSubdirectory_x +FUNCTION_AT_ADDRESS(void CFileSelectionWnd::GoSubdirectory(struct _ITEMIDLIST *),CFileSelectionWnd__GoSubdirectory); +#endif +#ifdef CFileSelectionWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CFileSelectionWnd::UpdateButtons(void),CFileSelectionWnd__UpdateButtons); +#endif +#ifdef CFileSelectionWnd__DirectoryEmpty_x +FUNCTION_AT_ADDRESS(bool CFileSelectionWnd::DirectoryEmpty(struct IShellFolder *,struct _ITEMIDLIST *),CFileSelectionWnd__DirectoryEmpty); +#endif +#ifdef CFileSelectionWnd__UpdateFileList_x +FUNCTION_AT_ADDRESS(void CFileSelectionWnd::UpdateFileList(void),CFileSelectionWnd__UpdateFileList); +#endif +#ifdef CFileSelectionWnd__ClearFileList_x +FUNCTION_AT_ADDRESS(void CFileSelectionWnd::ClearFileList(void),CFileSelectionWnd__ClearFileList); +#endif +#ifdef CFileSelectionWnd__GetPath_x +FUNCTION_AT_ADDRESS(unsigned long CFileSelectionWnd::GetPath(struct IShellFolder *,struct _ITEMIDLIST *,bool,class CXStr &),CFileSelectionWnd__GetPath); +#endif +#ifdef CFileSelectionWnd__GetSelectedFileCount_x +FUNCTION_AT_ADDRESS(int CFileSelectionWnd::GetSelectedFileCount(void),CFileSelectionWnd__GetSelectedFileCount); +#endif +#ifdef CFileSelectionWnd__GetSelectedFile_x +FUNCTION_AT_ADDRESS(class CXStr CFileSelectionWnd::GetSelectedFile(int),CFileSelectionWnd__GetSelectedFile); +#endif +#ifdef CXStr__Left_x +FUNCTION_AT_ADDRESS(class CXStr CXStr::Left(int)const ,CXStr__Left); +#endif +#ifdef CXStr__Right_x +FUNCTION_AT_ADDRESS(class CXStr CXStr::Right(int)const ,CXStr__Right); +#endif +#ifdef CFriendsWnd__CFriendsWnd_x +FUNCTION_AT_ADDRESS( CFriendsWnd::CFriendsWnd(class CXWnd *),CFriendsWnd__CFriendsWnd); +#endif +#ifdef CFriendsWnd__UpdateFriendsList_x +FUNCTION_AT_ADDRESS(void CFriendsWnd::UpdateFriendsList(void),CFriendsWnd__UpdateFriendsList); +#endif +#ifdef CFriendsWnd__UpdateIgnoreList_x +FUNCTION_AT_ADDRESS(void CFriendsWnd::UpdateIgnoreList(void),CFriendsWnd__UpdateIgnoreList); +#endif +#ifdef CFriendsWnd__Activate_x +FUNCTION_AT_ADDRESS(void CFriendsWnd::Activate(void),CFriendsWnd__Activate); +#endif +#ifdef CFriendsWnd__AddFriend_x +FUNCTION_AT_ADDRESS(void CFriendsWnd::AddFriend(void),CFriendsWnd__AddFriend); +#endif +#ifdef CFriendsWnd__AddIgnore_x +FUNCTION_AT_ADDRESS(void CFriendsWnd::AddIgnore(void),CFriendsWnd__AddIgnore); +#endif +#ifdef CFriendsWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CFriendsWnd::UpdateButtons(void),CFriendsWnd__UpdateButtons); +#endif +#ifdef CGemsGameWnd__CGemsGameWnd_x +FUNCTION_AT_ADDRESS( CGemsGameWnd::CGemsGameWnd(class CXWnd *),CGemsGameWnd__CGemsGameWnd); +#endif +#ifdef CGemsGameWnd__Init_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::Init(void),CGemsGameWnd__Init); +#endif +#ifdef CGemsGameWnd__Activate_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::Activate(void),CGemsGameWnd__Activate); +#endif +#ifdef CGemsGameWnd__Restart_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::Restart(void),CGemsGameWnd__Restart); +#endif +#ifdef CGemsGameWnd__AdvanceToNextWave_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::AdvanceToNextWave(void),CGemsGameWnd__AdvanceToNextWave); +#endif +#ifdef CGemsGameWnd__DoMatchScore_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::DoMatchScore(int),CGemsGameWnd__DoMatchScore); +#endif +#ifdef CGemsGameWnd__DrawSpellGem_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::DrawSpellGem(int,class CXRect,int,bool)const ,CGemsGameWnd__DrawSpellGem); +#endif +#ifdef CGemsGameWnd__SetPause_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::SetPause(bool),CGemsGameWnd__SetPause); +#endif +#ifdef CGemsGameWnd__TogglePause_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::TogglePause(void),CGemsGameWnd__TogglePause); +#endif +#ifdef CGemsGameWnd__SetNextUpdate_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::SetNextUpdate(void),CGemsGameWnd__SetNextUpdate); +#endif +#ifdef CGemsGameWnd__GetRndBlockImage_x +FUNCTION_AT_ADDRESS(int CGemsGameWnd::GetRndBlockImage(void),CGemsGameWnd__GetRndBlockImage); +#endif +#ifdef CGemsGameWnd__BadSpecial_x +FUNCTION_AT_ADDRESS(bool CGemsGameWnd::BadSpecial(int)const ,CGemsGameWnd__BadSpecial); +#endif +#ifdef CGemsGameWnd__ActivateSpecialMode_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::ActivateSpecialMode(int),CGemsGameWnd__ActivateSpecialMode); +#endif +#ifdef CGemsGameWnd__GetNextBlock_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::GetNextBlock(void),CGemsGameWnd__GetNextBlock); +#endif +#ifdef CGemsGameWnd__MoveCurBlock_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::MoveCurBlock(int),CGemsGameWnd__MoveCurBlock); +#endif +#ifdef CGemsGameWnd__ProcessMoveCurBlock_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::ProcessMoveCurBlock(int),CGemsGameWnd__ProcessMoveCurBlock); +#endif +#ifdef CGemsGameWnd__LegalBlockMove_x +FUNCTION_AT_ADDRESS(bool CGemsGameWnd::LegalBlockMove(int,int,int,int,bool),CGemsGameWnd__LegalBlockMove); +#endif +#ifdef CGemsGameWnd__MarkHigherBlocksFalling_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::MarkHigherBlocksFalling(int,int),CGemsGameWnd__MarkHigherBlocksFalling); +#endif +#ifdef CGemsGameWnd__ClearBlock_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::ClearBlock(struct _GemsBlock *),CGemsGameWnd__ClearBlock); +#endif +#ifdef CGemsGameWnd__ClearHighScores_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::ClearHighScores(void),CGemsGameWnd__ClearHighScores); +#endif +#ifdef CGemsGameWnd__ReadHighScores_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::ReadHighScores(void),CGemsGameWnd__ReadHighScores); +#endif +#ifdef CGemsGameWnd__WriteHighScores_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::WriteHighScores(void),CGemsGameWnd__WriteHighScores); +#endif +#ifdef CGemsGameWnd__CheckForNewHighScore_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::CheckForNewHighScore(void),CGemsGameWnd__CheckForNewHighScore); +#endif +#ifdef CGemsGameWnd__ProcessMatches_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::ProcessMatches(int),CGemsGameWnd__ProcessMatches); +#endif +#ifdef CGemsGameWnd__CheckForMatches_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::CheckForMatches(int,int),CGemsGameWnd__CheckForMatches); +#endif +#ifdef CGemsGameWnd__MakeBlockDrop_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::MakeBlockDrop(int,int,int),CGemsGameWnd__MakeBlockDrop); +#endif +#ifdef CGemsGameWnd__Update_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::Update(void),CGemsGameWnd__Update); +#endif +#ifdef CGemsGameWnd__UpdateDisplay_x +FUNCTION_AT_ADDRESS(void CGemsGameWnd::UpdateDisplay(void),CGemsGameWnd__UpdateDisplay); +#endif +#ifdef CGiveWnd__CGiveWnd_x +FUNCTION_AT_ADDRESS( CGiveWnd::CGiveWnd(class CXWnd *),CGiveWnd__CGiveWnd); +#endif +#ifdef CGiveWnd__Activate_x +FUNCTION_AT_ADDRESS(void CGiveWnd::Activate(void),CGiveWnd__Activate); +#endif +#ifdef CGiveWnd__UpdateGiveDisplay_x +FUNCTION_AT_ADDRESS(void CGiveWnd::UpdateGiveDisplay(void),CGiveWnd__UpdateGiveDisplay); +#endif +#ifdef CGroupSearchFiltersWnd__CGroupSearchFiltersWnd_x +FUNCTION_AT_ADDRESS( CGroupSearchFiltersWnd::CGroupSearchFiltersWnd(class CXWnd *),CGroupSearchFiltersWnd__CGroupSearchFiltersWnd); +#endif +#ifdef CGroupSearchFiltersWnd__Activate_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::Activate(void),CGroupSearchFiltersWnd__Activate); +#endif +#ifdef CGroupSearchFiltersWnd__ClearUiPointers_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::ClearUiPointers(void),CGroupSearchFiltersWnd__ClearUiPointers); +#endif +#ifdef CGroupSearchFiltersWnd__FetchUiPointers_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::FetchUiPointers(void),CGroupSearchFiltersWnd__FetchUiPointers); +#endif +#ifdef CGroupSearchFiltersWnd__InitPieces_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::InitPieces(void),CGroupSearchFiltersWnd__InitPieces); +#endif +#ifdef CGroupSearchFiltersWnd__ShouldFilterPlayer_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::ShouldFilterPlayer(char const *,char const *)const ,CGroupSearchFiltersWnd__ShouldFilterPlayer); +#endif +#ifdef CGroupSearchFiltersWnd__UseExclusiveSearchMode_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::UseExclusiveSearchMode(void)const ,CGroupSearchFiltersWnd__UseExclusiveSearchMode); +#endif +#ifdef CGroupSearchFiltersWnd__HandleUseIgnoreListSelected_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleUseIgnoreListSelected(void),CGroupSearchFiltersWnd__HandleUseIgnoreListSelected); +#endif +#ifdef CGroupSearchFiltersWnd__HandleUseFriendsListSelected_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleUseFriendsListSelected(void),CGroupSearchFiltersWnd__HandleUseFriendsListSelected); +#endif +#ifdef CGroupSearchFiltersWnd__HandleExcludeGuildsSelected_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleExcludeGuildsSelected(void),CGroupSearchFiltersWnd__HandleExcludeGuildsSelected); +#endif +#ifdef CGroupSearchFiltersWnd__HandleDesiredGuildsSelected_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleDesiredGuildsSelected(void),CGroupSearchFiltersWnd__HandleDesiredGuildsSelected); +#endif +#ifdef CGroupSearchFiltersWnd__HandleAddExcludedGuild_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleAddExcludedGuild(void),CGroupSearchFiltersWnd__HandleAddExcludedGuild); +#endif +#ifdef CGroupSearchFiltersWnd__HandleRemoveExcludedGuild_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleRemoveExcludedGuild(void),CGroupSearchFiltersWnd__HandleRemoveExcludedGuild); +#endif +#ifdef CGroupSearchFiltersWnd__HandleRemoveAllExcludedGuilds_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleRemoveAllExcludedGuilds(void),CGroupSearchFiltersWnd__HandleRemoveAllExcludedGuilds); +#endif +#ifdef CGroupSearchFiltersWnd__HandleAddDesiredGuild_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleAddDesiredGuild(void),CGroupSearchFiltersWnd__HandleAddDesiredGuild); +#endif +#ifdef CGroupSearchFiltersWnd__HandleRemoveDesiredGuild_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleRemoveDesiredGuild(void),CGroupSearchFiltersWnd__HandleRemoveDesiredGuild); +#endif +#ifdef CGroupSearchFiltersWnd__HandleRemoveAllDesiredGuilds_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::HandleRemoveAllDesiredGuilds(void),CGroupSearchFiltersWnd__HandleRemoveAllDesiredGuilds); +#endif +#ifdef CGroupSearchFiltersWnd__UseIgnoreList_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::UseIgnoreList(void)const ,CGroupSearchFiltersWnd__UseIgnoreList); +#endif +#ifdef CGroupSearchFiltersWnd__UseFriendsList_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::UseFriendsList(void)const ,CGroupSearchFiltersWnd__UseFriendsList); +#endif +#ifdef CGroupSearchFiltersWnd__UseExcludedGuilds_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::UseExcludedGuilds(void)const ,CGroupSearchFiltersWnd__UseExcludedGuilds); +#endif +#ifdef CGroupSearchFiltersWnd__UseDesiredGuilds_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::UseDesiredGuilds(void)const ,CGroupSearchFiltersWnd__UseDesiredGuilds); +#endif +#ifdef CGroupSearchFiltersWnd__NameIsInIgnoreList_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::NameIsInIgnoreList(char const *)const ,CGroupSearchFiltersWnd__NameIsInIgnoreList); +#endif +#ifdef CGroupSearchFiltersWnd__NameIsInFriendsList_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::NameIsInFriendsList(char const *)const ,CGroupSearchFiltersWnd__NameIsInFriendsList); +#endif +#ifdef CGroupSearchFiltersWnd__GuildIsInExcludedGuildsList_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::GuildIsInExcludedGuildsList(char const *)const ,CGroupSearchFiltersWnd__GuildIsInExcludedGuildsList); +#endif +#ifdef CGroupSearchFiltersWnd__GuildIsInDesiredGuildsList_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::GuildIsInDesiredGuildsList(char const *)const ,CGroupSearchFiltersWnd__GuildIsInDesiredGuildsList); +#endif +#ifdef CGroupSearchFiltersWnd__Save_x +FUNCTION_AT_ADDRESS(void CGroupSearchFiltersWnd::Save(void)const ,CGroupSearchFiltersWnd__Save); +#endif +#ifdef CGroupSearchFiltersWnd__Load_x +FUNCTION_AT_ADDRESS(bool CGroupSearchFiltersWnd::Load(void),CGroupSearchFiltersWnd__Load); +#endif +#ifdef CGroupSearchWnd__CGroupSearchWnd_x +FUNCTION_AT_ADDRESS( CGroupSearchWnd::CGroupSearchWnd(class CXWnd *),CGroupSearchWnd__CGroupSearchWnd); +#endif +#ifdef CGroupSearchWnd__Activate_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::Activate(int),CGroupSearchWnd__Activate); +#endif +#ifdef CGroupSearchWnd__ClearUiPointers_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::ClearUiPointers(void),CGroupSearchWnd__ClearUiPointers); +#endif +#ifdef CGroupSearchWnd__FetchUiPointers_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::FetchUiPointers(void),CGroupSearchWnd__FetchUiPointers); +#endif +#ifdef CGroupSearchWnd__ResetGroupList_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::ResetGroupList(void),CGroupSearchWnd__ResetGroupList); +#endif +#ifdef CGroupSearchWnd__AddGroupResult_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::AddGroupResult(struct LfgGroupResult const *),CGroupSearchWnd__AddGroupResult); +#endif +#ifdef SListWndLine__dSListWndLine_x +FUNCTION_AT_ADDRESS( SListWndLine::~SListWndLine(void),SListWndLine__dSListWndLine); +#endif +#ifdef CUITextureInfo__dCUITextureInfo_x +FUNCTION_AT_ADDRESS( CUITextureInfo::~CUITextureInfo(void),CUITextureInfo__dCUITextureInfo); +#endif +#ifdef CUITexturePiece__dCUITexturePiece_x +FUNCTION_AT_ADDRESS( CUITexturePiece::~CUITexturePiece(void),CUITexturePiece__dCUITexturePiece); +#endif +#ifdef SListWndCell__dSListWndCell_x +FUNCTION_AT_ADDRESS( SListWndCell::~SListWndCell(void),SListWndCell__dSListWndCell); +#endif +#ifdef STextureAnimationFrame__dSTextureAnimationFrame_x +FUNCTION_AT_ADDRESS( STextureAnimationFrame::~STextureAnimationFrame(void),STextureAnimationFrame__dSTextureAnimationFrame); +#endif +#ifdef CGroupSearchWnd__ResetPlayerList_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::ResetPlayerList(void),CGroupSearchWnd__ResetPlayerList); +#endif +#ifdef CGroupSearchWnd__AddPlayerResult_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::AddPlayerResult(struct LfgPlayerResult const *),CGroupSearchWnd__AddPlayerResult); +#endif +#ifdef CGroupSearchWnd__InitLfg_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::InitLfg(void),CGroupSearchWnd__InitLfg); +#endif +#ifdef CGroupSearchWnd__InitLfp_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::InitLfp(void),CGroupSearchWnd__InitLfp); +#endif +#ifdef CGroupSearchWnd__UpdatePlayerLabel_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::UpdatePlayerLabel(void),CGroupSearchWnd__UpdatePlayerLabel); +#endif +#ifdef CGroupSearchWnd__UpdateGroupLabel_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::UpdateGroupLabel(void),CGroupSearchWnd__UpdateGroupLabel); +#endif +#ifdef CGroupSearchWnd__RedirectOnProcessFrameTo_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::RedirectOnProcessFrameTo(class CPageWnd *),CGroupSearchWnd__RedirectOnProcessFrameTo); +#endif +#ifdef CGroupSearchWnd__RedirectWndNotificationTo_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::RedirectWndNotificationTo(class CPageWnd *,class CXWnd *,unsigned __int32,void *),CGroupSearchWnd__RedirectWndNotificationTo); +#endif +#ifdef CGroupSearchWnd__PlayerInfoPageWndNotification_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::PlayerInfoPageWndNotification(class CXWnd *,unsigned __int32,void *),CGroupSearchWnd__PlayerInfoPageWndNotification); +#endif +#ifdef CGroupSearchWnd__GroupInfoPageWndNotification_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GroupInfoPageWndNotification(class CXWnd *,unsigned __int32,void *),CGroupSearchWnd__GroupInfoPageWndNotification); +#endif +#ifdef CGroupSearchWnd__PlayerListPageWndNotification_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::PlayerListPageWndNotification(class CXWnd *,unsigned __int32,void *),CGroupSearchWnd__PlayerListPageWndNotification); +#endif +#ifdef CGroupSearchWnd__GroupListPageWndNotification_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GroupListPageWndNotification(class CXWnd *,unsigned __int32,void *),CGroupSearchWnd__GroupListPageWndNotification); +#endif +#ifdef CGroupSearchWnd__PlayerInfoPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::PlayerInfoPageOnProcessFrame(void),CGroupSearchWnd__PlayerInfoPageOnProcessFrame); +#endif +#ifdef CGroupSearchWnd__GroupInfoPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GroupInfoPageOnProcessFrame(void),CGroupSearchWnd__GroupInfoPageOnProcessFrame); +#endif +#ifdef CGroupSearchWnd__HandlePlayerInfoPost_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandlePlayerInfoPost(void),CGroupSearchWnd__HandlePlayerInfoPost); +#endif +#ifdef CGroupSearchWnd__HandlePlayerInfoUpdate_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandlePlayerInfoUpdate(void),CGroupSearchWnd__HandlePlayerInfoUpdate); +#endif +#ifdef CGroupSearchWnd__HandlePlayerInfoRemove_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandlePlayerInfoRemove(void),CGroupSearchWnd__HandlePlayerInfoRemove); +#endif +#ifdef CGroupSearchWnd__HandleGroupInfoPost_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleGroupInfoPost(void),CGroupSearchWnd__HandleGroupInfoPost); +#endif +#ifdef CGroupSearchWnd__HandleGroupInfoUpdate_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleGroupInfoUpdate(void),CGroupSearchWnd__HandleGroupInfoUpdate); +#endif +#ifdef CGroupSearchWnd__HandleGroupInfoRemove_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleGroupInfoRemove(void),CGroupSearchWnd__HandleGroupInfoRemove); +#endif +#ifdef CGroupSearchWnd__HandleSelectAllClasses_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleSelectAllClasses(void),CGroupSearchWnd__HandleSelectAllClasses); +#endif +#ifdef CGroupSearchWnd__HandleDeselectAllClasses_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleDeselectAllClasses(void),CGroupSearchWnd__HandleDeselectAllClasses); +#endif +#ifdef CGroupSearchWnd__HandleOpenFiltersWindow_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleOpenFiltersWindow(void),CGroupSearchWnd__HandleOpenFiltersWindow); +#endif +#ifdef CGroupSearchWnd__HandleQueryingForGroups_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleQueryingForGroups(void),CGroupSearchWnd__HandleQueryingForGroups); +#endif +#ifdef CGroupSearchWnd__HandleQueryingForPlayers_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleQueryingForPlayers(void),CGroupSearchWnd__HandleQueryingForPlayers); +#endif +#ifdef CGroupSearchWnd__SendServerLfgOn_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::SendServerLfgOn(void),CGroupSearchWnd__SendServerLfgOn); +#endif +#ifdef CGroupSearchWnd__SendServerLfgOff_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::SendServerLfgOff(void),CGroupSearchWnd__SendServerLfgOff); +#endif +#ifdef CGroupSearchWnd__SendServerLfpOn_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::SendServerLfpOn(void),CGroupSearchWnd__SendServerLfpOn); +#endif +#ifdef CGroupSearchWnd__SendServerLfpOff_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::SendServerLfpOff(void),CGroupSearchWnd__SendServerLfpOff); +#endif +#ifdef CGroupSearchWnd__ShowGroupDetails_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::ShowGroupDetails(struct LfgGroupResult const *),CGroupSearchWnd__ShowGroupDetails); +#endif +#ifdef CGroupSearchWnd__PlayerShouldBeFiltered_x +FUNCTION_AT_ADDRESS(bool CGroupSearchWnd::PlayerShouldBeFiltered(struct LfgPlayerData const *)const ,CGroupSearchWnd__PlayerShouldBeFiltered); +#endif +#ifdef CGroupSearchWnd__FilterOutBadWords_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::FilterOutBadWords(char const *,char *)const ,CGroupSearchWnd__FilterOutBadWords); +#endif +#ifdef CGroupSearchWnd__LockQueryButtonAtTime_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::LockQueryButtonAtTime(long),CGroupSearchWnd__LockQueryButtonAtTime); +#endif +#ifdef CGroupSearchWnd__UpdateRemainingQueryLockedTime_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::UpdateRemainingQueryLockedTime(long),CGroupSearchWnd__UpdateRemainingQueryLockedTime); +#endif +#ifdef CGroupSearchWnd__HandleGroupResultColSelected_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleGroupResultColSelected(int),CGroupSearchWnd__HandleGroupResultColSelected); +#endif +#ifdef CGroupSearchWnd__HandlePlayerResultColSelected_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandlePlayerResultColSelected(int),CGroupSearchWnd__HandlePlayerResultColSelected); +#endif +#ifdef CGroupSearchWnd__HandleGroupResultRowSelected_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleGroupResultRowSelected(int),CGroupSearchWnd__HandleGroupResultRowSelected); +#endif +#ifdef CGroupSearchWnd__HandleDoubleClickedOnPlayer_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleDoubleClickedOnPlayer(char const *),CGroupSearchWnd__HandleDoubleClickedOnPlayer); +#endif +#ifdef CGroupSearchWnd__HandleNumericSort_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleNumericSort(class SListWndSortInfo *),CGroupSearchWnd__HandleNumericSort); +#endif +#ifdef CGroupSearchWnd__HandleGroupMakeupChanged_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::HandleGroupMakeupChanged(void),CGroupSearchWnd__HandleGroupMakeupChanged); +#endif +#ifdef CGroupSearchWnd__CheckIfCurrentLfgInfoIsValid_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::CheckIfCurrentLfgInfoIsValid(void)const ,CGroupSearchWnd__CheckIfCurrentLfgInfoIsValid); +#endif +#ifdef CGroupSearchWnd__CheckIfCurrentLfpInfoIsValid_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::CheckIfCurrentLfpInfoIsValid(void)const ,CGroupSearchWnd__CheckIfCurrentLfpInfoIsValid); +#endif +#ifdef CGroupSearchWnd__UpdateLfgPostingStatus_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::UpdateLfgPostingStatus(void),CGroupSearchWnd__UpdateLfgPostingStatus); +#endif +#ifdef CGroupSearchWnd__UpdateLfpPostingStatus_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::UpdateLfpPostingStatus(void),CGroupSearchWnd__UpdateLfpPostingStatus); +#endif +#ifdef CGroupSearchWnd__GetDesiredPlayerMinLevel_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GetDesiredPlayerMinLevel(void)const ,CGroupSearchWnd__GetDesiredPlayerMinLevel); +#endif +#ifdef CGroupSearchWnd__GetDefaultLfgLevelRange_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::GetDefaultLfgLevelRange(class EQ_PC const *,int *,int *)const ,CGroupSearchWnd__GetDefaultLfgLevelRange); +#endif +#ifdef CGroupSearchWnd__GetDefaultLfpLevelRange_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::GetDefaultLfpLevelRange(class EQ_PC const *,int *,int *)const ,CGroupSearchWnd__GetDefaultLfpLevelRange); +#endif +#ifdef CGroupSearchWnd__GetDesiredPlayerMaxLevel_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GetDesiredPlayerMaxLevel(void)const ,CGroupSearchWnd__GetDesiredPlayerMaxLevel); +#endif +#ifdef CGroupSearchWnd__GetDesiredGroupMinLevel_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GetDesiredGroupMinLevel(void)const ,CGroupSearchWnd__GetDesiredGroupMinLevel); +#endif +#ifdef CGroupSearchWnd__GetDesiredGroupMaxLevel_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GetDesiredGroupMaxLevel(void)const ,CGroupSearchWnd__GetDesiredGroupMaxLevel); +#endif +#ifdef CGroupSearchWnd__IsLevelRangeValid_x +FUNCTION_AT_ADDRESS(bool CGroupSearchWnd::IsLevelRangeValid(int,int)const ,CGroupSearchWnd__IsLevelRangeValid); +#endif +#ifdef CGroupSearchWnd__GetDesiredClassesFlag_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GetDesiredClassesFlag(void)const ,CGroupSearchWnd__GetDesiredClassesFlag); +#endif +#ifdef CGroupSearchWnd__GetEqClassType_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GetEqClassType(int)const ,CGroupSearchWnd__GetEqClassType); +#endif +#ifdef CGroupSearchWnd__PopUpErrorMessage_x +FUNCTION_AT_ADDRESS(void CGroupSearchWnd::PopUpErrorMessage(int)const ,CGroupSearchWnd__PopUpErrorMessage); +#endif +#ifdef Util__SetBit_x +FUNCTION_AT_ADDRESS(int __cdecl Util::SetBit(int,void *,int),Util__SetBit); +#endif +#ifdef _partyGroup__getNumMembers_x +FUNCTION_AT_ADDRESS(int _partyGroup::getNumMembers(void)const ,_partyGroup__getNumMembers); +#endif +#ifdef SListWndCell__SListWndCell_x +FUNCTION_AT_ADDRESS( SListWndCell::SListWndCell(void),SListWndCell__SListWndCell); +#endif +#ifdef CGroupWnd__CGroupWnd_x +FUNCTION_AT_ADDRESS( CGroupWnd::CGroupWnd(class CXWnd *),CGroupWnd__CGroupWnd); +#endif +#ifdef CGroupWnd__Init_x +FUNCTION_AT_ADDRESS(void CGroupWnd::Init(void),CGroupWnd__Init); +#endif +#ifdef CGroupWnd__Activate_x +FUNCTION_AT_ADDRESS(void CGroupWnd::Activate(void),CGroupWnd__Activate); +#endif +#ifdef CGroupWnd__SetInvited_x +FUNCTION_AT_ADDRESS(void CGroupWnd::SetInvited(bool),CGroupWnd__SetInvited); +#endif +#ifdef CGroupWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CGroupWnd::UpdateButtons(void),CGroupWnd__UpdateButtons); +#endif +#ifdef CGroupWnd__KeyMapUpdated_x +FUNCTION_AT_ADDRESS(void CGroupWnd::KeyMapUpdated(void),CGroupWnd__KeyMapUpdated); +#endif +#ifdef CGroupWnd__CreateLocalMenu_x +FUNCTION_AT_ADDRESS(void CGroupWnd::CreateLocalMenu(void),CGroupWnd__CreateLocalMenu); +#endif +#ifdef CGroupWnd__UpdateContextMenu_x +FUNCTION_AT_ADDRESS(void CGroupWnd::UpdateContextMenu(void),CGroupWnd__UpdateContextMenu); +#endif +#ifdef CGuildMgmtWnd__CGuildMgmtWnd_x +FUNCTION_AT_ADDRESS( CGuildMgmtWnd::CGuildMgmtWnd(class CXWnd *),CGuildMgmtWnd__CGuildMgmtWnd); +#endif +#ifdef CGuildMgmtWnd__Init_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::Init(void),CGuildMgmtWnd__Init); +#endif +#ifdef CGuildMgmtWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::UpdateButtons(void),CGuildMgmtWnd__UpdateButtons); +#endif +#ifdef CGuildMgmtWnd__Clean_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::Clean(void),CGuildMgmtWnd__Clean); +#endif +#ifdef CGuildMgmtWnd__SetMOTD_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::SetMOTD(char *,char *),CGuildMgmtWnd__SetMOTD); +#endif +#ifdef CGuildMgmtWnd__SetPlayerCount_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::SetPlayerCount(int),CGuildMgmtWnd__SetPlayerCount); +#endif +#ifdef CGuildMgmtWnd__CreatePersonalNotesFilename_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::CreatePersonalNotesFilename(void),CGuildMgmtWnd__CreatePersonalNotesFilename); +#endif +#ifdef CGuildMgmtWnd__LoadPersonalNotes_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::LoadPersonalNotes(void),CGuildMgmtWnd__LoadPersonalNotes); +#endif +#ifdef CGuildMgmtWnd__SavePersonalNotes_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::SavePersonalNotes(void),CGuildMgmtWnd__SavePersonalNotes); +#endif +#ifdef CGuildMgmtWnd__GetPersonalNote_x +FUNCTION_AT_ADDRESS(char * CGuildMgmtWnd::GetPersonalNote(char *),CGuildMgmtWnd__GetPersonalNote); +#endif +#ifdef CGuildMgmtWnd__SetPersonalNote_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::SetPersonalNote(char *,char *),CGuildMgmtWnd__SetPersonalNote); +#endif +#ifdef CGuildMgmtWnd__AddMember_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::AddMember(class GuildMember *),CGuildMgmtWnd__AddMember); +#endif +#ifdef CGuildMgmtWnd__RemoveMember_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::RemoveMember(class GuildMember *),CGuildMgmtWnd__RemoveMember); +#endif +#ifdef CGuildMgmtWnd__RenameMember_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::RenameMember(char *,char *),CGuildMgmtWnd__RenameMember); +#endif +#ifdef CGuildMgmtWnd__UpdateListMember_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::UpdateListMember(class GuildMember *,int),CGuildMgmtWnd__UpdateListMember); +#endif +#ifdef CGuildMgmtWnd__FindListMember_x +FUNCTION_AT_ADDRESS(int CGuildMgmtWnd::FindListMember(class GuildMember *),CGuildMgmtWnd__FindListMember); +#endif +#ifdef CGuildMgmtWnd__Activate_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::Activate(void),CGuildMgmtWnd__Activate); +#endif +#ifdef CGuildMgmtWnd__CleanAndRefillListWnd_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::CleanAndRefillListWnd(bool),CGuildMgmtWnd__CleanAndRefillListWnd); +#endif +#ifdef CGuildMgmtWnd__SortList_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::SortList(int,bool),CGuildMgmtWnd__SortList); +#endif +#ifdef CGuildMgmtWnd__DumpToFile_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::DumpToFile(char *),CGuildMgmtWnd__DumpToFile); +#endif +#ifdef CGuildMgmtWnd__LoadINI_x +FUNCTION_AT_ADDRESS(void CGuildMgmtWnd::LoadINI(void),CGuildMgmtWnd__LoadINI); +#endif +#ifdef CGuild__GetGuildMotd_x +FUNCTION_AT_ADDRESS(char * CGuild::GetGuildMotd(void),CGuild__GetGuildMotd); +#endif +#ifdef CGuild__GetGuildMotdAuthor_x +FUNCTION_AT_ADDRESS(char * CGuild::GetGuildMotdAuthor(void),CGuild__GetGuildMotdAuthor); +#endif +#ifdef EQPlayer__GetGuild_x +FUNCTION_AT_ADDRESS(int EQPlayer::GetGuild(void)const ,EQPlayer__GetGuild); +#endif +#ifdef CHelpWnd__CHelpWnd_x +FUNCTION_AT_ADDRESS( CHelpWnd::CHelpWnd(class CXWnd *),CHelpWnd__CHelpWnd); +#endif +#ifdef CHelpWnd__SetFile_x +FUNCTION_AT_ADDRESS(void CHelpWnd::SetFile(char *),CHelpWnd__SetFile); +#endif +#ifdef CHotButtonWnd__CHotButtonWnd_x +FUNCTION_AT_ADDRESS( CHotButtonWnd::CHotButtonWnd(class CXWnd *),CHotButtonWnd__CHotButtonWnd); +#endif +#ifdef CHotButtonWnd__Init_x +FUNCTION_AT_ADDRESS(void CHotButtonWnd::Init(void),CHotButtonWnd__Init); +#endif +#ifdef CHotButtonWnd__Activate_x +FUNCTION_AT_ADDRESS(void CHotButtonWnd::Activate(void),CHotButtonWnd__Activate); +#endif +#ifdef CHotButtonWnd__UpdatePage_x +FUNCTION_AT_ADDRESS(void CHotButtonWnd::UpdatePage(void),CHotButtonWnd__UpdatePage); +#endif +#ifdef CHotButtonWnd__DoHotButton_x +FUNCTION_AT_ADDRESS(void CHotButtonWnd::DoHotButton(int,int),CHotButtonWnd__DoHotButton); +#endif +#ifdef CHotButtonWnd__DoHotButtonRightClick_x +FUNCTION_AT_ADDRESS(void CHotButtonWnd::DoHotButtonRightClick(int),CHotButtonWnd__DoHotButtonRightClick); +#endif +#ifdef CInspectWnd__CInspectWnd_x +FUNCTION_AT_ADDRESS( CInspectWnd::CInspectWnd(class CXWnd *),CInspectWnd__CInspectWnd); +#endif +#ifdef CInspectWnd__Init_x +FUNCTION_AT_ADDRESS(void CInspectWnd::Init(void),CInspectWnd__Init); +#endif +#ifdef CInspectWnd__Activate_x +FUNCTION_AT_ADDRESS(void CInspectWnd::Activate(struct _inspect *),CInspectWnd__Activate); +#endif +#ifdef CInspectWnd__AcceptInspectText_x +FUNCTION_AT_ADDRESS(void CInspectWnd::AcceptInspectText(void),CInspectWnd__AcceptInspectText); +#endif +#ifdef CInspectWnd__PlayerBeingDeleted_x +FUNCTION_AT_ADDRESS(void CInspectWnd::PlayerBeingDeleted(class EQPlayer *),CInspectWnd__PlayerBeingDeleted); +#endif +#ifdef CInventoryWnd__CInventoryWnd_x +FUNCTION_AT_ADDRESS( CInventoryWnd::CInventoryWnd(class CXWnd *),CInventoryWnd__CInventoryWnd); +#endif +#ifdef CInventoryWnd__Init_x +FUNCTION_AT_ADDRESS(void CInventoryWnd::Init(void),CInventoryWnd__Init); +#endif +#ifdef CInventoryWnd__Activate_x +FUNCTION_AT_ADDRESS(void CInventoryWnd::Activate(void),CInventoryWnd__Activate); +#endif +#ifdef CInventoryWnd__DestroyHeld_x +FUNCTION_AT_ADDRESS(void CInventoryWnd::DestroyHeld(void),CInventoryWnd__DestroyHeld); +#endif +#ifdef CInventoryWnd__ClickedMoneyButton_x +FUNCTION_AT_ADDRESS(void CInventoryWnd::ClickedMoneyButton(int,int),CInventoryWnd__ClickedMoneyButton); +#endif +#ifdef CInventoryWnd__GetInventoryQtyFromCoinType_x +FUNCTION_AT_ADDRESS(long CInventoryWnd::GetInventoryQtyFromCoinType(int),CInventoryWnd__GetInventoryQtyFromCoinType); +#endif +#ifdef CInventoryWnd__UpdateMoneyDisplay_x +FUNCTION_AT_ADDRESS(void CInventoryWnd::UpdateMoneyDisplay(void),CInventoryWnd__UpdateMoneyDisplay); +#endif +#ifdef CInvSlot__CInvSlot_x +FUNCTION_AT_ADDRESS( CInvSlot::CInvSlot(void),CInvSlot__CInvSlot); +#endif + +#ifdef CInvSlot__GetItemBase_x +FUNCTION_AT_ADDRESS( void CInvSlot::GetItemBase(struct _CONTENTS **), CInvSlot__GetItemBase ); +#endif + +#ifdef CInvSlot__SetInvSlotWnd_x +FUNCTION_AT_ADDRESS(void CInvSlot::SetInvSlotWnd(class CInvSlotWnd *),CInvSlot__SetInvSlotWnd); +#endif +#ifdef CInvSlot__SetItem_x +FUNCTION_AT_ADDRESS(void CInvSlot::SetItem(class EQ_Item *),CInvSlot__SetItem); +#endif +#ifdef CInvSlot__SliderComplete_x +FUNCTION_AT_ADDRESS(void CInvSlot::SliderComplete(int),CInvSlot__SliderComplete); +#endif +#ifdef CInvSlot__HandleLButtonUp_x +FUNCTION_AT_ADDRESS(void CInvSlot::HandleLButtonUp(class CXPoint,bool),CInvSlot__HandleLButtonUp); +#endif +#ifdef CInvSlot__HandleLButtonHeld_x +FUNCTION_AT_ADDRESS(void CInvSlot::HandleLButtonHeld(class CXPoint),CInvSlot__HandleLButtonHeld); +#endif +#ifdef CInvSlot__DoDrinkEatPoison_x +FUNCTION_AT_ADDRESS(void CInvSlot::DoDrinkEatPoison(class EQ_Item *,int),CInvSlot__DoDrinkEatPoison); +#endif +#ifdef CInvSlot__HandleRButtonUp_x +FUNCTION_AT_ADDRESS(void CInvSlot::HandleRButtonUp(class CXPoint *),CInvSlot__HandleRButtonUp); +#endif +#ifdef CInvSlot__HandleRButtonHeld_x +FUNCTION_AT_ADDRESS(void CInvSlot::HandleRButtonHeld(class CXPoint),CInvSlot__HandleRButtonHeld); +#endif +#ifdef CInvSlot__HandleRButtonUpAfterHeld_x +FUNCTION_AT_ADDRESS(void CInvSlot::HandleRButtonUpAfterHeld(class CXPoint),CInvSlot__HandleRButtonUpAfterHeld); +#endif +#ifdef CInvSlot__IllegalBigBank_x +FUNCTION_AT_ADDRESS(bool CInvSlot::IllegalBigBank(int),CInvSlot__IllegalBigBank); +#endif +#ifdef CInvSlotMgr__CInvSlotMgr_x +FUNCTION_AT_ADDRESS( CInvSlotMgr::CInvSlotMgr(void),CInvSlotMgr__CInvSlotMgr); +#endif +#ifdef CInvSlotMgr__MoveItem_x +FUNCTION_AT_ADDRESS(bool CInvSlotMgr::MoveItem(CMoveItemData*,CMoveItemData*,int valueOne,int valueOne2,int valueZero,int valueZero2),CInvSlotMgr__MoveItem); +#endif +#ifdef CInvSlotMgr__CreateInvSlot_x +FUNCTION_AT_ADDRESS(class CInvSlot * CInvSlotMgr::CreateInvSlot(class CInvSlotWnd *),CInvSlotMgr__CreateInvSlot); +#endif +#ifdef CInvSlotMgr__FindInvSlot_x +FUNCTION_AT_ADDRESS(class CInvSlot * CInvSlotMgr::FindInvSlot(int,int),CInvSlotMgr__FindInvSlot); +#endif +#ifdef CInvSlotMgr__SelectSlot_x +FUNCTION_AT_ADDRESS(void CInvSlotMgr::SelectSlot(class CInvSlot *),CInvSlotMgr__SelectSlot); +#endif +#ifdef CInvSlotMgr__UpdateSlots_x +FUNCTION_AT_ADDRESS(void CInvSlotMgr::UpdateSlots(void),CInvSlotMgr__UpdateSlots); +#endif +#ifdef CItemDisplayWnd__CItemDisplayWnd_x +FUNCTION_AT_ADDRESS( CItemDisplayWnd::CItemDisplayWnd(class CXWnd *),CItemDisplayWnd__CItemDisplayWnd); +#endif +#ifdef CItemDisplayWnd__UpdateStrings_x +FUNCTION_AT_ADDRESS(void CItemDisplayWnd::UpdateStrings(void),CItemDisplayWnd__UpdateStrings); +#endif +#ifdef CItemDisplayWnd__SetItem_x +FUNCTION_AT_ADDRESS(void CItemDisplayWnd::SetItem(class EQ_Item *,bool),CItemDisplayWnd__SetItem); +#endif +#ifdef CItemDisplayWnd__SetItemText_x +FUNCTION_AT_ADDRESS(void CItemDisplayWnd::SetItemText(char *),CItemDisplayWnd__SetItemText); +#endif +#ifdef CItemDisplayWnd__GetSizeString_x +FUNCTION_AT_ADDRESS(void CItemDisplayWnd::GetSizeString(int,char *),CItemDisplayWnd__GetSizeString); +#endif +#ifdef CItemDisplayWnd__CreateRaceString_x +FUNCTION_AT_ADDRESS(class CXStr CItemDisplayWnd::CreateRaceString(class EQ_Equipment *),CItemDisplayWnd__CreateRaceString); +#endif +#ifdef CItemDisplayWnd__CreateClassString_x +FUNCTION_AT_ADDRESS(class CXStr CItemDisplayWnd::CreateClassString(class EQ_Equipment *),CItemDisplayWnd__CreateClassString); +#endif +#ifdef CItemDisplayWnd__CreateMealSizeString_x +FUNCTION_AT_ADDRESS(class CXStr CItemDisplayWnd::CreateMealSizeString(class EQ_Equipment *),CItemDisplayWnd__CreateMealSizeString); +#endif +#ifdef CItemDisplayWnd__CreateModString_x +FUNCTION_AT_ADDRESS(class CXStr CItemDisplayWnd::CreateModString(class EQ_Equipment *,int,int,int *),CItemDisplayWnd__CreateModString); +#endif +#ifdef CItemDisplayWnd__CreateEquipmentStatusString_x +FUNCTION_AT_ADDRESS(class CXStr CItemDisplayWnd::CreateEquipmentStatusString(class EQ_Item *),CItemDisplayWnd__CreateEquipmentStatusString); +#endif +#ifdef CItemDisplayWnd__SetSpell_x +FUNCTION_AT_ADDRESS(void CItemDisplayWnd::SetSpell(int SpellID,bool HasSpellDescr,int),CItemDisplayWnd__SetSpell); +#endif +#ifdef CJournalCatWnd__CJournalCatWnd_x +FUNCTION_AT_ADDRESS( CJournalCatWnd::CJournalCatWnd(class CXWnd *),CJournalCatWnd__CJournalCatWnd); +#endif +#ifdef CJournalCatWnd__Init_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::Init(void),CJournalCatWnd__Init); +#endif +#ifdef CJournalCatWnd__UpdateAll_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::UpdateAll(bool),CJournalCatWnd__UpdateAll); +#endif +#ifdef CJournalCatWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::UpdateButtons(void),CJournalCatWnd__UpdateButtons); +#endif +#ifdef CJournalCatWnd__SelectCategory_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::SelectCategory(int),CJournalCatWnd__SelectCategory); +#endif +#ifdef CJournalCatWnd__Clean_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::Clean(void),CJournalCatWnd__Clean); +#endif +#ifdef CJournalCatWnd__BuildList_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::BuildList(void),CJournalCatWnd__BuildList); +#endif +#ifdef CJournalCatWnd__UpdateListWnd_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::UpdateListWnd(bool),CJournalCatWnd__UpdateListWnd); +#endif +#ifdef CJournalCatWnd__Activate_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::Activate(void),CJournalCatWnd__Activate); +#endif +#ifdef CJournalCatWnd__SortList_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::SortList(int,bool),CJournalCatWnd__SortList); +#endif +#ifdef CJournalCatWnd__LoadINI_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::LoadINI(void),CJournalCatWnd__LoadINI); +#endif +#ifdef CJournalCatWnd__StoreINI_x +FUNCTION_AT_ADDRESS(void CJournalCatWnd::StoreINI(void),CJournalCatWnd__StoreINI); +#endif +#ifdef CJournalNPCWnd__CJournalNPCWnd_x +FUNCTION_AT_ADDRESS( CJournalNPCWnd::CJournalNPCWnd(class CXWnd *),CJournalNPCWnd__CJournalNPCWnd); +#endif +#ifdef CJournalNPCWnd__Init_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::Init(void),CJournalNPCWnd__Init); +#endif +#ifdef CJournalNPCWnd__Activate_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::Activate(void),CJournalNPCWnd__Activate); +#endif +#ifdef CJournalNPCWnd__UpdateAll_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::UpdateAll(bool),CJournalNPCWnd__UpdateAll); +#endif +#ifdef CJournalNPCWnd__UpdateListWnd_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::UpdateListWnd(bool),CJournalNPCWnd__UpdateListWnd); +#endif +#ifdef CJournalNPCWnd__SelectNPCIndex_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::SelectNPCIndex(int),CJournalNPCWnd__SelectNPCIndex); +#endif +#ifdef CJournalNPCWnd__UpdateCategories_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::UpdateCategories(void),CJournalNPCWnd__UpdateCategories); +#endif +#ifdef CJournalNPCWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::UpdateButtons(void),CJournalNPCWnd__UpdateButtons); +#endif +#ifdef CJournalNPCWnd__EnterIntoJournal_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::EnterIntoJournal(char *,float,float,float,char *),CJournalNPCWnd__EnterIntoJournal); +#endif +#ifdef CJournalNPCWnd__DoBackups_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::DoBackups(class CXStr),CJournalNPCWnd__DoBackups); +#endif +#ifdef CJournalNPCWnd__LoadJournal_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::LoadJournal(int),CJournalNPCWnd__LoadJournal); +#endif +#ifdef CJournalNPCWnd__SaveJournal_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::SaveJournal(void),CJournalNPCWnd__SaveJournal); +#endif +#ifdef CJournalNPCWnd__BuildList_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::BuildList(void),CJournalNPCWnd__BuildList); +#endif +#ifdef CJournalNPCWnd__SortList_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::SortList(int,bool),CJournalNPCWnd__SortList); +#endif +#ifdef CJournalNPCWnd__GetLogState_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::GetLogState(void),CJournalNPCWnd__GetLogState); +#endif +#ifdef CJournalNPCWnd__StoreLogState_x +FUNCTION_AT_ADDRESS(void CJournalNPCWnd::StoreLogState(void),CJournalNPCWnd__StoreLogState); +#endif +#ifdef CJournalTextWnd__CJournalTextWnd_x +FUNCTION_AT_ADDRESS( CJournalTextWnd::CJournalTextWnd(class CXWnd *),CJournalTextWnd__CJournalTextWnd); +#endif +#ifdef CJournalTextWnd__UpdateAll_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::UpdateAll(bool),CJournalTextWnd__UpdateAll); +#endif +#ifdef CJournalTextWnd__UpdateCategories_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::UpdateCategories(void),CJournalTextWnd__UpdateCategories); +#endif +#ifdef CJournalTextWnd__Activate_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::Activate(void),CJournalTextWnd__Activate); +#endif +#ifdef CJournalTextWnd__SetSearch_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::SetSearch(class CXStr),CJournalTextWnd__SetSearch); +#endif +#ifdef CJournalTextWnd__Clear_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::Clear(void),CJournalTextWnd__Clear); +#endif +#ifdef CJournalTextWnd__UpdateListWnd_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::UpdateListWnd(bool),CJournalTextWnd__UpdateListWnd); +#endif +#ifdef CJournalTextWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::UpdateButtons(void),CJournalTextWnd__UpdateButtons); +#endif +#ifdef CJournalTextWnd__DisplayNPC_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::DisplayNPC(class JournalNPC *),CJournalTextWnd__DisplayNPC); +#endif +#ifdef CJournalTextWnd__BuildList_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::BuildList(void),CJournalTextWnd__BuildList); +#endif +#ifdef CJournalTextWnd__SelectEntryIndex_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::SelectEntryIndex(int),CJournalTextWnd__SelectEntryIndex); +#endif +#ifdef CJournalTextWnd__SortList_x +FUNCTION_AT_ADDRESS(void CJournalTextWnd::SortList(int,bool),CJournalTextWnd__SortList); +#endif +#ifdef CLoadskinWnd__CLoadskinWnd_x +FUNCTION_AT_ADDRESS( CLoadskinWnd::CLoadskinWnd(class CXWnd *),CLoadskinWnd__CLoadskinWnd); +#endif +#ifdef CLoadskinWnd__UpdateSkinList_x +FUNCTION_AT_ADDRESS(void CLoadskinWnd::UpdateSkinList(void),CLoadskinWnd__UpdateSkinList); +#endif +#ifdef CLoadskinWnd__Activate_x +FUNCTION_AT_ADDRESS(void CLoadskinWnd::Activate(void),CLoadskinWnd__Activate); +#endif +#ifdef CLootWnd__CLootWnd_x +FUNCTION_AT_ADDRESS( CLootWnd::CLootWnd(class CXWnd *),CLootWnd__CLootWnd); +#endif +#ifdef CLootWnd__Init_x +FUNCTION_AT_ADDRESS(void CLootWnd::Init(void),CLootWnd__Init); +#endif +#ifdef CLootWnd__Activate_x +FUNCTION_AT_ADDRESS(void CLootWnd::Activate(unsigned char,long,long,long,long),CLootWnd__Activate); +#endif +#ifdef CLootWnd__Deactivate1_x +FUNCTION_AT_ADDRESS(void CLootWnd::Deactivate(bool),CLootWnd__Deactivate1); +#endif +#ifdef CLootWnd__FinalizeLoot_x +FUNCTION_AT_ADDRESS(void CLootWnd::FinalizeLoot(void),CLootWnd__FinalizeLoot); +#endif +#ifdef CLootWnd__AddEquipmentToLootArray_x +FUNCTION_AT_ADDRESS(void CLootWnd::AddEquipmentToLootArray(class EQ_Item *),CLootWnd__AddEquipmentToLootArray); +#endif +#ifdef CLootWnd__AddNoteToLootArray_x +FUNCTION_AT_ADDRESS(void CLootWnd::AddNoteToLootArray(class EQ_Item *),CLootWnd__AddNoteToLootArray); +#endif +#ifdef CLootWnd__AddContainerToLootArray_x +FUNCTION_AT_ADDRESS(void CLootWnd::AddContainerToLootArray(class EQ_Item *),CLootWnd__AddContainerToLootArray); +#endif +#ifdef CLootWnd__RequestLootSlot_x +FUNCTION_AT_ADDRESS(void CLootWnd::RequestLootSlot(int,bool),CLootWnd__RequestLootSlot); +#endif +#ifdef CLootWnd__SlotLooted_x +FUNCTION_AT_ADDRESS(void CLootWnd::SlotLooted(int),CLootWnd__SlotLooted); +#endif +#ifdef CMapToolbarWnd__CMapToolbarWnd_x +FUNCTION_AT_ADDRESS( CMapToolbarWnd::CMapToolbarWnd(class CXWnd *),CMapToolbarWnd__CMapToolbarWnd); +#endif +#ifdef CMapToolbarWnd__Activate_x +FUNCTION_AT_ADDRESS(void CMapToolbarWnd::Activate(void),CMapToolbarWnd__Activate); +#endif +#ifdef CMapToolbarWnd__SetAutoMapButton_x +FUNCTION_AT_ADDRESS(void CMapToolbarWnd::SetAutoMapButton(bool),CMapToolbarWnd__SetAutoMapButton); +#endif +#ifdef CEditLabelWnd__GetLabelText_x +FUNCTION_AT_ADDRESS(class CXStr CEditLabelWnd::GetLabelText(void),CEditLabelWnd__GetLabelText); +#endif +#ifdef CMapViewWnd__IsMappingEnabled_x +FUNCTION_AT_ADDRESS(bool CMapViewWnd::IsMappingEnabled(void),CMapViewWnd__IsMappingEnabled); +#endif +#ifdef CMapViewWnd__CMapViewWnd_x +FUNCTION_AT_ADDRESS( CMapViewWnd::CMapViewWnd(class CXWnd *),CMapViewWnd__CMapViewWnd); +#endif +#ifdef CMapViewWnd__Init_x +FUNCTION_AT_ADDRESS(void CMapViewWnd::Init(void),CMapViewWnd__Init); +#endif +#ifdef CMapViewWnd__Activate_x +FUNCTION_AT_ADDRESS(void CMapViewWnd::Activate(void),CMapViewWnd__Activate); +#endif +#ifdef CMapViewWnd__ActivateAutoMapping_x +FUNCTION_AT_ADDRESS(void CMapViewWnd::ActivateAutoMapping(void),CMapViewWnd__ActivateAutoMapping); +#endif +#ifdef CMapViewWnd__DeactivateAutoMapping_x +FUNCTION_AT_ADDRESS(void CMapViewWnd::DeactivateAutoMapping(void),CMapViewWnd__DeactivateAutoMapping); +#endif +#ifdef CMapViewWnd__SetCurrentZone_x +//FUNCTION_AT_ADDRESS(void CMapViewWnd::SetCurrentZone(enum EQZoneIndex,struct T3D_XYZ *,struct T3D_XYZ *),CMapViewWnd__SetCurrentZone); +#endif +#ifdef MapViewMap__MapViewMap_x +FUNCTION_AT_ADDRESS( MapViewMap::MapViewMap(void),MapViewMap__MapViewMap); +#endif +#ifdef MapViewMap__dMapViewMap_x +FUNCTION_AT_ADDRESS( MapViewMap::~MapViewMap(void),MapViewMap__dMapViewMap); +#endif +#ifdef MapViewMap__Clear_x +FUNCTION_AT_ADDRESS(void MapViewMap::Clear(void),MapViewMap__Clear); +#endif +#ifdef MapViewMap__StartLine_x +FUNCTION_AT_ADDRESS(void MapViewMap::StartLine(float,float,float),MapViewMap__StartLine); +#endif +#ifdef MapViewMap__EndLine_x +FUNCTION_AT_ADDRESS(void MapViewMap::EndLine(float,float,float),MapViewMap__EndLine); +#endif +#ifdef MapViewMap__RemoveLine_x +FUNCTION_AT_ADDRESS(void MapViewMap::RemoveLine(void),MapViewMap__RemoveLine); +#endif +#ifdef MapViewMap__AddPoint_x +FUNCTION_AT_ADDRESS(void MapViewMap::AddPoint(float,float,float),MapViewMap__AddPoint); +#endif +#ifdef MapViewMap__AddLabel_x +FUNCTION_AT_ADDRESS(void MapViewMap::AddLabel(float,float,float,unsigned long,int,char *),MapViewMap__AddLabel); +#endif +#ifdef MapViewMap__RecalcLabelExtents_x +FUNCTION_AT_ADDRESS(void MapViewMap::RecalcLabelExtents(struct _mapviewlabel *),MapViewMap__RecalcLabelExtents); +#endif +#ifdef MapViewMap__RemoveLabel_x +FUNCTION_AT_ADDRESS(void MapViewMap::RemoveLabel(void),MapViewMap__RemoveLabel); +#endif +#ifdef MapViewMap__MoveLabel_x +FUNCTION_AT_ADDRESS(void MapViewMap::MoveLabel(struct _mapviewlabel *,float,float,float),MapViewMap__MoveLabel); +#endif +#ifdef MapViewMap__CalcLabelRenderOffsets_x +FUNCTION_AT_ADDRESS(void MapViewMap::CalcLabelRenderOffsets(class CXRect),MapViewMap__CalcLabelRenderOffsets); +#endif +#ifdef MapViewMap__IsLayerVisible_x +FUNCTION_AT_ADDRESS(bool MapViewMap::IsLayerVisible(int),MapViewMap__IsLayerVisible); +#endif +#ifdef MapViewMap__PointInMapViewArea_x +FUNCTION_AT_ADDRESS(bool MapViewMap::PointInMapViewArea(class CXPoint,class CXRect),MapViewMap__PointInMapViewArea); +#endif +#ifdef MapViewMap__PreCalcRenderValues_x +FUNCTION_AT_ADDRESS(void MapViewMap::PreCalcRenderValues(void),MapViewMap__PreCalcRenderValues); +#endif +#ifdef MapViewMap__TransformPoint_x +FUNCTION_AT_ADDRESS(void MapViewMap::TransformPoint(struct T3D_XYZ *),MapViewMap__TransformPoint); +#endif +#ifdef MapViewMap__Draw_x +FUNCTION_AT_ADDRESS(void MapViewMap::Draw(class CXRect),MapViewMap__Draw); +#endif +#ifdef MapViewMap__DrawClippedLine_x +FUNCTION_AT_ADDRESS(bool MapViewMap::DrawClippedLine(struct T3D_XYZ *,struct T3D_RGB,class CXRect),MapViewMap__DrawClippedLine); +#endif +#ifdef MapViewMap__Save_x +FUNCTION_AT_ADDRESS(void MapViewMap::Save(char *),MapViewMap__Save); +#endif +#ifdef MapViewMap__SaveEx_x +FUNCTION_AT_ADDRESS(void MapViewMap::SaveEx(char *,int),MapViewMap__SaveEx); +#endif +#ifdef MapViewMap__Load_x +FUNCTION_AT_ADDRESS(void MapViewMap::Load(char *),MapViewMap__Load); +#endif +#ifdef MapViewMap__LoadEx_x +FUNCTION_AT_ADDRESS(bool MapViewMap::LoadEx(char *,int),MapViewMap__LoadEx); +#endif +#ifdef MapViewMap__GetCurrentColor_x +FUNCTION_AT_ADDRESS(unsigned long MapViewMap::GetCurrentColor(void),MapViewMap__GetCurrentColor); +#endif +#ifdef MapViewMap__SetCurrentColor_x +FUNCTION_AT_ADDRESS(void MapViewMap::SetCurrentColor(unsigned long),MapViewMap__SetCurrentColor); +#endif +#ifdef MapViewMap__SetMarkedLine_x +FUNCTION_AT_ADDRESS(void MapViewMap::SetMarkedLine(struct _mapviewline *),MapViewMap__SetMarkedLine); +#endif +#ifdef MapViewMap__SetMarkedLineColor_x +FUNCTION_AT_ADDRESS(void MapViewMap::SetMarkedLineColor(unsigned long),MapViewMap__SetMarkedLineColor); +#endif +#ifdef MapViewMap__GetMarkedLineColor_x +FUNCTION_AT_ADDRESS(unsigned long MapViewMap::GetMarkedLineColor(void),MapViewMap__GetMarkedLineColor); +#endif +#ifdef MapViewMap__ClearActiveLayer_x +FUNCTION_AT_ADDRESS(void MapViewMap::ClearActiveLayer(void),MapViewMap__ClearActiveLayer); +#endif +#ifdef MapViewMap__RemoveLine1_x +FUNCTION_AT_ADDRESS(void MapViewMap::RemoveLine(struct _mapviewline *),MapViewMap__RemoveLine1); +#endif +#ifdef MapViewMap__RemoveLabel1_x +FUNCTION_AT_ADDRESS(void MapViewMap::RemoveLabel(struct _mapviewlabel *),MapViewMap__RemoveLabel1); +#endif +#ifdef CXRect__Normalize_x +FUNCTION_AT_ADDRESS(void CXRect::Normalize(void),CXRect__Normalize); +#endif +#ifdef CXRect__operator_and_x +FUNCTION_AT_ADDRESS(class CXRect CXRect::operator&(class CXRect)const ,CXRect__operator_and); +#endif +#ifdef MapViewMap__JoinLinesAtIntersect_x +FUNCTION_AT_ADDRESS(void MapViewMap::JoinLinesAtIntersect(bool),MapViewMap__JoinLinesAtIntersect); +#endif +#ifdef MapViewMap__SetZoneExtents_x +FUNCTION_AT_ADDRESS(void MapViewMap::SetZoneExtents(int,int,int,int),MapViewMap__SetZoneExtents); +#endif +#ifdef MapViewMap__SetZoom_x +FUNCTION_AT_ADDRESS(void MapViewMap::SetZoom(float),MapViewMap__SetZoom); +#endif +#ifdef MapViewMap__GetMinZ_x +FUNCTION_AT_ADDRESS(int MapViewMap::GetMinZ(void),MapViewMap__GetMinZ); +#endif +#ifdef MapViewMap__GetMaxZ_x +FUNCTION_AT_ADDRESS(int MapViewMap::GetMaxZ(void),MapViewMap__GetMaxZ); +#endif +#ifdef CMerchantWnd__CMerchantWnd_x +FUNCTION_AT_ADDRESS( CMerchantWnd::CMerchantWnd(class CXWnd *),CMerchantWnd__CMerchantWnd); +#endif +#ifdef CMerchantWnd__Init_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::Init(void),CMerchantWnd__Init); +#endif +#ifdef CMerchantWnd__Activate_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::Activate(class EQPlayer *,float),CMerchantWnd__Activate); +#endif +#ifdef CMerchantWnd__HandleBuy_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::HandleBuy(int),CMerchantWnd__HandleBuy); +#endif +#ifdef CMerchantWnd__HandleSell_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::HandleSell(int),CMerchantWnd__HandleSell); +#endif +#ifdef CMerchantWnd__UpdateBuySellButtons_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::UpdateBuySellButtons(void),CMerchantWnd__UpdateBuySellButtons); +#endif +#ifdef CMerchantWnd__SelectBuySellSlot_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::SelectBuySellSlot(int,class CTextureAnimation *),CMerchantWnd__SelectBuySellSlot); +#endif +#ifdef CMerchantWnd__DisplayBuyOrSellPrice_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::DisplayBuyOrSellPrice(bool,class EQ_Item *),CMerchantWnd__DisplayBuyOrSellPrice); +#endif +#ifdef CMerchantWnd__RequestBuyItem_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::RequestBuyItem(int),CMerchantWnd__RequestBuyItem); +#endif +#ifdef CMerchantWnd__FinishBuyingItem_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::FinishBuyingItem(struct _sell_msg *),CMerchantWnd__FinishBuyingItem); +#endif +#ifdef CMerchantWnd__RequestSellItem_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::RequestSellItem(int),CMerchantWnd__RequestSellItem); +#endif +#ifdef CMerchantWnd__FinishSellingItem_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::FinishSellingItem(struct _sell_msg *),CMerchantWnd__FinishSellingItem); +#endif +#ifdef CMerchantWnd__AddEquipmentToMercArray_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::AddEquipmentToMercArray(class EQ_Equipment *),CMerchantWnd__AddEquipmentToMercArray); +#endif +#ifdef CMerchantWnd__AddNoteToMercArray_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::AddNoteToMercArray(class EQ_Note *),CMerchantWnd__AddNoteToMercArray); +#endif +#ifdef CMerchantWnd__AddContainerToMercArray_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::AddContainerToMercArray(class EQ_Container *),CMerchantWnd__AddContainerToMercArray); +#endif +#ifdef CMerchantWnd__ClearMerchantSlot_x +FUNCTION_AT_ADDRESS(void CMerchantWnd::ClearMerchantSlot(int),CMerchantWnd__ClearMerchantSlot); +#endif +#ifdef CMusicPlayerWnd__CMusicPlayerWnd_x +FUNCTION_AT_ADDRESS( CMusicPlayerWnd::CMusicPlayerWnd(class CXWnd *),CMusicPlayerWnd__CMusicPlayerWnd); +#endif +#ifdef CMusicPlayerWnd__Activate_x +FUNCTION_AT_ADDRESS(void CMusicPlayerWnd::Activate(void),CMusicPlayerWnd__Activate); +#endif +#ifdef CMusicPlayerWnd__AutoStart_x +FUNCTION_AT_ADDRESS(void CMusicPlayerWnd::AutoStart(void),CMusicPlayerWnd__AutoStart); +#endif +#ifdef CMusicPlayerWnd__Update_x +FUNCTION_AT_ADDRESS(void CMusicPlayerWnd::Update(void),CMusicPlayerWnd__Update); +#endif +#ifdef CMusicPlayerWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CMusicPlayerWnd::UpdateButtons(void),CMusicPlayerWnd__UpdateButtons); +#endif +#ifdef CNoteWnd__CNoteWnd_x +FUNCTION_AT_ADDRESS( CNoteWnd::CNoteWnd(class CXWnd *),CNoteWnd__CNoteWnd); +#endif +#ifdef CNoteWnd__Activate_x +FUNCTION_AT_ADDRESS(void CNoteWnd::Activate(void),CNoteWnd__Activate); +#endif +#ifdef CNoteWnd__CheckNote_x +FUNCTION_AT_ADDRESS(bool CNoteWnd::CheckNote(class EQ_Note *),CNoteWnd__CheckNote); +#endif +#ifdef CNoteWnd__SetNote_x +FUNCTION_AT_ADDRESS(void CNoteWnd::SetNote(char *),CNoteWnd__SetNote); +#endif +#ifdef CXStr__operator_lb_rb_x +FUNCTION_AT_ADDRESS(char CXStr::operator[](int)const ,CXStr__operator_lb_rb); +#endif +#ifdef COptionsWnd__COptionsWnd_x +FUNCTION_AT_ADDRESS( COptionsWnd::COptionsWnd(class CXWnd *),COptionsWnd__COptionsWnd); +#endif +#ifdef COptionsWnd__SyncGeneralPage_x +FUNCTION_AT_ADDRESS(void COptionsWnd::SyncGeneralPage(void),COptionsWnd__SyncGeneralPage); +#endif +#ifdef COptionsWnd__SyncDisplayPage_x +FUNCTION_AT_ADDRESS(void COptionsWnd::SyncDisplayPage(void),COptionsWnd__SyncDisplayPage); +#endif +#ifdef COptionsWnd__SyncMousePage_x +FUNCTION_AT_ADDRESS(void COptionsWnd::SyncMousePage(void),COptionsWnd__SyncMousePage); +#endif +#ifdef COptionsWnd__SyncChatPage_x +FUNCTION_AT_ADDRESS(void COptionsWnd::SyncChatPage(void),COptionsWnd__SyncChatPage); +#endif +#ifdef COptionsWnd__SyncColorPage_x +FUNCTION_AT_ADDRESS(void COptionsWnd::SyncColorPage(void),COptionsWnd__SyncColorPage); +#endif +#ifdef COptionsWnd__InitKeyboardPage_x +FUNCTION_AT_ADDRESS(void COptionsWnd::InitKeyboardPage(void),COptionsWnd__InitKeyboardPage); +#endif +#ifdef COptionsWnd__InitKeyboardAssignments_x +FUNCTION_AT_ADDRESS(void COptionsWnd::InitKeyboardAssignments(void),COptionsWnd__InitKeyboardAssignments); +#endif +#ifdef COptionsWnd__RefreshCurrentKeyboardAssignmentList_x +FUNCTION_AT_ADDRESS(void COptionsWnd::RefreshCurrentKeyboardAssignmentList(void),COptionsWnd__RefreshCurrentKeyboardAssignmentList); +#endif +#ifdef COptionsWnd__AddKeyboardAssignment_x +FUNCTION_AT_ADDRESS(void COptionsWnd::AddKeyboardAssignment(int,int,int),COptionsWnd__AddKeyboardAssignment); +#endif +#ifdef COptionsWnd__Activate_x +FUNCTION_AT_ADDRESS(void COptionsWnd::Activate(void),COptionsWnd__Activate); +#endif +#ifdef COptionsWnd__ResetKeysToDefault_x +FUNCTION_AT_ADDRESS(void COptionsWnd::ResetKeysToDefault(void),COptionsWnd__ResetKeysToDefault); +#endif +#ifdef COptionsWnd__RedirectOnProcessFrameTo_x +FUNCTION_AT_ADDRESS(int COptionsWnd::RedirectOnProcessFrameTo(class CPageWnd *),COptionsWnd__RedirectOnProcessFrameTo); +#endif +#ifdef COptionsWnd__RedirectWndNotificationTo_x +FUNCTION_AT_ADDRESS(int COptionsWnd::RedirectWndNotificationTo(class CPageWnd *,class CXWnd *,unsigned __int32,void *),COptionsWnd__RedirectWndNotificationTo); +#endif +#ifdef COptionsWnd__RedirectHandleKeyboardMsgTo_x +FUNCTION_AT_ADDRESS(int COptionsWnd::RedirectHandleKeyboardMsgTo(class CPageWnd *,unsigned __int32,unsigned __int32,bool),COptionsWnd__RedirectHandleKeyboardMsgTo); +#endif +#ifdef COptionsWnd__RedirectDeactivateTo_x +FUNCTION_AT_ADDRESS(int COptionsWnd::RedirectDeactivateTo(class CPageWnd *),COptionsWnd__RedirectDeactivateTo); +#endif +#ifdef COptionsWnd__GeneralPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int COptionsWnd::GeneralPageOnProcessFrame(void),COptionsWnd__GeneralPageOnProcessFrame); +#endif +#ifdef COptionsWnd__GeneralPageWndNotification_x +FUNCTION_AT_ADDRESS(int COptionsWnd::GeneralPageWndNotification(class CXWnd *,unsigned __int32,void *),COptionsWnd__GeneralPageWndNotification); +#endif +#ifdef COptionsWnd__DisplayPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int COptionsWnd::DisplayPageOnProcessFrame(void),COptionsWnd__DisplayPageOnProcessFrame); +#endif +#ifdef COptionsWnd__DisplayPageWndNotification_x +FUNCTION_AT_ADDRESS(int COptionsWnd::DisplayPageWndNotification(class CXWnd *,unsigned __int32,void *),COptionsWnd__DisplayPageWndNotification); +#endif +#ifdef COptionsWnd__MousePageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int COptionsWnd::MousePageOnProcessFrame(void),COptionsWnd__MousePageOnProcessFrame); +#endif +#ifdef COptionsWnd__MousePageWndNotification_x +FUNCTION_AT_ADDRESS(int COptionsWnd::MousePageWndNotification(class CXWnd *,unsigned __int32,void *),COptionsWnd__MousePageWndNotification); +#endif +#ifdef COptionsWnd__KeyboardPageWndNotification_x +FUNCTION_AT_ADDRESS(int COptionsWnd::KeyboardPageWndNotification(class CXWnd *,unsigned __int32,void *),COptionsWnd__KeyboardPageWndNotification); +#endif +#ifdef COptionsWnd__KeyboardPageHandleKeyboardMsg_x +FUNCTION_AT_ADDRESS(int COptionsWnd::KeyboardPageHandleKeyboardMsg(unsigned __int32,unsigned __int32,bool),COptionsWnd__KeyboardPageHandleKeyboardMsg); +#endif +#ifdef COptionsWnd__KeyboardPageDeactivate_x +FUNCTION_AT_ADDRESS(int COptionsWnd::KeyboardPageDeactivate(void),COptionsWnd__KeyboardPageDeactivate); +#endif +#ifdef COptionsWnd__KeyboardPageCancelKeypressAssignment_x +FUNCTION_AT_ADDRESS(void COptionsWnd::KeyboardPageCancelKeypressAssignment(void),COptionsWnd__KeyboardPageCancelKeypressAssignment); +#endif +#ifdef COptionsWnd__ChatPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int COptionsWnd::ChatPageOnProcessFrame(void),COptionsWnd__ChatPageOnProcessFrame); +#endif +#ifdef COptionsWnd__ColorPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int COptionsWnd::ColorPageOnProcessFrame(void),COptionsWnd__ColorPageOnProcessFrame); +#endif +#ifdef COptionsWnd__ChatPageWndNotification_x +FUNCTION_AT_ADDRESS(int COptionsWnd::ChatPageWndNotification(class CXWnd *,unsigned __int32,void *),COptionsWnd__ChatPageWndNotification); +#endif +#ifdef COptionsWnd__ColorPageWndNotification_x +FUNCTION_AT_ADDRESS(int COptionsWnd::ColorPageWndNotification(class CXWnd *,unsigned __int32,void *),COptionsWnd__ColorPageWndNotification); +#endif +#ifdef COptionsWnd__SaveColors_x +FUNCTION_AT_ADDRESS(void COptionsWnd::SaveColors(int,int,int,int),COptionsWnd__SaveColors); +#endif +#ifdef COptionsWnd__RestoreDefaultColors_x +FUNCTION_AT_ADDRESS(void COptionsWnd::RestoreDefaultColors(void),COptionsWnd__RestoreDefaultColors); +#endif +#ifdef COptionsWnd__SetBagOptions_x +FUNCTION_AT_ADDRESS(void COptionsWnd::SetBagOptions(int,int),COptionsWnd__SetBagOptions); +#endif +#ifdef CPetInfoWnd__CPetInfoWnd_x +FUNCTION_AT_ADDRESS( CPetInfoWnd::CPetInfoWnd(class CXWnd *),CPetInfoWnd__CPetInfoWnd); +#endif +#ifdef CPetInfoWnd__Activate_x +FUNCTION_AT_ADDRESS(void CPetInfoWnd::Activate(void),CPetInfoWnd__Activate); +#endif +#ifdef CPetInfoWnd__SetShowOnSummon_x +FUNCTION_AT_ADDRESS(void CPetInfoWnd::SetShowOnSummon(bool),CPetInfoWnd__SetShowOnSummon); +#endif +#ifdef CPetInfoWnd__Update_x +FUNCTION_AT_ADDRESS(void CPetInfoWnd::Update(void),CPetInfoWnd__Update); +#endif +#ifdef CPetInfoWnd__GetButton_x +FUNCTION_AT_ADDRESS(class CButtonWnd * CPetInfoWnd::GetButton(int),CPetInfoWnd__GetButton); +#endif +#ifdef CPetitionQWnd__CPetitionQWnd_x +FUNCTION_AT_ADDRESS( CPetitionQWnd::CPetitionQWnd(class CXWnd *),CPetitionQWnd__CPetitionQWnd); +#endif +#ifdef CPetitionQWnd__UpdatePetitions_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::UpdatePetitions(void),CPetitionQWnd__UpdatePetitions); +#endif +#ifdef CPetitionQWnd__Activate_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::Activate(void),CPetitionQWnd__Activate); +#endif +#ifdef CPetitionQWnd__SetPriorityDisplay_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::SetPriorityDisplay(void),CPetitionQWnd__SetPriorityDisplay); +#endif +#ifdef CPetitionQWnd__AddGMText_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::AddGMText(void),CPetitionQWnd__AddGMText); +#endif +#ifdef CPetitionQWnd__CheckedOut_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::CheckedOut(struct petitionQtype const *,int),CPetitionQWnd__CheckedOut); +#endif +#ifdef CPetitionQWnd__UndoCheckout_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::UndoCheckout(void),CPetitionQWnd__UndoCheckout); +#endif +#ifdef CPetitionQWnd__ClearCurrentPet_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::ClearCurrentPet(void),CPetitionQWnd__ClearCurrentPet); +#endif +#ifdef CPetitionQWnd__FillFields_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::FillFields(void),CPetitionQWnd__FillFields); +#endif +#ifdef CPetitionQWnd__SetButtonsForPetition_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::SetButtonsForPetition(bool,bool),CPetitionQWnd__SetButtonsForPetition); +#endif +#ifdef CPetitionQWnd__LogPetitionText_x +FUNCTION_AT_ADDRESS(void CPetitionQWnd::LogPetitionText(void),CPetitionQWnd__LogPetitionText); +#endif +#ifdef CPetitionQWnd__GetCurrentPetitionersName_x +FUNCTION_AT_ADDRESS(char * CPetitionQWnd::GetCurrentPetitionersName(void),CPetitionQWnd__GetCurrentPetitionersName); +#endif +#ifdef CPlayerNotesWnd__CPlayerNotesWnd_x +FUNCTION_AT_ADDRESS( CPlayerNotesWnd::CPlayerNotesWnd(class CXWnd *),CPlayerNotesWnd__CPlayerNotesWnd); +#endif +#ifdef CPlayerNotesWnd__Activate_x +FUNCTION_AT_ADDRESS(void CPlayerNotesWnd::Activate(void),CPlayerNotesWnd__Activate); +#endif +#ifdef CPlayerNotesWnd__SaveNotes_x +FUNCTION_AT_ADDRESS(void CPlayerNotesWnd::SaveNotes(void),CPlayerNotesWnd__SaveNotes); +#endif +#ifdef CPlayerNotesWnd__AppendText_x +FUNCTION_AT_ADDRESS(void CPlayerNotesWnd::AppendText(char *),CPlayerNotesWnd__AppendText); +#endif +#ifdef CPlayerWnd__CPlayerWnd_x +FUNCTION_AT_ADDRESS( CPlayerWnd::CPlayerWnd(class CXWnd *),CPlayerWnd__CPlayerWnd); +#endif +#ifdef CPlayerWnd__Init_x +FUNCTION_AT_ADDRESS(void CPlayerWnd::Init(void),CPlayerWnd__Init); +#endif +#ifdef CPlayerWnd__Activate_x +FUNCTION_AT_ADDRESS(void CPlayerWnd::Activate(void),CPlayerWnd__Activate); +#endif +#ifdef CPlayerWnd__CreateLocalMenu_x +FUNCTION_AT_ADDRESS(void CPlayerWnd::CreateLocalMenu(void),CPlayerWnd__CreateLocalMenu); +#endif +#ifdef CPlayerWnd__UpdateContextMenu_x +FUNCTION_AT_ADDRESS(void CPlayerWnd::UpdateContextMenu(void),CPlayerWnd__UpdateContextMenu); +#endif +#ifdef CQuantityWnd__CQuantityWnd_x +FUNCTION_AT_ADDRESS( CQuantityWnd::CQuantityWnd(class CXWnd *),CQuantityWnd__CQuantityWnd); +#endif +#ifdef CQuantityWnd__Activate_x +FUNCTION_AT_ADDRESS(void CQuantityWnd::Activate(class CXWnd *,int,int,int,int,bool),CQuantityWnd__Activate); +#endif +#ifdef CQuantityWnd__CheckMaxEditWnd_x +FUNCTION_AT_ADDRESS(void CQuantityWnd::CheckMaxEditWnd(void),CQuantityWnd__CheckMaxEditWnd); +#endif +#ifdef CQuantityWnd__UpdateEditWndFromSlider_x +FUNCTION_AT_ADDRESS(void CQuantityWnd::UpdateEditWndFromSlider(void),CQuantityWnd__UpdateEditWndFromSlider); +#endif +#ifdef CQuantityWnd__UpdateSliderFromEditWnd_x +FUNCTION_AT_ADDRESS(void CQuantityWnd::UpdateSliderFromEditWnd(void),CQuantityWnd__UpdateSliderFromEditWnd); +#endif +#ifdef CRaidOptionsWnd__CRaidOptionsWnd_x +FUNCTION_AT_ADDRESS( CRaidOptionsWnd::CRaidOptionsWnd(class CXWnd *),CRaidOptionsWnd__CRaidOptionsWnd); +#endif +#ifdef CRaidOptionsWnd__Init_x +FUNCTION_AT_ADDRESS(void CRaidOptionsWnd::Init(void),CRaidOptionsWnd__Init); +#endif +#ifdef CRaidOptionsWnd__Activate_x +FUNCTION_AT_ADDRESS(void CRaidOptionsWnd::Activate(void),CRaidOptionsWnd__Activate); +#endif +#ifdef CRaidOptionsWnd__AddLooterToList_x +FUNCTION_AT_ADDRESS(void CRaidOptionsWnd::AddLooterToList(char *),CRaidOptionsWnd__AddLooterToList); +#endif +#ifdef CRaidOptionsWnd__ClearLooterList_x +FUNCTION_AT_ADDRESS(void CRaidOptionsWnd::ClearLooterList(void),CRaidOptionsWnd__ClearLooterList); +#endif +#ifdef CRaidOptionsWnd__UpdateComponents_x +FUNCTION_AT_ADDRESS(void CRaidOptionsWnd::UpdateComponents(void),CRaidOptionsWnd__UpdateComponents); +#endif +#ifdef CRaidOptionsWnd__InitializeClassColors_x +FUNCTION_AT_ADDRESS(void CRaidOptionsWnd::InitializeClassColors(void),CRaidOptionsWnd__InitializeClassColors); +#endif +#ifdef CRaidWnd__CRaidWnd_x +FUNCTION_AT_ADDRESS( CRaidWnd::CRaidWnd(class CXWnd *),CRaidWnd__CRaidWnd); +#endif +#ifdef CRaidWnd__Init_x +FUNCTION_AT_ADDRESS(void CRaidWnd::Init(void),CRaidWnd__Init); +#endif +#ifdef CRaidWnd__Activate_x +FUNCTION_AT_ADDRESS(void CRaidWnd::Activate(void),CRaidWnd__Activate); +#endif +#ifdef CRaidWnd__AddPlayertoList_x +FUNCTION_AT_ADDRESS(void CRaidWnd::AddPlayertoList(char *,char *,char *,char *,int,int,bool),CRaidWnd__AddPlayertoList); +#endif +#ifdef CRaidWnd__RemovePlayerFromList_x +FUNCTION_AT_ADDRESS(void CRaidWnd::RemovePlayerFromList(char *,int),CRaidWnd__RemovePlayerFromList); +#endif +#ifdef CRaidWnd__SetRaidCount_x +FUNCTION_AT_ADDRESS(void CRaidWnd::SetRaidCount(int),CRaidWnd__SetRaidCount); +#endif +#ifdef CRaidWnd__ClearPlayerList_x +FUNCTION_AT_ADDRESS(void CRaidWnd::ClearPlayerList(void),CRaidWnd__ClearPlayerList); +#endif +#ifdef CRaidWnd__AddSeparator_x +FUNCTION_AT_ADDRESS(void CRaidWnd::AddSeparator(void),CRaidWnd__AddSeparator); +#endif +#ifdef CRaidWnd__SetRaidMemberRank_x +FUNCTION_AT_ADDRESS(void CRaidWnd::SetRaidMemberRank(char *,char *,int),CRaidWnd__SetRaidMemberRank); +#endif +#ifdef CRaidWnd__ChangePosition_x +FUNCTION_AT_ADDRESS(void CRaidWnd::ChangePosition(char *,int,int,int,bool),CRaidWnd__ChangePosition); +#endif +#ifdef CRaidWnd__ChangeRaidGroupLeader_x +FUNCTION_AT_ADDRESS(void CRaidWnd::ChangeRaidGroupLeader(char *,int,char *),CRaidWnd__ChangeRaidGroupLeader); +#endif +#ifdef CRaidWnd__UpdateMemberName_x +FUNCTION_AT_ADDRESS(void CRaidWnd::UpdateMemberName(char *,char *,int),CRaidWnd__UpdateMemberName); +#endif +#ifdef CRaidWnd__SetRaidTarget_x +FUNCTION_AT_ADDRESS(void CRaidWnd::SetRaidTarget(char *,int,char *,int),CRaidWnd__SetRaidTarget); +#endif +#ifdef CRaidWnd__UpdateLevelAverage_x +FUNCTION_AT_ADDRESS(void CRaidWnd::UpdateLevelAverage(int),CRaidWnd__UpdateLevelAverage); +#endif +#ifdef CRaidWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CRaidWnd::UpdateButtons(void),CRaidWnd__UpdateButtons); +#endif +#ifdef CRaidWnd__InitializeClassColors_x +FUNCTION_AT_ADDRESS(void CRaidWnd::InitializeClassColors(void),CRaidWnd__InitializeClassColors); +#endif +#ifdef CRaidWnd__SetPlayerClassColor_x +FUNCTION_AT_ADDRESS(void CRaidWnd::SetPlayerClassColor(int,int,int),CRaidWnd__SetPlayerClassColor); +#endif +#ifdef CRaidWnd__SetPlayerClassColor1_x +FUNCTION_AT_ADDRESS(void CRaidWnd::SetPlayerClassColor(char *,int,int),CRaidWnd__SetPlayerClassColor1); +#endif +#ifdef CRaidWnd__SetClassColor_x +FUNCTION_AT_ADDRESS(void CRaidWnd::SetClassColor(int,unsigned long),CRaidWnd__SetClassColor); +#endif +#ifdef CRaidWnd__ResortRaidGroupList_x +FUNCTION_AT_ADDRESS(void CRaidWnd::ResortRaidGroupList(int,int),CRaidWnd__ResortRaidGroupList); +#endif +#ifdef CRaidWnd__FindOpenIndexInGroup_x +FUNCTION_AT_ADDRESS(int CRaidWnd::FindOpenIndexInGroup(int),CRaidWnd__FindOpenIndexInGroup); +#endif +#ifdef CRaidWnd__FindIndexNotInGroupList_x +FUNCTION_AT_ADDRESS(int CRaidWnd::FindIndexNotInGroupList(char *),CRaidWnd__FindIndexNotInGroupList); +#endif +#ifdef CRaidWnd__FindPlayerIndexInGroup_x +FUNCTION_AT_ADDRESS(int CRaidWnd::FindPlayerIndexInGroup(char *,int),CRaidWnd__FindPlayerIndexInGroup); +#endif +#ifdef CSelectorWnd__CSelectorWnd_x +FUNCTION_AT_ADDRESS( CSelectorWnd::CSelectorWnd(class CXWnd *),CSelectorWnd__CSelectorWnd); +#endif +#ifdef CSelectorWnd__Activate_x +FUNCTION_AT_ADDRESS(void CSelectorWnd::Activate(void),CSelectorWnd__Activate); +#endif +#ifdef CSelectorWnd__KeyMapUpdated_x +FUNCTION_AT_ADDRESS(void CSelectorWnd::KeyMapUpdated(void),CSelectorWnd__KeyMapUpdated); +#endif +#ifdef CSkillsSelectWnd__CSkillsSelectWnd_x +FUNCTION_AT_ADDRESS( CSkillsSelectWnd::CSkillsSelectWnd(class CXWnd *),CSkillsSelectWnd__CSkillsSelectWnd); +#endif +#ifdef CSkillsSelectWnd__Refresh_x +FUNCTION_AT_ADDRESS(void CSkillsSelectWnd::Refresh(void),CSkillsSelectWnd__Refresh); +#endif +#ifdef CSkillsSelectWnd__UpdateAll_x +FUNCTION_AT_ADDRESS(void CSkillsSelectWnd::UpdateAll(void),CSkillsSelectWnd__UpdateAll); +#endif +#ifdef CSkillsSelectWnd__UpdateSkill_x +FUNCTION_AT_ADDRESS(void CSkillsSelectWnd::UpdateSkill(int),CSkillsSelectWnd__UpdateSkill); +#endif +#ifdef CSkillsSelectWnd__SetTypesToDisplay_x +FUNCTION_AT_ADDRESS(void CSkillsSelectWnd::SetTypesToDisplay(int),CSkillsSelectWnd__SetTypesToDisplay); +#endif +#ifdef CSkillsWnd__CSkillsWnd_x +FUNCTION_AT_ADDRESS( CSkillsWnd::CSkillsWnd(class CXWnd *),CSkillsWnd__CSkillsWnd); +#endif +#ifdef CSkillsWnd__Activate_x +FUNCTION_AT_ADDRESS(void CSkillsWnd::Activate(void),CSkillsWnd__Activate); +#endif +#ifdef CSkillsWnd__SkillImproveOccurred_x +FUNCTION_AT_ADDRESS(void CSkillsWnd::SkillImproveOccurred(int),CSkillsWnd__SkillImproveOccurred); +#endif +#ifdef CSkillsWnd__UpdateAll_x +FUNCTION_AT_ADDRESS(void CSkillsWnd::UpdateAll(void),CSkillsWnd__UpdateAll); +#endif +#ifdef CSkillsWnd__UpdateSkill_x +FUNCTION_AT_ADDRESS(void CSkillsWnd::UpdateSkill(int),CSkillsWnd__UpdateSkill); +#endif +#ifdef CSocialEditWnd__CSocialEditWnd_x +FUNCTION_AT_ADDRESS( CSocialEditWnd::CSocialEditWnd(class CXWnd *),CSocialEditWnd__CSocialEditWnd); +#endif +#ifdef CSocialEditWnd__Init_x +FUNCTION_AT_ADDRESS(void CSocialEditWnd::Init(void),CSocialEditWnd__Init); +#endif +#ifdef CSocialEditWnd__Activate_x +FUNCTION_AT_ADDRESS(void CSocialEditWnd::Activate(int),CSocialEditWnd__Activate); +#endif +#ifdef CSocialEditWnd__ClickedAccept_x +FUNCTION_AT_ADDRESS(void CSocialEditWnd::ClickedAccept(void),CSocialEditWnd__ClickedAccept); +#endif +#ifdef CSocialEditWnd__ClickedClear_x +FUNCTION_AT_ADDRESS(void CSocialEditWnd::ClickedClear(void),CSocialEditWnd__ClickedClear); +#endif +#ifdef CSocialEditWnd__ClickedTextColorButton_x +FUNCTION_AT_ADDRESS(void CSocialEditWnd::ClickedTextColorButton(int),CSocialEditWnd__ClickedTextColorButton); +#endif +#ifdef CSocialEditWnd__GetSocialTextColor_x +FUNCTION_AT_ADDRESS(unsigned long CSocialEditWnd::GetSocialTextColor(int),CSocialEditWnd__GetSocialTextColor); +#endif +#ifdef CSocialEditWnd__UpdateControlsFromSocial_x +FUNCTION_AT_ADDRESS(void CSocialEditWnd::UpdateControlsFromSocial(void),CSocialEditWnd__UpdateControlsFromSocial); +#endif +#ifdef CSoulmarkWnd__CSoulmarkWnd_x +FUNCTION_AT_ADDRESS( CSoulmarkWnd::CSoulmarkWnd(class CXWnd *),CSoulmarkWnd__CSoulmarkWnd); +#endif +#ifdef CSoulmarkWnd__UpdateSoulmarks_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::UpdateSoulmarks(struct soulMarkMsg *),CSoulmarkWnd__UpdateSoulmarks); +#endif +#ifdef CSoulmarkWnd__UpdateList_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::UpdateList(void),CSoulmarkWnd__UpdateList); +#endif +#ifdef CSoulmarkWnd__Activate_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::Activate(void),CSoulmarkWnd__Activate); +#endif +#ifdef CSoulmarkWnd__Activate1_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::Activate(char *,char *),CSoulmarkWnd__Activate1); +#endif +#ifdef CSoulmarkWnd__SaveMarks_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::SaveMarks(void),CSoulmarkWnd__SaveMarks); +#endif +#ifdef CSoulmarkWnd__FillFields_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::FillFields(void),CSoulmarkWnd__FillFields); +#endif +#ifdef CSoulmarkWnd__Clear_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::Clear(void),CSoulmarkWnd__Clear); +#endif +#ifdef CSoulmarkWnd__Inquire_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::Inquire(char *,char *),CSoulmarkWnd__Inquire); +#endif +#ifdef CSoulmarkWnd__AddMark_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::AddMark(int,char *,char *,char *),CSoulmarkWnd__AddMark); +#endif +#ifdef CSoulmarkWnd__Inquire1_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::Inquire(char *),CSoulmarkWnd__Inquire1); +#endif +#ifdef CSoulmarkWnd__Praise_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::Praise(char *),CSoulmarkWnd__Praise); +#endif +#ifdef CSoulmarkWnd__Warn_x +FUNCTION_AT_ADDRESS(void CSoulmarkWnd::Warn(char *),CSoulmarkWnd__Warn); +#endif +#ifdef CSpellBookWnd__CSpellBookWnd_x +FUNCTION_AT_ADDRESS( CSpellBookWnd::CSpellBookWnd(class CXWnd *),CSpellBookWnd__CSpellBookWnd); +#endif +#ifdef CSpellBookWnd__Init_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::Init(void),CSpellBookWnd__Init); +#endif +#ifdef CSpellBookWnd__Activate_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::Activate(void),CSpellBookWnd__Activate); +#endif +#ifdef CSpellBookWnd__GetBookSlot_x +FUNCTION_AT_ADDRESS(int __cdecl CSpellBookWnd::GetBookSlot(int),CSpellBookWnd__GetBookSlot); +#endif +#ifdef CSpellBookWnd__MemorizeSet_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::MemorizeSet(int *,int),CSpellBookWnd__MemorizeSet); +#endif +#ifdef CSpellBookWnd__ContinueSetMem_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::ContinueSetMem(void),CSpellBookWnd__ContinueSetMem); +#endif +#ifdef CSpellBookWnd__DelayedSpellMem_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::DelayedSpellMem(int,int,int),CSpellBookWnd__DelayedSpellMem); +#endif +#ifdef CSpellBookWnd__EndSetMem_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::EndSetMem(void),CSpellBookWnd__EndSetMem); +#endif +#ifdef CSpellBookWnd__AutoMemSpell_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::AutoMemSpell(int,int),CSpellBookWnd__AutoMemSpell); +#endif +#ifdef CSpellBookWnd__HandleLeftClickOnSpell_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::HandleLeftClickOnSpell(int),CSpellBookWnd__HandleLeftClickOnSpell); +#endif +#ifdef CSpellBookWnd__HandleRightClickOnSpell_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::HandleRightClickOnSpell(int),CSpellBookWnd__HandleRightClickOnSpell); +#endif +#ifdef CSpellBookWnd__CanStartMemming_x +FUNCTION_AT_ADDRESS(bool CSpellBookWnd::CanStartMemming(int),CSpellBookWnd__CanStartMemming); +#endif +#ifdef CSpellBookWnd__StartSpellMemorizationDrag_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::StartSpellMemorizationDrag(int,class CButtonWnd *),CSpellBookWnd__StartSpellMemorizationDrag); +#endif +#ifdef CSpellBookWnd__StartSpellMemorization_x +FUNCTION_AT_ADDRESS(bool CSpellBookWnd::StartSpellMemorization(int,int,bool),CSpellBookWnd__StartSpellMemorization); +#endif +#ifdef CSpellBookWnd__FinishMemorizing_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::FinishMemorizing(int,int),CSpellBookWnd__FinishMemorizing); +#endif +#ifdef CSpellBookWnd__GetSpellMemTicksLeft_x +FUNCTION_AT_ADDRESS(int CSpellBookWnd::GetSpellMemTicksLeft(void),CSpellBookWnd__GetSpellMemTicksLeft); +#endif +#ifdef CSpellBookWnd__StartSpellScribe_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::StartSpellScribe(int),CSpellBookWnd__StartSpellScribe); +#endif +#ifdef CSpellBookWnd__FinishScribing_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::FinishScribing(int,int),CSpellBookWnd__FinishScribing); +#endif +#ifdef CSpellBookWnd__GetSpellScribeTicksLeft_x +FUNCTION_AT_ADDRESS(int CSpellBookWnd::GetSpellScribeTicksLeft(void),CSpellBookWnd__GetSpellScribeTicksLeft); +#endif +#ifdef CSpellBookWnd__SwapSpellBookSlots_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::SwapSpellBookSlots(int,int),CSpellBookWnd__SwapSpellBookSlots); +#endif +#ifdef CSpellBookWnd__HandleSpellInfoDisplay_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::HandleSpellInfoDisplay(class CXWnd *),CSpellBookWnd__HandleSpellInfoDisplay); +#endif +#ifdef CSpellBookWnd__DisplaySpellInfo_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::DisplaySpellInfo(int),CSpellBookWnd__DisplaySpellInfo); +#endif +#ifdef CSpellBookWnd__TurnToPage_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::TurnToPage(int),CSpellBookWnd__TurnToPage); +#endif +#ifdef CSpellBookWnd__UpdateSpellBookDisplay_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::UpdateSpellBookDisplay(void),CSpellBookWnd__UpdateSpellBookDisplay); +#endif +#ifdef CSpellBookWnd__StopSpellBookAction_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::StopSpellBookAction(void),CSpellBookWnd__StopSpellBookAction); +#endif +#ifdef CSpellBookWnd__GetSpellDeletionConfirmation_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::GetSpellDeletionConfirmation(int),CSpellBookWnd__GetSpellDeletionConfirmation); +#endif +#ifdef CSpellBookWnd__RequestSpellDeletion_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::RequestSpellDeletion(int),CSpellBookWnd__RequestSpellDeletion); +#endif +#ifdef CSpellBookWnd__DeleteSpellFromBook_x +FUNCTION_AT_ADDRESS(void CSpellBookWnd::DeleteSpellFromBook(int,int),CSpellBookWnd__DeleteSpellFromBook); +#endif +#ifdef CXStr__Mid_x +FUNCTION_AT_ADDRESS(class CXStr CXStr::Mid(int,int)const ,CXStr__Mid); +#endif +#ifdef CTargetWnd__CTargetWnd_x +FUNCTION_AT_ADDRESS( CTargetWnd::CTargetWnd(class CXWnd *),CTargetWnd__CTargetWnd); +#endif +#ifdef CTargetWnd__Activate_x +FUNCTION_AT_ADDRESS(void CTargetWnd::Activate(void),CTargetWnd__Activate); +#endif +#ifdef CTextEntryWnd__CTextEntryWnd_x +FUNCTION_AT_ADDRESS( CTextEntryWnd::CTextEntryWnd(class CXWnd *),CTextEntryWnd__CTextEntryWnd); +#endif +#ifdef CTextEntryWnd__Activate_x +FUNCTION_AT_ADDRESS(void CTextEntryWnd::Activate(class CXWnd *,int,char *,int,int,char *),CTextEntryWnd__Activate); +#endif +#ifdef CTextEntryWnd__Callback_x +FUNCTION_AT_ADDRESS(void CTextEntryWnd::Callback(bool),CTextEntryWnd__Callback); +#endif +#ifdef CTextEntryWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CTextEntryWnd::UpdateButtons(void),CTextEntryWnd__UpdateButtons); +#endif +#ifdef CTextEntryWnd__GetEntryText_x +FUNCTION_AT_ADDRESS(class CXStr CTextEntryWnd::GetEntryText(void),CTextEntryWnd__GetEntryText); +#endif +#ifdef CTimeLeftWnd__CTimeLeftWnd_x +FUNCTION_AT_ADDRESS( CTimeLeftWnd::CTimeLeftWnd(long),CTimeLeftWnd__CTimeLeftWnd); +#endif +#ifdef CTimeLeftWnd__Activate_x +FUNCTION_AT_ADDRESS(void CTimeLeftWnd::Activate(void),CTimeLeftWnd__Activate); +#endif +#ifdef CTipWnd__CTipWnd_x +FUNCTION_AT_ADDRESS( CTipWnd::CTipWnd(class CXWnd *,int),CTipWnd__CTipWnd); +#endif +#ifdef CTipWnd__Activate_x +FUNCTION_AT_ADDRESS(bool CTipWnd::Activate(int,bool),CTipWnd__Activate); +#endif +#ifdef CTipWnd__UpdateButtons_x +FUNCTION_AT_ADDRESS(void CTipWnd::UpdateButtons(void),CTipWnd__UpdateButtons); +#endif +#ifdef CTipWnd__InitializeTipSettings_x +FUNCTION_AT_ADDRESS(void CTipWnd::InitializeTipSettings(void),CTipWnd__InitializeTipSettings); +#endif +#ifdef CTipWnd__CleanDayTips_x +FUNCTION_AT_ADDRESS(void CTipWnd::CleanDayTips(void),CTipWnd__CleanDayTips); +#endif +#ifdef CTipWnd__SelectRandomTip_x +FUNCTION_AT_ADDRESS(int CTipWnd::SelectRandomTip(void),CTipWnd__SelectRandomTip); +#endif +#ifdef CTipWnd__SetTOTD_x +FUNCTION_AT_ADDRESS(void CTipWnd::SetTOTD(int),CTipWnd__SetTOTD); +#endif +#ifdef CTipWnd__IsRecentTOTD_x +FUNCTION_AT_ADDRESS(bool CTipWnd::IsRecentTOTD(int),CTipWnd__IsRecentTOTD); +#endif +#ifdef CTipWnd__AddContextTip_x +FUNCTION_AT_ADDRESS(void CTipWnd::AddContextTip(int),CTipWnd__AddContextTip); +#endif +#ifdef CTipWnd__ShowHistoryTip_x +FUNCTION_AT_ADDRESS(void CTipWnd::ShowHistoryTip(int),CTipWnd__ShowHistoryTip); +#endif +#ifdef CTipWnd__LoadINISettings_x +FUNCTION_AT_ADDRESS(void CTipWnd::LoadINISettings(void),CTipWnd__LoadINISettings); +#endif +#ifdef CTipWnd__LoadDayTips_x +FUNCTION_AT_ADDRESS(void CTipWnd::LoadDayTips(void),CTipWnd__LoadDayTips); +#endif +#ifdef CTrackingWnd__CTrackingWnd_x +FUNCTION_AT_ADDRESS( CTrackingWnd::CTrackingWnd(class CXWnd *),CTrackingWnd__CTrackingWnd); +#endif +#ifdef CTrackingWnd__Init_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::Init(void),CTrackingWnd__Init); +#endif +#ifdef CTrackingWnd__Activate_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::Activate(void),CTrackingWnd__Activate); +#endif +#ifdef CTrackingWnd__NotifyServerOfTrackingTarget_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::NotifyServerOfTrackingTarget(int),CTrackingWnd__NotifyServerOfTrackingTarget); +#endif +#ifdef CTrackingWnd__UpdateTrackingControls_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::UpdateTrackingControls(void),CTrackingWnd__UpdateTrackingControls); +#endif +#ifdef CTrackingWnd__GetTrackColor_x +FUNCTION_AT_ADDRESS(unsigned long CTrackingWnd::GetTrackColor(int),CTrackingWnd__GetTrackColor); +#endif +#ifdef CTrackingWnd__UpdateTrackingList_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::UpdateTrackingList(bool),CTrackingWnd__UpdateTrackingList); +#endif +#ifdef CTrackingWnd__GenerateTrackingList_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::GenerateTrackingList(void),CTrackingWnd__GenerateTrackingList); +#endif +#ifdef CTrackingWnd__SetTrackingList_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::SetTrackingList(struct TrackingHit *,int),CTrackingWnd__SetTrackingList); +#endif +#ifdef CTrackingWnd__DoTrackSort_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::DoTrackSort(bool),CTrackingWnd__DoTrackSort); +#endif +#ifdef CTrackingWnd__DoTrackFilter_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::DoTrackFilter(bool),CTrackingWnd__DoTrackFilter); +#endif +#ifdef CTrackingWnd__RemovePlayerFromTracking_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::RemovePlayerFromTracking(class EQPlayer *),CTrackingWnd__RemovePlayerFromTracking); +#endif +#ifdef CTrackingWnd__RemovePlayerFromTracking1_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::RemovePlayerFromTracking(int),CTrackingWnd__RemovePlayerFromTracking1); +#endif +#ifdef CTrackingWnd__RemoveFromListWndByData_x +FUNCTION_AT_ADDRESS(void CTrackingWnd::RemoveFromListWndByData(unsigned int),CTrackingWnd__RemoveFromListWndByData); +#endif +#ifdef CTrackingWnd__GetListIdByData_x +FUNCTION_AT_ADDRESS(int CTrackingWnd::GetListIdByData(unsigned int),CTrackingWnd__GetListIdByData); +#endif +#ifdef CTradeWnd__CTradeWnd_x +FUNCTION_AT_ADDRESS( CTradeWnd::CTradeWnd(class CXWnd *),CTradeWnd__CTradeWnd); +#endif +#ifdef CTradeWnd__Init_x +FUNCTION_AT_ADDRESS(void CTradeWnd::Init(void),CTradeWnd__Init); +#endif +#ifdef CTradeWnd__Activate_x +FUNCTION_AT_ADDRESS(void CTradeWnd::Activate(class EQPlayer *,bool),CTradeWnd__Activate); +#endif +#ifdef CTradeWnd__ClickedCancelButton_x +FUNCTION_AT_ADDRESS(void CTradeWnd::ClickedCancelButton(void),CTradeWnd__ClickedCancelButton); +#endif +#ifdef CTradeWnd__ClickedTradeButton_x +FUNCTION_AT_ADDRESS(void CTradeWnd::ClickedTradeButton(void),CTradeWnd__ClickedTradeButton); +#endif +#ifdef CTradeWnd__ClickedMoneyButton_x +FUNCTION_AT_ADDRESS(void CTradeWnd::ClickedMoneyButton(int),CTradeWnd__ClickedMoneyButton); +#endif +#ifdef CTradeWnd__UpdateTradeDisplay_x +FUNCTION_AT_ADDRESS(void CTradeWnd::UpdateTradeDisplay(void),CTradeWnd__UpdateTradeDisplay); +#endif +#ifdef CTradeWnd__IsMyTradeSlot_x +FUNCTION_AT_ADDRESS(bool CTradeWnd::IsMyTradeSlot(int,bool *),CTradeWnd__IsMyTradeSlot); +#endif +#ifdef CTradeWnd__TradeItemChanged_x +FUNCTION_AT_ADDRESS(void CTradeWnd::TradeItemChanged(int,int),CTradeWnd__TradeItemChanged); +#endif +#ifdef CTradeWnd__CompleteTrade_x +FUNCTION_AT_ADDRESS(void CTradeWnd::CompleteTrade(void),CTradeWnd__CompleteTrade); +#endif +#ifdef CTradeWnd__AddEquipmentToHisTradeArray_x +FUNCTION_AT_ADDRESS(void CTradeWnd::AddEquipmentToHisTradeArray(class EQ_Equipment *),CTradeWnd__AddEquipmentToHisTradeArray); +#endif +#ifdef CTradeWnd__AddNoteToHisTradeArray_x +FUNCTION_AT_ADDRESS(void CTradeWnd::AddNoteToHisTradeArray(class EQ_Note *),CTradeWnd__AddNoteToHisTradeArray); +#endif +#ifdef CTradeWnd__AddContainerToHisTradeArray_x +FUNCTION_AT_ADDRESS(void CTradeWnd::AddContainerToHisTradeArray(class EQ_Container *),CTradeWnd__AddContainerToHisTradeArray); +#endif +#ifdef CTradeWnd__DeleteItemFromHisTradeArray_x +FUNCTION_AT_ADDRESS(void CTradeWnd::DeleteItemFromHisTradeArray(int),CTradeWnd__DeleteItemFromHisTradeArray); +#endif +#ifdef CTradeWnd__DropItemIntoTrade_x +FUNCTION_AT_ADDRESS(void CTradeWnd::DropItemIntoTrade(void),CTradeWnd__DropItemIntoTrade); +#endif +#ifdef CTradeWnd__DropMoneyIntoTrade_x +//FUNCTION_AT_ADDRESS(CTradeWnd::DropMoneyIntoTrade(void),CTradeWnd__DropMoneyIntoTrade); +#endif +#ifdef CTradeWnd__SetMyReadyTrade_x +FUNCTION_AT_ADDRESS(void CTradeWnd::SetMyReadyTrade(bool),CTradeWnd__SetMyReadyTrade); +#endif +#ifdef CTradeWnd__SetHisReadyTrade_x +FUNCTION_AT_ADDRESS(void CTradeWnd::SetHisReadyTrade(bool),CTradeWnd__SetHisReadyTrade); +#endif +#ifdef CTradeWnd__SetHisMoney_x +FUNCTION_AT_ADDRESS(void CTradeWnd::SetHisMoney(int,long),CTradeWnd__SetHisMoney); +#endif +#ifdef CTrainWnd__CTrainWnd_x +FUNCTION_AT_ADDRESS( CTrainWnd::CTrainWnd(class CXWnd *),CTrainWnd__CTrainWnd); +#endif +#ifdef CTrainWnd__Activate_x +FUNCTION_AT_ADDRESS(void CTrainWnd::Activate(void),CTrainWnd__Activate); +#endif +#ifdef CTrainWnd__UpdateRight_x +FUNCTION_AT_ADDRESS(void CTrainWnd::UpdateRight(void),CTrainWnd__UpdateRight); +#endif +#ifdef CTrainWnd__UpdateAll_x +FUNCTION_AT_ADDRESS(void CTrainWnd::UpdateAll(bool),CTrainWnd__UpdateAll); +#endif +#ifdef CTrainWnd__SkillName_x +FUNCTION_AT_ADDRESS(char * CTrainWnd::SkillName(int),CTrainWnd__SkillName); +#endif +#ifdef CTrainWnd__SkillValue_x +FUNCTION_AT_ADDRESS(int CTrainWnd::SkillValue(int),CTrainWnd__SkillValue); +#endif +#ifdef CTrainWnd__SwapSkill_x +FUNCTION_AT_ADDRESS(void CTrainWnd::SwapSkill(int,int),CTrainWnd__SwapSkill); +#endif +#ifdef CTrainWnd__SortNames_x +FUNCTION_AT_ADDRESS(void CTrainWnd::SortNames(int),CTrainWnd__SortNames); +#endif +#ifdef CTrainWnd__SortSkill_x +FUNCTION_AT_ADDRESS(void CTrainWnd::SortSkill(int),CTrainWnd__SortSkill); +#endif +#ifdef CTrainWnd__UpdateSkill_x +FUNCTION_AT_ADDRESS(void CTrainWnd::UpdateSkill(int),CTrainWnd__UpdateSkill); +#endif +#ifdef CTrainWnd__SkillChanged_x +FUNCTION_AT_ADDRESS(void CTrainWnd::SkillChanged(int),CTrainWnd__SkillChanged); +#endif +#ifdef CTrainWnd__SetGMData_x +FUNCTION_AT_ADDRESS(void CTrainWnd::SetGMData(int *,unsigned char *,float),CTrainWnd__SetGMData); +#endif +#ifdef CTrainWnd__Train_x +FUNCTION_AT_ADDRESS(void CTrainWnd::Train(void),CTrainWnd__Train); +#endif +#ifdef CVideoModesWnd__CVideoModesWnd_x +FUNCTION_AT_ADDRESS( CVideoModesWnd::CVideoModesWnd(class CXWnd *),CVideoModesWnd__CVideoModesWnd); +#endif +#ifdef CVideoModesWnd__Init_x +FUNCTION_AT_ADDRESS(void CVideoModesWnd::Init(void),CVideoModesWnd__Init); +#endif +#ifdef CVideoModesWnd__Update_x +FUNCTION_AT_ADDRESS(void CVideoModesWnd::Update(void),CVideoModesWnd__Update); +#endif +#ifdef CVideoModesWnd__UpdateSelection_x +FUNCTION_AT_ADDRESS(void CVideoModesWnd::UpdateSelection(unsigned int),CVideoModesWnd__UpdateSelection); +#endif +#ifdef CVideoModesWnd__RestoreOldMode_x +FUNCTION_AT_ADDRESS(void CVideoModesWnd::RestoreOldMode(void),CVideoModesWnd__RestoreOldMode); +#endif +#ifdef CGuild__CGuild_x +FUNCTION_AT_ADDRESS( CGuild::CGuild(void),CGuild__CGuild); +#endif +#ifdef CGuild__GetGuildName_x +FUNCTION_AT_ADDRESS(char * CGuild::GetGuildName(int),CGuild__GetGuildName); +#endif +#ifdef CGuild__ValidGuildName_x +FUNCTION_AT_ADDRESS(bool CGuild::ValidGuildName(int),CGuild__ValidGuildName); +#endif +#ifdef CGuild__GetGuildIndex_x +FUNCTION_AT_ADDRESS(int CGuild::GetGuildIndex(char *),CGuild__GetGuildIndex); +#endif +#ifdef CGuild__SendPublicCommentChange_x +FUNCTION_AT_ADDRESS(void CGuild::SendPublicCommentChange(char *,char *),CGuild__SendPublicCommentChange); +#endif +#ifdef CGuild__DemoteMember_x +FUNCTION_AT_ADDRESS(void CGuild::DemoteMember(class GuildMember *),CGuild__DemoteMember); +#endif +#ifdef CGuild__SetGuildMotd_x +FUNCTION_AT_ADDRESS(void CGuild::SetGuildMotd(struct guildmotdSet *),CGuild__SetGuildMotd); +#endif +#ifdef CGuild__HandleGuildMessage_x +FUNCTION_AT_ADDRESS(void CGuild::HandleGuildMessage(struct connection_t *,unsigned __int32,char *,unsigned __int32),CGuild__HandleGuildMessage); +#endif +#ifdef CGuild__InitializeFromDump_x +FUNCTION_AT_ADDRESS(void CGuild::InitializeFromDump(char *),CGuild__InitializeFromDump); +#endif +#ifdef CGuild__AddGuildMember_x +FUNCTION_AT_ADDRESS(void CGuild::AddGuildMember(class GuildMember *),CGuild__AddGuildMember); +#endif +#ifdef CGuild__DeleteAllMembers_x +FUNCTION_AT_ADDRESS(void CGuild::DeleteAllMembers(void),CGuild__DeleteAllMembers); +#endif +#ifdef CGuild__HandleGuildInvite_x +FUNCTION_AT_ADDRESS(void CGuild::HandleGuildInvite(struct connection_t *,unsigned __int32,char *,unsigned __int32),CGuild__HandleGuildInvite); +#endif +#ifdef CGuild__HandleAddGuildMember_x +FUNCTION_AT_ADDRESS(void CGuild::HandleAddGuildMember(char *,int),CGuild__HandleAddGuildMember); +#endif +#ifdef CGuild__HandleRemoveGuildMember_x +FUNCTION_AT_ADDRESS(void CGuild::HandleRemoveGuildMember(char *,int),CGuild__HandleRemoveGuildMember); +#endif +#ifdef CGuild__HandleDeleteGuildResponse_x +FUNCTION_AT_ADDRESS(void CGuild::HandleDeleteGuildResponse(char *),CGuild__HandleDeleteGuildResponse); +#endif +#ifdef CGuild__UpdatePublicComment_x +FUNCTION_AT_ADDRESS(void CGuild::UpdatePublicComment(char *),CGuild__UpdatePublicComment); +#endif +#ifdef CGuild__UpdateMemberStatus_x +FUNCTION_AT_ADDRESS(void CGuild::UpdateMemberStatus(char *),CGuild__UpdateMemberStatus); +#endif +#ifdef CGuild__HandleMemberLevelUpdate_x +FUNCTION_AT_ADDRESS(void CGuild::HandleMemberLevelUpdate(char *),CGuild__HandleMemberLevelUpdate); +#endif +#ifdef CGuild__UpdateGuildMemberOnWindow_x +FUNCTION_AT_ADDRESS(void CGuild::UpdateGuildMemberOnWindow(class GuildMember *),CGuild__UpdateGuildMemberOnWindow); +#endif +#ifdef CGuild__ChangeGuildMemberName_x +FUNCTION_AT_ADDRESS(void CGuild::ChangeGuildMemberName(char *),CGuild__ChangeGuildMemberName); +#endif +#ifdef CGuild__FindMemberByName_x +FUNCTION_AT_ADDRESS(class GuildMember * CGuild::FindMemberByName(char *),CGuild__FindMemberByName); +#endif +#ifdef GuildMember__GuildMember_x +FUNCTION_AT_ADDRESS( GuildMember::GuildMember(void),GuildMember__GuildMember); +#endif +#ifdef ChannelServerApi__ChannelServerApi_x +FUNCTION_AT_ADDRESS( ChannelServerApi::ChannelServerApi(char *,int,char *,char *,class ChannelServerHandler *,bool,bool,char *),ChannelServerApi__ChannelServerApi); +#endif +#ifdef ChannelServerApi__dChannelServerApi_x +FUNCTION_AT_ADDRESS( ChannelServerApi::~ChannelServerApi(void),ChannelServerApi__dChannelServerApi); +#endif +#ifdef ChannelServerApi__FreeChannelList_x +FUNCTION_AT_ADDRESS(void ChannelServerApi::FreeChannelList(void),ChannelServerApi__FreeChannelList); +#endif +#ifdef ChannelServerApi__GetStatus_x +//FUNCTION_AT_ADDRESS(enum ChannelServerApi::Status ChannelServerApi::GetStatus(void),ChannelServerApi__GetStatus); +#endif +#ifdef ChannelServerApi__SendMessageA_x +FUNCTION_AT_ADDRESS(void ChannelServerApi::SendMessageA(char *),ChannelServerApi__SendMessageA); +#endif +#ifdef ChannelServerApi__SortBuddyList_x +FUNCTION_AT_ADDRESS(void ChannelServerApi::SortBuddyList(void),ChannelServerApi__SortBuddyList); +#endif +#ifdef UdpManager__Release_x +FUNCTION_AT_ADDRESS(void UdpManager::Release(void),UdpManager__Release); +#endif +#ifdef ChannelServerApi__SetBuddyStatus_x +//FUNCTION_AT_ADDRESS(void ChannelServerApi::SetBuddyStatus(char *,enum ChannelServerApi::BuddyStatus),ChannelServerApi__SetBuddyStatus); +#endif +#ifdef UdpConnection__Release_x +FUNCTION_AT_ADDRESS(void UdpConnection::Release(void),UdpConnection__Release); +#endif +#ifdef ChannelServerApi__GiveTime_x +FUNCTION_AT_ADDRESS(void ChannelServerApi::GiveTime(void),ChannelServerApi__GiveTime); +#endif +#ifdef ChannelServerApi__GetChannelNumber_x +FUNCTION_AT_ADDRESS(int ChannelServerApi::GetChannelNumber(char *),ChannelServerApi__GetChannelNumber); +#endif +#ifdef ChannelServerApi__GetChannelName_x +FUNCTION_AT_ADDRESS(char * ChannelServerApi::GetChannelName(int),ChannelServerApi__GetChannelName); +#endif +#ifdef ChannelServerApi__Strncpy_x +FUNCTION_AT_ADDRESS(char * __cdecl ChannelServerApi::Strncpy(char *,char *,int),ChannelServerApi__Strncpy); +#endif +#ifdef ChannelServerApi__SmartResize_x +FUNCTION_AT_ADDRESS(void * __cdecl ChannelServerApi::SmartResize(void *,int,int),ChannelServerApi__SmartResize); +#endif +#ifdef ChannelServerApi__GetNextField_x +FUNCTION_AT_ADDRESS(int __cdecl ChannelServerApi::GetNextField(char *,int,char * *,char),ChannelServerApi__GetNextField); +#endif +#ifdef JournalNPC__JournalNPC_x +FUNCTION_AT_ADDRESS( JournalNPC::JournalNPC(void),JournalNPC__JournalNPC); +#endif +#ifdef JournalNPC__dJournalNPC_x +FUNCTION_AT_ADDRESS( JournalNPC::~JournalNPC(void),JournalNPC__dJournalNPC); +#endif +#ifdef JournalNPC__AllocateArray_x +FUNCTION_AT_ADDRESS(void JournalNPC::AllocateArray(void),JournalNPC__AllocateArray); +#endif +#ifdef JournalNPC__CleanEntries_x +FUNCTION_AT_ADDRESS(void JournalNPC::CleanEntries(void),JournalNPC__CleanEntries); +#endif +#ifdef JournalNPC__GetText_x +FUNCTION_AT_ADDRESS(char * __cdecl JournalNPC::GetText(int),JournalNPC__GetText); +#endif +#ifdef JournalNPC__GetEntry_x +FUNCTION_AT_ADDRESS(struct JournalEntry * JournalNPC::GetEntry(int),JournalNPC__GetEntry); +#endif +#ifdef JournalNPC__FindEntryByHash_x +FUNCTION_AT_ADDRESS(struct JournalEntry * JournalNPC::FindEntryByHash(int),JournalNPC__FindEntryByHash); +#endif +#ifdef JournalNPC__FindEntryByCategory_x +FUNCTION_AT_ADDRESS(struct JournalEntry * JournalNPC::FindEntryByCategory(int,int),JournalNPC__FindEntryByCategory); +#endif +#ifdef JournalNPC__FindThisText_x +FUNCTION_AT_ADDRESS(int JournalNPC::FindThisText(char *,bool,int),JournalNPC__FindThisText); +#endif +#ifdef JournalNPC__AddEntry_x +FUNCTION_AT_ADDRESS(int JournalNPC::AddEntry(long,float,float,float,int,int),JournalNPC__AddEntry); +#endif +#ifdef JournalNPC__AddEntry1_x +FUNCTION_AT_ADDRESS(int JournalNPC::AddEntry(long,float,float,float,char *,int),JournalNPC__AddEntry1); +#endif +#ifdef JournalNPC__DeleteEntryByIndex_x +FUNCTION_AT_ADDRESS(int JournalNPC::DeleteEntryByIndex(int),JournalNPC__DeleteEntryByIndex); +#endif +#ifdef JournalNPC__DeleteEntryByHash_x +FUNCTION_AT_ADDRESS(int JournalNPC::DeleteEntryByHash(int),JournalNPC__DeleteEntryByHash); +#endif +#ifdef JournalNPC__ConvertCategory_x +FUNCTION_AT_ADDRESS(void JournalNPC::ConvertCategory(int,int),JournalNPC__ConvertCategory); +#endif +#ifdef JournalNPC__ComputeLatestTime_x +FUNCTION_AT_ADDRESS(void JournalNPC::ComputeLatestTime(void),JournalNPC__ComputeLatestTime); +#endif +#ifdef ConversationJournal__ConversationJournal_x +FUNCTION_AT_ADDRESS( ConversationJournal::ConversationJournal(void),ConversationJournal__ConversationJournal); +#endif +#ifdef ConversationJournal__dConversationJournal_x +FUNCTION_AT_ADDRESS( ConversationJournal::~ConversationJournal(void),ConversationJournal__dConversationJournal); +#endif +#ifdef ConversationJournal__Clean_x +FUNCTION_AT_ADDRESS(void ConversationJournal::Clean(void),ConversationJournal__Clean); +#endif +#ifdef ConversationJournal__AllocateNPCArray_x +FUNCTION_AT_ADDRESS(void ConversationJournal::AllocateNPCArray(void),ConversationJournal__AllocateNPCArray); +#endif +#ifdef ConversationJournal__AllocateCatArray_x +FUNCTION_AT_ADDRESS(void ConversationJournal::AllocateCatArray(void),ConversationJournal__AllocateCatArray); +#endif +#ifdef ConversationJournal__GetNPC_x +FUNCTION_AT_ADDRESS(class JournalNPC * ConversationJournal::GetNPC(int),ConversationJournal__GetNPC); +#endif +#ifdef ConversationJournal__FindNPCByNameZone_x +FUNCTION_AT_ADDRESS(class JournalNPC * ConversationJournal::FindNPCByNameZone(char *,int),ConversationJournal__FindNPCByNameZone); +#endif +#ifdef ConversationJournal__DeleteNPC_x +FUNCTION_AT_ADDRESS(int ConversationJournal::DeleteNPC(char *,int),ConversationJournal__DeleteNPC); +#endif +#ifdef ConversationJournal__AddNPC_x +FUNCTION_AT_ADDRESS(class JournalNPC * ConversationJournal::AddNPC(char *,int),ConversationJournal__AddNPC); +#endif +#ifdef ConversationJournal__AddEntry_x +FUNCTION_AT_ADDRESS(int ConversationJournal::AddEntry(char *,int,long,float,float,float,char *,int),ConversationJournal__AddEntry); +#endif +#ifdef ConversationJournal__AddCategory_x +FUNCTION_AT_ADDRESS(struct JournalCategory * ConversationJournal::AddCategory(int),ConversationJournal__AddCategory); +#endif +#ifdef ConversationJournal__FindFreeID_x +FUNCTION_AT_ADDRESS(int ConversationJournal::FindFreeID(void),ConversationJournal__FindFreeID); +#endif +#ifdef ConversationJournal__AddCategory1_x +FUNCTION_AT_ADDRESS(struct JournalCategory * ConversationJournal::AddCategory(char *,char *,int),ConversationJournal__AddCategory1); +#endif +#ifdef ConversationJournal__DeleteCategory_x +FUNCTION_AT_ADDRESS(void ConversationJournal::DeleteCategory(int),ConversationJournal__DeleteCategory); +#endif +#ifdef ConversationJournal__GetCategory_x +FUNCTION_AT_ADDRESS(struct JournalCategory * ConversationJournal::GetCategory(int),ConversationJournal__GetCategory); +#endif +#ifdef ConversationJournal__GetCategory1_x +FUNCTION_AT_ADDRESS(struct JournalCategory * ConversationJournal::GetCategory(char *),ConversationJournal__GetCategory1); +#endif +#ifdef ConversationJournal__GetCategoryList_x +FUNCTION_AT_ADDRESS(struct JournalCategory * * ConversationJournal::GetCategoryList(void),ConversationJournal__GetCategoryList); +#endif +#ifdef ConversationJournal__Save_x +FUNCTION_AT_ADDRESS(int ConversationJournal::Save(char *),ConversationJournal__Save); +#endif +#ifdef ConversationJournal__Load_x +FUNCTION_AT_ADDRESS(int ConversationJournal::Load(char *),ConversationJournal__Load); +#endif +#ifdef ConversationJournal__ReadCategory_x +FUNCTION_AT_ADDRESS(void ConversationJournal::ReadCategory(struct _iobuf *),ConversationJournal__ReadCategory); +#endif +#ifdef JournalNPC__ReadEntry_x +FUNCTION_AT_ADDRESS(int JournalNPC::ReadEntry(struct _iobuf *),JournalNPC__ReadEntry); +#endif +#ifdef ConversationJournal__ReadNPC_x +FUNCTION_AT_ADDRESS(class JournalNPC * ConversationJournal::ReadNPC(struct _iobuf *),ConversationJournal__ReadNPC); +#endif +#ifdef CRaid__CRaid_x +FUNCTION_AT_ADDRESS( CRaid::CRaid(void),CRaid__CRaid); +#endif +#ifdef CRaid__HandleS2CRaidMessage_x +FUNCTION_AT_ADDRESS(void CRaid::HandleS2CRaidMessage(char *),CRaid__HandleS2CRaidMessage); +#endif +#ifdef CRaid__HandleC2SRaidMessage_x +FUNCTION_AT_ADDRESS(void CRaid::HandleC2SRaidMessage(char *),CRaid__HandleC2SRaidMessage); +#endif +#ifdef CRaid__IsInRaid_x +FUNCTION_AT_ADDRESS(bool CRaid::IsInRaid(void),CRaid__IsInRaid); +#endif +#ifdef CRaid__IsInvited_x +FUNCTION_AT_ADDRESS(bool CRaid::IsInvited(void),CRaid__IsInvited); +#endif +#ifdef CRaid__ClearInvitedState_x +FUNCTION_AT_ADDRESS(void CRaid::ClearInvitedState(void),CRaid__ClearInvitedState); +#endif +#ifdef CRaid__IsRaidLeader_x +FUNCTION_AT_ADDRESS(bool CRaid::IsRaidLeader(void),CRaid__IsRaidLeader); +#endif +#ifdef CRaid__IsRaidGroupLeader_x +FUNCTION_AT_ADDRESS(bool CRaid::IsRaidGroupLeader(void),CRaid__IsRaidGroupLeader); +#endif +#ifdef CRaid__SetTargetRaidPlayer_x +FUNCTION_AT_ADDRESS(void CRaid::SetTargetRaidPlayer(char *),CRaid__SetTargetRaidPlayer); +#endif +#ifdef CRaid__InitializeRaid_x +FUNCTION_AT_ADDRESS(void CRaid::InitializeRaid(char *),CRaid__InitializeRaid); +#endif +#ifdef CRaid__RaidCreated_x +FUNCTION_AT_ADDRESS(void CRaid::RaidCreated(struct CreateRaidMessage *),CRaid__RaidCreated); +#endif +#ifdef CRaid__AddRaidMember_x +FUNCTION_AT_ADDRESS(void CRaid::AddRaidMember(struct RaidAddMember *),CRaid__AddRaidMember); +#endif +#ifdef CRaid__DeleteRaidMember_x +FUNCTION_AT_ADDRESS(void CRaid::DeleteRaidMember(struct SCRaidMessage *),CRaid__DeleteRaidMember); +#endif +#ifdef CRaid__ChangeLeadership_x +FUNCTION_AT_ADDRESS(void CRaid::ChangeLeadership(char *),CRaid__ChangeLeadership); +#endif +#ifdef CRaid__RenameMember_x +FUNCTION_AT_ADDRESS(void CRaid::RenameMember(struct RenameRaidMember *),CRaid__RenameMember); +#endif +#ifdef CRaid__HandlePositionChange_x +FUNCTION_AT_ADDRESS(void CRaid::HandlePositionChange(struct SCRaidMessage *),CRaid__HandlePositionChange); +#endif +#ifdef CRaid__RaidGroupLeaderChange_x +FUNCTION_AT_ADDRESS(void CRaid::RaidGroupLeaderChange(struct SCRaidMessage *),CRaid__RaidGroupLeaderChange); +#endif +#ifdef CRaid__SetLootTypeResponse_x +FUNCTION_AT_ADDRESS(void CRaid::SetLootTypeResponse(struct SCRaidMessage *),CRaid__SetLootTypeResponse); +#endif +#ifdef CRaid__HandleSetLootType_x +FUNCTION_AT_ADDRESS(void CRaid::HandleSetLootType(int),CRaid__HandleSetLootType); +#endif +#ifdef CRaid__HandleAddLooter_x +FUNCTION_AT_ADDRESS(void CRaid::HandleAddLooter(char *),CRaid__HandleAddLooter); +#endif +#ifdef UdpMisc__GetValue32_x +FUNCTION_AT_ADDRESS(unsigned int __cdecl UdpMisc::GetValue32(void const *),UdpMisc__GetValue32); +#endif +#ifdef Util__GetValue32_x +//FUNCTION_AT_ADDRESS(unsigned int __cdecl Util::GetValue32(void const *),Util__GetValue32); +#endif +#ifdef CRaid__HandleRemoveLooter_x +FUNCTION_AT_ADDRESS(void CRaid::HandleRemoveLooter(char *),CRaid__HandleRemoveLooter); +#endif +#ifdef CRaid__CreateInviteRaid_x +FUNCTION_AT_ADDRESS(void CRaid::CreateInviteRaid(void),CRaid__CreateInviteRaid); +#endif +#ifdef CRaid__SendInviteResponse_x +FUNCTION_AT_ADDRESS(void CRaid::SendInviteResponse(bool),CRaid__SendInviteResponse); +#endif +#ifdef CRaid__SendLeadershipChange_x +FUNCTION_AT_ADDRESS(void CRaid::SendLeadershipChange(char *),CRaid__SendLeadershipChange); +#endif +#ifdef CRaid__RemoveRaidMember_x +FUNCTION_AT_ADDRESS(void CRaid::RemoveRaidMember(void),CRaid__RemoveRaidMember); +#endif +#ifdef CRaid__SetLootType_x +FUNCTION_AT_ADDRESS(void CRaid::SetLootType(char *),CRaid__SetLootType); +#endif +#ifdef CRaid__GetLootType_x +FUNCTION_AT_ADDRESS(int CRaid::GetLootType(void),CRaid__GetLootType); +#endif +#ifdef CRaid__AddRaidLooter_x +FUNCTION_AT_ADDRESS(void CRaid::AddRaidLooter(void),CRaid__AddRaidLooter); +#endif +#ifdef CRaid__RemoveRaidLooter_x +FUNCTION_AT_ADDRESS(void CRaid::RemoveRaidLooter(void),CRaid__RemoveRaidLooter); +#endif +#ifdef CRaid__SendRaidChat_x +FUNCTION_AT_ADDRESS(void CRaid::SendRaidChat(char *),CRaid__SendRaidChat); +#endif +#ifdef CRaid__ResetWindow_x +FUNCTION_AT_ADDRESS(void CRaid::ResetWindow(void),CRaid__ResetWindow); +#endif +#ifdef CRaid__UpdateClassColor_x +FUNCTION_AT_ADDRESS(void CRaid::UpdateClassColor(int,unsigned long),CRaid__UpdateClassColor); +#endif +#ifdef CRaid__HandleCreateInviteRaid_x +FUNCTION_AT_ADDRESS(void CRaid::HandleCreateInviteRaid(struct CSRaidMessage *),CRaid__HandleCreateInviteRaid); +#endif +#ifdef CRaid__GetNumRaidMembers_x +FUNCTION_AT_ADDRESS(int CRaid::GetNumRaidMembers(void),CRaid__GetNumRaidMembers); +#endif +#ifdef CRaid__GetRaidMemberAt_x +FUNCTION_AT_ADDRESS(struct RaidMember * CRaid::GetRaidMemberAt(int),CRaid__GetRaidMemberAt); +#endif +#ifdef CRaid__SetRaidLeader_x +FUNCTION_AT_ADDRESS(void CRaid::SetRaidLeader(char *),CRaid__SetRaidLeader); +#endif +#ifdef CRaid__FindPlayerIndex_x +FUNCTION_AT_ADDRESS(int CRaid::FindPlayerIndex(char *),CRaid__FindPlayerIndex); +#endif +#ifdef CRaid__IsRaidMember_x +FUNCTION_AT_ADDRESS(bool CRaid::IsRaidMember(char *),CRaid__IsRaidMember); +#endif +#ifdef CRaid__FindOpenIndex_x +FUNCTION_AT_ADDRESS(int CRaid::FindOpenIndex(void),CRaid__FindOpenIndex); +#endif +#ifdef CRaid__FindRaidGroupLeader_x +FUNCTION_AT_ADDRESS(int CRaid::FindRaidGroupLeader(int),CRaid__FindRaidGroupLeader); +#endif +#ifdef CRaid__ResetRaid_x +FUNCTION_AT_ADDRESS(void CRaid::ResetRaid(void),CRaid__ResetRaid); +#endif +#ifdef CRaid__DetermineRaidChanges_x +FUNCTION_AT_ADDRESS(void CRaid::DetermineRaidChanges(char *),CRaid__DetermineRaidChanges); +#endif +#ifdef CRaid__SendRaidMsg_x +FUNCTION_AT_ADDRESS(void CRaid::SendRaidMsg(int,char *,char *,int),CRaid__SendRaidMsg); +#endif +#ifdef CRaid__UpdateOptionsWindow_x +FUNCTION_AT_ADDRESS(void CRaid::UpdateOptionsWindow(void),CRaid__UpdateOptionsWindow); +#endif +#ifdef CRaid__IsRaidLooter_x +FUNCTION_AT_ADDRESS(bool CRaid::IsRaidLooter(char *),CRaid__IsRaidLooter); +#endif +#ifdef CRaid__UpdateLevelAverage_x +FUNCTION_AT_ADDRESS(void CRaid::UpdateLevelAverage(void),CRaid__UpdateLevelAverage); +#endif +#ifdef CDisplay__CDisplay_x +FUNCTION_AT_ADDRESS( CDisplay::CDisplay(struct HWND__ *),CDisplay__CDisplay); +#endif +#ifdef CDisplay__dCDisplay_x +FUNCTION_AT_ADDRESS( CDisplay::~CDisplay(void),CDisplay__dCDisplay); +#endif +#ifdef CDisplay__ResetRenderWindow_x +FUNCTION_AT_ADDRESS(void CDisplay::ResetRenderWindow(void),CDisplay__ResetRenderWindow); +#endif +#ifdef CDisplay__SetCCreateCamera_x +FUNCTION_AT_ADDRESS(void CDisplay::SetCCreateCamera(int),CDisplay__SetCCreateCamera); +#endif +#ifdef CDisplay__SetBoneSpriteTint_x +FUNCTION_AT_ADDRESS(int CDisplay::SetBoneSpriteTint(struct T3D_DAG *,struct T3D_RGB *),CDisplay__SetBoneSpriteTint); +#endif +#ifdef CDisplay__ReplaceMaterial_x +FUNCTION_AT_ADDRESS(int CDisplay::ReplaceMaterial(char *,char *,struct T3D_HIERARCHICALSPRITEINSTANCE *,struct T3D_RGB *,int),CDisplay__ReplaceMaterial); +#endif +#ifdef CDisplay__ReplaceCloakMaterials_x +FUNCTION_AT_ADDRESS(int CDisplay::ReplaceCloakMaterials(int,struct T3D_HIERARCHICALSPRITEINSTANCE *,struct T3D_RGB *),CDisplay__ReplaceCloakMaterials); +#endif +#ifdef CDisplay__InitEverQuestLocale_x +//FUNCTION_AT_ADDRESS(void CDisplay::InitEverQuestLocale(enum EQLocalize::languages),CDisplay__InitEverQuestLocale); +#endif +#ifdef CDisplay__ReloadUI_x +FUNCTION_AT_ADDRESS(void CDisplay::ReloadUI(bool),CDisplay__ReloadUI); +#endif +#ifdef CDisplay__HandleMaterial_x +FUNCTION_AT_ADDRESS(void CDisplay::HandleMaterial(class EQ_PC *,int,class EQ_Item *,class EQ_Item *),CDisplay__HandleMaterial); +#endif +#ifdef CDisplay__FixHeading_x +FUNCTION_AT_ADDRESS(float CDisplay::FixHeading(float),CDisplay__FixHeading); +#endif +#ifdef CDisplay__HeadingDiff_x +FUNCTION_AT_ADDRESS(float CDisplay::HeadingDiff(float,float,float *),CDisplay__HeadingDiff); +#endif +#ifdef CDisplay__DeleteParticleCloudInstance_x +FUNCTION_AT_ADDRESS(void CDisplay::DeleteParticleCloudInstance(struct T3D_PARTICLECLOUDINSTANCE * *),CDisplay__DeleteParticleCloudInstance); +#endif +#ifdef CDisplay__ProcessParticleEmitter_x +FUNCTION_AT_ADDRESS(void CDisplay::ProcessParticleEmitter(class EQSwitch *),CDisplay__ProcessParticleEmitter); +#endif +#ifdef CDisplay__SlideSwitchLeftRight_x +FUNCTION_AT_ADDRESS(bool CDisplay::SlideSwitchLeftRight(class EQSwitch *,float,int,float),CDisplay__SlideSwitchLeftRight); +#endif +#ifdef CDisplay__ProcessSwitches_x +FUNCTION_AT_ADDRESS(void CDisplay::ProcessSwitches(void),CDisplay__ProcessSwitches); +#endif +#ifdef CDisplay__default_cameras_x +FUNCTION_AT_ADDRESS(void CDisplay::default_cameras(void),CDisplay__default_cameras); +#endif +#ifdef CDisplay__is_3dON_x +FUNCTION_AT_ADDRESS(int CDisplay::is_3dON(void),CDisplay__is_3dON); +#endif +#ifdef CDisplay__is_ParticleSystemON_x +FUNCTION_AT_ADDRESS(int CDisplay::is_ParticleSystemON(void),CDisplay__is_ParticleSystemON); +#endif +#ifdef CDisplay__InitCommonLights_x +FUNCTION_AT_ADDRESS(void CDisplay::InitCommonLights(void),CDisplay__InitCommonLights); +#endif +#ifdef CDisplay__GetNewPCIniFlag_x +FUNCTION_AT_ADDRESS(int CDisplay::GetNewPCIniFlag(int,int),CDisplay__GetNewPCIniFlag); +#endif +#ifdef CDisplay__ShouldLoadNewPcModel_x +FUNCTION_AT_ADDRESS(int CDisplay::ShouldLoadNewPcModel(int,int),CDisplay__ShouldLoadNewPcModel); +#endif +#ifdef CDisplay__GetIniRaceName_x +FUNCTION_AT_ADDRESS(char * CDisplay::GetIniRaceName(int),CDisplay__GetIniRaceName); +#endif +#ifdef CDisplay__InitWorld_x +FUNCTION_AT_ADDRESS(void CDisplay::InitWorld(void),CDisplay__InitWorld); +#endif +#ifdef CDisplay__InitDDraw_x +FUNCTION_AT_ADDRESS(void CDisplay::InitDDraw(void),CDisplay__InitDDraw); +#endif +#ifdef CDisplay__InitNewUI_x +FUNCTION_AT_ADDRESS(void CDisplay::InitNewUI(void),CDisplay__InitNewUI); +#endif +#ifdef CXWndDrawTemplate__operator_equal_x +FUNCTION_AT_ADDRESS(class CXWndDrawTemplate & CXWndDrawTemplate::operator=(class CXWndDrawTemplate const &),CXWndDrawTemplate__operator_equal); +#endif +#ifdef CButtonDrawTemplate__operator_equal_x +FUNCTION_AT_ADDRESS(class CButtonDrawTemplate & CButtonDrawTemplate::operator=(class CButtonDrawTemplate const &),CButtonDrawTemplate__operator_equal); +#endif +#ifdef CScrollbarTemplate__operator_equal_x +FUNCTION_AT_ADDRESS(class CScrollbarTemplate & CScrollbarTemplate::operator=(class CScrollbarTemplate const &),CScrollbarTemplate__operator_equal); +#endif +#ifdef CTAFrameDraw__operator_equal_x +FUNCTION_AT_ADDRESS(class CTAFrameDraw & CTAFrameDraw::operator=(class CTAFrameDraw const &),CTAFrameDraw__operator_equal); +#endif +#ifdef CDisplay__InitCharSelectUI_x +FUNCTION_AT_ADDRESS(void CDisplay::InitCharSelectUI(void),CDisplay__InitCharSelectUI); +#endif +#ifdef CDisplay__InitGameUI_x +FUNCTION_AT_ADDRESS(void CDisplay::InitGameUI(void),CDisplay__InitGameUI); +#endif +#ifdef CDisplay__CleanCharSelectUI_x +FUNCTION_AT_ADDRESS(void CDisplay::CleanCharSelectUI(void),CDisplay__CleanCharSelectUI); +#endif +#ifdef CDisplay__CleanGameUI_x +FUNCTION_AT_ADDRESS(void CDisplay::CleanGameUI(void),CDisplay__CleanGameUI); +#endif +#ifdef CDisplay__CleanUpNewUI_x +FUNCTION_AT_ADDRESS(void CDisplay::CleanUpNewUI(void),CDisplay__CleanUpNewUI); +#endif +#ifdef CDisplay__ActivateMainUI_x +FUNCTION_AT_ADDRESS(void CDisplay::ActivateMainUI(bool),CDisplay__ActivateMainUI); +#endif +#ifdef CDisplay__DeactivateMainUI_x +FUNCTION_AT_ADDRESS(void CDisplay::DeactivateMainUI(void),CDisplay__DeactivateMainUI); +#endif +#ifdef CDisplay__NewUIProcessEscape_x +FUNCTION_AT_ADDRESS(void CDisplay::NewUIProcessEscape(void),CDisplay__NewUIProcessEscape); +#endif +#ifdef CDisplay__KeyMapUpdated_x +FUNCTION_AT_ADDRESS(void CDisplay::KeyMapUpdated(void),CDisplay__KeyMapUpdated); +#endif +#ifdef CDisplay__GetWorldFilePath_x +FUNCTION_AT_ADDRESS(bool const CDisplay::GetWorldFilePath(char *,char const *),CDisplay__GetWorldFilePath); +#endif +#ifdef CDisplay__LoadWorldFile_x +FUNCTION_AT_ADDRESS(unsigned char CDisplay::LoadWorldFile(char *,char *,int,unsigned char),CDisplay__LoadWorldFile); +#endif +#ifdef CDisplay__LoadNPCFromS3D_x +FUNCTION_AT_ADDRESS(unsigned char CDisplay::LoadNPCFromS3D(char *,char *,char *),CDisplay__LoadNPCFromS3D); +#endif +#ifdef CDisplay__LoadBMPFile_x +FUNCTION_AT_ADDRESS(unsigned char CDisplay::LoadBMPFile(void),CDisplay__LoadBMPFile); +#endif +#ifdef CDisplay__StartWorldDisplay_x +//FUNCTION_AT_ADDRESS(void CDisplay::StartWorldDisplay(enum EQZoneIndex),CDisplay__StartWorldDisplay); +#endif +#ifdef CDisplay__StartWorldDisplay_Bailout_x +FUNCTION_AT_ADDRESS(void CDisplay::StartWorldDisplay_Bailout(char const *),CDisplay__StartWorldDisplay_Bailout); +#endif +#ifdef CDisplay__StopWorldDisplay_x +FUNCTION_AT_ADDRESS(void CDisplay::StopWorldDisplay(void),CDisplay__StopWorldDisplay); +#endif +#ifdef CDisplay__SetGammaCorrection_x +FUNCTION_AT_ADDRESS(void CDisplay::SetGammaCorrection(float),CDisplay__SetGammaCorrection); +#endif +#ifdef CDisplay__SetPCloudDensity_x +FUNCTION_AT_ADDRESS(void CDisplay::SetPCloudDensity(int),CDisplay__SetPCloudDensity); +#endif +#ifdef CDisplay__CleanUpDDraw_x +FUNCTION_AT_ADDRESS(void CDisplay::CleanUpDDraw(void),CDisplay__CleanUpDDraw); +#endif +#ifdef CDisplay__IsShield_x +FUNCTION_AT_ADDRESS(unsigned int CDisplay::IsShield(int)const ,CDisplay__IsShield); +#endif +#ifdef CDisplay__GetItemType_x +FUNCTION_AT_ADDRESS(int CDisplay::GetItemType(int),CDisplay__GetItemType); +#endif +#ifdef CDisplay__GetUserDefinedColor_x +FUNCTION_AT_ADDRESS(unsigned long __cdecl CDisplay::GetUserDefinedColor(int),CDisplay__GetUserDefinedColor); +#endif +#ifdef CDisplay__SetUserDefinedColor_x +FUNCTION_AT_ADDRESS(void __cdecl CDisplay::SetUserDefinedColor(int,int,int,int),CDisplay__SetUserDefinedColor); +#endif +#ifdef CDisplay__InitUserDefinedColors_x +FUNCTION_AT_ADDRESS(void CDisplay::InitUserDefinedColors(void),CDisplay__InitUserDefinedColors); +#endif +#ifdef CDisplay__WriteTextHD2_x +FUNCTION_AT_ADDRESS(int __cdecl CDisplay::WriteTextHD2(char const *,int,int,int),CDisplay__WriteTextHD2); +#endif +#ifdef CXWndManager__GetDisplayWidth_x +FUNCTION_AT_ADDRESS(unsigned __int32 CXWndManager::GetDisplayWidth(void)const ,CXWndManager__GetDisplayWidth); +#endif +#ifdef CXWndManager__GetFont_x +FUNCTION_AT_ADDRESS(class CTextureFont * CXWndManager::GetFont(int)const ,CXWndManager__GetFont); +#endif +#ifdef CDisplay__SetActorScaleFactor_x +FUNCTION_AT_ADDRESS(void CDisplay::SetActorScaleFactor(struct T3D_tagACTORINSTANCE *,float,unsigned char),CDisplay__SetActorScaleFactor); +#endif +#ifdef CDisplay__ShowDisplay_x +FUNCTION_AT_ADDRESS(void CDisplay::ShowDisplay(void),CDisplay__ShowDisplay); +#endif +#ifdef CDisplay__CheckForScreenModeToggle_x +FUNCTION_AT_ADDRESS(void CDisplay::CheckForScreenModeToggle(void),CDisplay__CheckForScreenModeToggle); +#endif +#ifdef CDisplay__Render_World_x +FUNCTION_AT_ADDRESS(void CDisplay::Render_World(void),CDisplay__Render_World); +#endif +#ifdef CDisplay__SetSpecialEnvironment_x +//FUNCTION_AT_ADDRESS(void CDisplay::SetSpecialEnvironment(enum EnvironmentType),CDisplay__SetSpecialEnvironment); +#endif +#ifdef CDisplay__SetGenericEnvironment_x +FUNCTION_AT_ADDRESS(void CDisplay::SetGenericEnvironment(void),CDisplay__SetGenericEnvironment); +#endif +#ifdef CDisplay__SetupEmitterEnvironment_x +FUNCTION_AT_ADDRESS(void CDisplay::SetupEmitterEnvironment(void),CDisplay__SetupEmitterEnvironment); +#endif +#ifdef CDisplay__UpdateMobileEmitterLocations_x +FUNCTION_AT_ADDRESS(void CDisplay::UpdateMobileEmitterLocations(void),CDisplay__UpdateMobileEmitterLocations); +#endif +#ifdef CDisplay__RealRender_World_x +FUNCTION_AT_ADDRESS(void CDisplay::RealRender_World(void),CDisplay__RealRender_World); +#endif +#ifdef CDisplay__Render_MinWorld_x +FUNCTION_AT_ADDRESS(void CDisplay::Render_MinWorld(void),CDisplay__Render_MinWorld); +#endif +#ifdef CDisplay__StartWeather_x +FUNCTION_AT_ADDRESS(void CDisplay::StartWeather(int,unsigned char),CDisplay__StartWeather); +#endif +#ifdef CDisplay__ProcessWeather_x +FUNCTION_AT_ADDRESS(void CDisplay::ProcessWeather(void),CDisplay__ProcessWeather); +#endif +#ifdef CDisplay__StopWeather_x +FUNCTION_AT_ADDRESS(void CDisplay::StopWeather(int,unsigned char),CDisplay__StopWeather); +#endif +#ifdef CDisplay__LightningStrike_x +FUNCTION_AT_ADDRESS(void CDisplay::LightningStrike(void),CDisplay__LightningStrike); +#endif +#ifdef CDisplay__GetNearestPlayerInView_x +FUNCTION_AT_ADDRESS(class EQPlayer * CDisplay::GetNearestPlayerInView(float,bool),CDisplay__GetNearestPlayerInView); +#endif +#ifdef CDisplay__ProcessEffects_x +FUNCTION_AT_ADDRESS(void CDisplay::ProcessEffects(void),CDisplay__ProcessEffects); +#endif +#ifdef CDisplay__ProcessCloud_x +FUNCTION_AT_ADDRESS(void CDisplay::ProcessCloud(void),CDisplay__ProcessCloud); +#endif +#ifdef CDisplay__DDrawUpdateDisplay_x +FUNCTION_AT_ADDRESS(void CDisplay::DDrawUpdateDisplay(void),CDisplay__DDrawUpdateDisplay); +#endif +#ifdef CDisplay__SetViewActor_x +FUNCTION_AT_ADDRESS(void CDisplay::SetViewActor(struct T3D_tagACTORINSTANCE *),CDisplay__SetViewActor); +#endif +#ifdef CDisplay__SwitchToDefaultCameraMode_x +FUNCTION_AT_ADDRESS(void CDisplay::SwitchToDefaultCameraMode(void),CDisplay__SwitchToDefaultCameraMode); +#endif +#ifdef CDisplay__SetYon_x +FUNCTION_AT_ADDRESS(void CDisplay::SetYon(float),CDisplay__SetYon); +#endif +#ifdef CDisplay__SetActorYon_x +FUNCTION_AT_ADDRESS(void CDisplay::SetActorYon(float),CDisplay__SetActorYon); +#endif +#ifdef CDisplay__SetViewAngle_x +FUNCTION_AT_ADDRESS(void CDisplay::SetViewAngle(int),CDisplay__SetViewAngle); +#endif +#ifdef CDisplay__UpdateCameraAfterModeSwitch_x +FUNCTION_AT_ADDRESS(void CDisplay::UpdateCameraAfterModeSwitch(void),CDisplay__UpdateCameraAfterModeSwitch); +#endif +#ifdef CDisplay__ChangeVideoMode_x +FUNCTION_AT_ADDRESS(void CDisplay::ChangeVideoMode(void),CDisplay__ChangeVideoMode); +#endif +#ifdef CDisplay__ToggleView_x +FUNCTION_AT_ADDRESS(void CDisplay::ToggleView(void),CDisplay__ToggleView); +#endif +#ifdef CDisplay__SetFog_x +FUNCTION_AT_ADDRESS(void CDisplay::SetFog(bool,float,float,unsigned char,unsigned char,unsigned char),CDisplay__SetFog); +#endif +#ifdef CDisplay__ClearScreen_x +FUNCTION_AT_ADDRESS(void CDisplay::ClearScreen(void),CDisplay__ClearScreen); +#endif +#ifdef CDisplay__CreatePlayerActor_x +FUNCTION_AT_ADDRESS(void CDisplay::CreatePlayerActor(class EQPlayer *),CDisplay__CreatePlayerActor); +#endif +#ifdef CDisplay__SetActorUserData_x +FUNCTION_AT_ADDRESS(void CDisplay::SetActorUserData(struct T3D_tagACTORINSTANCE *,void *),CDisplay__SetActorUserData); +#endif +#ifdef CDisplay__CreateLight_x +FUNCTION_AT_ADDRESS(struct T3D_POINTLIGHT * CDisplay::CreateLight(unsigned char,float,float,float,float),CDisplay__CreateLight); +#endif +#ifdef CDisplay__GetIntensity_x +FUNCTION_AT_ADDRESS(unsigned char CDisplay::GetIntensity(unsigned char),CDisplay__GetIntensity); +#endif +#ifdef CDisplay__DeleteLight_x +FUNCTION_AT_ADDRESS(void CDisplay::DeleteLight(struct T3D_POINTLIGHT *),CDisplay__DeleteLight); +#endif +#ifdef CDisplay__PlaySoundAtLocation_x +FUNCTION_AT_ADDRESS(void CDisplay::PlaySoundAtLocation(float,float,float,int),CDisplay__PlaySoundAtLocation); +#endif +#ifdef CDisplay__SetUserRender_x +FUNCTION_AT_ADDRESS(long CDisplay::SetUserRender(int),CDisplay__SetUserRender); +#endif +#ifdef CDisplay__GetClickedActor_x +FUNCTION_AT_ADDRESS(struct T3D_tagACTORINSTANCE * CDisplay::GetClickedActor(unsigned long,unsigned long,unsigned long,void *,void *),CDisplay__GetClickedActor); +#endif +#ifdef CDisplay__CreateActor_x +FUNCTION_AT_ADDRESS(struct T3D_tagACTORINSTANCE * CDisplay::CreateActor(char *,float,float,float,float,float,float,bool,bool),CDisplay__CreateActor); +#endif +#ifdef CDisplay__SetActorBoundingRadius_x +FUNCTION_AT_ADDRESS(float CDisplay::SetActorBoundingRadius(struct T3D_tagACTORINSTANCE *,float,float),CDisplay__SetActorBoundingRadius); +#endif +#ifdef CDisplay__DeleteActor_x +FUNCTION_AT_ADDRESS(void CDisplay::DeleteActor(struct T3D_tagACTORINSTANCE *),CDisplay__DeleteActor); +#endif +#ifdef CDisplay__dupActorHierarchicalSprite_x +FUNCTION_AT_ADDRESS(struct T3D_HIERARCHICALSPRITEINSTANCE * CDisplay::dupActorHierarchicalSprite(struct T3D_tagACTORINSTANCE *),CDisplay__dupActorHierarchicalSprite); +#endif +#ifdef CDisplay__ToggleCharacterNameSprites_x +FUNCTION_AT_ADDRESS(void CDisplay::ToggleCharacterNameSprites(bool),CDisplay__ToggleCharacterNameSprites); +#endif +#ifdef CDisplay__ToggleNpcNameSprites_x +FUNCTION_AT_ADDRESS(void CDisplay::ToggleNpcNameSprites(bool),CDisplay__ToggleNpcNameSprites); +#endif +#ifdef CDisplay__TurnInfravisionEffectOn_x +FUNCTION_AT_ADDRESS(int CDisplay::TurnInfravisionEffectOn(void),CDisplay__TurnInfravisionEffectOn); +#endif +#ifdef CDisplay__TurnInfravisionEffectOff_x +FUNCTION_AT_ADDRESS(int CDisplay::TurnInfravisionEffectOff(void),CDisplay__TurnInfravisionEffectOff); +#endif +#ifdef CDisplay__SpurtBloodOnDag_x +FUNCTION_AT_ADDRESS(void CDisplay::SpurtBloodOnDag(struct T3D_DAG *),CDisplay__SpurtBloodOnDag); +#endif +#ifdef CDisplay__SetDayPeriod_x +FUNCTION_AT_ADDRESS(void CDisplay::SetDayPeriod(unsigned char),CDisplay__SetDayPeriod); +#endif +#ifdef CDisplay__SetSkyLayer_x +FUNCTION_AT_ADDRESS(void CDisplay::SetSkyLayer(int),CDisplay__SetSkyLayer); +#endif +#ifdef CDisplay__GetSkyTime_x +FUNCTION_AT_ADDRESS(int CDisplay::GetSkyTime(int *,int *),CDisplay__GetSkyTime); +#endif +#ifdef CDisplay__SetSunLight_x +FUNCTION_AT_ADDRESS(void CDisplay::SetSunLight(void),CDisplay__SetSunLight); +#endif +#ifdef CDisplay__SetSkyBackground_x +FUNCTION_AT_ADDRESS(void CDisplay::SetSkyBackground(void),CDisplay__SetSkyBackground); +#endif +#ifdef CDisplay__ProcessSky_x +FUNCTION_AT_ADDRESS(void CDisplay::ProcessSky(void),CDisplay__ProcessSky); +#endif +#ifdef CDisplay__SimpleDistance_x +FUNCTION_AT_ADDRESS(float CDisplay::SimpleDistance(float,float,float,float,float,float,float),CDisplay__SimpleDistance); +#endif +#ifdef CDisplay__TrueDistance_x +FUNCTION_AT_ADDRESS(float CDisplay::TrueDistance(float,float,float,float,float,float,float),CDisplay__TrueDistance); +#endif +#ifdef CDisplay__PlayerSimpleDistance_x +FUNCTION_AT_ADDRESS(float CDisplay::PlayerSimpleDistance(class EQPlayer *,class EQPlayer *,float),CDisplay__PlayerSimpleDistance); +#endif +#ifdef CDisplay__PlayerDistance_x +FUNCTION_AT_ADDRESS(float CDisplay::PlayerDistance(class EQPlayer *,class EQPlayer *,float),CDisplay__PlayerDistance); +#endif +#ifdef CDisplay__hideGrassObjects_x +FUNCTION_AT_ADDRESS(void CDisplay::hideGrassObjects(void),CDisplay__hideGrassObjects); +#endif +#ifdef CDisplay__updateGrassObjects_x +FUNCTION_AT_ADDRESS(void CDisplay::updateGrassObjects(void),CDisplay__updateGrassObjects); +#endif +#ifdef CDisplay__loadGrassObjects_x +FUNCTION_AT_ADDRESS(void CDisplay::loadGrassObjects(char *),CDisplay__loadGrassObjects); +#endif +#ifdef CDisplay__SetAmbientLight_x +FUNCTION_AT_ADDRESS(void CDisplay::SetAmbientLight(float),CDisplay__SetAmbientLight); +#endif +#ifdef CDisplay__SetViewActorByName_x +FUNCTION_AT_ADDRESS(void CDisplay::SetViewActorByName(char *),CDisplay__SetViewActorByName); +#endif +#ifdef CDisplay__SetActorSpriteTint_x +FUNCTION_AT_ADDRESS(void CDisplay::SetActorSpriteTint(struct _EQRGB *,struct T3D_tagACTORINSTANCE *),CDisplay__SetActorSpriteTint); +#endif +#ifdef CDisplay__FreeAllItemLists_x +FUNCTION_AT_ADDRESS(void CDisplay::FreeAllItemLists(void),CDisplay__FreeAllItemLists); +#endif +#ifdef CActionsWnd__MainPageActivate_x +FUNCTION_AT_ADDRESS(int CActionsWnd::MainPageActivate(void),CActionsWnd__MainPageActivate); +#endif +#ifdef CActionsWnd__MainPageDeactivate_x +FUNCTION_AT_ADDRESS(int CActionsWnd::MainPageDeactivate(void),CActionsWnd__MainPageDeactivate); +#endif +#ifdef CActionsWnd__SocialsPageDeactivate_x +FUNCTION_AT_ADDRESS(int CActionsWnd::SocialsPageDeactivate(void),CActionsWnd__SocialsPageDeactivate); +#endif +#ifdef CGroupSearchWnd__GroupListPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::GroupListPageOnProcessFrame(void),CGroupSearchWnd__GroupListPageOnProcessFrame); +#endif +#ifdef CGroupSearchWnd__PlayerListPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int CGroupSearchWnd::PlayerListPageOnProcessFrame(void),CGroupSearchWnd__PlayerListPageOnProcessFrame); +#endif +#ifdef COptionsWnd__KeyboardPageOnProcessFrame_x +FUNCTION_AT_ADDRESS(int COptionsWnd::KeyboardPageOnProcessFrame(void),COptionsWnd__KeyboardPageOnProcessFrame); +#endif +#ifdef CDisplay__GetFloorHeight_x +FUNCTION_AT_ADDRESS(float CDisplay::GetFloorHeight(float,float,float),CDisplay__GetFloorHeight); +#endif +#ifdef CDisplay__GenericSphereColl_x +FUNCTION_AT_ADDRESS(bool CDisplay::GenericSphereColl(float,float,float,float,float,float,float *,float *,float *,unsigned char),CDisplay__GenericSphereColl); +#endif +#ifdef CDisplay__FindZoneTopZ_x +FUNCTION_AT_ADDRESS(float CDisplay::FindZoneTopZ(float,float,float),CDisplay__FindZoneTopZ); +#endif +#ifdef CDisplay__GetEnvironment_x +FUNCTION_AT_ADDRESS(unsigned char CDisplay::GetEnvironment(float,float,float,int *),CDisplay__GetEnvironment); +#endif +#ifdef CDisplay__MoveLocalPlayerToSafeCoords_x +FUNCTION_AT_ADDRESS(void CDisplay::MoveLocalPlayerToSafeCoords(void),CDisplay__MoveLocalPlayerToSafeCoords); +#endif +#ifdef CDisplay__SetupEQPlayers_x +FUNCTION_AT_ADDRESS(void CDisplay::SetupEQPlayers(void),CDisplay__SetupEQPlayers); +#endif +#ifdef CDisplay__MoveLight_x +FUNCTION_AT_ADDRESS(void CDisplay::MoveLight(struct T3D_POINTLIGHT *,struct _physicsinfo *),CDisplay__MoveLight); +#endif +#ifdef ZoneNPCLoadTextManager__ZoneNPCLoadTextManager_x +FUNCTION_AT_ADDRESS( ZoneNPCLoadTextManager::ZoneNPCLoadTextManager(char *),ZoneNPCLoadTextManager__ZoneNPCLoadTextManager); +#endif +#ifdef ZoneNPCLoadTextManager__dZoneNPCLoadTextManager_x +FUNCTION_AT_ADDRESS( ZoneNPCLoadTextManager::~ZoneNPCLoadTextManager(void),ZoneNPCLoadTextManager__dZoneNPCLoadTextManager); +#endif +#ifdef ZoneNPCLoadTextManager__LoadText_x +FUNCTION_AT_ADDRESS(void ZoneNPCLoadTextManager::LoadText(char *),ZoneNPCLoadTextManager__LoadText); +#endif +#ifdef ZoneNPCLoadTextManager__GetNPCCode_x +FUNCTION_AT_ADDRESS(char * ZoneNPCLoadTextManager::GetNPCCode(int),ZoneNPCLoadTextManager__GetNPCCode); +#endif +#ifdef ZoneNPCLoadTextManager__GetS3DName_x +FUNCTION_AT_ADDRESS(char * ZoneNPCLoadTextManager::GetS3DName(int),ZoneNPCLoadTextManager__GetS3DName); +#endif +#ifdef public_key__encrypt_x +FUNCTION_AT_ADDRESS(class vlong public_key::encrypt(class vlong &),public_key__encrypt); +#endif +#ifdef engineInterface__engineInterface_x +FUNCTION_AT_ADDRESS( engineInterface::engineInterface(void),engineInterface__engineInterface); +#endif +#ifdef engineInterface__get_x +FUNCTION_AT_ADDRESS(class engineInterface * __cdecl engineInterface::get(void),engineInterface__get); +#endif +#ifdef engineInterface__ChangeDag_x +FUNCTION_AT_ADDRESS(unsigned long * engineInterface::ChangeDag(struct T3D_tagWORLD *,struct T3D_DAG *,char *),engineInterface__ChangeDag); +#endif +#ifdef EQ_AltAbility__EQ_AltAbility_x +FUNCTION_AT_ADDRESS( EQ_AltAbility::EQ_AltAbility(int),EQ_AltAbility__EQ_AltAbility); +#endif +#ifdef AltAdvManager__AltAdvManager_x +FUNCTION_AT_ADDRESS( AltAdvManager::AltAdvManager(void),AltAdvManager__AltAdvManager); +#endif +#ifdef AltAdvManager__GetAltAbility_x +FUNCTION_AT_ADDRESS( struct _ALTABILITY *AltAdvManager::GetAltAbility(int), AltAdvManager__GetAltAbility); +#endif +#ifdef AltAdvManager__IsAbilityReady_x +FUNCTION_AT_ADDRESS(bool AltAdvManager::IsAbilityReady(class EQ_PC *,EQData::PALTABILITY,int *,int),AltAdvManager__IsAbilityReady); +#endif +#ifdef AltAdvManager__CalculateHideTimeReduce_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateHideTimeReduce(class EQ_PC *),AltAdvManager__CalculateHideTimeReduce); +#endif +#ifdef AltAdvManager__GetCalculatedTimer_x +FUNCTION_AT_ADDRESS(unsigned long AltAdvManager::GetCalculatedTimer(class EQ_PC *,EQData::PALTABILITY),AltAdvManager__GetCalculatedTimer); +#endif +#ifdef AltAdvManager__GetNextAbilityCost_x +FUNCTION_AT_ADDRESS(int AltAdvManager::GetNextAbilityCost(int,int),AltAdvManager__GetNextAbilityCost); +#endif +#ifdef AltAdvManager__TotalPointsInSkill_x +FUNCTION_AT_ADDRESS(int AltAdvManager::TotalPointsInSkill(int,int),AltAdvManager__TotalPointsInSkill); +#endif +#ifdef AltAdvManager__CalculateStalwartEnduranceChance_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateStalwartEnduranceChance(class EQ_PC *),AltAdvManager__CalculateStalwartEnduranceChance); +#endif +#ifdef AltAdvManager__CalculateLoHHarmTouchReuseTimer_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateLoHHarmTouchReuseTimer(class EQ_PC *,int),AltAdvManager__CalculateLoHHarmTouchReuseTimer); +#endif +#ifdef AltAdvManager__CalculateSingingMasteryMod_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateSingingMasteryMod(class EQ_PC *,int),AltAdvManager__CalculateSingingMasteryMod); +#endif +#ifdef AltAdvManager__CalculateInstrumentMasteryMod_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateInstrumentMasteryMod(class EQ_PC *),AltAdvManager__CalculateInstrumentMasteryMod); +#endif +#ifdef AltAdvManager__CalculateFleetOfFoot_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateFleetOfFoot(class EQ_PC *),AltAdvManager__CalculateFleetOfFoot); +#endif +#ifdef AltAdvManager__CalculateNimbleEvasionChance_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateNimbleEvasionChance(class EQ_PC *),AltAdvManager__CalculateNimbleEvasionChance); +#endif +#ifdef AltAdvManager__CalculateDoubleAttackChance_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateDoubleAttackChance(class EQ_PC *,int,unsigned char),AltAdvManager__CalculateDoubleAttackChance); +#endif +#ifdef AltAdvManager__CalculateMitigationBoost_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateMitigationBoost(class EQ_PC *,int),AltAdvManager__CalculateMitigationBoost); +#endif +#ifdef AltAdvManager__CalculateSpellCastingMastery_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateSpellCastingMastery(class EQ_PC *),AltAdvManager__CalculateSpellCastingMastery); +#endif +#ifdef AltAdvManager__CalculateMaxHPAA_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateMaxHPAA(class EQ_PC *,int),AltAdvManager__CalculateMaxHPAA); +#endif +#ifdef AltAdvManager__CalculateMaxStatAA_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CalculateMaxStatAA(class EQ_PC *,int),AltAdvManager__CalculateMaxStatAA); +#endif +#ifdef AltAdvManager__GetAbilityTitle_x +FUNCTION_AT_ADDRESS(int AltAdvManager::GetAbilityTitle(class EQPlayer *),AltAdvManager__GetAbilityTitle); +#endif +#ifdef AltAdvManager__AltSkillReqs_x +FUNCTION_AT_ADDRESS(int AltAdvManager::AltSkillReqs(class EQ_PC *,int),AltAdvManager__AltSkillReqs); +#endif +#ifdef AltAdvManager__GetAALevelNeeded_x +FUNCTION_AT_ADDRESS(int AltAdvManager::GetAALevelNeeded(class EQ_PC *,int),AltAdvManager__GetAALevelNeeded); +#endif +#ifdef AltAdvManager__MeetsPoPLevelReqs_x +FUNCTION_AT_ADDRESS(int AltAdvManager::MeetsPoPLevelReqs(class EQ_PC *,int,int),AltAdvManager__MeetsPoPLevelReqs); +#endif +#ifdef AltAdvManager__CanTrainAbility_x +FUNCTION_AT_ADDRESS(int AltAdvManager::CanTrainAbility(class EQ_PC *,int),AltAdvManager__CanTrainAbility); +#endif +#ifdef AltAdvManager__AbilitiesByClass_x +FUNCTION_AT_ADDRESS(int AltAdvManager::AbilitiesByClass(int,int),AltAdvManager__AbilitiesByClass); +#endif +#ifdef AltAdvManager__GetAbilityReqs_x +FUNCTION_AT_ADDRESS(void AltAdvManager::GetAbilityReqs(char *,int),AltAdvManager__GetAbilityReqs); +#endif +#ifdef EQ_CharacterData__EQ_CharacterDataResetAllMembers_x +FUNCTION_AT_ADDRESS(void EQ_CharacterData::EQ_CharacterDataResetAllMembers(void),EQ_CharacterData__EQ_CharacterDataResetAllMembers); +#endif +#ifdef EQ_Affect__Reset_x +FUNCTION_AT_ADDRESS(void EQ_Affect::Reset(void),EQ_Affect__Reset); +#endif +#ifdef EQ_Character__EQ_Character_x +FUNCTION_AT_ADDRESS( EQ_Character::EQ_Character(void),EQ_Character__EQ_Character); +#endif +#ifdef EQ_Character__dEQ_Character_x +FUNCTION_AT_ADDRESS( EQ_Character::~EQ_Character(void),EQ_Character__dEQ_Character); +#endif +#ifdef EQ_Character__EQ_CharacterResetAllMembers_x +FUNCTION_AT_ADDRESS(void EQ_Character::EQ_CharacterResetAllMembers(void),EQ_Character__EQ_CharacterResetAllMembers); +#endif +#ifdef EQ_Character__ModifyCurHP_x +FUNCTION_AT_ADDRESS(void EQ_Character::ModifyCurHP(int,class EQPlayer *),EQ_Character__ModifyCurHP); +#endif +#ifdef EQ_Character__normal_to_special_x +FUNCTION_AT_ADDRESS(int __cdecl EQ_Character::normal_to_special(int),EQ_Character__normal_to_special); +#endif +#ifdef EQ_Character__IsSpellcaster_x +FUNCTION_AT_ADDRESS(int EQ_Character::IsSpellcaster(void),EQ_Character__IsSpellcaster); +#endif +#ifdef EQ_Character__DoLight_x +FUNCTION_AT_ADDRESS(void EQ_Character::DoLight(unsigned char),EQ_Character__DoLight); +#endif +#ifdef EQ_Character__Skill_x +FUNCTION_AT_ADDRESS(int EQ_Character::Skill(int),EQ_Character__Skill); +#endif +#ifdef EQ_Character__HasSpell_x +FUNCTION_AT_ADDRESS(int EQ_Character::HasSpell(int),EQ_Character__HasSpell); +#endif +#ifdef EQ_Character__ResetCur_HP_x +FUNCTION_AT_ADDRESS(void EQ_Character::ResetCur_HP(int),EQ_Character__ResetCur_HP); +#endif +#ifdef EQ_Character__Cur_HP_x +FUNCTION_AT_ADDRESS(int EQ_Character1::Cur_HP(int,unsigned char),EQ_Character__Cur_HP); +#endif +#ifdef EQ_Character__GetHPFromStamina_x +FUNCTION_AT_ADDRESS(int EQ_Character::GetHPFromStamina(int),EQ_Character__GetHPFromStamina); +#endif +#ifdef EQ_Character__Cur_Mana_x +FUNCTION_AT_ADDRESS(int EQ_Character::Cur_Mana(void),EQ_Character__Cur_Mana); +#endif +#ifdef EQ_Character__IsMage_x +FUNCTION_AT_ADDRESS(int EQ_Character::IsMage(void),EQ_Character__IsMage); +#endif +#ifdef EQ_Character__GetClassACBonus_x +FUNCTION_AT_ADDRESS(int EQ_Character::GetClassACBonus(int),EQ_Character__GetClassACBonus); +#endif +#ifdef EQ_Character__ac_x +FUNCTION_AT_ADDRESS(int EQ_Character::ac(bool),EQ_Character__ac); +#endif +#ifdef EQ_Character__compute_tohit_x +FUNCTION_AT_ADDRESS(int EQ_Character::compute_tohit(unsigned char),EQ_Character__compute_tohit); +#endif +#ifdef EQ_Character__defense_agility_bonus_x +FUNCTION_AT_ADDRESS(int EQ_Character::defense_agility_bonus(void),EQ_Character__defense_agility_bonus); +#endif +#ifdef EQ_Character__compute_defense_x +FUNCTION_AT_ADDRESS(int EQ_Character::compute_defense(void),EQ_Character__compute_defense); +#endif +#ifdef EQ_Character__offense_x +FUNCTION_AT_ADDRESS(int EQ_Character::offense(unsigned char),EQ_Character__offense); +#endif +#ifdef EQ_Character__HasSkill_x +FUNCTION_AT_ADDRESS(int EQ_Character::HasSkill(unsigned char),EQ_Character__HasSkill); +#endif +#ifdef EQ_Character__HasInnateSkill_x +FUNCTION_AT_ADDRESS(int EQ_Character::HasInnateSkill(unsigned char,int),EQ_Character__HasInnateSkill); +#endif +#ifdef EQ_Character__InitMyLanguages_x +FUNCTION_AT_ADDRESS(void EQ_Character::InitMyLanguages(void),EQ_Character__InitMyLanguages); +#endif +#ifdef EQ_Character__BaneDamage_x +FUNCTION_AT_ADDRESS(int EQ_Character::BaneDamage(class EQ_Equipment *),EQ_Character__BaneDamage); +#endif +#ifdef EQ_Character__ElementResistDmg_x +FUNCTION_AT_ADDRESS(int EQ_Character::ElementResistDmg(class EQ_Equipment *,int),EQ_Character__ElementResistDmg); +#endif +#ifdef EQ_Character__save_bash_x +FUNCTION_AT_ADDRESS(int EQ_Character::save_bash(int),EQ_Character__save_bash); +#endif +#ifdef EQ_Character__CapStat_x +FUNCTION_AT_ADDRESS(int EQ_Character::CapStat(int,int),EQ_Character__CapStat); +#endif +#ifdef EQ_Character__CalcFoodDrinkBonus_x +FUNCTION_AT_ADDRESS(void EQ_Character::CalcFoodDrinkBonus(int),EQ_Character__CalcFoodDrinkBonus); +#endif +#ifdef EQ_Character__basesave_magic_x +FUNCTION_AT_ADDRESS(int EQ_Character::basesave_magic(void),EQ_Character__basesave_magic); +#endif +#ifdef EQ_Character__save_magic_x +FUNCTION_AT_ADDRESS(int EQ_Character::save_magic(void),EQ_Character__save_magic); +#endif +#ifdef EQ_Character__basesave_fire_x +FUNCTION_AT_ADDRESS(int EQ_Character::basesave_fire(void),EQ_Character__basesave_fire); +#endif +#ifdef EQ_Character__save_fire_x +FUNCTION_AT_ADDRESS(int EQ_Character::save_fire(void),EQ_Character__save_fire); +#endif +#ifdef EQ_Character__basesave_cold_x +FUNCTION_AT_ADDRESS(int EQ_Character::basesave_cold(void),EQ_Character__basesave_cold); +#endif +#ifdef EQ_Character__save_cold_x +FUNCTION_AT_ADDRESS(int EQ_Character::save_cold(void),EQ_Character__save_cold); +#endif +#ifdef EQ_Character__basesave_disease_x +FUNCTION_AT_ADDRESS(int EQ_Character::basesave_disease(void),EQ_Character__basesave_disease); +#endif +#ifdef EQ_Character__save_disease_x +FUNCTION_AT_ADDRESS(int EQ_Character::save_disease(void),EQ_Character__save_disease); +#endif +#ifdef EQ_Character__basesave_poison_x +FUNCTION_AT_ADDRESS(int EQ_Character::basesave_poison(void),EQ_Character__basesave_poison); +#endif +#ifdef EQ_Character__save_poison_x +FUNCTION_AT_ADDRESS(int EQ_Character::save_poison(void),EQ_Character__save_poison); +#endif +#ifdef EQ_Character__Str_x +FUNCTION_AT_ADDRESS(int EQ_Character::Str(void),EQ_Character__Str); +#endif +#ifdef EQ_Character__Sta_x +FUNCTION_AT_ADDRESS(int EQ_Character::Sta(void),EQ_Character__Sta); +#endif +#ifdef EQ_Character__Cha_x +FUNCTION_AT_ADDRESS(int EQ_Character::Cha(void),EQ_Character__Cha); +#endif +#ifdef EQ_Character__Dex_x +FUNCTION_AT_ADDRESS(int EQ_Character::Dex(void),EQ_Character__Dex); +#endif +#ifdef EQ_Character__Int_x +FUNCTION_AT_ADDRESS(int EQ_Character::Int(void),EQ_Character__Int); +#endif +#ifdef EQ_Character__Agi_x +FUNCTION_AT_ADDRESS(int EQ_Character::Agi(void),EQ_Character__Agi); +#endif +#ifdef EQ_Character__Wis_x +FUNCTION_AT_ADDRESS(int EQ_Character::Wis(void),EQ_Character__Wis); +#endif +#ifdef EQ_Character__ApplyFatigue_x +FUNCTION_AT_ADDRESS(int EQ_Character::ApplyFatigue(int),EQ_Character__ApplyFatigue); +#endif +#ifdef EQ_Character__max_encumbrance_x +FUNCTION_AT_ADDRESS(int EQ_Character::max_encumbrance(void),EQ_Character__max_encumbrance); +#endif +#ifdef EQ_Character__CanUseItem_x +FUNCTION_AT_ADDRESS(int EQ_Character::CanUseItem(class EQ_Item *),EQ_Character__CanUseItem); +#endif +#ifdef EQ_Character__encum_factor_x +FUNCTION_AT_ADDRESS(float EQ_Character::encum_factor(void),EQ_Character__encum_factor); +#endif +#ifdef EQ_Character__cur_encumbrance_x +FUNCTION_AT_ADDRESS(int EQ_Character::cur_encumbrance(void),EQ_Character__cur_encumbrance); +#endif +#ifdef EQ_Character__Race_x +FUNCTION_AT_ADDRESS(char * EQ_Character::Race(int),EQ_Character__Race); +#endif +#ifdef EQ_Character__Class_x +FUNCTION_AT_ADDRESS(char * EQ_Character::Class(int),EQ_Character__Class); +#endif +#ifdef EQ_Character__KunarkClass_x +FUNCTION_AT_ADDRESS(char * EQ_Character::KunarkClass(int,int,int,bool),EQ_Character__KunarkClass); +#endif +#ifdef EQ_Character__ClassMin_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::ClassMin(int,int,unsigned char),EQ_Character__ClassMin); +#endif +#ifdef EQ_Character__CheckClass_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::CheckClass(int,int),EQ_Character__CheckClass); +#endif +#ifdef EQ_Character__CanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::CanWorship(int,int,unsigned char),EQ_Character__CanWorship); +#endif +#ifdef EQ_Character__HumanCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::HumanCanWorship(unsigned char,unsigned char),EQ_Character__HumanCanWorship); +#endif +#ifdef EQ_Character__BarbarianCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::BarbarianCanWorship(unsigned char,unsigned char),EQ_Character__BarbarianCanWorship); +#endif +#ifdef EQ_Character__EruditeCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::EruditeCanWorship(unsigned char,unsigned char),EQ_Character__EruditeCanWorship); +#endif +#ifdef EQ_Character__ElfCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::ElfCanWorship(unsigned char,unsigned char),EQ_Character__ElfCanWorship); +#endif +#ifdef EQ_Character__HighElfCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::HighElfCanWorship(unsigned char,unsigned char),EQ_Character__HighElfCanWorship); +#endif +#ifdef EQ_Character__DarkElfCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::DarkElfCanWorship(unsigned char,unsigned char),EQ_Character__DarkElfCanWorship); +#endif +#ifdef EQ_Character__HalfElfCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::HalfElfCanWorship(unsigned char,unsigned char),EQ_Character__HalfElfCanWorship); +#endif +#ifdef EQ_Character__DwarfCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::DwarfCanWorship(unsigned char,unsigned char),EQ_Character__DwarfCanWorship); +#endif +#ifdef EQ_Character__TrollCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::TrollCanWorship(unsigned char,unsigned char),EQ_Character__TrollCanWorship); +#endif +#ifdef EQ_Character__OgreCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::OgreCanWorship(unsigned char,unsigned char),EQ_Character__OgreCanWorship); +#endif +#ifdef EQ_Character__HalflingCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::HalflingCanWorship(unsigned char,unsigned char),EQ_Character__HalflingCanWorship); +#endif +#ifdef EQ_Character__GnomeCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::GnomeCanWorship(unsigned char,unsigned char),EQ_Character__GnomeCanWorship); +#endif +#ifdef EQ_Character__IksarCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::IksarCanWorship(unsigned char,unsigned char),EQ_Character__IksarCanWorship); +#endif +#ifdef EQ_Character__VahShirCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::VahShirCanWorship(unsigned char,unsigned char),EQ_Character__VahShirCanWorship); +#endif +#ifdef EQ_Character__FroglockCanWorship_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::FroglockCanWorship(unsigned char,unsigned char),EQ_Character__FroglockCanWorship); +#endif +#ifdef EQ_Character__CityCanStart_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::CityCanStart(int,int,int,int),EQ_Character__CityCanStart); +#endif +#ifdef EQ_Character__BaseAttr_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::BaseAttr(int,unsigned char),EQ_Character__BaseAttr); +#endif +#ifdef EQ_Character__InitSkills_x +FUNCTION_AT_ADDRESS(void EQ_Character::InitSkills(unsigned char,unsigned int),EQ_Character__InitSkills); +#endif +#ifdef EQ_Character__InitInnates_x +FUNCTION_AT_ADDRESS(void EQ_Character::InitInnates(unsigned int,unsigned int),EQ_Character__InitInnates); +#endif +#ifdef EQ_Character__IsSpecialBazaarSpot_x +FUNCTION_AT_ADDRESS(int EQ_Character::IsSpecialBazaarSpot(class EQPlayer *),EQ_Character__IsSpecialBazaarSpot); +#endif +#ifdef EQ_Character__CanSecondaryAttack_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::CanSecondaryAttack(class EQPlayer *),EQ_Character__CanSecondaryAttack); +#endif +#ifdef EQ_Character__CanDoubleAttack_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::CanDoubleAttack(class EQPlayer *,unsigned char),EQ_Character__CanDoubleAttack); +#endif +#ifdef EQ_Character__AntiTwinkAdj_x +FUNCTION_AT_ADDRESS(int EQ_Character::AntiTwinkAdj(class EQ_Equipment *,int,int),EQ_Character__AntiTwinkAdj); +#endif +#ifdef EQ_Character__GetSkillBaseDamage_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::GetSkillBaseDamage(unsigned char,class EQPlayer *),EQ_Character__GetSkillBaseDamage); +#endif +#ifdef EQ_Character__UseSkill_x +FUNCTION_AT_ADDRESS(void EQ_Character1::UseSkill(unsigned char,class EQPlayer *),EQ_Character__UseSkill); +#endif +#ifdef EQ_Character__DoIntimidationEvent_x +FUNCTION_AT_ADDRESS(void EQ_Character::DoIntimidationEvent(void),EQ_Character__DoIntimidationEvent); +#endif +#ifdef EQ_Character__DoFishingEvent_x +FUNCTION_AT_ADDRESS(void EQ_Character::DoFishingEvent(void),EQ_Character__DoFishingEvent); +#endif +#ifdef EQ_Character__FindClosest_x +FUNCTION_AT_ADDRESS(class EQPlayer * EQ_Character::FindClosest(int,int,int,int,int),EQ_Character__FindClosest); +#endif +#ifdef EQ_Character__IAmDead_x +FUNCTION_AT_ADDRESS(void EQ_Character::IAmDead(struct _EQMissileHitinfo *,int),EQ_Character__IAmDead); +#endif +#ifdef EQ_Character__TotalOnPerson_x +FUNCTION_AT_ADDRESS(long EQ_Character::TotalOnPerson(void),EQ_Character__TotalOnPerson); +#endif +#ifdef EQ_Character__ItemSold_x +FUNCTION_AT_ADDRESS(void EQ_Character::ItemSold(long),EQ_Character__ItemSold); +#endif +#ifdef EQ_Character__TakeFallDamage_x +FUNCTION_AT_ADDRESS(int EQ_Character::TakeFallDamage(float),EQ_Character__TakeFallDamage); +#endif +#ifdef EQ_Character__IHaveSkill_x +FUNCTION_AT_ADDRESS(int EQ_Character::IHaveSkill(unsigned char),EQ_Character__IHaveSkill); +#endif +#ifdef EQ_Character__NoMezMe_x +FUNCTION_AT_ADDRESS(int EQ_Character::NoMezMe(int,class EQPlayer *,class EQ_Spell *),EQ_Character__NoMezMe); +#endif +#ifdef EQ_Character__NoBashMe_x +FUNCTION_AT_ADDRESS(int EQ_Character::NoBashMe(int),EQ_Character__NoBashMe); +#endif +#ifdef EQ_Character__StunMe_x +FUNCTION_AT_ADDRESS(void EQ_Character1::StunMe(unsigned int,unsigned int,unsigned int),EQ_Character__StunMe); +#endif +#ifdef EQ_Character__UnStunMe_x +FUNCTION_AT_ADDRESS(void EQ_Character1::UnStunMe(void),EQ_Character__UnStunMe); +#endif +#ifdef EQ_Character__ApplyDamage_x +FUNCTION_AT_ADDRESS(int EQ_Character::ApplyDamage(int,struct _EQMissileHitinfo *,bool,class HateListEntry *,bool),EQ_Character__ApplyDamage); +#endif +#ifdef EQ_Character__NotifyPCAffectChange_x +FUNCTION_AT_ADDRESS(void EQ_Character::NotifyPCAffectChange(int,int),EQ_Character__NotifyPCAffectChange); +#endif +#ifdef EQ_Character__MakeMeVisible_x +FUNCTION_AT_ADDRESS(void EQ_Character::MakeMeVisible(int),EQ_Character__MakeMeVisible); +#endif +#ifdef EQ_Character__UpdateMyVisibleStatus_x +FUNCTION_AT_ADDRESS(void EQ_Character::UpdateMyVisibleStatus(void),EQ_Character__UpdateMyVisibleStatus); +#endif +#ifdef EQ_Character__CanISeeInvis_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::CanISeeInvis(void),EQ_Character__CanISeeInvis); +#endif +#ifdef EQ_Character__CanIBreathe_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::CanIBreathe(void),EQ_Character__CanIBreathe); +#endif +#ifdef EQ_Character__ProcessEnvironment_x +FUNCTION_AT_ADDRESS(void EQ_Character::ProcessEnvironment(void),EQ_Character__ProcessEnvironment); +#endif +#ifdef EQ_Character__ProcessHungerandThirst_x +FUNCTION_AT_ADDRESS(void EQ_Character::ProcessHungerandThirst(unsigned int),EQ_Character__ProcessHungerandThirst); +#endif +#ifdef EQ_Character__ItemSpellAffects_x +FUNCTION_AT_ADDRESS(int EQ_Character::ItemSpellAffects(int),EQ_Character__ItemSpellAffects); +#endif +#ifdef EQ_Character__ProcessAllStats_x +FUNCTION_AT_ADDRESS(void EQ_Character::ProcessAllStats(void),EQ_Character__ProcessAllStats); +#endif +#ifdef EQ_Character__DoPassageOfTime_x +FUNCTION_AT_ADDRESS(void EQ_Character::DoPassageOfTime(void),EQ_Character__DoPassageOfTime); +#endif +#ifdef EQ_Character__FindItemByClass_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::FindItemByClass(int,int *,int *),EQ_Character__FindItemByClass); +#endif +#ifdef EQ_Character__FindItemByRecord_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::FindItemByRecord(int,int *,int *),EQ_Character__FindItemByRecord); +#endif +#ifdef EQ_Character__FindItemQty_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::FindItemQty(int,int),EQ_Character__FindItemQty); +#endif +#ifdef EQ_Character__CanMedOnHorse_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::CanMedOnHorse(void),EQ_Character__CanMedOnHorse); +#endif +#ifdef EQ_Character__ExpendItemCharge_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::ExpendItemCharge(int,int),EQ_Character__ExpendItemCharge); +#endif +#ifdef EQ_Character__AutoEat_x +FUNCTION_AT_ADDRESS(int EQ_Character::AutoEat(unsigned char),EQ_Character__AutoEat); +#endif +#ifdef EQ_Character__CheckFoodAndWater_x +FUNCTION_AT_ADDRESS(int EQ_Character::CheckFoodAndWater(void),EQ_Character__CheckFoodAndWater); +#endif +#ifdef EQ_Character__DoMeditation_x +FUNCTION_AT_ADDRESS(void EQ_Character::DoMeditation(void),EQ_Character__DoMeditation); +#endif +#ifdef EQ_Character__SetLocalVar_x +FUNCTION_AT_ADDRESS(int EQ_Character::SetLocalVar(char *,int),EQ_Character__SetLocalVar); +#endif +#ifdef EQ_Character__GetIndexSkillMinDamageMod_x +FUNCTION_AT_ADDRESS(int EQ_Character::GetIndexSkillMinDamageMod(int),EQ_Character__GetIndexSkillMinDamageMod); +#endif +#ifdef EQ_Character__GetFocusConserveRegChance_x +FUNCTION_AT_ADDRESS(int const EQ_Character::GetFocusConserveRegChance(class EQ_Spell const *,class EQ_Equipment * *),EQ_Character__GetFocusConserveRegChance); +#endif +#ifdef EQ_Character__GetFocusCastingTimeModifier_x +FUNCTION_AT_ADDRESS(int const EQ_Character1::GetFocusCastingTimeModifier(class EQ_Spell const *,class EQ_Equipment * *, int),EQ_Character__GetFocusCastingTimeModifier); +#endif +#ifdef EQ_Character__GetFocusRangeModifier_x +FUNCTION_AT_ADDRESS(int const EQ_Character1::GetFocusRangeModifier(class EQ_Spell const *,class EQ_Equipment * *),EQ_Character__GetFocusRangeModifier); +#endif +#ifdef EQ_Character__IsExpansionFlag_x +FUNCTION_AT_ADDRESS(int EQ_Character1::IsExpansionFlag(int),EQ_Character__IsExpansionFlag); +#endif +#ifdef EQ_Character__GetFocusItem_x +FUNCTION_AT_ADDRESS(class EQ_Equipment * EQ_Character::GetFocusItem(class EQ_Spell const *,int),EQ_Character__GetFocusItem); +#endif +#ifdef EQ_Character__GetFocusEffect_x +FUNCTION_AT_ADDRESS(class EQ_Spell * EQ_Character::GetFocusEffect(class EQ_Spell const *,int),EQ_Character__GetFocusEffect); +#endif +#ifdef EQ_Character__DoesSpellMatchFocusFilters_x +FUNCTION_AT_ADDRESS(bool EQ_Character::DoesSpellMatchFocusFilters(class EQ_Spell const *,class EQ_Spell const *),EQ_Character__DoesSpellMatchFocusFilters); +#endif +#ifdef EQ_Character__GetMyPetPlayer_x +FUNCTION_AT_ADDRESS(class EQPlayer * EQ_Character::GetMyPetPlayer(void),EQ_Character__GetMyPetPlayer); +#endif +#ifdef EQ_Character__GetMaxEffects_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::GetMaxEffects(void)const ,EQ_Character__GetMaxEffects); +#endif +#ifdef EQ_Character__GetEffect_x +FUNCTION_AT_ADDRESS(class EQ_Affect & EQ_Character::GetEffect(int),EQ_Character__GetEffect); +#endif +#ifdef EQ_Character__GetEffectId_x +FUNCTION_AT_ADDRESS(unsigned int EQ_Character::GetEffectId(int),EQ_Character__GetEffectId); +#endif +#ifdef EQ_Character__SetEffectId_x +FUNCTION_AT_ADDRESS(void EQ_Character1::SetEffectId(unsigned char,unsigned int),EQ_Character__SetEffectId); +#endif +#ifdef EQ_Character__CastSpell_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character1::CastSpell(unsigned char gemid,int spellid,class EQ_Item * *ppItem,int,int slot,int,int,int,int,bool,int),EQ_Character__CastSpell); +#endif +#ifdef EQ_Character__GetBardInstrumentMod_x +FUNCTION_AT_ADDRESS(int EQ_Character::GetBardInstrumentMod(int),EQ_Character__GetBardInstrumentMod); +#endif +#ifdef EQ_Character__CalculateBardSongMod_x +FUNCTION_AT_ADDRESS(int EQ_Character::CalculateBardSongMod(int),EQ_Character__CalculateBardSongMod); +#endif +#ifdef EQ_Character__CastingRequirementsMet_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::CastingRequirementsMet(int),EQ_Character__CastingRequirementsMet); +#endif +#ifdef EQ_Character__GetAACastingTimeModifier_x +FUNCTION_AT_ADDRESS(int const EQ_Character1::GetAACastingTimeModifier(class EQ_Spell const *),EQ_Character__GetAACastingTimeModifier); +#endif +#ifdef EQ_Character__BardCastBard_x +FUNCTION_AT_ADDRESS(int EQ_Character::BardCastBard(class EQ_Spell const *,int)const ,EQ_Character__BardCastBard); +#endif +#ifdef EQ_Character__IsValidAffect_x +FUNCTION_AT_ADDRESS(bool EQ_Character::IsValidAffect(int),EQ_Character__IsValidAffect); +#endif +#ifdef EQ_Character__LaunchSpell_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::LaunchSpell(unsigned char,int,class EQ_Item * *),EQ_Character__LaunchSpell); +#endif +#ifdef EQ_Character__HandleSpecialPCAffects_x +FUNCTION_AT_ADDRESS(void EQ_Character::HandleSpecialPCAffects(int),EQ_Character__HandleSpecialPCAffects); +#endif +#ifdef EQ_Character__CalcAffectChange_x +FUNCTION_AT_ADDRESS(int EQ_Character::CalcAffectChange(class EQ_Spell *,unsigned char,unsigned char,class EQ_Affect *),EQ_Character__CalcAffectChange); +#endif +#ifdef EQ_Character__GetPCSpellAffect_x +FUNCTION_AT_ADDRESS(class EQ_Affect * EQ_Character::GetPCSpellAffect(unsigned char,int *),EQ_Character__GetPCSpellAffect); +#endif +#ifdef EQ_Character__TotalSpellAffects_x +FUNCTION_AT_ADDRESS(int EQ_Character::TotalSpellAffects(unsigned char,bool,int *),EQ_Character__TotalSpellAffects); +#endif +#ifdef EQ_Character__IsSpellAffectingPC_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::IsSpellAffectingPC(int),EQ_Character__IsSpellAffectingPC); +#endif +#ifdef EQ_Character__SpellFizzled_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Character::SpellFizzled(unsigned char,class EQ_Spell *),EQ_Character__SpellFizzled); +#endif +#ifdef EQ_Character__ProcessAffects_x +FUNCTION_AT_ADDRESS(int EQ_Character::ProcessAffects(void),EQ_Character__ProcessAffects); +#endif +#ifdef EQ_Character__FindAffectSlot_x +FUNCTION_AT_ADDRESS(class EQ_Affect * EQ_Character::FindAffectSlot(int,class EQPlayer *,int *,int),EQ_Character__FindAffectSlot); +#endif +#ifdef EQ_Character__GetOpenEffectSlot_x +FUNCTION_AT_ADDRESS(int EQ_Character::GetOpenEffectSlot(bool,int),EQ_Character__GetOpenEffectSlot); +#endif +#ifdef EQ_Character__GetFirstEffectSlot_x +FUNCTION_AT_ADDRESS(int EQ_Character::GetFirstEffectSlot(bool),EQ_Character__GetFirstEffectSlot); +#endif +#ifdef EQ_Character__GetLastEffectSlot_x +FUNCTION_AT_ADDRESS(int EQ_Character::GetLastEffectSlot(bool),EQ_Character__GetLastEffectSlot); +#endif +#ifdef EQ_Character__IsStackBlocked_x +FUNCTION_AT_ADDRESS(bool EQ_Character::IsStackBlocked(class EQ_Spell const *),EQ_Character__IsStackBlocked); +#endif +#ifdef EQ_Character__IsSpellTooPowerfull_x +FUNCTION_AT_ADDRESS(bool EQ_Character::IsSpellTooPowerfull(class EQ_Spell *,class EQ_Character *),EQ_Character__IsSpellTooPowerfull); +#endif +#ifdef EQ_Character__HitBySpell_x +FUNCTION_AT_ADDRESS(void EQ_Character::HitBySpell(struct _EQMissileHitinfo *),EQ_Character__HitBySpell); +#endif +#ifdef EQ_Spell__IsStackableDot_x +FUNCTION_AT_ADDRESS(bool EQ_Spell::IsStackableDot(void)const ,EQ_Spell__IsStackableDot); +#endif +#ifdef EQ_Character__EQSPA_Feign_Death_x +FUNCTION_AT_ADDRESS(void EQ_Character::EQSPA_Feign_Death(int),EQ_Character__EQSPA_Feign_Death); +#endif +#ifdef EQ_Character__SpellDuration_x +FUNCTION_AT_ADDRESS(int EQ_Character::SpellDuration(class EQ_Spell const *,unsigned char,unsigned char),EQ_Character__SpellDuration); +#endif +#ifdef EQ_Character__eqspa_change_form_x +FUNCTION_AT_ADDRESS(int EQ_Character::eqspa_change_form(class EQ_Spell *,int,int,class EQ_Affect *),EQ_Character__eqspa_change_form); +#endif +#ifdef EQ_Character__eqspa_movement_rate_x +FUNCTION_AT_ADDRESS(void EQ_Character::eqspa_movement_rate(int),EQ_Character__eqspa_movement_rate); +#endif +#ifdef EQ_Character__eqspa_levitation_x +FUNCTION_AT_ADDRESS(void EQ_Character::eqspa_levitation(void),EQ_Character__eqspa_levitation); +#endif +#ifdef EQ_Character__eqspa_hp_x +FUNCTION_AT_ADDRESS(int EQ_Character::eqspa_hp(unsigned int,class EQ_Affect *,int,class EQ_Spell *),EQ_Character__eqspa_hp); +#endif +#ifdef EQ_Character__eqspa_locate_corpse_x +FUNCTION_AT_ADDRESS(void EQ_Character::eqspa_locate_corpse(void),EQ_Character__eqspa_locate_corpse); +#endif +#ifdef EQ_Character__InSpecialBindSpot_x +FUNCTION_AT_ADDRESS(int EQ_Character::InSpecialBindSpot(class EQPlayer *),EQ_Character__InSpecialBindSpot); +#endif +#ifdef EQ_Character__RemovePCAffect_x +FUNCTION_AT_ADDRESS(void EQ_Character::RemovePCAffect(class EQ_Affect *),EQ_Character__RemovePCAffect); +#endif +#ifdef EQ_Character__RemovePCAffectex_x +FUNCTION_AT_ADDRESS(void EQ_Character::RemovePCAffectex(class EQ_Affect *,int),EQ_Character__RemovePCAffectex); +#endif +#ifdef EQ_Character__StopSpellCast_x +FUNCTION_AT_ADDRESS(void EQ_Character1::StopSpellCast(unsigned char),EQ_Character__StopSpellCast); +#endif +#ifdef EQ_Character__StopSpellCast1_x +FUNCTION_AT_ADDRESS(void EQ_Character1::StopSpellCast(unsigned char,int),EQ_Character__StopSpellCast1); +#endif +#ifdef EQ_Character__ReCachSpellEffects_x +FUNCTION_AT_ADDRESS(void EQ_Character::ReCachSpellEffects(void),EQ_Character__ReCachSpellEffects); +#endif +#ifdef EQ_Character__ReCachItemEffects_x +FUNCTION_AT_ADDRESS(void EQ_Character::ReCachItemEffects(void),EQ_Character__ReCachItemEffects); +#endif +#ifdef EQ_Character__GetCachEQSPA_x +FUNCTION_AT_ADDRESS(int EQ_Character::GetCachEQSPA(int),EQ_Character__GetCachEQSPA); +#endif +#ifdef EQ_Character__GetConLevel_x +FUNCTION_AT_ADDRESS(unsigned long EQ_Character::GetConLevel(class EQPlayer *),EQ_Character__GetConLevel); +#endif +#ifdef EQ_Character__TotalEffect_x +FUNCTION_AT_ADDRESS(int EQ_Character1::TotalEffect(int, bool, int, bool, bool), EQ_Character__TotalEffect); +#endif +#ifdef EQ_Container__EQ_Container_x +FUNCTION_AT_ADDRESS( EQ_Container::EQ_Container(void),EQ_Container__EQ_Container); +#endif +#ifdef EQ_Container__dEQ_Container_x +FUNCTION_AT_ADDRESS( EQ_Container::~EQ_Container(void),EQ_Container__dEQ_Container); +#endif +#ifdef EQ_Container__Open_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Container::Open(void),EQ_Container__Open); +#endif +#ifdef EQ_Container__Close_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Container::Close(void),EQ_Container__Close); +#endif +#ifdef EQ_Container__IsOpen_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Container::IsOpen(void),EQ_Container__IsOpen); +#endif +#ifdef EQ_Equipment__EQ_Equipment_x +FUNCTION_AT_ADDRESS( EQ_Equipment::EQ_Equipment(void),EQ_Equipment__EQ_Equipment); +#endif +#ifdef EQ_Equipment__IsWeapon_x +FUNCTION_AT_ADDRESS(int EQ_Equipment::IsWeapon(void),EQ_Equipment__IsWeapon); +#endif +#ifdef EQ_Equipment__IsInstrument_x +FUNCTION_AT_ADDRESS(int EQ_Equipment::IsInstrument(void),EQ_Equipment__IsInstrument); +#endif +#ifdef EQ_Equipment__SendTextRequestMsg_x +FUNCTION_AT_ADDRESS(void EQ_Equipment::SendTextRequestMsg(void),EQ_Equipment__SendTextRequestMsg); +#endif +#ifdef EQ_Item__Platinum_x +FUNCTION_AT_ADDRESS(int EQ_Item::Platinum(void),EQ_Item__Platinum); +#endif +#ifdef EQ_Item__Gold_x +FUNCTION_AT_ADDRESS(int EQ_Item::Gold(void),EQ_Item__Gold); +#endif +#ifdef EQ_Item__Silver_x +FUNCTION_AT_ADDRESS(int EQ_Item::Silver(void),EQ_Item__Silver); +#endif +#ifdef EQ_Item__Copper_x +FUNCTION_AT_ADDRESS(int EQ_Item::Copper(void),EQ_Item__Copper); +#endif +#ifdef EQ_Item__ValueSellMerchant_x +FUNCTION_AT_ADDRESS(long EQ_Item::ValueSellMerchant(float,long),EQ_Item__ValueSellMerchant); +#endif +#ifdef EQ_Item__ValueSSell_x +FUNCTION_AT_ADDRESS(char * EQ_Item::ValueSSell(float,long),EQ_Item__ValueSSell); +#endif +#ifdef EQ_Item__ValueSBuy_x +FUNCTION_AT_ADDRESS(char * EQ_Item::ValueSBuy(float,long),EQ_Item__ValueSBuy); +#endif +#ifdef EQ_Item__ValueSRent_x +FUNCTION_AT_ADDRESS(char * EQ_Item::ValueSRent(void),EQ_Item__ValueSRent); +#endif +#ifdef EQ_Item__IsSpecialNoDrop_x +FUNCTION_AT_ADDRESS(bool EQ_Item::IsSpecialNoDrop(void),EQ_Item__IsSpecialNoDrop); +#endif +#ifdef EQ_Item__IsStackable_x +FUNCTION_AT_ADDRESS(bool EQ_Item::IsStackable(void),EQ_Item__IsStackable); +#endif +#ifdef EQ_LoadingS__EQ_LoadingS_x +FUNCTION_AT_ADDRESS( EQ_LoadingS::EQ_LoadingS(void),EQ_LoadingS__EQ_LoadingS); +#endif +#ifdef EQ_LoadingS__dEQ_LoadingS_x +FUNCTION_AT_ADDRESS( EQ_LoadingS::~EQ_LoadingS(void),EQ_LoadingS__dEQ_LoadingS); +#endif +#ifdef EQ_LoadingS__DrawBackground_x +FUNCTION_AT_ADDRESS(void EQ_LoadingS::DrawBackground(struct T3D_XYZ *),EQ_LoadingS__DrawBackground); +#endif +#ifdef EQ_LoadingS__draw_x +FUNCTION_AT_ADDRESS(void EQ_LoadingS::draw(void),EQ_LoadingS__draw); +#endif +#ifdef EQ_LoadingS__WriteTextHD_x +FUNCTION_AT_ADDRESS(void EQ_LoadingS::WriteTextHD(char *,int,int,int),EQ_LoadingS__WriteTextHD); +#endif +#ifdef EQ_LoadingS__SetProgressBar_x +FUNCTION_AT_ADDRESS(void EQ_LoadingS::SetProgressBar(int,char const *),EQ_LoadingS__SetProgressBar); +#endif +#ifdef EQ_Note__EQ_Note_x +FUNCTION_AT_ADDRESS( EQ_Note::EQ_Note(void),EQ_Note__EQ_Note); +#endif +#ifdef EQ_Note__SendTextRequestMsg_x +FUNCTION_AT_ADDRESS(void EQ_Note::SendTextRequestMsg(void),EQ_Note__SendTextRequestMsg); +#endif +#ifdef EQ_PC__EQ_PC_x +FUNCTION_AT_ADDRESS( EQ_PC::EQ_PC(class EQ_PC *),EQ_PC__EQ_PC); +#endif +#ifdef EQ_PC__dEQ_PC_x +FUNCTION_AT_ADDRESS( EQ_PC::~EQ_PC(void),EQ_PC__dEQ_PC); +#endif +#ifdef EQ_PC__ClearSharedVault_x +FUNCTION_AT_ADDRESS(void EQ_PC::ClearSharedVault(void),EQ_PC__ClearSharedVault); +#endif +#ifdef EQ_PC__IsAGroupMember_x +FUNCTION_AT_ADDRESS(int EQ_PC::IsAGroupMember(char *),EQ_PC__IsAGroupMember); +#endif +#ifdef EQ_PC__CheckForGroupChanges_x +FUNCTION_AT_ADDRESS(void EQ_PC::CheckForGroupChanges(void),EQ_PC__CheckForGroupChanges); +#endif +#ifdef EQ_PC__UnpackMyNetPC_x +FUNCTION_AT_ADDRESS(void EQ_PC::UnpackMyNetPC(char *,int),EQ_PC__UnpackMyNetPC); +#endif +#ifdef EQ_PC__InitPlayerStart_x +FUNCTION_AT_ADDRESS(void EQ_PC::InitPlayerStart(unsigned int,unsigned char,int),EQ_PC__InitPlayerStart); +#endif +#ifdef EQ_PC__EmptyPossessionSlots_x +FUNCTION_AT_ADDRESS(void EQ_PC::EmptyPossessionSlots(void),EQ_PC__EmptyPossessionSlots); +#endif +#ifdef EQ_PC__RefreshMe_x +FUNCTION_AT_ADDRESS(void EQ_PC::RefreshMe(int),EQ_PC__RefreshMe); +#endif +#ifdef EQ_PC__PrepareForRepop_x +FUNCTION_AT_ADDRESS(void EQ_PC::PrepareForRepop(int),EQ_PC__PrepareForRepop); +#endif +#ifdef EQ_PC__RefitNewbieEQ_x +FUNCTION_AT_ADDRESS(void EQ_PC::RefitNewbieEQ(void),EQ_PC__RefitNewbieEQ); +#endif +#ifdef EQ_PC__RemoveMyAffect_x +FUNCTION_AT_ADDRESS(unsigned char EQ_PC::RemoveMyAffect(int),EQ_PC__RemoveMyAffect); +#endif +#ifdef EQ_PC__ProcessFatigue_x +FUNCTION_AT_ADDRESS(void EQ_PC::ProcessFatigue(void),EQ_PC__ProcessFatigue); +#endif +#ifdef EQ_PC__DelLoreItemDup_x +FUNCTION_AT_ADDRESS(int EQ_PC::DelLoreItemDup(int,int,int,class EQ_Item *),EQ_PC__DelLoreItemDup); +#endif +#ifdef EQ_PC__CheckDupLoreItems_x +FUNCTION_AT_ADDRESS(int EQ_PC::CheckDupLoreItems(void),EQ_PC__CheckDupLoreItems); +#endif +#ifdef EQ_PC__CostToTrain_x +FUNCTION_AT_ADDRESS(int EQ_PC::CostToTrain(int,float,int),EQ_PC__CostToTrain); +#endif +#ifdef EQ_PC__checkLang_x +FUNCTION_AT_ADDRESS(int EQ_PC::checkLang(int),EQ_PC__checkLang); +#endif +#ifdef EQ_PC__BitchCanTrain_x +FUNCTION_AT_ADDRESS(int EQ_PC::BitchCanTrain(int,int,int),EQ_PC__BitchCanTrain); +#endif +#ifdef EQ_PC__HandleMoney_x +FUNCTION_AT_ADDRESS(int EQ_PC::HandleMoney(long),EQ_PC__HandleMoney); +#endif +#ifdef EQ_PC__DetermineQuestExpGained_x +FUNCTION_AT_ADDRESS(void EQ_PC::DetermineQuestExpGained(int),EQ_PC__DetermineQuestExpGained); +#endif +#ifdef EQ_PC__ProcessAirSupply_x +FUNCTION_AT_ADDRESS(void EQ_PC::ProcessAirSupply(void),EQ_PC__ProcessAirSupply); +#endif +#ifdef EQ_PC__MaxAirSupply_x +FUNCTION_AT_ADDRESS(int EQ_PC::MaxAirSupply(void),EQ_PC__MaxAirSupply); +#endif +#ifdef EQ_PC__SetFatigue_x +FUNCTION_AT_ADDRESS(void EQ_PC::SetFatigue(int),EQ_PC__SetFatigue); +#endif +#ifdef EQ_PC__numInParty_x +FUNCTION_AT_ADDRESS(int EQ_PC::numInParty(void),EQ_PC__numInParty); +#endif +#ifdef EQ_PC__AtSkillLimit_x +FUNCTION_AT_ADDRESS(unsigned char EQ_PC::AtSkillLimit(int),EQ_PC__AtSkillLimit); +#endif +#ifdef EQ_PC__GetItemTimerValue_x +FUNCTION_AT_ADDRESS(unsigned long EQ_PC::GetItemTimerValue(class EQ_Item *),EQ_PC__GetItemTimerValue); +#endif +#ifdef EQ_PC__GetAltAbilityIndex_x +FUNCTION_AT_ADDRESS(int EQ_PC::GetAltAbilityIndex(int),EQ_PC__GetAltAbilityIndex); +#endif +#ifdef EQ_PC__GetCombatAbility_x +FUNCTION_AT_ADDRESS(int EQ_PC::GetCombatAbility(int),EQ_PC__GetCombatAbility); +#endif +#ifdef EQ_PC__GetCombatAbilityTimer_x +FUNCTION_AT_ADDRESS(unsigned long EQ_PC::GetCombatAbilityTimer(int),EQ_PC__GetCombatAbilityTimer); +#endif +#ifdef EQ_PC__HasLoreItem_x +FUNCTION_AT_ADDRESS(unsigned long EQ_PC::HasLoreItem(class EQ_Item *),EQ_PC__HasLoreItem); +#endif +#ifdef CInvSlot__HandleLButtonDown_x +FUNCTION_AT_ADDRESS(void CInvSlot::HandleLButtonDown(class CXPoint),CInvSlot__HandleLButtonDown); +#endif +#ifdef CInvSlot__HandleLButtonUpAfterHeld_x +FUNCTION_AT_ADDRESS(void CInvSlot::HandleLButtonUpAfterHeld(class CXPoint),CInvSlot__HandleLButtonUpAfterHeld); +#endif +#ifdef CInvSlot__HandleRButtonDown_x +FUNCTION_AT_ADDRESS(void CInvSlot::HandleRButtonDown(class CXPoint),CInvSlot__HandleRButtonDown); +#endif +#ifdef EQ_PC__CheckForLanguageImprovement_x +FUNCTION_AT_ADDRESS(void EQ_PC::CheckForLanguageImprovement(unsigned char,unsigned char),EQ_PC__CheckForLanguageImprovement); +#endif +#ifdef EQ_PC__CheckSkillImprove_x +FUNCTION_AT_ADDRESS(void EQ_PC::CheckSkillImprove(int,float),EQ_PC__CheckSkillImprove); +#endif +#ifdef EQ_PC__GetBodyTint_x +FUNCTION_AT_ADDRESS(unsigned long EQ_PC::GetBodyTint(int),EQ_PC__GetBodyTint); +#endif +#ifdef EQ_PC__SetAltAbilityIndex_x +FUNCTION_AT_ADDRESS(void EQ_PC::SetAltAbilityIndex(int,int),EQ_PC__SetAltAbilityIndex); +#endif +#ifdef EQ_PC__GetArmorTint_x +FUNCTION_AT_ADDRESS(unsigned long EQ_PC::GetArmorTint(int),EQ_PC__GetArmorTint); +#endif +#ifdef EQ_PC__SetArmorTint_x +FUNCTION_AT_ADDRESS(void EQ_PC::SetArmorTint(int,unsigned long),EQ_PC__SetArmorTint); +#endif +#ifdef EQ_PC__GetArmorType_x +FUNCTION_AT_ADDRESS(int EQ_PC::GetArmorType(int),EQ_PC__GetArmorType); +#endif +#ifdef EQ_PC__SetArmorType_x +FUNCTION_AT_ADDRESS(void EQ_PC::SetArmorType(int,int),EQ_PC__SetArmorType); +#endif +#ifdef EQ_PC__InitializeNewPCVariables_x +FUNCTION_AT_ADDRESS(void EQ_PC::InitializeNewPCVariables(int),EQ_PC__InitializeNewPCVariables); +#endif +#ifdef EQ_PC__DestroyHeldItemOrMoney_x +FUNCTION_AT_ADDRESS(void EQ_PC::DestroyHeldItemOrMoney(void),EQ_PC__DestroyHeldItemOrMoney); +#endif +#ifdef EQ_Skill__EQ_Skill_x +FUNCTION_AT_ADDRESS( EQ_Skill::EQ_Skill(int),EQ_Skill__EQ_Skill); +#endif +#ifdef EqSoundManager__EqSoundManager_x +//FUNCTION_AT_ADDRESS( EqSoundManager::EqSoundManager(bool,bool,enum SpeakerType),EqSoundManager__EqSoundManager); +#endif +#ifdef EqSoundManager__dEqSoundManager_x +FUNCTION_AT_ADDRESS( EqSoundManager::~EqSoundManager(void),EqSoundManager__dEqSoundManager); +#endif +#ifdef EqSoundManager__LoadGlobalEmitters_x +FUNCTION_AT_ADDRESS(void EqSoundManager::LoadGlobalEmitters(void),EqSoundManager__LoadGlobalEmitters); +#endif +#ifdef EqSoundManager__GetMusicId_x +FUNCTION_AT_ADDRESS(int EqSoundManager::GetMusicId(void),EqSoundManager__GetMusicId); +#endif +#ifdef EqSoundManager__LoadGlobalWaves_x +FUNCTION_AT_ADDRESS(void EqSoundManager::LoadGlobalWaves(void),EqSoundManager__LoadGlobalWaves); +#endif +#ifdef EqSoundManager__LoadListOfWaveFiles_x +FUNCTION_AT_ADDRESS(void EqSoundManager::LoadListOfWaveFiles(char * *,int),EqSoundManager__LoadListOfWaveFiles); +#endif +#ifdef EqSoundManager__WaveLoad_x +FUNCTION_AT_ADDRESS(void EqSoundManager::WaveLoad(char *,int,bool),EqSoundManager__WaveLoad); +#endif +#ifdef EqSoundManager__WaveIsPlaying_x +FUNCTION_AT_ADDRESS(bool EqSoundManager::WaveIsPlaying(int),EqSoundManager__WaveIsPlaying); +#endif +#ifdef EqSoundManager__WavePlay_x +FUNCTION_AT_ADDRESS(void EqSoundManager::WavePlay(int,class SoundControl *),EqSoundManager__WavePlay); +#endif +#ifdef EqSoundManager__WaveStop_x +FUNCTION_AT_ADDRESS(void EqSoundManager::WaveStop(int),EqSoundManager__WaveStop); +#endif +#ifdef EqSoundManager__WaveGet_x +FUNCTION_AT_ADDRESS(class SoundAsset * EqSoundManager::WaveGet(int),EqSoundManager__WaveGet); +#endif +#ifdef EqSoundManager__LoadGlobalMusic_x +FUNCTION_AT_ADDRESS(void EqSoundManager::LoadGlobalMusic(void),EqSoundManager__LoadGlobalMusic); +#endif +#ifdef EqSoundManager__SetMusicSelection_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetMusicSelection(int,bool),EqSoundManager__SetMusicSelection); +#endif +#ifdef EqSoundManager__GiveTime_x +FUNCTION_AT_ADDRESS(void EqSoundManager::GiveTime(void),EqSoundManager__GiveTime); +#endif +#ifdef EqSoundManager__SetCurrentZone_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetCurrentZone(char *),EqSoundManager__SetCurrentZone); +#endif +#ifdef FilePath__FilePath_x +FUNCTION_AT_ADDRESS( FilePath::FilePath(char const *),FilePath__FilePath); +#endif +#ifdef ShareBase__removeRef_x +FUNCTION_AT_ADDRESS(void ShareBase::removeRef(void),ShareBase__removeRef); +#endif +#ifdef SharedString__SharedString_x +FUNCTION_AT_ADDRESS( SharedString::SharedString(char const *),SharedString__SharedString); +#endif +#ifdef SharedString__operator_equal_x +FUNCTION_AT_ADDRESS(class SharedString & SharedString::operator=(class SharedString const &),SharedString__operator_equal); +#endif +#ifdef FilePath__dFilePath_x +FUNCTION_AT_ADDRESS( FilePath::~FilePath(void),FilePath__dFilePath); +#endif +#ifdef SharedString__dSharedString_x +FUNCTION_AT_ADDRESS( SharedString::~SharedString(void),SharedString__dSharedString); +#endif +#ifdef FilePath__FilePath1_x +FUNCTION_AT_ADDRESS( FilePath::FilePath(class SharedString const &),FilePath__FilePath1); +#endif +#ifdef EqSoundManager__LoadOldEmitters_x +FUNCTION_AT_ADDRESS(void EqSoundManager::LoadOldEmitters(void),EqSoundManager__LoadOldEmitters); +#endif +#ifdef EqSoundManager__CreateOldEmitter_x +//FUNCTION_AT_ADDRESS(class SoundEmitter * EqSoundManager::CreateOldEmitter(int,float,float,float,int,int,int,float,int,int,int),EqSoundManager__CreateOldEmitter); +#endif +#ifdef EqSoundManager__GetAsset_x +FUNCTION_AT_ADDRESS(class SoundAsset * EqSoundManager::GetAsset(char *),EqSoundManager__GetAsset); +#endif +#ifdef EqSoundManager__ReleaseZoneSpecificMidi_x +FUNCTION_AT_ADDRESS(void EqSoundManager::ReleaseZoneSpecificMidi(void),EqSoundManager__ReleaseZoneSpecificMidi); +#endif +#ifdef EqSoundManager__ReleaseZoneSpecificWaves_x +FUNCTION_AT_ADDRESS(void EqSoundManager::ReleaseZoneSpecificWaves(void),EqSoundManager__ReleaseZoneSpecificWaves); +#endif +#ifdef EqSoundManager__ReleaseZoneSpecificEmitters_x +FUNCTION_AT_ADDRESS(void EqSoundManager::ReleaseZoneSpecificEmitters(void),EqSoundManager__ReleaseZoneSpecificEmitters); +#endif +#ifdef EqSoundManager__SetEffectsLevel_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetEffectsLevel(float),EqSoundManager__SetEffectsLevel); +#endif +#ifdef EqSoundManager__SetMixAhead_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetMixAhead(int),EqSoundManager__SetMixAhead); +#endif +#ifdef EqSoundManager__SetWaveVolume_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetWaveVolume(float),EqSoundManager__SetWaveVolume); +#endif +#ifdef EqSoundManager__SetMusicVolume_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetMusicVolume(float),EqSoundManager__SetMusicVolume); +#endif +#ifdef EqSoundManager__GetListenerEnvironment_x +//FUNCTION_AT_ADDRESS(enum EnvironmentType EqSoundManager::GetListenerEnvironment(void),EqSoundManager__GetListenerEnvironment); +#endif +#ifdef EqSoundManager__SetListenerEnvironment_x +//FUNCTION_AT_ADDRESS(void EqSoundManager::SetListenerEnvironment(enum EnvironmentType),EqSoundManager__SetListenerEnvironment); +#endif +#ifdef EqSoundManager__SetListenerEnvironmentLow_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetListenerEnvironmentLow(void),EqSoundManager__SetListenerEnvironmentLow); +#endif +#ifdef EqSoundManager__SetListenerEnvironmentHigh_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetListenerEnvironmentHigh(void),EqSoundManager__SetListenerEnvironmentHigh); +#endif +#ifdef EqSoundManager__SetListenerEnvironmentOutside_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetListenerEnvironmentOutside(void),EqSoundManager__SetListenerEnvironmentOutside); +#endif +#ifdef EqSoundManager__SetListenerLocation_x +FUNCTION_AT_ADDRESS(void EqSoundManager::SetListenerLocation(float,float,float,float),EqSoundManager__SetListenerLocation); +#endif +#ifdef EqSoundManager__EmitterSetRaining_x +FUNCTION_AT_ADDRESS(void EqSoundManager::EmitterSetRaining(bool),EqSoundManager__EmitterSetRaining); +#endif +#ifdef EqSoundManager__EmitterSetWind_x +FUNCTION_AT_ADDRESS(void EqSoundManager::EmitterSetWind(bool),EqSoundManager__EmitterSetWind); +#endif +#ifdef EqSoundManager__EmitterSetNight_x +FUNCTION_AT_ADDRESS(void EqSoundManager::EmitterSetNight(bool),EqSoundManager__EmitterSetNight); +#endif +#ifdef EqSoundManager__EmitterSetUserDisabled_x +FUNCTION_AT_ADDRESS(void EqSoundManager::EmitterSetUserDisabled(bool),EqSoundManager__EmitterSetUserDisabled); +#endif +#ifdef EqSoundManager__EmitterSetIndoors_x +FUNCTION_AT_ADDRESS(void EqSoundManager::EmitterSetIndoors(bool),EqSoundManager__EmitterSetIndoors); +#endif +#ifdef EqSoundManager__UpdateEmitterStates_x +FUNCTION_AT_ADDRESS(void EqSoundManager::UpdateEmitterStates(void),EqSoundManager__UpdateEmitterStates); +#endif +#ifdef EqSoundManager__OldMp3ClearSelections_x +FUNCTION_AT_ADDRESS(void EqSoundManager::OldMp3ClearSelections(void),EqSoundManager__OldMp3ClearSelections); +#endif +#ifdef EqSoundManager__OldMp3Init_x +FUNCTION_AT_ADDRESS(void EqSoundManager::OldMp3Init(void),EqSoundManager__OldMp3Init); +#endif +#ifdef EqSoundManager__OldMp3Terminate_x +FUNCTION_AT_ADDRESS(void EqSoundManager::OldMp3Terminate(void),EqSoundManager__OldMp3Terminate); +#endif +#ifdef EqSoundManager__OldMp3GetSelection_x +FUNCTION_AT_ADDRESS(class SoundAsset * EqSoundManager::OldMp3GetSelection(int),EqSoundManager__OldMp3GetSelection); +#endif +#ifdef EqSoundManager__EmitterLoad_x +FUNCTION_AT_ADDRESS(bool EqSoundManager::EmitterLoad(char *),EqSoundManager__EmitterLoad); +#endif +#ifdef EqSoundManager__EmitterAdd_x +FUNCTION_AT_ADDRESS(void EqSoundManager::EmitterAdd(class EqEmitterData *),EqSoundManager__EmitterAdd); +#endif +#ifdef EqMobileEmitter__EqMobileEmitter_x +FUNCTION_AT_ADDRESS( EqMobileEmitter::EqMobileEmitter(class EqSoundManager *),EqMobileEmitter__EqMobileEmitter); +#endif +#ifdef EqMobileEmitter__dEqMobileEmitter_x +FUNCTION_AT_ADDRESS( EqMobileEmitter::~EqMobileEmitter(void),EqMobileEmitter__dEqMobileEmitter); +#endif +#ifdef EqMobileEmitter__Move_x +FUNCTION_AT_ADDRESS(void EqMobileEmitter::Move(float,float,float),EqMobileEmitter__Move); +#endif +#ifdef EqMobileEmitter__SetWave_x +FUNCTION_AT_ADDRESS(void EqMobileEmitter::SetWave(int,char *),EqMobileEmitter__SetWave); +#endif +#ifdef EqMobileEmitter__SetNpcHeight_x +FUNCTION_AT_ADDRESS(void EqMobileEmitter::SetNpcHeight(float),EqMobileEmitter__SetNpcHeight); +#endif +#ifdef EqEmitterData__EqEmitterData_x +FUNCTION_AT_ADDRESS( EqEmitterData::EqEmitterData(void),EqEmitterData__EqEmitterData); +#endif +#ifdef EqEmitterData__SetLoadString_x +FUNCTION_AT_ADDRESS(void EqEmitterData::SetLoadString(char *),EqEmitterData__SetLoadString); +#endif +#ifdef EQ_Spell__SpellUsesDragonBreathEffect_x +FUNCTION_AT_ADDRESS(int EQ_Spell::SpellUsesDragonBreathEffect(void),EQ_Spell__SpellUsesDragonBreathEffect); +#endif +#ifdef EQ_Spell__EQ_Spell_x +FUNCTION_AT_ADDRESS( EQ_Spell::EQ_Spell(char *),EQ_Spell__EQ_Spell); +#endif +#ifdef EQ_Spell__dEQ_Spell_x +FUNCTION_AT_ADDRESS( EQ_Spell::~EQ_Spell(void),EQ_Spell__dEQ_Spell); +#endif +#ifdef EQ_Spell__IsSPAIgnoredByStacking_x +FUNCTION_AT_ADDRESS(bool __cdecl EQ_Spell::IsSPAIgnoredByStacking(int),EQ_Spell__IsSPAIgnoredByStacking); +#endif +#ifdef EQ_Spell__SpellAffects_x +FUNCTION_AT_ADDRESS(unsigned char EQ_Spell::SpellAffects(int)const ,EQ_Spell__SpellAffects); +#endif +#ifdef EQ_Spell__IsPermIllusionSpell_x +FUNCTION_AT_ADDRESS(int EQ_Spell::IsPermIllusionSpell(void)const ,EQ_Spell__IsPermIllusionSpell); +#endif +#ifdef EQOldPlayerAnimation__InitAnimationData_x +FUNCTION_AT_ADDRESS(void __cdecl EQOldPlayerAnimation::InitAnimationData(void),EQOldPlayerAnimation__InitAnimationData); +#endif +#ifdef EQOldPlayerAnimation__PlayAttachmentAnimationTracks_x +FUNCTION_AT_ADDRESS(void EQOldPlayerAnimation::PlayAttachmentAnimationTracks(int,int,bool,bool,float,bool,unsigned char),EQOldPlayerAnimation__PlayAttachmentAnimationTracks); +#endif +#ifdef EQOldPlayerAnimation__EQOldPlayerAnimation_x +FUNCTION_AT_ADDRESS( EQOldPlayerAnimation::EQOldPlayerAnimation(class EQPlayer *),EQOldPlayerAnimation__EQOldPlayerAnimation); +#endif +#ifdef EQOldPlayerAnimation__InterruptCurrentAnimation_x +FUNCTION_AT_ADDRESS(bool EQOldPlayerAnimation::InterruptCurrentAnimation(int,unsigned char),EQOldPlayerAnimation__InterruptCurrentAnimation); +#endif +#ifdef EQOldPlayerAnimation__ChangeAttachmentAnimationTrackSpeeds_x +FUNCTION_AT_ADDRESS(void EQOldPlayerAnimation::ChangeAttachmentAnimationTrackSpeeds(bool,float),EQOldPlayerAnimation__ChangeAttachmentAnimationTrackSpeeds); +#endif +#ifdef EQOldPlayerAnimation__IsSocialAnimation_x +FUNCTION_AT_ADDRESS(bool EQOldPlayerAnimation::IsSocialAnimation(int),EQOldPlayerAnimation__IsSocialAnimation); +#endif +#ifdef EQOldPlayerAnimation__IsStandAnimation_x +FUNCTION_AT_ADDRESS(bool EQOldPlayerAnimation::IsStandAnimation(int),EQOldPlayerAnimation__IsStandAnimation); +#endif +#ifdef EQOldPlayerAnimation__IsIdleAnimation_x +FUNCTION_AT_ADDRESS(bool EQOldPlayerAnimation::IsIdleAnimation(int),EQOldPlayerAnimation__IsIdleAnimation); +#endif +#ifdef EQOldPlayerAnimation__AnimationIsAggressive_x +FUNCTION_AT_ADDRESS(bool EQOldPlayerAnimation::AnimationIsAggressive(int),EQOldPlayerAnimation__AnimationIsAggressive); +#endif +#ifdef EQAnimation__EQAnimation_x +FUNCTION_AT_ADDRESS( EQAnimation::EQAnimation(void),EQAnimation__EQAnimation); +#endif +#ifdef EQPlayer__DoCamAi_x +FUNCTION_AT_ADDRESS(void EQPlayer::DoCamAi(void),EQPlayer__DoCamAi); +#endif +#ifdef CVector3__Normalize_x +FUNCTION_AT_ADDRESS(void CVector3::Normalize(void),CVector3__Normalize); +#endif +#ifdef CVector3__GetLength_x +FUNCTION_AT_ADDRESS(float CVector3::GetLength(void)const ,CVector3__GetLength); +#endif +#ifdef CVector3__NormalizeAndReturnLength_x +FUNCTION_AT_ADDRESS(float CVector3::NormalizeAndReturnLength(void),CVector3__NormalizeAndReturnLength); +#endif +#ifdef EQEffect__EQEffect_x +FUNCTION_AT_ADDRESS( EQEffect::EQEffect(class EQEffect *,char *,int,struct _EQLOC *,class EQPlayer *,class EQMissile *,struct _EQRGB *,float,int,int,float,float),EQEffect__EQEffect); +#endif +#ifdef EQEffect__dEQEffect_x +FUNCTION_AT_ADDRESS( EQEffect::~EQEffect(void),EQEffect__dEQEffect); +#endif +#ifdef CEverQuest__msgStartIcon_x +FUNCTION_AT_ADDRESS(int CEverQuest::msgStartIcon(void *),CEverQuest__msgStartIcon); +#endif +#ifdef CEverQuest__msgStartInotes_x +FUNCTION_AT_ADDRESS(int CEverQuest::msgStartInotes(void *),CEverQuest__msgStartInotes); +#endif +#ifdef CEverQuest__msgStartIeq_x +FUNCTION_AT_ADDRESS(int CEverQuest::msgStartIeq(void *),CEverQuest__msgStartIeq); +#endif +#ifdef CEverQuest__HandleItems_x +FUNCTION_AT_ADDRESS(int CEverQuest::HandleItems(void *,int),CEverQuest__HandleItems); +#endif +#ifdef CEverQuest__HandleWorldMessage_x +FUNCTION_AT_ADDRESS(unsigned char CEverQuest::HandleWorldMessage(struct connection_t *,unsigned __int32,char *,unsigned __int32),CEverQuest__HandleWorldMessage); +#endif +#ifdef EQHSprite__EQHSprite_x +FUNCTION_AT_ADDRESS( EQHSprite::EQHSprite(char *,struct T3D_tagACTORINSTANCE *,class EQPlayer *),EQHSprite__EQHSprite); +#endif +#ifdef EQHSprite__dEQHSprite_x +FUNCTION_AT_ADDRESS( EQHSprite::~EQHSprite(void),EQHSprite__dEQHSprite); +#endif +#ifdef EQHSprite__get_object_x +FUNCTION_AT_ADDRESS(class EQHSprite * EQHSprite::get_object(char *),EQHSprite__get_object); +#endif +#ifdef EQHSprite__GetAnimationTrackPtr_x +FUNCTION_AT_ADDRESS(bool EQHSprite::GetAnimationTrackPtr(char *,char *,int,int,unsigned char,int),EQHSprite__GetAnimationTrackPtr); +#endif +#ifdef EQItemList__EQItemList_x +FUNCTION_AT_ADDRESS( EQItemList::EQItemList(void),EQItemList__EQItemList); +#endif +#ifdef EQItemList__dEQItemList_x +FUNCTION_AT_ADDRESS( EQItemList::~EQItemList(void),EQItemList__dEQItemList); +#endif +#ifdef EQItemList__get_item_x +FUNCTION_AT_ADDRESS(class EQItemList * EQItemList::get_item(long),EQItemList__get_item); +#endif +#ifdef EQItemList__is_item_actor_x +FUNCTION_AT_ADDRESS(class EQItemList * EQItemList::is_item_actor(struct T3D_tagACTORINSTANCE *),EQItemList__is_item_actor); +#endif +#ifdef public_key__dpublic_key_x +FUNCTION_AT_ADDRESS( public_key::~public_key(void),public_key__dpublic_key); +#endif +#ifdef public_key__public_key_x +FUNCTION_AT_ADDRESS( public_key::public_key(void),public_key__public_key); +#endif +#ifdef PacketPackerManager__Initialize_x +FUNCTION_AT_ADDRESS(void __cdecl PacketPackerManager::Initialize(void),PacketPackerManager__Initialize); +#endif +#ifdef EQMissile__EQMissile_x +FUNCTION_AT_ADDRESS( EQMissile::EQMissile(class EQ_Equipment *,class EQPlayer *,class EQMissile *,char *,unsigned char,unsigned int),EQMissile__EQMissile); +#endif +#ifdef EQMissile__dEQMissile_x +FUNCTION_AT_ADDRESS( EQMissile::~EQMissile(void),EQMissile__dEQMissile); +#endif +#ifdef EQMissile__CleanUpMyEffects_x +FUNCTION_AT_ADDRESS(void EQMissile::CleanUpMyEffects(void),EQMissile__CleanUpMyEffects); +#endif +#ifdef EQMissile__is_missile_actor_x +FUNCTION_AT_ADDRESS(class EQMissile * EQMissile::is_missile_actor(struct T3D_tagACTORINSTANCE *),EQMissile__is_missile_actor); +#endif +#ifdef EQMissile__HitActor_x +FUNCTION_AT_ADDRESS(void EQMissile::HitActor(struct T3D_tagACTORINSTANCE *,bool),EQMissile__HitActor); +#endif +#ifdef EQMissile__ProcessMissile_x +FUNCTION_AT_ADDRESS(void EQMissile::ProcessMissile(void),EQMissile__ProcessMissile); +#endif +#ifdef EQMissile__MissileAI_x +FUNCTION_AT_ADDRESS(void EQMissile::MissileAI(void),EQMissile__MissileAI); +#endif +#ifdef EQMoneyList__EQMoneyList_x +FUNCTION_AT_ADDRESS( EQMoneyList::EQMoneyList(void),EQMoneyList__EQMoneyList); +#endif +#ifdef EQMoneyList__dEQMoneyList_x +FUNCTION_AT_ADDRESS( EQMoneyList::~EQMoneyList(void),EQMoneyList__dEQMoneyList); +#endif +#ifdef EQMoneyList__get_money_x +FUNCTION_AT_ADDRESS(class EQMoneyList * EQMoneyList::get_money(long),EQMoneyList__get_money); +#endif +#ifdef CDisplay__MoveMissile_x +FUNCTION_AT_ADDRESS(int CDisplay::MoveMissile(class EQMissile *),CDisplay__MoveMissile); +#endif +#ifdef CDisplay__GetOnActor_x +FUNCTION_AT_ADDRESS(void CDisplay::GetOnActor(struct T3D_tagACTORINSTANCE *,class EQPlayer *),CDisplay__GetOnActor); +#endif +#ifdef EQPlayer__CanIFitHere_x +FUNCTION_AT_ADDRESS(bool EQPlayer::CanIFitHere(float,float,float),EQPlayer__CanIFitHere); +#endif +#ifdef EQPlayer__MovePlayer_x +FUNCTION_AT_ADDRESS(int EQPlayer::MovePlayer(void),EQPlayer__MovePlayer); +#endif +#ifdef bad_word_class__bad_word_class_x +FUNCTION_AT_ADDRESS( bad_word_class::bad_word_class(char *),bad_word_class__bad_word_class); +#endif +#ifdef EQObject__EQObject_x +FUNCTION_AT_ADDRESS( EQObject::EQObject(class EQObject *,class EQPlayer *,char *,char *),EQObject__EQObject); +#endif +#ifdef EQObject__dEQObject_x +FUNCTION_AT_ADDRESS( EQObject::~EQObject(void),EQObject__dEQObject); +#endif +#ifdef EQPlayer__EQPlayer_x +FUNCTION_AT_ADDRESS( EQPlayer::EQPlayer(class EQPlayer *,unsigned char,unsigned int,unsigned char,char *),EQPlayer__EQPlayer); +#endif +#ifdef EQPlayer__dEQPlayer_x +FUNCTION_AT_ADDRESS( EQPlayer::~EQPlayer(void),EQPlayer__dEQPlayer); +#endif +#ifdef EQPlayer__ResetVariables_x +FUNCTION_AT_ADDRESS(void EQPlayer::ResetVariables(void),EQPlayer__ResetVariables); +#endif +#ifdef EQPlayer__do_change_form_x +FUNCTION_AT_ADDRESS(void EQPlayer::do_change_form(struct chngForm *),EQPlayer__do_change_form); +#endif +#ifdef EQPlayer__DisplayWeaponsAndArmor_x +FUNCTION_AT_ADDRESS(void EQPlayer::DisplayWeaponsAndArmor(void),EQPlayer__DisplayWeaponsAndArmor); +#endif +#ifdef EQPlayer__CleanUpTarget_x +FUNCTION_AT_ADDRESS(void EQPlayer::CleanUpTarget(void),EQPlayer__CleanUpTarget); +#endif +#ifdef EQPlayer__FollowPlayerAI_x +FUNCTION_AT_ADDRESS(void EQPlayer::FollowPlayerAI(void),EQPlayer__FollowPlayerAI); +#endif +#ifdef EQPlayer__TurnOffAutoFollow_x +FUNCTION_AT_ADDRESS(void EQPlayer::TurnOffAutoFollow(void),EQPlayer__TurnOffAutoFollow); +#endif +#ifdef EQPlayer__AimAtTarget_x +FUNCTION_AT_ADDRESS(int EQPlayer::AimAtTarget(class EQPlayer *,class EQMissile *),EQPlayer__AimAtTarget); +#endif +#ifdef EQPlayer__FacePlayer_x +FUNCTION_AT_ADDRESS(void EQPlayer::FacePlayer(class EQPlayer *),EQPlayer__FacePlayer); +#endif +#ifdef EQPlayer__CleanUpVehicle_x +FUNCTION_AT_ADDRESS(void EQPlayer::CleanUpVehicle(void),EQPlayer__CleanUpVehicle); +#endif +#ifdef EQPlayer__CleanUpMyEffects_x +FUNCTION_AT_ADDRESS(void EQPlayer::CleanUpMyEffects(void),EQPlayer__CleanUpMyEffects); +#endif +#ifdef EQPlayer__GetPlayerFromName_x +FUNCTION_AT_ADDRESS(class EQPlayer *__cdecl EQPlayer::GetPlayerFromName(char const *),EQPlayer__GetPlayerFromName); +#endif +#ifdef EQPlayer__GetPlayerFromPartialName_x +FUNCTION_AT_ADDRESS(class EQPlayer * __cdecl EQPlayer::GetPlayerFromPartialName(char *),EQPlayer__GetPlayerFromPartialName); +#endif +#ifdef EQPlayer__GetClosestPlayerFromPartialName_x +FUNCTION_AT_ADDRESS(class EQPlayer * __cdecl EQPlayer::GetClosestPlayerFromPartialName(char *,class EQPlayer *),EQPlayer__GetClosestPlayerFromPartialName); +#endif +#ifdef EQPlayer__IsPlayerActor_x +FUNCTION_AT_ADDRESS(class EQPlayer * __cdecl EQPlayer::IsPlayerActor(struct T3D_tagACTORINSTANCE *),EQPlayer__IsPlayerActor); +#endif +#ifdef EQPlayer__TackOnNeuterChar_x +FUNCTION_AT_ADDRESS(void __cdecl EQPlayer::TackOnNeuterChar(char *,unsigned int),EQPlayer__TackOnNeuterChar); +#endif +#ifdef EQPlayer__GetActorTag_x +FUNCTION_AT_ADDRESS(void EQPlayer::GetActorTag(char *),EQPlayer__GetActorTag); +#endif +#ifdef EQPlayer__GetPCActorTag_x +FUNCTION_AT_ADDRESS(void __cdecl EQPlayer::GetPCActorTag(char *,unsigned int,unsigned char),EQPlayer__GetPCActorTag); +#endif +#ifdef EQPlayer__NotOnSameDeity_x +FUNCTION_AT_ADDRESS(int EQPlayer::NotOnSameDeity(class EQPlayer *,class EQ_Spell *),EQPlayer__NotOnSameDeity); +#endif +#ifdef EQPlayer__SetAnimVariation_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetAnimVariation(void),EQPlayer__SetAnimVariation); +#endif +#ifdef EQPlayer__SetAfk_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetAfk(int),EQPlayer__SetAfk); +#endif +#ifdef EQPlayer__AllowedToAttack_x +FUNCTION_AT_ADDRESS(bool EQPlayer::AllowedToAttack(class EQPlayer *,int),EQPlayer__AllowedToAttack); +#endif +#ifdef EQPlayer__CanIHit_x +FUNCTION_AT_ADDRESS(bool EQPlayer::CanIHit(class EQPlayer *,float),EQPlayer__CanIHit); +#endif +#ifdef EQPlayer__ModifyAttackSpeed_x +FUNCTION_AT_ADDRESS(unsigned int EQPlayer::ModifyAttackSpeed(unsigned int,int),EQPlayer__ModifyAttackSpeed); +#endif +#ifdef EQPlayer__DoAttack_x +FUNCTION_AT_ADDRESS(int EQPlayer::DoAttack(unsigned char,unsigned char,class EQPlayer *),EQPlayer__DoAttack); +#endif +#ifdef EQPlayer__HandleAmmo_x +FUNCTION_AT_ADDRESS(unsigned char EQPlayer::HandleAmmo(void),EQPlayer__HandleAmmo); +#endif +#ifdef EQPlayer__TriggerSpellEffect_x +FUNCTION_AT_ADDRESS(void EQPlayer::TriggerSpellEffect(struct _EQMissileHitinfo *),EQPlayer__TriggerSpellEffect); +#endif +#ifdef EQPlayer__IWasHit_x +FUNCTION_AT_ADDRESS(bool EQPlayer::IWasHit(struct _EQMissileHitinfo *),EQPlayer__IWasHit); +#endif +#ifdef EQPlayer__GetConscious_x +FUNCTION_AT_ADDRESS(void EQPlayer::GetConscious(void),EQPlayer__GetConscious); +#endif +#ifdef EQPlayer__KnockedOut_x +FUNCTION_AT_ADDRESS(void EQPlayer::KnockedOut(void),EQPlayer__KnockedOut); +#endif +#ifdef EQPlayer__IDied_x +FUNCTION_AT_ADDRESS(void EQPlayer::IDied(struct _EQPlayerDeath *),EQPlayer__IDied); +#endif +#ifdef EQPlayer__HandoverControlToZoneserver_x +FUNCTION_AT_ADDRESS(void EQPlayer::HandoverControlToZoneserver(void),EQPlayer__HandoverControlToZoneserver); +#endif +#ifdef EQPlayer__TouchingSwitch_x +FUNCTION_AT_ADDRESS(void EQPlayer::TouchingSwitch(void),EQPlayer__TouchingSwitch); +#endif +#ifdef EQPlayer__MyFeetAreOnGround_x +FUNCTION_AT_ADDRESS(bool EQPlayer::MyFeetAreOnGround(void),EQPlayer__MyFeetAreOnGround); +#endif +#ifdef EQPlayer__IHaveFallen_x +FUNCTION_AT_ADDRESS(void EQPlayer::IHaveFallen(float),EQPlayer__IHaveFallen); +#endif +#ifdef EQPlayer__SkillUsed_x +FUNCTION_AT_ADDRESS(unsigned char EQPlayer::SkillUsed(unsigned char),EQPlayer__SkillUsed); +#endif +#ifdef EQPlayer__BodyEnvironmentChange_x +FUNCTION_AT_ADDRESS(void EQPlayer::BodyEnvironmentChange(unsigned char),EQPlayer__BodyEnvironmentChange); +#endif +#ifdef EQPlayer__FeetEnvironmentChange_x +FUNCTION_AT_ADDRESS(void EQPlayer::FeetEnvironmentChange(unsigned char),EQPlayer__FeetEnvironmentChange); +#endif +#ifdef EQPlayer__HeadEnvironmentChange_x +FUNCTION_AT_ADDRESS(void EQPlayer::HeadEnvironmentChange(unsigned char),EQPlayer__HeadEnvironmentChange); +#endif +#ifdef EQPlayer__LegalPlayerRace_x +FUNCTION_AT_ADDRESS(int EQPlayer::LegalPlayerRace(int),EQPlayer__LegalPlayerRace); +#endif +#ifdef EQPlayer__DeleteMyMissiles_x +FUNCTION_AT_ADDRESS(void EQPlayer::DeleteMyMissiles(void),EQPlayer__DeleteMyMissiles); +#endif +#ifdef EQPlayer__ChangePosition_x +FUNCTION_AT_ADDRESS(void EQPlayer::ChangePosition(unsigned char),EQPlayer__ChangePosition); +#endif +#ifdef EQPlayer__ChangeHeight_x +FUNCTION_AT_ADDRESS(void EQPlayer::ChangeHeight(float),EQPlayer__ChangeHeight); +#endif +#ifdef EQPlayer__PositionOnFloor_x +FUNCTION_AT_ADDRESS(void EQPlayer::PositionOnFloor(void),EQPlayer__PositionOnFloor); +#endif +#ifdef EQPlayer__IsRoleplaying_x +FUNCTION_AT_ADDRESS(bool EQPlayer::IsRoleplaying(void),EQPlayer__IsRoleplaying); +#endif +#ifdef EQPlayer__IsInvited_x +FUNCTION_AT_ADDRESS(bool EQPlayer::IsInvited(void),EQPlayer__IsInvited); +#endif +#ifdef EQPlayer__SetInvited_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetInvited(bool),EQPlayer__SetInvited); +#endif +#ifdef EQPlayer__PlaySoundA_x +FUNCTION_AT_ADDRESS(void EQPlayer::PlaySoundA(int),EQPlayer__PlaySoundA); +#endif +#ifdef EQPlayer__SetSounds_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetSounds(void),EQPlayer__SetSounds); +#endif +#ifdef EQPlayer__SetCurrentLoopSound_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetCurrentLoopSound(int),EQPlayer__SetCurrentLoopSound); +#endif +#ifdef EQPlayer__IsFlyer_x +FUNCTION_AT_ADDRESS(bool EQPlayer::IsFlyer(void),EQPlayer__IsFlyer); +#endif +#ifdef EQPlayer__InitSneakMod_x +FUNCTION_AT_ADDRESS(void EQPlayer::InitSneakMod(void),EQPlayer__InitSneakMod); +#endif +#ifdef EQPlayer__SetHeights_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetHeights(void),EQPlayer__SetHeights); +#endif +#ifdef EQPMInfo__SetApplyGravity_x +FUNCTION_AT_ADDRESS(void EQPMInfo::SetApplyGravity(bool),EQPMInfo__SetApplyGravity); +#endif +#ifdef EQPlayer__GetDefaultHeight_x +FUNCTION_AT_ADDRESS(float EQPlayer::GetDefaultHeight(int,unsigned char),EQPlayer__GetDefaultHeight); +#endif +#ifdef EQPlayer__ComputeSpecialHeights_x +FUNCTION_AT_ADDRESS(void __cdecl EQPlayer::ComputeSpecialHeights(int,float *,float *,float *,float *,bool),EQPlayer__ComputeSpecialHeights); +#endif +#ifdef EQPlayer__IsUntexturedHorse_x +FUNCTION_AT_ADDRESS(bool EQPlayer::IsUntexturedHorse(void),EQPlayer__IsUntexturedHorse); +#endif +#ifdef EQPlayer__HasInvalidRiderTexture_x +FUNCTION_AT_ADDRESS(bool const EQPlayer::HasInvalidRiderTexture(void)const ,EQPlayer__HasInvalidRiderTexture); +#endif +#ifdef EQPlayer__ForceInvisible_x +FUNCTION_AT_ADDRESS(void EQPlayer::ForceInvisible(bool),EQPlayer__ForceInvisible); +#endif +#ifdef EQPlayer__MountableRace_x +FUNCTION_AT_ADDRESS(int EQPlayer::MountableRace(void),EQPlayer__MountableRace); +#endif +#ifdef EQPlayer__MakeRiderMountUp_x +FUNCTION_AT_ADDRESS(void EQPlayer::MakeRiderMountUp(void),EQPlayer__MakeRiderMountUp); +#endif +#ifdef EQPlayer__MountEQPlayer_x +FUNCTION_AT_ADDRESS(void EQPlayer::MountEQPlayer(class EQPlayer *),EQPlayer__MountEQPlayer); +#endif +#ifdef EQPlayer__Dismount_x +FUNCTION_AT_ADDRESS(void EQPlayer::Dismount(void),EQPlayer__Dismount); +#endif +#ifdef EQPlayer__GetArmorType_x +FUNCTION_AT_ADDRESS(int EQPlayer::GetArmorType(int),EQPlayer__GetArmorType); +#endif +#ifdef EQPlayer__SetArmorType_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetArmorType(int,int),EQPlayer__SetArmorType); +#endif +#ifdef EQPlayer__GetArmorTint_x +FUNCTION_AT_ADDRESS(unsigned long EQPlayer::GetArmorTint(int),EQPlayer__GetArmorTint); +#endif +#ifdef EQPlayer__SetArmorTint_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetArmorTint(int,unsigned long),EQPlayer__SetArmorTint); +#endif +#ifdef EQPlayer__SetAccel_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetAccel(float,int),EQPlayer__SetAccel); +#endif +#ifdef EQPlayer__SetToRandomRace_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetToRandomRace(void),EQPlayer__SetToRandomRace); +#endif +#ifdef EQPlayer__GetBaseFaceNbr_x +FUNCTION_AT_ADDRESS(unsigned char EQPlayer::GetBaseFaceNbr(int,unsigned char *),EQPlayer__GetBaseFaceNbr); +#endif +#ifdef EQPlayer__HasAttachedBeard_x +FUNCTION_AT_ADDRESS(unsigned char EQPlayer::HasAttachedBeard(void),EQPlayer__HasAttachedBeard); +#endif +#ifdef EQPlayer__HasAttachedHair_x +FUNCTION_AT_ADDRESS(unsigned char EQPlayer::HasAttachedHair(void),EQPlayer__HasAttachedHair); +#endif +#ifdef EQPlayer__SetDefaultFacialFeaturesByFace_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetDefaultFacialFeaturesByFace(int,unsigned char,unsigned char),EQPlayer__SetDefaultFacialFeaturesByFace); +#endif +#ifdef EQPlayer__GetAllowedHairColorIndexRange_x +FUNCTION_AT_ADDRESS(void EQPlayer::GetAllowedHairColorIndexRange(int,int *,int *),EQPlayer__GetAllowedHairColorIndexRange); +#endif +#ifdef EQPlayer__CanBeBald_x +FUNCTION_AT_ADDRESS(int EQPlayer::CanBeBald(void),EQPlayer__CanBeBald); +#endif +#ifdef EQPlayer__ChangeNoGravity_x +FUNCTION_AT_ADDRESS(void EQPlayer::ChangeNoGravity(int),EQPlayer__ChangeNoGravity); +#endif +#ifdef EQPlayer__IdUsed_x +FUNCTION_AT_ADDRESS(int EQPlayer::IdUsed(unsigned int),EQPlayer__IdUsed); +#endif +#ifdef EQPlayer__GetUnusedID_x +FUNCTION_AT_ADDRESS(unsigned int EQPlayer::GetUnusedID(void),EQPlayer__GetUnusedID); +#endif +#ifdef EQPlayer__SetAndReserveID_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetAndReserveID(unsigned int),EQPlayer__SetAndReserveID); +#endif +#ifdef EQPlayer__InitializeIDArray_x +FUNCTION_AT_ADDRESS(void EQPlayer::InitializeIDArray(void),EQPlayer__InitializeIDArray); +#endif +#ifdef EQPlayer__Levitating_x +FUNCTION_AT_ADDRESS(int EQPlayer::Levitating(void),EQPlayer__Levitating); +#endif +#ifdef EQPlayer__SetRace_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetRace(int),EQPlayer__SetRace); +#endif +#ifdef EQPlayer__CanChangeForm_x +FUNCTION_AT_ADDRESS(bool EQPlayer::CanChangeForm(int,unsigned char),EQPlayer__CanChangeForm); +#endif +#ifdef EQPlayer__SetNameSpriteState_x +FUNCTION_AT_ADDRESS(int EQPlayer::SetNameSpriteState(bool),EQPlayer__SetNameSpriteState); +#endif +#ifdef EQPlayer__ChangeBoneStringSprite_x +FUNCTION_AT_ADDRESS(struct S3D_STRINGSPRITE * EQPlayer::ChangeBoneStringSprite(struct T3D_DAG *,char *),EQPlayer__ChangeBoneStringSprite); +#endif +#ifdef EQPlayer__SetNameSpriteTint_x +FUNCTION_AT_ADDRESS(bool EQPlayer::SetNameSpriteTint(void),EQPlayer__SetNameSpriteTint); +#endif +#ifdef EQPlayer__UpdateNameSprite_x +FUNCTION_AT_ADDRESS(void EQPlayer::UpdateNameSprite(void),EQPlayer__UpdateNameSprite); +#endif +#ifdef EQPlayer__UpdateBonePointers_x +FUNCTION_AT_ADDRESS(void EQPlayer::UpdateBonePointers(void),EQPlayer__UpdateBonePointers); +#endif +#ifdef EQPlayer__FindDefaultEyeMaterialIndexes_x +FUNCTION_AT_ADDRESS(void EQPlayer::FindDefaultEyeMaterialIndexes(void),EQPlayer__FindDefaultEyeMaterialIndexes); +#endif +#ifdef EQPlayer__CalcAnimLength_x +FUNCTION_AT_ADDRESS(unsigned int EQPlayer::CalcAnimLength(int),EQPlayer__CalcAnimLength); +#endif +#ifdef EQPlayer__GetAlternateTrackNumber_x +FUNCTION_AT_ADDRESS(int EQPlayer::GetAlternateTrackNumber(int,unsigned char *),EQPlayer__GetAlternateTrackNumber); +#endif +#ifdef EQPlayer__GetAlternateAnimVariation_x +FUNCTION_AT_ADDRESS(unsigned char EQPlayer::GetAlternateAnimVariation(int,unsigned char),EQPlayer__GetAlternateAnimVariation); +#endif +#ifdef EQPlayer__GetRaceSexITOffset_x +FUNCTION_AT_ADDRESS(int EQPlayer::GetRaceSexITOffset(void),EQPlayer__GetRaceSexITOffset); +#endif +#ifdef EQPlayer__UpdatePlayerVisibility_x +FUNCTION_AT_ADDRESS(void EQPlayer::UpdatePlayerVisibility(void),EQPlayer__UpdatePlayerVisibility); +#endif +#ifdef EQPlayer__UpdateAllPlayersVisibility_x +FUNCTION_AT_ADDRESS(void __cdecl EQPlayer::UpdateAllPlayersVisibility(void),EQPlayer__UpdateAllPlayersVisibility); +#endif +#ifdef EQPlayer__IsBodyType_j_x +FUNCTION_AT_ADDRESS(bool EQPlayer::IsBodyType(unsigned int,int,int),EQPlayer__IsBodyType_j); +#endif +#ifdef EQPlayer__SetEyeMaterial_x +FUNCTION_AT_ADDRESS(int EQPlayer::SetEyeMaterial(unsigned char,int),EQPlayer__SetEyeMaterial); +#endif +#ifdef EQPlayer__HideOrShowAttachedHair_x +FUNCTION_AT_ADDRESS(void EQPlayer::HideOrShowAttachedHair(void),EQPlayer__HideOrShowAttachedHair); +#endif +#ifdef EQPlayer__SetFHEB_x +FUNCTION_AT_ADDRESS(int EQPlayer::SetFHEB(unsigned char,unsigned char),EQPlayer__SetFHEB); +#endif +#ifdef EQPlayer__SetFHEB_Color_x +FUNCTION_AT_ADDRESS(int EQPlayer::SetFHEB_Color(unsigned char,unsigned char),EQPlayer__SetFHEB_Color); +#endif +#ifdef EQPlayer__SetHairOrBeard_x +FUNCTION_AT_ADDRESS(int EQPlayer::SetHairOrBeard(int),EQPlayer__SetHairOrBeard); +#endif +#ifdef EQPlayer__GetBonePointerByITS_x +FUNCTION_AT_ADDRESS(struct T3D_DAG * EQPlayer::GetBonePointerByITS(int,int),EQPlayer__GetBonePointerByITS); +#endif +#ifdef EQPlayer__UpdateAppearance_x +FUNCTION_AT_ADDRESS(void EQPlayer::UpdateAppearance(void),EQPlayer__UpdateAppearance); +#endif +#ifdef EQPlayer__SetDefaultITAttachments_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetDefaultITAttachments(int),EQPlayer__SetDefaultITAttachments); +#endif +#ifdef EQPlayer__SwapMaterial_x +FUNCTION_AT_ADDRESS(int EQPlayer::SwapMaterial(int,int,int,int,unsigned char),EQPlayer__SwapMaterial); +#endif +#ifdef EQPlayer__SwapFace_x +FUNCTION_AT_ADDRESS(int EQPlayer::SwapFace(int,int),EQPlayer__SwapFace); +#endif +#ifdef EQPlayer__GetAttachedHelmITNum_x +FUNCTION_AT_ADDRESS(int EQPlayer::GetAttachedHelmITNum(int,int *),EQPlayer__GetAttachedHelmITNum); +#endif +#ifdef EQPlayer__SetPlayerConstantAmbient_x +FUNCTION_AT_ADDRESS(void EQPlayer::SetPlayerConstantAmbient(struct T3D_RGB *),EQPlayer__SetPlayerConstantAmbient); +#endif +#ifdef EQPlayer__SwapHead_x +FUNCTION_AT_ADDRESS(int EQPlayer::SwapHead(int,int,unsigned long,int),EQPlayer__SwapHead); +#endif +#ifdef EQPlayer__SetPlayerPitchType_x +FUNCTION_AT_ADDRESS(int EQPlayer::SetPlayerPitchType(void),EQPlayer__SetPlayerPitchType); +#endif +#ifdef EQPlayer__IsValidTeleport_x +FUNCTION_AT_ADDRESS(int EQPlayer::IsValidTeleport(float,float,float,float,float),EQPlayer__IsValidTeleport); +#endif +#ifdef EQPlayer__ReplaceSpecialCloakMaterials_x +FUNCTION_AT_ADDRESS(int EQPlayer::ReplaceSpecialCloakMaterials(void),EQPlayer__ReplaceSpecialCloakMaterials); +#endif +#ifdef EQPlayer__SwapBody_x +FUNCTION_AT_ADDRESS(int EQPlayer::SwapBody(int,int),EQPlayer__SwapBody); +#endif +#ifdef EQPlayer__HandleMaterialEx_x +FUNCTION_AT_ADDRESS(void EQPlayer::HandleMaterialEx(int,unsigned int,unsigned int,unsigned long,int),EQPlayer__HandleMaterialEx); +#endif +#ifdef EQPlayer__UpdateItemSlot_x +FUNCTION_AT_ADDRESS(unsigned char EQPlayer::UpdateItemSlot(unsigned char,char *,int),EQPlayer__UpdateItemSlot); +#endif +#ifdef EQPlayer__SwapNPCMaterials_x +FUNCTION_AT_ADDRESS(int EQPlayer::SwapNPCMaterials(void),EQPlayer__SwapNPCMaterials); +#endif +#ifdef EQPlayer__PutPlayerOnFloor_x +FUNCTION_AT_ADDRESS(void EQPlayer::PutPlayerOnFloor(void),EQPlayer__PutPlayerOnFloor); +#endif +#ifdef EQPlayer__CheckForUnderFloor_x +FUNCTION_AT_ADDRESS(void EQPlayer::CheckForUnderFloor(void),EQPlayer__CheckForUnderFloor); +#endif +#ifdef EQPlayer__DoFloorCheck_x +FUNCTION_AT_ADDRESS(void EQPlayer::DoFloorCheck(void),EQPlayer__DoFloorCheck); +#endif +#ifdef EQPlayer__DoSwimJump_x +FUNCTION_AT_ADDRESS(void EQPlayer::DoSwimJump(unsigned char),EQPlayer__DoSwimJump); +#endif +#ifdef EQPlayer__PushAlongHeading_x +FUNCTION_AT_ADDRESS(void EQPlayer::PushAlongHeading(float),EQPlayer__PushAlongHeading); +#endif +#ifdef EQPlayer__DoTeleport_x +FUNCTION_AT_ADDRESS(unsigned char EQPlayer::DoTeleport(char *,int),EQPlayer__DoTeleport); +#endif +#ifdef EQPlayer__DoTeleportB_x +//FUNCTION_AT_ADDRESS(unsigned char EQPlayer::DoTeleportB(int,float,float,float,float,char *,enum ZONE_REQ_REASON),EQPlayer__DoTeleportB); +#endif +#ifdef EQPlayer__ChangeLight_x +FUNCTION_AT_ADDRESS(void EQPlayer::ChangeLight(void),EQPlayer__ChangeLight); +#endif +#ifdef EQPlayer__GetBoneCoords_x +FUNCTION_AT_ADDRESS(bool EQPlayer::GetBoneCoords(struct T3D_DAG *,struct _EQLOC *),EQPlayer__GetBoneCoords); +#endif +#ifdef EQPlayer__CheckForJump_x +FUNCTION_AT_ADDRESS(int EQPlayer::CheckForJump(void),EQPlayer__CheckForJump); +#endif +#ifdef EQPlayer__GetPlayerFloorHeight_x +FUNCTION_AT_ADDRESS(float EQPlayer::GetPlayerFloorHeight(float,float,float,unsigned char),EQPlayer__GetPlayerFloorHeight); +#endif +#ifdef EQPlayer__UpdatePlayerActor_x +FUNCTION_AT_ADDRESS(bool EQPlayer::UpdatePlayerActor(void),EQPlayer__UpdatePlayerActor); +#endif +#ifdef EQPlayer__GetNearestActorTag_x +FUNCTION_AT_ADDRESS(unsigned char EQPlayer::GetNearestActorTag(char *,void *),EQPlayer__GetNearestActorTag); +#endif +#ifdef EQPlayer__DoItemSlot_x +FUNCTION_AT_ADDRESS(void EQPlayer::DoItemSlot(int),EQPlayer__DoItemSlot); +#endif +#ifdef EQPlayer__DoClassRandomAnimation_x +FUNCTION_AT_ADDRESS(void EQPlayer::DoClassRandomAnimation(void),EQPlayer__DoClassRandomAnimation); +#endif +#ifdef EQPlayer__CreateUserLight_x +FUNCTION_AT_ADDRESS(struct T3D_POINTLIGHT * EQPlayer::CreateUserLight(struct T3D_LIGHTDEFINITION *,int),EQPlayer__CreateUserLight); +#endif +#ifdef EQPlayer__AttachPlayerToPlayerBone_x +FUNCTION_AT_ADDRESS(int EQPlayer::AttachPlayerToPlayerBone(class EQPlayer *,struct T3D_DAG *),EQPlayer__AttachPlayerToPlayerBone); +#endif +#ifdef EQPlayer__IsInvisible_x +FUNCTION_AT_ADDRESS(bool EQPlayer::IsInvisible(class EQPlayer *),EQPlayer__IsInvisible); +#endif +#ifdef EQPlayer__IsAMount_x +FUNCTION_AT_ADDRESS(bool EQPlayer::IsAMount(void),EQPlayer__IsAMount); +#endif +#ifdef EQPlayerManager__GetSpawnByID_x +FUNCTION_AT_ADDRESS(class EQPlayer * EQPlayerManager::GetSpawnByID(int),EQPlayerManager__GetSpawnByID); +#endif +#ifdef EQPlayerManager__GetSpawnByName_x +FUNCTION_AT_ADDRESS(class EQPlayer * EQPlayerManager::GetSpawnByName(char *),EQPlayerManager__GetSpawnByName); +#endif +#ifdef EQPMInfo__EQPMInfo_x +FUNCTION_AT_ADDRESS( EQPMInfo::EQPMInfo(char *),EQPMInfo__EQPMInfo); +#endif +#ifdef EQPMInfo__dEQPMInfo_x +FUNCTION_AT_ADDRESS( EQPMInfo::~EQPMInfo(void),EQPMInfo__dEQPMInfo); +#endif +#ifdef EQSwitch__EQSwitch_x +FUNCTION_AT_ADDRESS( EQSwitch::EQSwitch(char *,bool),EQSwitch__EQSwitch); +#endif +#ifdef EQSwitch__EQSwitch1_x +FUNCTION_AT_ADDRESS( EQSwitch::EQSwitch(struct OldDiskSwitch *,bool),EQSwitch__EQSwitch1); +#endif +#ifdef EQSwitch__EQSwitch2_x +FUNCTION_AT_ADDRESS( EQSwitch::EQSwitch(struct _EQClientSwitch *),EQSwitch__EQSwitch2); +#endif +#ifdef EQSwitch__PreInit_x +FUNCTION_AT_ADDRESS(void EQSwitch::PreInit(void),EQSwitch__PreInit); +#endif +#ifdef EQSwitch__PostInit_x +FUNCTION_AT_ADDRESS(void EQSwitch::PostInit(void),EQSwitch__PostInit); +#endif +#ifdef EQSwitch__dEQSwitch_x +FUNCTION_AT_ADDRESS( EQSwitch::~EQSwitch(void),EQSwitch__dEQSwitch); +#endif +#ifdef EQSwitch__ResetSwitchState_x +FUNCTION_AT_ADDRESS(void EQSwitch::ResetSwitchState(unsigned char),EQSwitch__ResetSwitchState); +#endif +#ifdef EQSwitch__RepopSwitch_x +FUNCTION_AT_ADDRESS(void EQSwitch::RepopSwitch(void),EQSwitch__RepopSwitch); +#endif +#ifdef EQSwitch__TopSpeed_x +FUNCTION_AT_ADDRESS(float EQSwitch::TopSpeed(float *),EQSwitch__TopSpeed); +#endif +#ifdef EQSwitch__RepopFrequency_x +FUNCTION_AT_ADDRESS(unsigned int EQSwitch::RepopFrequency(void),EQSwitch__RepopFrequency); +#endif +#ifdef EQSwitch__GetSwitchDamage_x +FUNCTION_AT_ADDRESS(int EQSwitch::GetSwitchDamage(void),EQSwitch__GetSwitchDamage); +#endif +#ifdef EQSwitch__ChangeState_x +FUNCTION_AT_ADDRESS(void EQSwitch::ChangeState(unsigned char,class EQPlayer *,bool),EQSwitch__ChangeState); +#endif +#ifdef EQSwitch__SwitchWasOpened_x +FUNCTION_AT_ADDRESS(unsigned char EQSwitch::SwitchWasOpened(int,int,class EQPlayer *,bool *),EQSwitch__SwitchWasOpened); +#endif +#ifdef EQSwitch__SwitchWasOpenedActual_x +FUNCTION_AT_ADDRESS(unsigned char EQSwitch::SwitchWasOpenedActual(int,int,class EQPlayer *,bool *),EQSwitch__SwitchWasOpenedActual); +#endif +#ifdef EQSwitch__SwitchIsNotUsable_x +FUNCTION_AT_ADDRESS(unsigned char EQSwitch::SwitchIsNotUsable(int),EQSwitch__SwitchIsNotUsable); +#endif +#ifdef EQSwitch__UseSwitch_x +FUNCTION_AT_ADDRESS(void EQSwitch::UseSwitch(unsigned int,int,int),EQSwitch__UseSwitch); +#endif +#ifdef EQSwitch__LoadSwitchSounds_x +FUNCTION_AT_ADDRESS(void EQSwitch::LoadSwitchSounds(int),EQSwitch__LoadSwitchSounds); +#endif +#ifdef EQSwitch__GetCustomMoveDistance_x +FUNCTION_AT_ADDRESS(float EQSwitch::GetCustomMoveDistance(void),EQSwitch__GetCustomMoveDistance); +#endif +#ifdef EqSwitchManager__EqSwitchManager_x +FUNCTION_AT_ADDRESS( EqSwitchManager::EqSwitchManager(void),EqSwitchManager__EqSwitchManager); +#endif +#ifdef EqSwitchManager__dEqSwitchManager_x +FUNCTION_AT_ADDRESS( EqSwitchManager::~EqSwitchManager(void),EqSwitchManager__dEqSwitchManager); +#endif +#ifdef EqSwitchManager__DeleteAll_x +FUNCTION_AT_ADDRESS(void EqSwitchManager::DeleteAll(void),EqSwitchManager__DeleteAll); +#endif +#ifdef EqSwitchManager__Load_x +FUNCTION_AT_ADDRESS(void EqSwitchManager::Load(char *,bool),EqSwitchManager__Load); +#endif +#ifdef EqSwitchManager__LoadOld_x +FUNCTION_AT_ADDRESS(void EqSwitchManager::LoadOld(char *,bool),EqSwitchManager__LoadOld); +#endif +#ifdef EqSwitchManager__GetCount_x +FUNCTION_AT_ADDRESS(int EqSwitchManager::GetCount(void),EqSwitchManager__GetCount); +#endif +#ifdef EqSwitchManager__GetSwitchByActor_x +FUNCTION_AT_ADDRESS(class EQSwitch * EqSwitchManager::GetSwitchByActor(struct T3D_tagACTORINSTANCE *),EqSwitchManager__GetSwitchByActor); +#endif +#ifdef EqSwitchManager__GetSwitch_x +FUNCTION_AT_ADDRESS(class EQSwitch * EqSwitchManager::GetSwitch(int),EqSwitchManager__GetSwitch); +#endif +#ifdef EqSwitchManager__GetSwitchById_x +FUNCTION_AT_ADDRESS(class EQSwitch * EqSwitchManager::GetSwitchById(int,bool),EqSwitchManager__GetSwitchById); +#endif +#ifdef EqSwitchManager__AddSwitch_x +FUNCTION_AT_ADDRESS(void EqSwitchManager::AddSwitch(class EQSwitch *),EqSwitchManager__AddSwitch); +#endif +#ifdef Util__GetNextToken_x +FUNCTION_AT_ADDRESS(int __cdecl Util::GetNextToken(char *,int *,char *),Util__GetNextToken); +#endif +#ifdef Util__GetNextToken1_x +FUNCTION_AT_ADDRESS(int __cdecl Util::GetNextToken(char *,short *,char *),Util__GetNextToken1); +#endif +#ifdef Util__GetNextToken2_x +FUNCTION_AT_ADDRESS(int __cdecl Util::GetNextToken(char *,char *,char *),Util__GetNextToken2); +#endif +#ifdef Util__GetNextToken3_x +FUNCTION_AT_ADDRESS(int __cdecl Util::GetNextToken(char *,unsigned char *,char *),Util__GetNextToken3); +#endif +#ifdef EQUtil__FormatCharName_x +FUNCTION_AT_ADDRESS(char * __cdecl EQUtil::FormatCharName(char *,char *,int),EQUtil__FormatCharName); +#endif +#ifdef EQWorldData__EQWorldData_x +FUNCTION_AT_ADDRESS( EQWorldData::EQWorldData(void),EQWorldData__EQWorldData); +#endif +#ifdef EQWorldData__AddZone_x +//FUNCTION_AT_ADDRESS(bool const EQWorldData::AddZone(enum EQExpansion,enum EQZoneIndex,char const *,char const *,int,unsigned long,int,int),EQWorldData__AddZone); +#endif +#ifdef EQWorldData__AdvanceTime_x +FUNCTION_AT_ADDRESS(void EQWorldData::AdvanceTime(unsigned int),EQWorldData__AdvanceTime); +#endif +#ifdef EQWorldData__CurrentGameTime_x +FUNCTION_AT_ADDRESS(void EQWorldData::CurrentGameTime(char *),EQWorldData__CurrentGameTime); +#endif +#ifdef EQWorldData__GetFullZoneName_x +//FUNCTION_AT_ADDRESS(void EQWorldData::GetFullZoneName(enum EQZoneIndex,char *),EQWorldData__GetFullZoneName); +#endif +#ifdef EQWorldData__ExpansionZone_x +//FUNCTION_AT_ADDRESS(enum EQExpansion const EQWorldData::ExpansionZone(enum EQZoneIndex)const ,EQWorldData__ExpansionZone); +#endif +#ifdef EQWorldData__IsFlagSet_x +//FUNCTION_AT_ADDRESS(bool EQWorldData::IsFlagSet(enum EQZoneIndex,unsigned long)const,EQWorldData__IsFlagSet); +#endif +#ifdef EQWorldData__IsNewbieZone_x +//FUNCTION_AT_ADDRESS(bool EQWorldData::IsNewbieZone(enum EQZoneIndex)const,EQWorldData__IsNewbieZone); +#endif +#ifdef EQWorldData__IsNoBindZone_x +//FUNCTION_AT_ADDRESS(bool EQWorldData::IsNoBindZone(enum EQZoneIndex)const,EQWorldData__IsNoBindZone); +#endif +#ifdef EQWorldData__IsNoAirZone_x +//FUNCTION_AT_ADDRESS(bool EQWorldData::IsNoAirZone(enum EQZoneIndex)const,EQWorldData__IsNoAirZone); +#endif +#ifdef EQWorldData__GetMinLevel_x +//FUNCTION_AT_ADDRESS(int EQWorldData::GetMinLevel(enum EQZoneIndex)const,EQWorldData__GetMinLevel); +#endif +#ifdef EQWorldData__GetGeometryNameFromIndex_x +//FUNCTION_AT_ADDRESS(bool EQWorldData::GetGeometryNameFromIndex(enum EQZoneIndex,char *)const ,EQWorldData__GetGeometryNameFromIndex); +#endif +#ifdef EQWorldData__GetIndexFromZoneName_x +//FUNCTION_AT_ADDRESS(enum EQZoneIndex EQWorldData::GetIndexFromZoneName(char const *)const ,EQWorldData__GetIndexFromZoneName); +#endif +#ifdef EQZoneInfo__EQZoneInfo_x +//FUNCTION_AT_ADDRESS( EQZoneInfo::EQZoneInfo(enum EQExpansion,enum EQZoneIndex,char const *,char const *,int,unsigned long,int,int),EQZoneInfo__EQZoneInfo); +#endif +#ifdef CEverQuest__ChatServerGiveTime_x +FUNCTION_AT_ADDRESS(void CEverQuest::ChatServerGiveTime(void),CEverQuest__ChatServerGiveTime); +#endif +#ifdef CEverQuest__ChatServerNotificationAdd_x +FUNCTION_AT_ADDRESS(void CEverQuest::ChatServerNotificationAdd(bool,char *,char *,int),CEverQuest__ChatServerNotificationAdd); +#endif +#ifdef CEverQuest__ChatServerNotificationFlush_x +FUNCTION_AT_ADDRESS(void CEverQuest::ChatServerNotificationFlush(void),CEverQuest__ChatServerNotificationFlush); +#endif +#ifdef CEverQuest__ChatServerConnect_x +FUNCTION_AT_ADDRESS(void CEverQuest::ChatServerConnect(char *,int,char *,char *),CEverQuest__ChatServerConnect); +#endif +#ifdef CEverQuest__ChatServerMessage_x +FUNCTION_AT_ADDRESS(void CEverQuest::ChatServerMessage(char *),CEverQuest__ChatServerMessage); +#endif +#ifdef CEverQuest__ChatServerDisconnect_x +FUNCTION_AT_ADDRESS(void CEverQuest::ChatServerDisconnect(void),CEverQuest__ChatServerDisconnect); +#endif +#ifdef CEverQuest__ResetVisionRGBs_x +FUNCTION_AT_ADDRESS(void CEverQuest::ResetVisionRGBs(void),CEverQuest__ResetVisionRGBs); +#endif +#ifdef CEverQuest__GetMaxLightRadius_x +FUNCTION_AT_ADDRESS(float CEverQuest::GetMaxLightRadius(void),CEverQuest__GetMaxLightRadius); +#endif +#ifdef CEverQuest__LoadStringTables_x +FUNCTION_AT_ADDRESS(void CEverQuest::LoadStringTables(void),CEverQuest__LoadStringTables); +#endif +#ifdef CEverQuest__CEverQuest_x +FUNCTION_AT_ADDRESS( CEverQuest::CEverQuest(struct HWND__ *),CEverQuest__CEverQuest); +#endif +#ifdef CEverQuest__dCEverQuest_x +FUNCTION_AT_ADDRESS( CEverQuest::~CEverQuest(void),CEverQuest__dCEverQuest); +#endif +#ifdef CEverQuest__ProcessMBox_x +FUNCTION_AT_ADDRESS(int CEverQuest::ProcessMBox(void),CEverQuest__ProcessMBox); +#endif +#ifdef CEverQuest__UseCharge_x +FUNCTION_AT_ADDRESS(void CEverQuest::UseCharge(unsigned long),CEverQuest__UseCharge); +#endif +#ifdef CEverQuest__LeaveGuildMaster_x +FUNCTION_AT_ADDRESS(void CEverQuest::LeaveGuildMaster(void),CEverQuest__LeaveGuildMaster); +#endif +#ifdef CEverQuest__LeaveBankMode_x +FUNCTION_AT_ADDRESS(void CEverQuest::LeaveBankMode(bool),CEverQuest__LeaveBankMode); +#endif +#ifdef CEverQuest__ReportDeath_x +FUNCTION_AT_ADDRESS(void CEverQuest::ReportDeath(struct _EQPlayerDeath *),CEverQuest__ReportDeath); +#endif +#ifdef CEverQuest__SetDefaultDamageDescByRace_x +FUNCTION_AT_ADDRESS(void CEverQuest::SetDefaultDamageDescByRace(char *,int,unsigned char),CEverQuest__SetDefaultDamageDescByRace); +#endif +#ifdef CEverQuest__ReportSuccessfulHit_x +FUNCTION_AT_ADDRESS(void CEverQuest::ReportSuccessfulHit(struct _EQSuccessfulHit *,unsigned char,int),CEverQuest__ReportSuccessfulHit); +#endif +#ifdef CEverQuest__GetCombatSound_x +FUNCTION_AT_ADDRESS(int CEverQuest::GetCombatSound(class EQPlayer *,class EQPlayer *),CEverQuest__GetCombatSound); +#endif +#ifdef CEverQuest__LocalDeath_x +FUNCTION_AT_ADDRESS(void CEverQuest::LocalDeath(struct _EQPlayerDeath *,unsigned char),CEverQuest__LocalDeath); +#endif +#ifdef CEverQuest__PrepareLocalPCForRepop_x +FUNCTION_AT_ADDRESS(void CEverQuest::PrepareLocalPCForRepop(void),CEverQuest__PrepareLocalPCForRepop); +#endif +#ifdef CEverQuest__SavePCForce_x +FUNCTION_AT_ADDRESS(void CEverQuest::SavePCForce(int),CEverQuest__SavePCForce); +#endif +#ifdef CEverQuest__StartCasting_x +FUNCTION_AT_ADDRESS(void CEverQuest::StartCasting(void *),CEverQuest__StartCasting); +#endif +#ifdef CEverQuest__Consider_x +FUNCTION_AT_ADDRESS(void CEverQuest::Consider(class EQPlayer *,void *),CEverQuest__Consider); +#endif +#ifdef CEverQuest__GetClassDesc_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GetClassDesc(int),CEverQuest__GetClassDesc); +#endif +#ifdef CEverQuest__GetClassThreeLetterCode_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GetClassThreeLetterCode(int),CEverQuest__GetClassThreeLetterCode); +#endif +#ifdef CEverQuest__GetItemClassDesc_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GetItemClassDesc(int),CEverQuest__GetItemClassDesc); +#endif +#ifdef CEverQuest__GetBodyTypeDesc_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GetBodyTypeDesc(int),CEverQuest__GetBodyTypeDesc); +#endif +#ifdef CEverQuest__GetLangDesc_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GetLangDesc(int),CEverQuest__GetLangDesc); +#endif +#ifdef CEverQuest__GetRaceDesc_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GetRaceDesc(int),CEverQuest__GetRaceDesc); +#endif +#ifdef CEverQuest__GetDeityDesc_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GetDeityDesc(int),CEverQuest__GetDeityDesc); +#endif +#ifdef CEverQuest__GuildInvite_x +FUNCTION_AT_ADDRESS(void CEverQuest::GuildInvite(char *,char *),CEverQuest__GuildInvite); +#endif +#ifdef CEverQuest__GuildRemove_x +FUNCTION_AT_ADDRESS(void CEverQuest::GuildRemove(char *),CEverQuest__GuildRemove); +#endif +#ifdef CEverQuest__GuildDelete_x +FUNCTION_AT_ADDRESS(void CEverQuest::GuildDelete(void),CEverQuest__GuildDelete); +#endif +#ifdef CEverQuest__GuildStatus_x +FUNCTION_AT_ADDRESS(void CEverQuest::GuildStatus(char *),CEverQuest__GuildStatus); +#endif +#ifdef CEverQuest__GuildLeader_x +FUNCTION_AT_ADDRESS(void CEverQuest::GuildLeader(char *),CEverQuest__GuildLeader); +#endif +#ifdef CEverQuest__GuildSay_x +FUNCTION_AT_ADDRESS(void CEverQuest::GuildSay(char *),CEverQuest__GuildSay); +#endif +#ifdef CEverQuest__Who_x +FUNCTION_AT_ADDRESS(void CEverQuest::Who(char *),CEverQuest__Who); +#endif +#ifdef CEverQuest__GetInnateDesc_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GetInnateDesc(int),CEverQuest__GetInnateDesc); +#endif +#ifdef CEverQuest__InviteOk_x +FUNCTION_AT_ADDRESS(void CEverQuest::InviteOk(char *),CEverQuest__InviteOk); +#endif +#ifdef CEverQuest__doUnInvite_x +FUNCTION_AT_ADDRESS(void CEverQuest::doUnInvite(char *),CEverQuest__doUnInvite); +#endif +#ifdef CEverQuest__Invite_x +FUNCTION_AT_ADDRESS(void CEverQuest::Invite(int),CEverQuest__Invite); +#endif +#ifdef CEverQuest__doInvite_x +FUNCTION_AT_ADDRESS(void CEverQuest::doInvite(unsigned __int32,char *),CEverQuest__doInvite); +#endif +#ifdef CEverQuest__Follow_x +FUNCTION_AT_ADDRESS(void CEverQuest::Follow(void),CEverQuest__Follow); +#endif +#ifdef CEverQuest__Disband_x +FUNCTION_AT_ADDRESS(void CEverQuest::Disband(void),CEverQuest__Disband); +#endif +#ifdef CEverQuest__GuildWar_x +FUNCTION_AT_ADDRESS(void CEverQuest::GuildWar(char *,int),CEverQuest__GuildWar); +#endif +#ifdef CEverQuest__GuildPeace_x +FUNCTION_AT_ADDRESS(void CEverQuest::GuildPeace(char *),CEverQuest__GuildPeace); +#endif +#ifdef CEverQuest__Sit_x +FUNCTION_AT_ADDRESS(void CEverQuest::Sit(void),CEverQuest__Sit); +#endif +#ifdef CEverQuest__Camp_x +FUNCTION_AT_ADDRESS(void CEverQuest::Camp(void),CEverQuest__Camp); +#endif +#ifdef CEverQuest__DropHeldItemOnGround_x +FUNCTION_AT_ADDRESS(void CEverQuest::DropHeldItemOnGround(int),CEverQuest__DropHeldItemOnGround); +#endif +#ifdef CEverQuest__MoveMoney_x +FUNCTION_AT_ADDRESS(int CEverQuest::MoveMoney(int,int,int,int,int,bool),CEverQuest__MoveMoney); +#endif +#ifdef CEverQuest__DropHeldMoneyOnGround_x +FUNCTION_AT_ADDRESS(void CEverQuest::DropHeldMoneyOnGround(int),CEverQuest__DropHeldMoneyOnGround); +#endif +#ifdef CEverQuest__LMouseUp_x +FUNCTION_AT_ADDRESS(void CEverQuest::LMouseUp(int,int),CEverQuest__LMouseUp); +#endif +#ifdef CEverQuest__LeftClickedOnPlayer_x +FUNCTION_AT_ADDRESS(void CEverQuest::LeftClickedOnPlayer(class EQPlayer *),CEverQuest__LeftClickedOnPlayer); +#endif +#ifdef CEverQuest__DropItemOrMoneyOnPlayer_x +FUNCTION_AT_ADDRESS(void CEverQuest::DropItemOrMoneyOnPlayer(class EQPlayer *),CEverQuest__DropItemOrMoneyOnPlayer); +#endif +#ifdef CEverQuest__RightClickedOnPlayer_x +FUNCTION_AT_ADDRESS(void CEverQuest::RightClickedOnPlayer(class EQPlayer *, int),CEverQuest__RightClickedOnPlayer); +#endif +#ifdef CEverQuest__send_social_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_social(int,char *,char *),CEverQuest__send_social); +#endif +#ifdef CEverQuest__SavePC_x +FUNCTION_AT_ADDRESS(void CEverQuest::SavePC(int,int,unsigned char),CEverQuest__SavePC); +#endif +#ifdef CEverQuest__send_tell_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_tell(char *,char *),CEverQuest__send_tell); +#endif +#ifdef CEverQuest__send_petition_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_petition(void),CEverQuest__send_petition); +#endif +#ifdef CEverQuest__send_private_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_private(void),CEverQuest__send_private); +#endif +#ifdef CEverQuest__WriteIntToClientINI_x +FUNCTION_AT_ADDRESS(void CEverQuest::WriteIntToClientINI(int,char *,char *),CEverQuest__WriteIntToClientINI); +#endif +#ifdef CEverQuest__WriteFloatToClientINI_x +FUNCTION_AT_ADDRESS(void CEverQuest::WriteFloatToClientINI(float,char *,char *),CEverQuest__WriteFloatToClientINI); +#endif +#ifdef CEverQuest__WriteBoolToClientINI_x +FUNCTION_AT_ADDRESS(void CEverQuest::WriteBoolToClientINI(bool,char *,char *),CEverQuest__WriteBoolToClientINI); +#endif +#ifdef CEverQuest__WriteStringToClientINI_x +FUNCTION_AT_ADDRESS(void CEverQuest::WriteStringToClientINI(char *,char *,char *),CEverQuest__WriteStringToClientINI); +#endif +#ifdef CEverQuest__ReadClientINIString_x +FUNCTION_AT_ADDRESS(char * CEverQuest::ReadClientINIString(char *,char *,char *,char *,int),CEverQuest__ReadClientINIString); +#endif +#ifdef CEverQuest__ReadClientINIInt_x +FUNCTION_AT_ADDRESS(int CEverQuest::ReadClientINIInt(char *,char *,int),CEverQuest__ReadClientINIInt); +#endif +#ifdef CEverQuest__ReadClientINIFloat_x +FUNCTION_AT_ADDRESS(float CEverQuest::ReadClientINIFloat(char *,char *,float),CEverQuest__ReadClientINIFloat); +#endif +#ifdef CEverQuest__ReadClientINIBool_x +FUNCTION_AT_ADDRESS(bool CEverQuest::ReadClientINIBool(char *,char *,bool),CEverQuest__ReadClientINIBool); +#endif +#ifdef CEverQuest__WriteIntToUIINI_x +FUNCTION_AT_ADDRESS(void CEverQuest::WriteIntToUIINI(int,char *,char *),CEverQuest__WriteIntToUIINI); +#endif +#ifdef CEverQuest__WriteBoolToUIINI_x +FUNCTION_AT_ADDRESS(void CEverQuest::WriteBoolToUIINI(bool,char *,char *),CEverQuest__WriteBoolToUIINI); +#endif +#ifdef CEverQuest__WriteStringToUIINI_x +FUNCTION_AT_ADDRESS(void CEverQuest::WriteStringToUIINI(char *,char *,char *),CEverQuest__WriteStringToUIINI); +#endif +#ifdef CEverQuest__ReadUIINIString_x +FUNCTION_AT_ADDRESS(char * CEverQuest::ReadUIINIString(char *,char *,char *,char *,int),CEverQuest__ReadUIINIString); +#endif +#ifdef CEverQuest__ReadUIINIInt_x +FUNCTION_AT_ADDRESS(int CEverQuest::ReadUIINIInt(char *,char *,int),CEverQuest__ReadUIINIInt); +#endif +#ifdef CEverQuest__ReadUIINIBool_x +FUNCTION_AT_ADDRESS(bool CEverQuest::ReadUIINIBool(char *,char *,bool),CEverQuest__ReadUIINIBool); +#endif +#ifdef CEverQuest__SaveCamerasToINI_x +FUNCTION_AT_ADDRESS(void CEverQuest::SaveCamerasToINI(void),CEverQuest__SaveCamerasToINI); +#endif +#ifdef CEverQuest__saveOptions_x +FUNCTION_AT_ADDRESS(void CEverQuest::saveOptions(void),CEverQuest__saveOptions); +#endif +#ifdef CEverQuest__saveOptions2_x +FUNCTION_AT_ADDRESS(void CEverQuest::saveOptions2(void),CEverQuest__saveOptions2); +#endif +#ifdef CEverQuest__send_update_filters_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_update_filters(void),CEverQuest__send_update_filters); +#endif +#ifdef CEverQuest__loadOptions_x +FUNCTION_AT_ADDRESS(void CEverQuest::loadOptions(void),CEverQuest__loadOptions); +#endif +#ifdef CEverQuest__DoSplit_x +FUNCTION_AT_ADDRESS(void CEverQuest::DoSplit(char *),CEverQuest__DoSplit); +#endif +#ifdef CEverQuest__BeingIgnored_x +FUNCTION_AT_ADDRESS(int CEverQuest::BeingIgnored(char *),CEverQuest__BeingIgnored); +#endif +#ifdef CEverQuest__IsFriend_x +FUNCTION_AT_ADDRESS(int CEverQuest::IsFriend(char const *),CEverQuest__IsFriend); +#endif +#ifdef CEverQuest__ToggleAutoSplit_x +FUNCTION_AT_ADDRESS(void CEverQuest::ToggleAutoSplit(void),CEverQuest__ToggleAutoSplit); +#endif +#ifdef CEverQuest__procMouse_x +FUNCTION_AT_ADDRESS(void CEverQuest::procMouse(int),CEverQuest__procMouse); +#endif +#ifdef CEverQuest__StripShipName_x +FUNCTION_AT_ADDRESS(char * CEverQuest::StripShipName(char *,char *),CEverQuest__StripShipName); +#endif +#ifdef CEverQuest__trimName_x +FUNCTION_AT_ADDRESS(char * CEverQuest::trimName(char *),CEverQuest__trimName); +#endif +#ifdef CEverQuest__CancelSneakHide_x +FUNCTION_AT_ADDRESS(void CEverQuest::CancelSneakHide(void),CEverQuest__CancelSneakHide); +#endif +#ifdef CEverQuest__stripName_x +FUNCTION_AT_ADDRESS(char * CEverQuest::stripName(char *),CEverQuest__stripName); +#endif +#ifdef CEverQuest__clr_chat_input_x +FUNCTION_AT_ADDRESS(void CEverQuest::clr_chat_input(void),CEverQuest__clr_chat_input); +#endif +#ifdef CEverQuest__dsp_chat_x +FUNCTION_AT_ADDRESS(void CEverQuest::dsp_chat(char const *,int,bool,bool),CEverQuest__dsp_chat); +void CEverQuest::dsp_chat(char const *a, int b, bool c) { dsp_chat(a, b, c, 1); } +#endif +#ifdef CEverQuest__DoTellWindow_x +FUNCTION_AT_ADDRESS(void CEverQuest::DoTellWindow(char *message,char *name,char *name2,void *unknown,int color,bool b),CEverQuest__DoTellWindow); +#endif +#ifdef CEverQuest__dsp_chat1_x +FUNCTION_AT_ADDRESS(void CEverQuest::dsp_chat(char const *),CEverQuest__dsp_chat1); +#endif +#ifdef CEverQuest__DoPercentConvert_x +FUNCTION_AT_ADDRESS(void CEverQuest::DoPercentConvert(char *,bool),CEverQuest__DoPercentConvert); +#endif +#ifdef CEverQuest__Emote_x +FUNCTION_AT_ADDRESS(void CEverQuest::Emote(void),CEverQuest__Emote); +#endif +#ifdef CEverQuest__send_broadcast_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_broadcast(void),CEverQuest__send_broadcast); +#endif +#ifdef CEverQuest__send_chat_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_chat(void),CEverQuest__send_chat); +#endif +#ifdef CEverQuest__send_gsay_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_gsay(void),CEverQuest__send_gsay); +#endif +#ifdef CEverQuest__reqChannel_x +FUNCTION_AT_ADDRESS(void CEverQuest::reqChannel(void),CEverQuest__reqChannel); +#endif +#ifdef CEverQuest__send_shout_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_shout(void),CEverQuest__send_shout); +#endif +#ifdef CEverQuest__send_auction_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_auction(void),CEverQuest__send_auction); +#endif +#ifdef CEverQuest__send_ooc_x +FUNCTION_AT_ADDRESS(void CEverQuest::send_ooc(void),CEverQuest__send_ooc); +#endif +#ifdef CEverQuest__GetCurrentLanguage_x +FUNCTION_AT_ADDRESS(int CEverQuest::GetCurrentLanguage(void),CEverQuest__GetCurrentLanguage); +#endif +#ifdef CEverQuest__SendNewText_x +FUNCTION_AT_ADDRESS(void CEverQuest::SendNewText(int,char *,char *),CEverQuest__SendNewText); +#endif +#ifdef CEverQuest__DisplayScreen_x +FUNCTION_AT_ADDRESS(void CEverQuest::DisplayScreen(char *),CEverQuest__DisplayScreen); +#endif +#ifdef CEverQuest__IsValidName_x +FUNCTION_AT_ADDRESS(int CEverQuest::IsValidName(char *),CEverQuest__IsValidName); +#endif +#ifdef CEverQuest__DoNewCharacterCreation_x +FUNCTION_AT_ADDRESS(void CEverQuest::DoNewCharacterCreation(void),CEverQuest__DoNewCharacterCreation); +#endif +#ifdef CEverQuest__RemoveCharacterOptionFile_x +FUNCTION_AT_ADDRESS(void CEverQuest::RemoveCharacterOptionFile(char *),CEverQuest__RemoveCharacterOptionFile); +#endif +#ifdef CEverQuest__SetDefaultGameValues_x +FUNCTION_AT_ADDRESS(void CEverQuest::SetDefaultGameValues(void),CEverQuest__SetDefaultGameValues); +#endif +#ifdef CEverQuest__SetPlayerAppearanceFromPInfo_x +FUNCTION_AT_ADDRESS(void CEverQuest::SetPlayerAppearanceFromPInfo(class EQPlayer *,int,bool),CEverQuest__SetPlayerAppearanceFromPInfo); +#endif +#ifdef CEverQuest__DoCharacterSelection_x +FUNCTION_AT_ADDRESS(void CEverQuest::DoCharacterSelection(void),CEverQuest__DoCharacterSelection); +#endif +#ifdef CEverQuest__DoLogin_x +FUNCTION_AT_ADDRESS(int CEverQuest::DoLogin(struct HWND__ *,struct HINSTANCE__ *),CEverQuest__DoLogin); +#endif +#ifdef CEverQuest__SetupCharSelectCamera_x +FUNCTION_AT_ADDRESS(void CEverQuest::SetupCharSelectCamera(void),CEverQuest__SetupCharSelectCamera); +#endif +#ifdef CEverQuest__CreateDataSubdirectories_x +FUNCTION_AT_ADDRESS(void CEverQuest::CreateDataSubdirectories(void),CEverQuest__CreateDataSubdirectories); +#endif +#ifdef CEverQuest__CreateFilenameServerCode_x +FUNCTION_AT_ADDRESS(void CEverQuest::CreateFilenameServerCode(char *),CEverQuest__CreateFilenameServerCode); +#endif +#ifdef CEverQuest__CreateIniFilenames_x +FUNCTION_AT_ADDRESS(void CEverQuest::CreateIniFilenames(void),CEverQuest__CreateIniFilenames); +#endif +#ifdef CEverQuest__StartNetworkGame_x +FUNCTION_AT_ADDRESS(void CEverQuest::StartNetworkGame(struct HWND__ *,struct HINSTANCE__ *,char *),CEverQuest__StartNetworkGame); +#endif +#ifdef CEverQuest__GetZoneInfoFromNetwork_x +FUNCTION_AT_ADDRESS(void CEverQuest::GetZoneInfoFromNetwork(char *),CEverQuest__GetZoneInfoFromNetwork); +#endif +#ifdef CEverQuest__EnterZone_x +FUNCTION_AT_ADDRESS(void CEverQuest::EnterZone(struct HWND__ *),CEverQuest__EnterZone); +#endif +#ifdef CEverQuest__Surname_x +FUNCTION_AT_ADDRESS(void CEverQuest::Surname(char *),CEverQuest__Surname); +#endif +#ifdef CEverQuest__Kill_x +FUNCTION_AT_ADDRESS(void CEverQuest::Kill(char *,char *),CEverQuest__Kill); +#endif +#ifdef CEverQuest__UpdateMyAppearance_x +FUNCTION_AT_ADDRESS(void CEverQuest::UpdateMyAppearance(void),CEverQuest__UpdateMyAppearance); +#endif +#ifdef CEverQuest__IFoundMyVehicle_x +FUNCTION_AT_ADDRESS(unsigned char CEverQuest::IFoundMyVehicle(void),CEverQuest__IFoundMyVehicle); +#endif +#ifdef CEverQuest__ProcessLocalPCIni_x +FUNCTION_AT_ADDRESS(void CEverQuest::ProcessLocalPCIni(int),CEverQuest__ProcessLocalPCIni); +#endif +#ifdef CEverQuest__DoMainLoop_x +FUNCTION_AT_ADDRESS(void CEverQuest::DoMainLoop(struct HWND__ *),CEverQuest__DoMainLoop); +#endif +#ifdef CEverQuest__ProcessControls_x +FUNCTION_AT_ADDRESS(void CEverQuest::ProcessControls(void),CEverQuest__ProcessControls); +#endif +#ifdef CEverQuest__TypingMode_x +FUNCTION_AT_ADDRESS(int CEverQuest::TypingMode(void),CEverQuest__TypingMode); +#endif +#ifdef CEverQuest__IsInTypingMode_x +FUNCTION_AT_ADDRESS(bool CEverQuest::IsInTypingMode(void),CEverQuest__IsInTypingMode); +#endif +#ifdef CEverQuest__doInspect_x +FUNCTION_AT_ADDRESS(void CEverQuest::doInspect(class EQPlayer *),CEverQuest__doInspect); +#endif +#ifdef __do_loot_x +FUNCTION_AT_ADDRESS(void CEverQuest::doLoot(void),__do_loot); +#endif +#ifdef CEverQuest__SendLightInfo_x +FUNCTION_AT_ADDRESS(void CEverQuest::SendLightInfo(class EQPlayer *,unsigned char),CEverQuest__SendLightInfo); +#endif +#ifdef CEverQuest__SetTimedFog_x +FUNCTION_AT_ADDRESS(void CEverQuest::SetTimedFog(int),CEverQuest__SetTimedFog); +#endif +#ifdef CEverQuest__ProcessGame_x +FUNCTION_AT_ADDRESS(void CEverQuest::ProcessGame(struct HWND__ *,struct HINSTANCE__ *),CEverQuest__ProcessGame); +#endif +#ifdef CEverQuest__DoLoadScreenProgressBar_x +FUNCTION_AT_ADDRESS(void __cdecl CEverQuest::DoLoadScreenProgressBar(int,char const *,...),CEverQuest__DoLoadScreenProgressBar); +#endif +#ifdef CEverQuest__DoLoadScreen_x +FUNCTION_AT_ADDRESS(void CEverQuest::DoLoadScreen(int),CEverQuest__DoLoadScreen); +#endif +#ifdef CEverQuest__CleanupBadFiles_x +FUNCTION_AT_ADDRESS(void CEverQuest::CleanupBadFiles(void),CEverQuest__CleanupBadFiles); +#endif +#ifdef CEverQuest__CreateInitialActors_x +FUNCTION_AT_ADDRESS(void CEverQuest::CreateInitialActors(void),CEverQuest__CreateInitialActors); +#endif +#ifdef CEverQuest__GetSndDriver_x +FUNCTION_AT_ADDRESS(void CEverQuest::GetSndDriver(void),CEverQuest__GetSndDriver); +#endif +#ifdef CEverQuest__InterpretCmd_x +FUNCTION_AT_ADDRESS(void CEverQuest::InterpretCmd(class EQPlayer *,char *),CEverQuest__InterpretCmd); +#endif +#ifdef CEverQuest__GrabFirstWord_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GrabFirstWord(char *,char *),CEverQuest__GrabFirstWord); +#endif +#ifdef CEverQuest__GrabFirstWord2_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GrabFirstWord2(char *,char *,int),CEverQuest__GrabFirstWord2); +#endif +#ifdef CEverQuest__CopyFirstWord_x +FUNCTION_AT_ADDRESS(void CEverQuest::CopyFirstWord(char *,char *),CEverQuest__CopyFirstWord); +#endif +#ifdef CEverQuest__ApplyPoison_x +FUNCTION_AT_ADDRESS(void CEverQuest::ApplyPoison(unsigned long),CEverQuest__ApplyPoison); +#endif +#ifdef CEverQuest__DeacSpellScreen_x +FUNCTION_AT_ADDRESS(void CEverQuest::DeacSpellScreen(void),CEverQuest__DeacSpellScreen); +#endif +#ifdef CEverQuest__IsZoneAvailable_x +//FUNCTION_AT_ADDRESS(enum ZONE_REQ_STATUS CEverQuest::IsZoneAvailable(char *,enum EQZoneIndex,enum ZONE_REQ_REASON),CEverQuest__IsZoneAvailable); +#endif +#ifdef CEverQuest__MoveToZone_x +FUNCTION_AT_ADDRESS(void CEverQuest::MoveToZone(int EQZoneIndex,char *,int,int ZONE_REQ_REASON,float,float,float,int),CEverQuest__MoveToZone); +#endif +#ifdef CEverQuest__MoveToZone1_x +//FUNCTION_AT_ADDRESS(void CEverQuest::MoveToZone(char *,char *,int,enum ZONE_REQ_REASON),CEverQuest__MoveToZone1); +#endif +#ifdef CEverQuest__LMouseDown_x +FUNCTION_AT_ADDRESS(void CEverQuest::LMouseDown(int,int),CEverQuest__LMouseDown); +#endif +#ifdef CEverQuest__RMouseDown_x +FUNCTION_AT_ADDRESS(void CEverQuest::RMouseDown(int,int),CEverQuest__RMouseDown); +#endif +#ifdef CEverQuest__RMouseUp_x +FUNCTION_AT_ADDRESS(void CEverQuest::RMouseUp(int,int),CEverQuest__RMouseUp); +#endif +#ifdef CEverQuest__MouseWheelScrolled_x +FUNCTION_AT_ADDRESS(void CEverQuest::MouseWheelScrolled(int),CEverQuest__MouseWheelScrolled); +#endif +#ifdef CEverQuest__ClickedSwitch_x +FUNCTION_AT_ADDRESS(class EQSwitch * CEverQuest::ClickedSwitch(int,int),CEverQuest__ClickedSwitch); +#endif +#ifdef CEverQuest__ClickedPlayer_x +FUNCTION_AT_ADDRESS(class EQPlayer * CEverQuest::ClickedPlayer(int,int),CEverQuest__ClickedPlayer); +#endif +#ifdef CEverQuest__WhatTimeIsIt_x +FUNCTION_AT_ADDRESS(void CEverQuest::WhatTimeIsIt(void),CEverQuest__WhatTimeIsIt); +#endif +#ifdef CEverQuest__FreeSwitches_x +FUNCTION_AT_ADDRESS(void CEverQuest::FreeSwitches(void),CEverQuest__FreeSwitches); +#endif +#ifdef CEverQuest__LoadSwitchesNonAvatar_x +//FUNCTION_AT_ADDRESS(void CEverQuest::LoadSwitchesNonAvatar(enum EQZoneIndex),CEverQuest__LoadSwitchesNonAvatar); +#endif +#ifdef CEverQuest__SetLfgPlayerStatus_x +FUNCTION_AT_ADDRESS(void CEverQuest::SetLfgPlayerStatus(struct LfgPlayerStatus *),CEverQuest__SetLfgPlayerStatus); +#endif +#ifdef CEverQuest__SetLfgGroupStatus_x +FUNCTION_AT_ADDRESS(void CEverQuest::SetLfgGroupStatus(struct LfgGroupStatus *),CEverQuest__SetLfgGroupStatus); +#endif +#ifdef CEverQuest__IssueLfgPlayerQuery_x +FUNCTION_AT_ADDRESS(void CEverQuest::IssueLfgPlayerQuery(struct LfgPlayerQuery *),CEverQuest__IssueLfgPlayerQuery); +#endif +#ifdef CEverQuest__IssueLfgGroupQuery_x +FUNCTION_AT_ADDRESS(void CEverQuest::IssueLfgGroupQuery(struct LfgGroupQuery *),CEverQuest__IssueLfgGroupQuery); +#endif +#ifdef CEverQuest__IssuePetCommand_x +//FUNCTION_AT_ADDRESS(void CEverQuest::IssuePetCommand(enum PetCommandType,int),CEverQuest__IssuePetCommand); +#endif +#ifdef CEverQuest__LootCorpse_x +FUNCTION_AT_ADDRESS(int CEverQuest::LootCorpse(class EQPlayer *,int),CEverQuest__LootCorpse); +#endif +#ifdef CEverQuest__loadSoundsGame_x +FUNCTION_AT_ADDRESS(void CEverQuest::loadSoundsGame(void),CEverQuest__loadSoundsGame); +#endif +#ifdef CEverQuest__GetSingleMessage_x +FUNCTION_AT_ADDRESS(char * CEverQuest::GetSingleMessage(unsigned __int32,int,int *,char *),CEverQuest__GetSingleMessage); +#endif +#ifdef CEverQuest__SetGameState_x +FUNCTION_AT_ADDRESS(void CEverQuest::SetGameState(int),CEverQuest__SetGameState); +#endif +#ifdef CEverQuest__IsOkToTransact_x +FUNCTION_AT_ADDRESS(bool CEverQuest::IsOkToTransact(void),CEverQuest__IsOkToTransact); +#endif +#ifdef CEverQuest__SortSpellLoadouts_x +FUNCTION_AT_ADDRESS(void CEverQuest::SortSpellLoadouts(void),CEverQuest__SortSpellLoadouts); +#endif +#ifdef CEverQuest__saveCustom_x +FUNCTION_AT_ADDRESS(void CEverQuest::saveCustom(void),CEverQuest__saveCustom); +#endif +#ifdef CEverQuest__loadCustomFromINI_x +FUNCTION_AT_ADDRESS(void CEverQuest::loadCustomFromINI(char *),CEverQuest__loadCustomFromINI); +#endif +#ifdef CEverQuest__loadCustom_x +FUNCTION_AT_ADDRESS(void CEverQuest::loadCustom(void),CEverQuest__loadCustom); +#endif +#ifdef CEverQuest__initCustom_x +FUNCTION_AT_ADDRESS(void CEverQuest::initCustom(void),CEverQuest__initCustom); +#endif +#ifdef _EverQuestinfo__SetAutoAttack_x +FUNCTION_AT_ADDRESS(void _EverQuestinfo::SetAutoAttack(bool),_EverQuestinfo__SetAutoAttack); +#endif +#ifdef GrammarRulesClass__GrammarRulesClass_x +FUNCTION_AT_ADDRESS( GrammarRulesClass::GrammarRulesClass(void),GrammarRulesClass__GrammarRulesClass); +#endif +#ifdef GrammarRulesClass__Parse_x +FUNCTION_AT_ADDRESS(char * GrammarRulesClass::Parse(char *),GrammarRulesClass__Parse); +#endif +#ifdef GrammarRulesClass__Resolve_x +FUNCTION_AT_ADDRESS(char * GrammarRulesClass::Resolve(int,int,char *,char *),GrammarRulesClass__Resolve); +#endif +#ifdef GrammarRulesClass__RuleEn1_x +FUNCTION_AT_ADDRESS(void GrammarRulesClass::RuleEn1(char *,char *),GrammarRulesClass__RuleEn1); +#endif +#ifdef GrammarRulesClass__RuleEn2_x +FUNCTION_AT_ADDRESS(void GrammarRulesClass::RuleEn2(char *,char *),GrammarRulesClass__RuleEn2); +#endif +#ifdef GrammarRulesClass__RuleEn3_x +FUNCTION_AT_ADDRESS(void GrammarRulesClass::RuleEn3(char *,char *,char *,char *),GrammarRulesClass__RuleEn3); +#endif +#ifdef GrammarRulesClass__RuleEn4_x +FUNCTION_AT_ADDRESS(void GrammarRulesClass::RuleEn4(char *,char *,char *,char *),GrammarRulesClass__RuleEn4); +#endif +#ifdef GrammarRulesClass__RuleKo1_x +FUNCTION_AT_ADDRESS(void GrammarRulesClass::RuleKo1(char *,char *,char *,char *),GrammarRulesClass__RuleKo1); +#endif +#ifdef GrammarRulesClass__RuleFr1_x +FUNCTION_AT_ADDRESS(void GrammarRulesClass::RuleFr1(char *,char *,char *,char *),GrammarRulesClass__RuleFr1); +#endif +#ifdef GrammarRulesClass__RuleDe1_x +FUNCTION_AT_ADDRESS(void GrammarRulesClass::RuleDe1(char *,char *),GrammarRulesClass__RuleDe1); +#endif +#ifdef KeypressHandler__KeypressHandler_x +FUNCTION_AT_ADDRESS( KeypressHandler::KeypressHandler(void),KeypressHandler__KeypressHandler); +#endif +#ifdef KeypressHandler__AttachKeyToEqCommand_x +FUNCTION_AT_ADDRESS(bool KeypressHandler::AttachKeyToEqCommand(class KeyCombo const &,unsigned int),KeypressHandler__AttachKeyToEqCommand); +#endif +#ifdef KeypressHandler__AttachAltKeyToEqCommand_x +FUNCTION_AT_ADDRESS(bool KeypressHandler::AttachAltKeyToEqCommand(class KeyCombo const &,unsigned int),KeypressHandler__AttachAltKeyToEqCommand); +#endif +#ifdef KeypressHandler__HandleKeyDown_x +FUNCTION_AT_ADDRESS(bool KeypressHandler::HandleKeyDown(class KeyCombo const &),KeypressHandler__HandleKeyDown); +#endif +#ifdef KeypressHandler__HandleKeyUp_x +FUNCTION_AT_ADDRESS(bool KeypressHandler::HandleKeyUp(class KeyCombo const &),KeypressHandler__HandleKeyUp); +#endif +#ifdef KeypressHandler__GetKeyAttachedToEqCommand_x +FUNCTION_AT_ADDRESS(class KeyCombo const & KeypressHandler::GetKeyAttachedToEqCommand(unsigned int)const ,KeypressHandler__GetKeyAttachedToEqCommand); +#endif +#ifdef KeypressHandler__GetAltKeyAttachedToEqCommand_x +FUNCTION_AT_ADDRESS(class KeyCombo const & KeypressHandler::GetAltKeyAttachedToEqCommand(unsigned int)const ,KeypressHandler__GetAltKeyAttachedToEqCommand); +#endif +#ifdef KeypressHandler__ResetKeysToEqDefaults_x +FUNCTION_AT_ADDRESS(void KeypressHandler::ResetKeysToEqDefaults(void),KeypressHandler__ResetKeysToEqDefaults); +#endif +#ifdef KeypressHandler__MapKeyToEqCommand_x +FUNCTION_AT_ADDRESS(bool KeypressHandler::MapKeyToEqCommand(class KeyCombo const &,int,unsigned int),KeypressHandler__MapKeyToEqCommand); +#endif +#ifdef KeypressHandler__IsReservedKey_x +FUNCTION_AT_ADDRESS(bool KeypressHandler::IsReservedKey(class KeyCombo const &)const ,KeypressHandler__IsReservedKey); +#endif +#ifdef KeypressHandler__LoadAndSetKeymappings_x +FUNCTION_AT_ADDRESS(void KeypressHandler::LoadAndSetKeymappings(void),KeypressHandler__LoadAndSetKeymappings); +#endif +#ifdef KeypressHandler__LoadKeymapping_x +FUNCTION_AT_ADDRESS(bool KeypressHandler::LoadKeymapping(unsigned int,int,class KeyCombo *),KeypressHandler__LoadKeymapping); +#endif +#ifdef KeypressHandler__SaveKeymapping_x +FUNCTION_AT_ADDRESS(void KeypressHandler::SaveKeymapping(unsigned int,class KeyCombo const &,int),KeypressHandler__SaveKeymapping); +#endif +#ifdef KeypressHandler__GetEqCommandSaveName_x +FUNCTION_AT_ADDRESS(class CXStr KeypressHandler::GetEqCommandSaveName(unsigned int,int)const ,KeypressHandler__GetEqCommandSaveName); +#endif +#ifdef KeypressHandler__LoadAndConvertOldKeymappingFormat_x +FUNCTION_AT_ADDRESS(bool KeypressHandler::LoadAndConvertOldKeymappingFormat(unsigned int,int,class KeyCombo *),KeypressHandler__LoadAndConvertOldKeymappingFormat); +#endif +#ifdef KeypressHandler__ClearCommandStateArray_x +FUNCTION_AT_ADDRESS(void KeypressHandler::ClearCommandStateArray(void),KeypressHandler__ClearCommandStateArray); +#endif +#ifdef MemoryPoolManager__MemoryPoolManager_x +FUNCTION_AT_ADDRESS( MemoryPoolManager::MemoryPoolManager(void),MemoryPoolManager__MemoryPoolManager); +#endif +#ifdef MemoryPoolManager__dMemoryPoolManager_x +FUNCTION_AT_ADDRESS( MemoryPoolManager::~MemoryPoolManager(void),MemoryPoolManager__dMemoryPoolManager); +#endif +#ifdef MemoryPoolManager__Alloc_x +FUNCTION_AT_ADDRESS(void * MemoryPoolManager::Alloc(int),MemoryPoolManager__Alloc); +#endif +#ifdef MemoryPoolManager__Free_x +FUNCTION_AT_ADDRESS(void MemoryPoolManager::Free(void *),MemoryPoolManager__Free); +#endif +#ifdef PacketPackerManager__SetPriority_x +FUNCTION_AT_ADDRESS(void PacketPackerManager::SetPriority(class PacketPacker *,__int64),PacketPackerManager__SetPriority); +#endif +#ifdef PacketPackerManager__RemovePacker_x +FUNCTION_AT_ADDRESS(void PacketPackerManager::RemovePacker(class PacketPacker *),PacketPackerManager__RemovePacker); +#endif +#ifdef PacketPackerManager__UnpackGetFirst_x +FUNCTION_AT_ADDRESS(bool __cdecl PacketPackerManager::UnpackGetFirst(struct PacketPackerState *,unsigned __int32,unsigned char *,int),PacketPackerManager__UnpackGetFirst); +#endif +#ifdef PacketPackerManager__UnpackGetNext_x +FUNCTION_AT_ADDRESS(bool __cdecl PacketPackerManager::UnpackGetNext(struct PacketPackerState *),PacketPackerManager__UnpackGetNext); +#endif +#ifdef PacketPacker__SendStatUpdate_x +FUNCTION_AT_ADDRESS(void PacketPacker::SendStatUpdate(struct _statUpdate *,bool),PacketPacker__SendStatUpdate); +#endif +#ifdef PacketPacker__FlushPositions_x +FUNCTION_AT_ADDRESS(void PacketPacker::FlushPositions(void),PacketPacker__FlushPositions); +#endif +#ifdef PacketPacker__SendPacket_x +FUNCTION_AT_ADDRESS(void PacketPacker::SendPacket(unsigned __int32,void *,int,bool),PacketPacker__SendPacket); +#endif +#ifdef PacketPacker__AddPacketToBuffer_x +//FUNCTION_AT_ADDRESS(void PacketPacker::AddPacketToBuffer(struct PacketPacker::PacketBuffer *,unsigned __int32,void *,int),PacketPacker__AddPacketToBuffer); +#endif +#ifdef PacketPacker__ScheduleUs_x +FUNCTION_AT_ADDRESS(void PacketPacker::ScheduleUs(void),PacketPacker__ScheduleUs); +#endif +#ifdef PacketPacker__Flush_x +FUNCTION_AT_ADDRESS(void PacketPacker::Flush(void),PacketPacker__Flush); +#endif +#ifdef PacketPacker__FlushBuffer_x +//FUNCTION_AT_ADDRESS(void PacketPacker::FlushBuffer(struct PacketPacker::PacketBuffer *),PacketPacker__FlushBuffer); +#endif +#ifdef PacketPacker__Disassociate_x +FUNCTION_AT_ADDRESS(void PacketPacker::Disassociate(void),PacketPacker__Disassociate); +#endif +#ifdef CResolutionHandler__Init_x +FUNCTION_AT_ADDRESS(int __cdecl CResolutionHandler::Init(void),CResolutionHandler__Init); +#endif +#ifdef CResolutionHandler__Shutdown_x +FUNCTION_AT_ADDRESS(void __cdecl CResolutionHandler::Shutdown(void),CResolutionHandler__Shutdown); +#endif +#ifdef CResolutionHandler__SaveSettings_x +FUNCTION_AT_ADDRESS(void __cdecl CResolutionHandler::SaveSettings(void),CResolutionHandler__SaveSettings); +#endif +#ifdef CResolutionHandler__ToggleScreenMode_x +FUNCTION_AT_ADDRESS(void __cdecl CResolutionHandler::ToggleScreenMode(void),CResolutionHandler__ToggleScreenMode); +#endif +#ifdef CResolutionHandler__ChangeToResolution_x +FUNCTION_AT_ADDRESS(void __cdecl CResolutionHandler::ChangeToResolution(int,int,int,int,int),CResolutionHandler__ChangeToResolution); +#endif +#ifdef CResolutionHandler__UpdateWindowPosition_x +FUNCTION_AT_ADDRESS(void __cdecl CResolutionHandler::UpdateWindowPosition(void),CResolutionHandler__UpdateWindowPosition); +#endif +#ifdef CResolutionHandler__GetDesktopWidth_x +FUNCTION_AT_ADDRESS(int __cdecl CResolutionHandler::GetDesktopWidth(void),CResolutionHandler__GetDesktopWidth); +#endif +#ifdef CResolutionHandler__GetDesktopHeight_x +FUNCTION_AT_ADDRESS(int __cdecl CResolutionHandler::GetDesktopHeight(void),CResolutionHandler__GetDesktopHeight); +#endif +#ifdef CResolutionHandler__GetDesktopBitsPerPixel_x +FUNCTION_AT_ADDRESS(int __cdecl CResolutionHandler::GetDesktopBitsPerPixel(void),CResolutionHandler__GetDesktopBitsPerPixel); +#endif +#ifdef CResolutionHandler__GetDesktopRefreshRate_x +FUNCTION_AT_ADDRESS(int __cdecl CResolutionHandler::GetDesktopRefreshRate(void),CResolutionHandler__GetDesktopRefreshRate); +#endif +#ifdef CResolutionHandler__GetWidth_x +FUNCTION_AT_ADDRESS(int __cdecl CResolutionHandler::GetWidth(void),CResolutionHandler__GetWidth); +#endif +#ifdef CResolutionHandler__GetHeight_x +FUNCTION_AT_ADDRESS(int __cdecl CResolutionHandler::GetHeight(void),CResolutionHandler__GetHeight); +#endif +#ifdef CResolutionHandler__IsFullscreenAvailable_x +FUNCTION_AT_ADDRESS(bool __cdecl CResolutionHandler::IsFullscreenAvailable(void),CResolutionHandler__IsFullscreenAvailable); +#endif +#ifdef Util__AllocateString_x +FUNCTION_AT_ADDRESS(char * __cdecl Util::AllocateString(char *),Util__AllocateString); +#endif +#ifdef ChannelServerApi__AllocateString_x +FUNCTION_AT_ADDRESS(char * __cdecl ChannelServerApi::AllocateString(char *),ChannelServerApi__AllocateString); +#endif +#ifdef SoundManager__SoundManager_x +//FUNCTION_AT_ADDRESS( SoundManager::SoundManager(int,int,bool,int,int,bool,enum SpeakerType),SoundManager__SoundManager); +#endif +#ifdef SoundManager__dSoundManager_x +FUNCTION_AT_ADDRESS( SoundManager::~SoundManager(void),SoundManager__dSoundManager); +#endif +#ifdef SoundManager__AddPool_x +//FUNCTION_AT_ADDRESS(void SoundManager::AddPool(enum InstanceType,int,int),SoundManager__AddPool); +#endif +#ifdef SoundManager__GiveTime_x +FUNCTION_AT_ADDRESS(void SoundManager::GiveTime(void),SoundManager__GiveTime); +#endif +#ifdef SoundManager__SetMixAhead_x +FUNCTION_AT_ADDRESS(void SoundManager::SetMixAhead(int),SoundManager__SetMixAhead); +#endif +#ifdef SoundManager__GetListenerEnvironment_x +//FUNCTION_AT_ADDRESS(enum EnvironmentType SoundManager::GetListenerEnvironment(void),SoundManager__GetListenerEnvironment); +#endif +#ifdef SoundManager__SetListenerEnvironment_x +//FUNCTION_AT_ADDRESS(void SoundManager::SetListenerEnvironment(enum EnvironmentType),SoundManager__SetListenerEnvironment); +#endif +#ifdef SoundManager__SetListenerLocation_x +FUNCTION_AT_ADDRESS(void SoundManager::SetListenerLocation(float,float,float,float),SoundManager__SetListenerLocation); +#endif +#ifdef SoundManager__GetListenerLocation_x +FUNCTION_AT_ADDRESS(void SoundManager::GetListenerLocation(float *,float *,float *,float *),SoundManager__GetListenerLocation); +#endif +#ifdef SoundManager__BorrowInstance_x +//FUNCTION_AT_ADDRESS(class SoundInstance * SoundManager::BorrowInstance(enum InstanceType,int),SoundManager__BorrowInstance); +#endif +#ifdef SoundManager__ReturnInstance_x +FUNCTION_AT_ADDRESS(void SoundManager::ReturnInstance(class SoundInstance *),SoundManager__ReturnInstance); +#endif +#ifdef SoundManager__AssetGiveTime_x +FUNCTION_AT_ADDRESS(void SoundManager::AssetGiveTime(void),SoundManager__AssetGiveTime); +#endif +#ifdef SoundManager__AssetAdd_x +FUNCTION_AT_ADDRESS(void SoundManager::AssetAdd(class SoundAsset *),SoundManager__AssetAdd); +#endif +#ifdef SoundManager__AssetRemove_x +FUNCTION_AT_ADDRESS(void SoundManager::AssetRemove(class SoundAsset *),SoundManager__AssetRemove); +#endif +#ifdef SoundManager__AssetGet_x +FUNCTION_AT_ADDRESS(class SoundAsset * SoundManager::AssetGet(char *),SoundManager__AssetGet); +#endif +#ifdef SoundManager__StreamingPlay_x +FUNCTION_AT_ADDRESS(void SoundManager::StreamingPlay(char *),SoundManager__StreamingPlay); +#endif +#ifdef SoundManager__StreamingPause_x +FUNCTION_AT_ADDRESS(void SoundManager::StreamingPause(void),SoundManager__StreamingPause); +#endif +#ifdef SoundManager__StreamingStop_x +FUNCTION_AT_ADDRESS(void SoundManager::StreamingStop(void),SoundManager__StreamingStop); +#endif +#ifdef SoundManager__StreamingSetVolumeLevel_x +FUNCTION_AT_ADDRESS(void SoundManager::StreamingSetVolumeLevel(float),SoundManager__StreamingSetVolumeLevel); +#endif +#ifdef SoundManager__StreamingGetVolumeLevel_x +FUNCTION_AT_ADDRESS(float SoundManager::StreamingGetVolumeLevel(void),SoundManager__StreamingGetVolumeLevel); +#endif +#ifdef SoundManager__StreamingSetSongPosition_x +FUNCTION_AT_ADDRESS(void SoundManager::StreamingSetSongPosition(int),SoundManager__StreamingSetSongPosition); +#endif +#ifdef SoundManager__StreamingGetSongPosition_x +FUNCTION_AT_ADDRESS(int SoundManager::StreamingGetSongPosition(void),SoundManager__StreamingGetSongPosition); +#endif +#ifdef SoundManager__StreamingGetSongLength_x +FUNCTION_AT_ADDRESS(int SoundManager::StreamingGetSongLength(void),SoundManager__StreamingGetSongLength); +#endif +#ifdef SoundManager__StreamingStatus_x +//FUNCTION_AT_ADDRESS(enum StreamingStatus SoundManager::StreamingStatus(void),SoundManager__StreamingStatus); +#endif +#ifdef MusicManager__MusicEntry__MusicEntry_x +//FUNCTION_AT_ADDRESS( MusicManager::MusicEntry::MusicEntry(int,class SoundAsset *,int,float,int,int,int,int,int,int),MusicManager__MusicEntry__MusicEntry); +#endif +#ifdef MusicManager__MusicEntry__dMusicEntry_x +//FUNCTION_AT_ADDRESS( MusicManager::MusicEntry::~MusicEntry(void),MusicManager__MusicEntry__dMusicEntry); +#endif +#ifdef MusicManager__MusicEntry__AdjustVolume_x +//FUNCTION_AT_ADDRESS(void MusicManager::MusicEntry::AdjustVolume(float),MusicManager__MusicEntry__AdjustVolume); +#endif +#ifdef MusicManager__MusicEntry__FadeIn_x +//FUNCTION_AT_ADDRESS(void MusicManager::MusicEntry::FadeIn(float),MusicManager__MusicEntry__FadeIn); +#endif +#ifdef MusicManager__MusicEntry__FadeOut_x +//FUNCTION_AT_ADDRESS(void MusicManager::MusicEntry::FadeOut(bool),MusicManager__MusicEntry__FadeOut); +#endif +#ifdef SoundObject__SoundObject_x +//FUNCTION_AT_ADDRESS( SoundObject::SoundObject(void),SoundObject__SoundObject); +#endif +#ifdef SoundObject__Release_x +//FUNCTION_AT_ADDRESS(void SoundObject::Release(void),SoundObject__Release); +#endif +#ifdef SoundInstance__SoundInstance_x +//FUNCTION_AT_ADDRESS( SoundInstance::SoundInstance(class SoundManager *),SoundInstance__SoundInstance); +#endif +#ifdef SoundInstance__YourManagerDeleted_x +//FUNCTION_AT_ADDRESS(void SoundInstance::YourManagerDeleted(void),SoundInstance__YourManagerDeleted); +#endif +#ifdef flex_unit__clear_x +FUNCTION_AT_ADDRESS(void flex_unit::clear(void),flex_unit__clear); +#endif +#ifdef WaveInstance__WaveInstance_x +FUNCTION_AT_ADDRESS( WaveInstance::WaveInstance(class SoundManager *),WaveInstance__WaveInstance); +#endif +#ifdef Wave3dInstance__Wave3dInstance_x +FUNCTION_AT_ADDRESS( Wave3dInstance::Wave3dInstance(class SoundManager *),Wave3dInstance__Wave3dInstance); +#endif +#ifdef MidiInstance__MidiInstance_x +//FUNCTION_AT_ADDRESS( MidiInstance::MidiInstance(class SoundManager *),MidiInstance__MidiInstance); +#endif +#ifdef SoundAsset__SoundAsset_x +//FUNCTION_AT_ADDRESS( SoundAsset::SoundAsset(class SoundManager *,char *,char *,int),SoundAsset__SoundAsset); +#endif +#ifdef SoundAsset__GetType_x +//FUNCTION_AT_ADDRESS(enum AssetType SoundAsset::GetType(void),SoundAsset__GetType); +#endif +#ifdef SoundAsset__YourManagerDeleted_x +//FUNCTION_AT_ADDRESS(void SoundAsset::YourManagerDeleted(void),SoundAsset__YourManagerDeleted); +#endif +#ifdef SoundAsset__GiveTime_x +//FUNCTION_AT_ADDRESS(void SoundAsset::GiveTime(void),SoundAsset__GiveTime); +#endif +#ifdef SoundAsset__IsPlaying_x +//FUNCTION_AT_ADDRESS(bool SoundAsset::IsPlaying(void),SoundAsset__IsPlaying); +#endif +#ifdef SoundAsset__AdjustVolume_x +//FUNCTION_AT_ADDRESS(void SoundAsset::AdjustVolume(float,int),SoundAsset__AdjustVolume); +#endif +#ifdef SoundAsset__GetName_x +//FUNCTION_AT_ADDRESS(char * SoundAsset::GetName(void),SoundAsset__GetName); +#endif +#ifdef SoundAsset__Play_x +//FUNCTION_AT_ADDRESS(class SoundInstance * SoundAsset::Play(class SoundControl *),SoundAsset__Play); +#endif +#ifdef SoundAsset__Stop_x +//FUNCTION_AT_ADDRESS(void SoundAsset::Stop(void),SoundAsset__Stop); +#endif +#ifdef SoundControl__SoundControl_x +FUNCTION_AT_ADDRESS( SoundControl::SoundControl(void),SoundControl__SoundControl); +#endif +#ifdef SoundEmitter__SoundEmitter_x +//FUNCTION_AT_ADDRESS( SoundEmitter::SoundEmitter(class EmitterManager *,class SoundAsset *,int),SoundEmitter__SoundEmitter); +#endif +#ifdef SoundEmitter__SoundEmitter1_x +//FUNCTION_AT_ADDRESS( SoundEmitter::SoundEmitter(class EmitterManager *,class MusicManager *,int),SoundEmitter__SoundEmitter1); +#endif +#ifdef SoundEmitter__Init_x +//FUNCTION_AT_ADDRESS(void SoundEmitter::Init(void),SoundEmitter__Init); +#endif +#ifdef SoundEmitter__GiveTime_x +//FUNCTION_AT_ADDRESS(void SoundEmitter::GiveTime(void),SoundEmitter__GiveTime); +#endif +#ifdef SoundEmitter__ReleaseLoopingSound_x +//FUNCTION_AT_ADDRESS(void SoundEmitter::ReleaseLoopingSound(void),SoundEmitter__ReleaseLoopingSound); +#endif +#ifdef SoundEmitter__ResetTimer_x +//FUNCTION_AT_ADDRESS(void SoundEmitter::ResetTimer(void),SoundEmitter__ResetTimer); +#endif +#ifdef SoundEmitter__Move_x +//FUNCTION_AT_ADDRESS(void SoundEmitter::Move(float,float,float),SoundEmitter__Move); +#endif +#ifdef SoundEmitter__SetAsset_x +//FUNCTION_AT_ADDRESS(void SoundEmitter::SetAsset(class SoundAsset *),SoundEmitter__SetAsset); +#endif +#ifdef SoundEmitter__Enable_x +//FUNCTION_AT_ADDRESS(void SoundEmitter::Enable(bool),SoundEmitter__Enable); +#endif +#ifdef Mp3Manager__Mp3Manager_x +FUNCTION_AT_ADDRESS( Mp3Manager::Mp3Manager(class SoundManager *,class MusicManager *),Mp3Manager__Mp3Manager); +#endif +#ifdef Mp3Manager__dMp3Manager_x +FUNCTION_AT_ADDRESS( Mp3Manager::~Mp3Manager(void),Mp3Manager__dMp3Manager); +#endif +#ifdef Mp3Manager__GetSort_x +//FUNCTION_AT_ADDRESS(enum Mp3Manager::SortOrder Mp3Manager::GetSort(void),Mp3Manager__GetSort); +#endif +#ifdef Mp3Manager__Sort_x +//FUNCTION_AT_ADDRESS(void Mp3Manager::Sort(enum Mp3Manager::SortOrder),Mp3Manager__Sort); +#endif +#ifdef Mp3Manager__Stop_x +FUNCTION_AT_ADDRESS(void Mp3Manager::Stop(void),Mp3Manager__Stop); +#endif +#ifdef Mp3Manager__Play_x +FUNCTION_AT_ADDRESS(void Mp3Manager::Play(void),Mp3Manager__Play); +#endif +#ifdef Mp3Manager__Pause_x +FUNCTION_AT_ADDRESS(void Mp3Manager::Pause(void),Mp3Manager__Pause); +#endif +#ifdef Mp3Manager__Status_x +//FUNCTION_AT_ADDRESS(enum StreamingStatus Mp3Manager::Status(void),Mp3Manager__Status); +#endif +#ifdef Mp3Manager__GiveTime_x +FUNCTION_AT_ADDRESS(void Mp3Manager::GiveTime(void),Mp3Manager__GiveTime); +#endif +#ifdef Mp3Manager__Next_x +FUNCTION_AT_ADDRESS(void Mp3Manager::Next(void),Mp3Manager__Next); +#endif +#ifdef Mp3Manager__Back_x +FUNCTION_AT_ADDRESS(void Mp3Manager::Back(void),Mp3Manager__Back); +#endif +#ifdef Mp3Manager__GetSongLength_x +FUNCTION_AT_ADDRESS(int Mp3Manager::GetSongLength(void),Mp3Manager__GetSongLength); +#endif +#ifdef Mp3Manager__GetSongPosition_x +FUNCTION_AT_ADDRESS(int Mp3Manager::GetSongPosition(void),Mp3Manager__GetSongPosition); +#endif +#ifdef Mp3Manager__SetSongPosition_x +FUNCTION_AT_ADDRESS(void Mp3Manager::SetSongPosition(int),Mp3Manager__SetSongPosition); +#endif +#ifdef Mp3Manager__GetName_x +FUNCTION_AT_ADDRESS(char * Mp3Manager::GetName(int),Mp3Manager__GetName); +#endif +#ifdef Mp3Manager__Count_x +FUNCTION_AT_ADDRESS(int Mp3Manager::Count(void),Mp3Manager__Count); +#endif +#ifdef Mp3Manager__SetPosition_x +FUNCTION_AT_ADDRESS(void Mp3Manager::SetPosition(int),Mp3Manager__SetPosition); +#endif +#ifdef Mp3Manager__SetVolumeLevel_x +FUNCTION_AT_ADDRESS(void Mp3Manager::SetVolumeLevel(float),Mp3Manager__SetVolumeLevel); +#endif +#ifdef Mp3Manager__GetVolumeLevel_x +FUNCTION_AT_ADDRESS(float Mp3Manager::GetVolumeLevel(void),Mp3Manager__GetVolumeLevel); +#endif +#ifdef Mp3Manager__DeleteAll_x +FUNCTION_AT_ADDRESS(void Mp3Manager::DeleteAll(void),Mp3Manager__DeleteAll); +#endif +#ifdef Mp3Manager__Delete_x +FUNCTION_AT_ADDRESS(void Mp3Manager::Delete(int),Mp3Manager__Delete); +#endif +#ifdef Mp3Manager__SaveList_x +FUNCTION_AT_ADDRESS(void Mp3Manager::SaveList(char *),Mp3Manager__SaveList); +#endif +#ifdef Mp3Manager__Add_x +FUNCTION_AT_ADDRESS(int Mp3Manager::Add(char *),Mp3Manager__Add); +#endif +#ifdef Mp3Manager__InternalAdd_x +FUNCTION_AT_ADDRESS(int Mp3Manager::InternalAdd(char *,char *,int),Mp3Manager__InternalAdd); +#endif +#ifdef Mp3Manager__Entry__Entry_x +//FUNCTION_AT_ADDRESS( Mp3Manager::Entry::Entry(char *,char *,int,int),Mp3Manager__Entry__Entry); +#endif +#ifdef Mp3Manager__Entry__dEntry_x +//FUNCTION_AT_ADDRESS( Mp3Manager::Entry::~Entry(void),Mp3Manager__Entry__dEntry); +#endif +#ifdef EmitterManager__EmitterManager_x +FUNCTION_AT_ADDRESS( EmitterManager::EmitterManager(class SoundManager *),EmitterManager__EmitterManager); +#endif +#ifdef EmitterManager__dEmitterManager_x +FUNCTION_AT_ADDRESS( EmitterManager::~EmitterManager(void),EmitterManager__dEmitterManager); +#endif +#ifdef EmitterManager__Add_x +//FUNCTION_AT_ADDRESS(void EmitterManager::Add(class SoundEmitter *),EmitterManager__Add); +#endif +#ifdef EmitterManager__Remove_x +//FUNCTION_AT_ADDRESS(void EmitterManager::Remove(class SoundEmitter *),EmitterManager__Remove); +#endif +#ifdef EmitterManager__GiveTime_x +FUNCTION_AT_ADDRESS(void EmitterManager::GiveTime(void),EmitterManager__GiveTime); +#endif +#ifdef EmitterManager__GetEffectsLevel_x +FUNCTION_AT_ADDRESS(float EmitterManager::GetEffectsLevel(void),EmitterManager__GetEffectsLevel); +#endif +#ifdef EmitterManager__GetVolumeLevel_x +FUNCTION_AT_ADDRESS(float EmitterManager::GetVolumeLevel(void),EmitterManager__GetVolumeLevel); +#endif +#ifdef EmitterManager__SetEffectsLevel_x +FUNCTION_AT_ADDRESS(void EmitterManager::SetEffectsLevel(float),EmitterManager__SetEffectsLevel); +#endif +#ifdef EmitterManager__GetListenerLocation_x +FUNCTION_AT_ADDRESS(void EmitterManager::GetListenerLocation(float *,float *,float *,float *),EmitterManager__GetListenerLocation); +#endif +#ifdef MusicManager__MusicManager_x +FUNCTION_AT_ADDRESS( MusicManager::MusicManager(void),MusicManager__MusicManager); +#endif +#ifdef MusicManager__dMusicManager_x +FUNCTION_AT_ADDRESS( MusicManager::~MusicManager(void),MusicManager__dMusicManager); +#endif +#ifdef MusicManager__GiveTime_x +FUNCTION_AT_ADDRESS(void MusicManager::GiveTime(void),MusicManager__GiveTime); +#endif +#ifdef MusicManager__Clear_x +FUNCTION_AT_ADDRESS(void MusicManager::Clear(class SoundAsset *),MusicManager__Clear); +#endif +#ifdef MusicManager__SetVolumeLevel_x +FUNCTION_AT_ADDRESS(void MusicManager::SetVolumeLevel(float),MusicManager__SetVolumeLevel); +#endif +#ifdef MusicManager__Clear1_x +FUNCTION_AT_ADDRESS(void MusicManager::Clear(int),MusicManager__Clear1); +#endif +#ifdef MusicManager__Set_x +FUNCTION_AT_ADDRESS(void MusicManager::Set(int,class SoundAsset *,int,float,int,int,int,int,int,int),MusicManager__Set); +#endif +#ifdef MusicManager__Play_x +FUNCTION_AT_ADDRESS(void MusicManager::Play(int),MusicManager__Play); +#endif +#ifdef MusicManager__Stop_x +FUNCTION_AT_ADDRESS(void MusicManager::Stop(int),MusicManager__Stop); +#endif +#ifdef MusicManager__Enable_x +FUNCTION_AT_ADDRESS(void MusicManager::Enable(bool),MusicManager__Enable); +#endif +#ifdef SpellManager__SpellManager_x +FUNCTION_AT_ADDRESS( SpellManager::SpellManager(char *),SpellManager__SpellManager); +#endif +#ifdef SpellManager__dSpellManager_x +FUNCTION_AT_ADDRESS( SpellManager::~SpellManager(void),SpellManager__dSpellManager); +#endif +#ifdef CStoryWnd__CStoryWnd_x +FUNCTION_AT_ADDRESS( CStoryWnd::CStoryWnd(class CXWnd *),CStoryWnd__CStoryWnd); +#endif +#ifdef CStoryWnd__Init_x +FUNCTION_AT_ADDRESS(void CStoryWnd::Init(void),CStoryWnd__Init); +#endif +#ifdef CStoryWnd__SaveIni_x +FUNCTION_AT_ADDRESS(void CStoryWnd::SaveIni(void),CStoryWnd__SaveIni); +#endif +#ifdef CStoryWnd__ShowAuto_x +FUNCTION_AT_ADDRESS(bool CStoryWnd::ShowAuto(void),CStoryWnd__ShowAuto); +#endif +#ifdef CStoryWnd__HasNew_x +FUNCTION_AT_ADDRESS(bool CStoryWnd::HasNew(void),CStoryWnd__HasNew); +#endif +#ifdef CStoryWnd__Activate_x +FUNCTION_AT_ADDRESS(void CStoryWnd::Activate(void),CStoryWnd__Activate); +#endif +#ifdef CStoryWnd__SelectOldestNew_x +FUNCTION_AT_ADDRESS(void CStoryWnd::SelectOldestNew(void),CStoryWnd__SelectOldestNew); +#endif +#ifdef CStoryWnd__SelectIndex_x +FUNCTION_AT_ADDRESS(void CStoryWnd::SelectIndex(int),CStoryWnd__SelectIndex); +#endif +#ifdef StringItem__StringItem_x +FUNCTION_AT_ADDRESS( StringItem::StringItem(void),StringItem__StringItem); +#endif +#ifdef UdpReliableChannel__IncomingQueueEntry__IncomingQueueEntry_x +//FUNCTION_AT_ADDRESS( UdpReliableChannel::IncomingQueueEntry::IncomingQueueEntry(void),UdpReliableChannel__IncomingQueueEntry__IncomingQueueEntry); +#endif +#ifdef StringItem__dStringItem_x +FUNCTION_AT_ADDRESS( StringItem::~StringItem(void),StringItem__dStringItem); +#endif +#ifdef StringItem__load_x +FUNCTION_AT_ADDRESS(int StringItem::load(struct _iobuf *,int),StringItem__load); +#endif +#ifdef StringTable__StringTable_x +FUNCTION_AT_ADDRESS( StringTable::StringTable(void),StringTable__StringTable); +#endif +#ifdef StringTable__dStringTable_x +FUNCTION_AT_ADDRESS( StringTable::~StringTable(void),StringTable__dStringTable); +#endif +#ifdef StringTable__checkAlloc_x +FUNCTION_AT_ADDRESS(void StringTable::checkAlloc(void),StringTable__checkAlloc); +#endif +#ifdef StringTable__getString_x +FUNCTION_AT_ADDRESS(char * StringTable::getString(unsigned long,bool *),StringTable__getString); +#endif +#ifdef StringTable__findItem_x +FUNCTION_AT_ADDRESS(class StringItem * StringTable::findItem(unsigned long,int,int),StringTable__findItem); +#endif +#ifdef StringTable__load_x +FUNCTION_AT_ADDRESS(int StringTable::load(char const *,int),StringTable__load); +#endif +#ifdef StringTable__addItem_x +FUNCTION_AT_ADDRESS(void StringTable::addItem(class StringItem *),StringTable__addItem); +#endif +#ifdef UdpIpAddress__UdpIpAddress_x +FUNCTION_AT_ADDRESS( UdpIpAddress::UdpIpAddress(unsigned int),UdpIpAddress__UdpIpAddress); +#endif +#ifdef UdpManager__Params__Params_x +//FUNCTION_AT_ADDRESS( UdpManager::Params::Params(void),UdpManager__Params__Params); +#endif +#ifdef UdpManager__UdpManager_x +//FUNCTION_AT_ADDRESS( UdpManager::UdpManager(struct UdpManager::Params const *),UdpManager__UdpManager); +#endif +#ifdef UdpManager__PoolReturn_x +//FUNCTION_AT_ADDRESS(void UdpManager::PoolReturn(class PooledLogicalPacket *),UdpManager__PoolReturn); +#endif +#ifdef UdpManager__dUdpManager_x +FUNCTION_AT_ADDRESS( UdpManager::~UdpManager(void),UdpManager__dUdpManager); +#endif +#ifdef UdpManager__CreateAndBindSocket_x +FUNCTION_AT_ADDRESS(void UdpManager::CreateAndBindSocket(int),UdpManager__CreateAndBindSocket); +#endif +#ifdef UdpManager__CloseSocket_x +FUNCTION_AT_ADDRESS(void UdpManager::CloseSocket(void),UdpManager__CloseSocket); +#endif +#ifdef UdpManager__ProcessDisconnectPending_x +FUNCTION_AT_ADDRESS(void UdpManager::ProcessDisconnectPending(void),UdpManager__ProcessDisconnectPending); +#endif +#ifdef UdpManager__RemoveConnection_x +FUNCTION_AT_ADDRESS(void UdpManager::RemoveConnection(class UdpConnection *),UdpManager__RemoveConnection); +#endif +#ifdef UdpManager__AddConnection_x +FUNCTION_AT_ADDRESS(void UdpManager::AddConnection(class UdpConnection *),UdpManager__AddConnection); +#endif +#ifdef UdpManager__GiveTime_x +FUNCTION_AT_ADDRESS(bool UdpManager::GiveTime(int,bool),UdpManager__GiveTime); +#endif +#ifdef UdpManager__EstablishConnection_x +FUNCTION_AT_ADDRESS(class UdpConnection * UdpManager::EstablishConnection(char const *,int,int),UdpManager__EstablishConnection); +#endif +#ifdef UdpManager__KeepUntilDisconnected_x +FUNCTION_AT_ADDRESS(void UdpManager::KeepUntilDisconnected(class UdpConnection *),UdpManager__KeepUntilDisconnected); +#endif +#ifdef UdpManager__ResetStats_x +FUNCTION_AT_ADDRESS(void UdpManager::ResetStats(void),UdpManager__ResetStats); +#endif +#ifdef UdpManager__ActualReceive_x +//FUNCTION_AT_ADDRESS(class UdpManager::PacketHistoryEntry * UdpManager::ActualReceive(void),UdpManager__ActualReceive); +#endif +#ifdef UdpManager__ActualSend_x +FUNCTION_AT_ADDRESS(void UdpManager::ActualSend(unsigned char const *,int,class UdpIpAddress,int),UdpManager__ActualSend); +#endif +#ifdef UdpManager__ActualSendHelper_x +FUNCTION_AT_ADDRESS(void UdpManager::ActualSendHelper(unsigned char const *,int,class UdpIpAddress,int),UdpManager__ActualSendHelper); +#endif +#ifdef UdpManager__SendPortAlive_x +FUNCTION_AT_ADDRESS(void UdpManager::SendPortAlive(class UdpIpAddress,int),UdpManager__SendPortAlive); +#endif +#ifdef UdpManager__ProcessRawPacket_x +//FUNCTION_AT_ADDRESS(void UdpManager::ProcessRawPacket(class UdpManager::PacketHistoryEntry const *),UdpManager__ProcessRawPacket); +#endif +#ifdef UdpManager__AddressGetConnection_x +FUNCTION_AT_ADDRESS(class UdpConnection * UdpManager::AddressGetConnection(class UdpIpAddress,int)const ,UdpManager__AddressGetConnection); +#endif +#ifdef UdpManager__ConnectCodeGetConnection_x +FUNCTION_AT_ADDRESS(class UdpConnection * UdpManager::ConnectCodeGetConnection(int)const ,UdpManager__ConnectCodeGetConnection); +#endif +#ifdef UdpManager__WrappedBorrow_x +//FUNCTION_AT_ADDRESS(class WrappedLogicalPacket * UdpManager::WrappedBorrow(class LogicalPacket const *),UdpManager__WrappedBorrow); +#endif +#ifdef UdpManager__WrappedCreated_x +//FUNCTION_AT_ADDRESS(void UdpManager::WrappedCreated(class WrappedLogicalPacket *),UdpManager__WrappedCreated); +#endif +#ifdef UdpManager__WrappedDestroyed_x +//FUNCTION_AT_ADDRESS(void UdpManager::WrappedDestroyed(class WrappedLogicalPacket *),UdpManager__WrappedDestroyed); +#endif +#ifdef UdpManager__CreatePacket_x +FUNCTION_AT_ADDRESS(class LogicalPacket * UdpManager::CreatePacket(void const *,int,void const *,int),UdpManager__CreatePacket); +#endif +#ifdef UdpManager__PoolCreated_x +//FUNCTION_AT_ADDRESS(void UdpManager::PoolCreated(class PooledLogicalPacket *),UdpManager__PoolCreated); +#endif +#ifdef UdpManager__PoolDestroyed_x +//FUNCTION_AT_ADDRESS(void UdpManager::PoolDestroyed(class PooledLogicalPacket *),UdpManager__PoolDestroyed); +#endif +#ifdef UdpManager__PacketHistoryEntry__PacketHistoryEntry_x +//FUNCTION_AT_ADDRESS( UdpManager::PacketHistoryEntry::PacketHistoryEntry(int),UdpManager__PacketHistoryEntry__PacketHistoryEntry); +#endif +#ifdef UdpManager__PacketHistoryEntry__dPacketHistoryEntry_x +//FUNCTION_AT_ADDRESS( UdpManager::PacketHistoryEntry::~PacketHistoryEntry(void),UdpManager__PacketHistoryEntry__dPacketHistoryEntry); +#endif +#ifdef UdpManager__SimulateQueueEntry__dSimulateQueueEntry_x +//FUNCTION_AT_ADDRESS( UdpManager::SimulateQueueEntry::~SimulateQueueEntry(void),UdpManager__SimulateQueueEntry__dSimulateQueueEntry); +#endif +#ifdef UdpConnection__UdpConnection_x +FUNCTION_AT_ADDRESS( UdpConnection::UdpConnection(class UdpManager *,class UdpIpAddress,int,int),UdpConnection__UdpConnection); +#endif +#ifdef UdpConnection__UdpConnection1_x +//FUNCTION_AT_ADDRESS( UdpConnection::UdpConnection(class UdpManager *,class UdpManager::PacketHistoryEntry const *),UdpConnection__UdpConnection1); +#endif +#ifdef UdpConnection__Init_x +FUNCTION_AT_ADDRESS(void UdpConnection::Init(class UdpManager *,class UdpIpAddress,int),UdpConnection__Init); +#endif +#ifdef UdpConnection__dUdpConnection_x +FUNCTION_AT_ADDRESS( UdpConnection::~UdpConnection(void),UdpConnection__dUdpConnection); +#endif +#ifdef UdpConnection__PortUnreachable_x +FUNCTION_AT_ADDRESS(void UdpConnection::PortUnreachable(void),UdpConnection__PortUnreachable); +#endif +#ifdef UdpConnection__InternalDisconnect_x +//FUNCTION_AT_ADDRESS(void UdpConnection::InternalDisconnect(int,enum UdpConnection::DisconnectReason),UdpConnection__InternalDisconnect); +#endif +#ifdef UdpConnection__ScheduleTimeNow_x +FUNCTION_AT_ADDRESS(void UdpConnection::ScheduleTimeNow(void),UdpConnection__ScheduleTimeNow); +#endif +#ifdef UdpConnection__SendTerminatePacket_x +//FUNCTION_AT_ADDRESS(void UdpConnection::SendTerminatePacket(int,enum UdpConnection::DisconnectReason),UdpConnection__SendTerminatePacket); +#endif +#ifdef UdpMisc__PutValue32_x +FUNCTION_AT_ADDRESS(int __cdecl UdpMisc::PutValue32(void *,unsigned int),UdpMisc__PutValue32); +#endif +#ifdef UdpConnection__SetSilentDisconnect_x +FUNCTION_AT_ADDRESS(void UdpConnection::SetSilentDisconnect(bool),UdpConnection__SetSilentDisconnect); +#endif +#ifdef UdpConnection__Send_x +//FUNCTION_AT_ADDRESS(bool UdpConnection::Send(enum UdpChannel,void const *,int),UdpConnection__Send); +#endif +#ifdef UdpConnection__InternalSend_x +//FUNCTION_AT_ADDRESS(bool UdpConnection::InternalSend(enum UdpChannel,unsigned char const *,int,unsigned char const *,int),UdpConnection__InternalSend); +#endif +#ifdef UdpConnection__PingStatReset_x +FUNCTION_AT_ADDRESS(void UdpConnection::PingStatReset(void),UdpConnection__PingStatReset); +#endif +#ifdef UdpConnection__ProcessRawPacket_x +//FUNCTION_AT_ADDRESS(void UdpConnection::ProcessRawPacket(class UdpManager::PacketHistoryEntry const *),UdpConnection__ProcessRawPacket); +#endif +#ifdef UdpMisc__GetValue24_x +FUNCTION_AT_ADDRESS(unsigned int __cdecl UdpMisc::GetValue24(void const *),UdpMisc__GetValue24); +#endif +#ifdef UdpConnection__IsNonEncryptPacket_x +FUNCTION_AT_ADDRESS(bool UdpConnection::IsNonEncryptPacket(unsigned char const *)const ,UdpConnection__IsNonEncryptPacket); +#endif +#ifdef UdpConnection__CallbackRoutePacket_x +FUNCTION_AT_ADDRESS(void UdpConnection::CallbackRoutePacket(unsigned char const *,int),UdpConnection__CallbackRoutePacket); +#endif +#ifdef UdpConnection__CallbackCorruptPacket_x +//FUNCTION_AT_ADDRESS(void UdpConnection::CallbackCorruptPacket(unsigned char const *,int,enum UdpCorruptionReason),UdpConnection__CallbackCorruptPacket); +#endif +#ifdef UdpConnection__ProcessCookedPacket_x +FUNCTION_AT_ADDRESS(void UdpConnection::ProcessCookedPacket(unsigned char const *,int),UdpConnection__ProcessCookedPacket); +#endif +#ifdef UdpMisc__PutValue64_x +FUNCTION_AT_ADDRESS(int __cdecl UdpMisc::PutValue64(void *,__int64),UdpMisc__PutValue64); +#endif +#ifdef UdpMisc__GetValue64_x +FUNCTION_AT_ADDRESS(__int64 __cdecl UdpMisc::GetValue64(void const *),UdpMisc__GetValue64); +#endif +#ifdef UdpReliableChannel__AckPacket_x +FUNCTION_AT_ADDRESS(void UdpReliableChannel::AckPacket(unsigned char const *,int),UdpReliableChannel__AckPacket); +#endif +#ifdef UdpConnection__GiveTime_x +FUNCTION_AT_ADDRESS(void UdpConnection::GiveTime(void),UdpConnection__GiveTime); +#endif +#ifdef UdpConnection__InternalGiveTime_x +FUNCTION_AT_ADDRESS(void UdpConnection::InternalGiveTime(void),UdpConnection__InternalGiveTime); +#endif +#ifdef UdpConnection__LastReceive_x +FUNCTION_AT_ADDRESS(int UdpConnection::LastReceive(void)const ,UdpConnection__LastReceive); +#endif +#ifdef UdpConnection__ConnectionAge_x +FUNCTION_AT_ADDRESS(int UdpConnection::ConnectionAge(void)const ,UdpConnection__ConnectionAge); +#endif +#ifdef UdpConnection__TotalPendingBytes_x +FUNCTION_AT_ADDRESS(int UdpConnection::TotalPendingBytes(void)const ,UdpConnection__TotalPendingBytes); +#endif +#ifdef UdpConnection__RawSend_x +FUNCTION_AT_ADDRESS(void UdpConnection::RawSend(unsigned char const *,int),UdpConnection__RawSend); +#endif +#ifdef UdpConnection__ExpireSendBin_x +FUNCTION_AT_ADDRESS(int UdpConnection::ExpireSendBin(void),UdpConnection__ExpireSendBin); +#endif +#ifdef UdpConnection__ExpireReceiveBin_x +FUNCTION_AT_ADDRESS(int UdpConnection::ExpireReceiveBin(void),UdpConnection__ExpireReceiveBin); +#endif +#ifdef UdpConnection__PhysicalSend_x +FUNCTION_AT_ADDRESS(void UdpConnection::PhysicalSend(unsigned char const *,int,bool),UdpConnection__PhysicalSend); +#endif +#ifdef UdpMisc__PutValue24_x +FUNCTION_AT_ADDRESS(int __cdecl UdpMisc::PutValue24(void *,unsigned int),UdpMisc__PutValue24); +#endif +#ifdef UdpConnection__BufferedSend_x +FUNCTION_AT_ADDRESS(unsigned char * UdpConnection::BufferedSend(unsigned char const *,int,unsigned char const *,int,bool),UdpConnection__BufferedSend); +#endif +#ifdef UdpConnection__FlushMultiBuffer_x +FUNCTION_AT_ADDRESS(void UdpConnection::FlushMultiBuffer(void),UdpConnection__FlushMultiBuffer); +#endif +#ifdef UdpConnection__DecryptNone_x +FUNCTION_AT_ADDRESS(int UdpConnection::DecryptNone(unsigned char *,unsigned char const *,int),UdpConnection__DecryptNone); +#endif +#ifdef UdpConnection__EncryptNone_x +FUNCTION_AT_ADDRESS(int UdpConnection::EncryptNone(unsigned char *,unsigned char const *,int),UdpConnection__EncryptNone); +#endif +#ifdef UdpConnection__EncryptUserSupplied_x +FUNCTION_AT_ADDRESS(int UdpConnection::EncryptUserSupplied(unsigned char *,unsigned char const *,int),UdpConnection__EncryptUserSupplied); +#endif +#ifdef UdpConnection__DecryptUserSupplied_x +FUNCTION_AT_ADDRESS(int UdpConnection::DecryptUserSupplied(unsigned char *,unsigned char const *,int),UdpConnection__DecryptUserSupplied); +#endif +#ifdef UdpConnection__EncryptUserSupplied2_x +FUNCTION_AT_ADDRESS(int UdpConnection::EncryptUserSupplied2(unsigned char *,unsigned char const *,int),UdpConnection__EncryptUserSupplied2); +#endif +#ifdef UdpConnection__DecryptUserSupplied2_x +FUNCTION_AT_ADDRESS(int UdpConnection::DecryptUserSupplied2(unsigned char *,unsigned char const *,int),UdpConnection__DecryptUserSupplied2); +#endif +#ifdef UdpConnection__EncryptXorBuffer_x +FUNCTION_AT_ADDRESS(int UdpConnection::EncryptXorBuffer(unsigned char *,unsigned char const *,int),UdpConnection__EncryptXorBuffer); +#endif +#ifdef UdpConnection__DecryptXorBuffer_x +FUNCTION_AT_ADDRESS(int UdpConnection::DecryptXorBuffer(unsigned char *,unsigned char const *,int),UdpConnection__DecryptXorBuffer); +#endif +#ifdef UdpConnection__EncryptXor_x +FUNCTION_AT_ADDRESS(int UdpConnection::EncryptXor(unsigned char *,unsigned char const *,int),UdpConnection__EncryptXor); +#endif +#ifdef UdpConnection__DecryptXor_x +FUNCTION_AT_ADDRESS(int UdpConnection::DecryptXor(unsigned char *,unsigned char const *,int),UdpConnection__DecryptXor); +#endif +#ifdef UdpConnection__SetupEncryptModel_x +FUNCTION_AT_ADDRESS(void UdpConnection::SetupEncryptModel(void),UdpConnection__SetupEncryptModel); +#endif +#ifdef UdpConnection__GetChannelStatus_x +//FUNCTION_AT_ADDRESS(void UdpConnection::GetChannelStatus(enum UdpChannel,struct UdpConnection::ChannelStatus *)const ,UdpConnection__GetChannelStatus); +#endif +#ifdef UdpReliableChannel__UdpReliableChannel_x +//FUNCTION_AT_ADDRESS( UdpReliableChannel::UdpReliableChannel(int,class UdpConnection *,struct UdpManager::ReliableConfig *),UdpReliableChannel__UdpReliableChannel); +#endif +#ifdef UdpReliableChannel__dUdpReliableChannel_x +FUNCTION_AT_ADDRESS( UdpReliableChannel::~UdpReliableChannel(void),UdpReliableChannel__dUdpReliableChannel); +#endif +#ifdef UdpReliableChannel__Send_x +FUNCTION_AT_ADDRESS(void UdpReliableChannel::Send(unsigned char const *,int,unsigned char const *,int),UdpReliableChannel__Send); +#endif +#ifdef UdpReliableChannel__FlushCoalesce_x +FUNCTION_AT_ADDRESS(void UdpReliableChannel::FlushCoalesce(void),UdpReliableChannel__FlushCoalesce); +#endif +#ifdef UdpReliableChannel__SendCoalesce_x +FUNCTION_AT_ADDRESS(void UdpReliableChannel::SendCoalesce(unsigned char const *,int,unsigned char const *,int),UdpReliableChannel__SendCoalesce); +#endif +#ifdef UdpReliableChannel__QueueLogicalPacket_x +FUNCTION_AT_ADDRESS(void UdpReliableChannel::QueueLogicalPacket(class LogicalPacket const *),UdpReliableChannel__QueueLogicalPacket); +#endif +#ifdef UdpReliableChannel__PullDown_x +FUNCTION_AT_ADDRESS(bool UdpReliableChannel::PullDown(int),UdpReliableChannel__PullDown); +#endif +#ifdef UdpReliableChannel__GiveTime_x +FUNCTION_AT_ADDRESS(int UdpReliableChannel::GiveTime(void),UdpReliableChannel__GiveTime); +#endif +#ifdef UdpReliableChannel__GetChannelStatus_x +//FUNCTION_AT_ADDRESS(void UdpReliableChannel::GetChannelStatus(struct UdpConnection::ChannelStatus *)const ,UdpReliableChannel__GetChannelStatus); +#endif +#ifdef UdpReliableChannel__ReliablePacket_x +FUNCTION_AT_ADDRESS(void UdpReliableChannel::ReliablePacket(unsigned char const *,int),UdpReliableChannel__ReliablePacket); +#endif +#ifdef UdpReliableChannel__GetReliableIncomingId_x +FUNCTION_AT_ADDRESS(__int64 UdpReliableChannel::GetReliableIncomingId(int)const ,UdpReliableChannel__GetReliableIncomingId); +#endif +#ifdef UdpReliableChannel__ProcessPacket_x +//FUNCTION_AT_ADDRESS(void UdpReliableChannel::ProcessPacket(enum UdpReliableChannel::ReliablePacketMode,unsigned char const *,int),UdpReliableChannel__ProcessPacket); +#endif +#ifdef UdpReliableChannel__AckAllPacket_x +FUNCTION_AT_ADDRESS(void UdpReliableChannel::AckAllPacket(unsigned char const *,int),UdpReliableChannel__AckAllPacket); +#endif +#ifdef UdpReliableChannel__Ack_x +FUNCTION_AT_ADDRESS(void UdpReliableChannel::Ack(__int64),UdpReliableChannel__Ack); +#endif +#ifdef UdpReliableChannel__IncomingQueueEntry__dIncomingQueueEntry_x +//FUNCTION_AT_ADDRESS( UdpReliableChannel::IncomingQueueEntry::~IncomingQueueEntry(void),UdpReliableChannel__IncomingQueueEntry__dIncomingQueueEntry); +#endif +#ifdef UdpReliableChannel__PhysicalPacket__PhysicalPacket_x +//FUNCTION_AT_ADDRESS( UdpReliableChannel::PhysicalPacket::PhysicalPacket(void),UdpReliableChannel__PhysicalPacket__PhysicalPacket); +#endif +#ifdef UdpReliableChannel__PhysicalPacket__dPhysicalPacket_x +//FUNCTION_AT_ADDRESS( UdpReliableChannel::PhysicalPacket::~PhysicalPacket(void),UdpReliableChannel__PhysicalPacket__dPhysicalPacket); +#endif +#ifdef LogicalPacket__LogicalPacket_x +FUNCTION_AT_ADDRESS( LogicalPacket::LogicalPacket(void),LogicalPacket__LogicalPacket); +#endif +#ifdef SoundObject__AddRef_x +//FUNCTION_AT_ADDRESS(void SoundObject::AddRef(void),SoundObject__AddRef); +#endif +#ifdef Mp3Manager__GetPosition_x +FUNCTION_AT_ADDRESS(int Mp3Manager::GetPosition(void),Mp3Manager__GetPosition); +#endif +#ifdef SimpleLogicalPacket__SimpleLogicalPacket_x +FUNCTION_AT_ADDRESS( SimpleLogicalPacket::SimpleLogicalPacket(void const *,int),SimpleLogicalPacket__SimpleLogicalPacket); +#endif +#ifdef EmitterManager__SetVolumeLevel_x +FUNCTION_AT_ADDRESS(void EmitterManager::SetVolumeLevel(float),EmitterManager__SetVolumeLevel); +#endif +#ifdef PooledLogicalPacket__PooledLogicalPacket_x +//FUNCTION_AT_ADDRESS( PooledLogicalPacket::PooledLogicalPacket(class UdpManager *,int),PooledLogicalPacket__PooledLogicalPacket); +#endif +#ifdef ChannelServerApi__GetChannelCount_x +FUNCTION_AT_ADDRESS(int ChannelServerApi::GetChannelCount(void),ChannelServerApi__GetChannelCount); +#endif +#ifdef PooledLogicalPacket__SetData_x +//FUNCTION_AT_ADDRESS(void PooledLogicalPacket::SetData(void const *,int,void const *,int),PooledLogicalPacket__SetData); +#endif +#ifdef WrappedLogicalPacket__WrappedLogicalPacket_x +//FUNCTION_AT_ADDRESS( WrappedLogicalPacket::WrappedLogicalPacket(class UdpManager *),WrappedLogicalPacket__WrappedLogicalPacket); +#endif +#ifdef UdpManager__WrappedReturn_x +//FUNCTION_AT_ADDRESS(void UdpManager::WrappedReturn(class WrappedLogicalPacket *),UdpManager__WrappedReturn); +#endif +#ifdef WrappedLogicalPacket__SetLogicalPacket_x +//FUNCTION_AT_ADDRESS(void WrappedLogicalPacket::SetLogicalPacket(class LogicalPacket const *),WrappedLogicalPacket__SetLogicalPacket); +#endif +#ifdef UdpManager__SimulateQueueEntry__SimulateQueueEntry_x +//FUNCTION_AT_ADDRESS( UdpManager::SimulateQueueEntry::SimulateQueueEntry(unsigned char const *,int,class UdpIpAddress,int),UdpManager__SimulateQueueEntry__SimulateQueueEntry); +#endif +#ifdef UdpMisc__Clock_x +FUNCTION_AT_ADDRESS(__int64 __cdecl UdpMisc::Clock(void),UdpMisc__Clock); +#endif +#ifdef UdpMisc__SyncStampShortDeltaTime_x +FUNCTION_AT_ADDRESS(int __cdecl UdpMisc::SyncStampShortDeltaTime(unsigned short,unsigned short),UdpMisc__SyncStampShortDeltaTime); +#endif +#ifdef UdpMisc__Random_x +FUNCTION_AT_ADDRESS(int __cdecl UdpMisc::Random(int *),UdpMisc__Random); +#endif +#ifdef UdpMisc__Crc32_x +FUNCTION_AT_ADDRESS(int __cdecl UdpMisc::Crc32(void const *,int,int),UdpMisc__Crc32); +#endif +#ifdef UdpMisc__PutVariableValue_x +FUNCTION_AT_ADDRESS(unsigned int __cdecl UdpMisc::PutVariableValue(void *,unsigned int),UdpMisc__PutVariableValue); +#endif +#ifdef UdpMisc__GetVariableValue_x +FUNCTION_AT_ADDRESS(unsigned int __cdecl UdpMisc::GetVariableValue(void const *,unsigned int *),UdpMisc__GetVariableValue); +#endif +#ifdef UdpMisc__CreateQuickLogicalPacket_x +FUNCTION_AT_ADDRESS(class LogicalPacket * __cdecl UdpMisc::CreateQuickLogicalPacket(void const *,int,void const *,int),UdpMisc__CreateQuickLogicalPacket); +#endif +#ifdef Util__Stristr_x +//FUNCTION_AT_ADDRESS(char * __cdecl Util::Stristr(char *,char *),Util__Stristr); +#endif +#ifdef Util__StripCharacter_x +//FUNCTION_AT_ADDRESS(void __cdecl Util::StripCharacter(char *,char),Util__StripCharacter); +#endif +#ifdef Util__ClampLower_x +//FUNCTION_AT_ADDRESS(bool __cdecl Util::ClampLower(int *,int),Util__ClampLower); +#endif +#ifdef Util__ClampUpper_x +//FUNCTION_AT_ADDRESS(bool __cdecl Util::ClampUpper(int *,int),Util__ClampUpper); +#endif +#ifdef Util__GetNextStringToken_x +//FUNCTION_AT_ADDRESS(int __cdecl Util::GetNextStringToken(char *,char *,int,char *,bool),Util__GetNextStringToken); +#endif +#ifdef Util__IsDelimiter_x +//FUNCTION_AT_ADDRESS(bool __cdecl Util::IsDelimiter(char,char *),Util__IsDelimiter); +#endif +#ifdef Util__Crc32_x +//FUNCTION_AT_ADDRESS(int __cdecl Util::Crc32(void const *,int,int),Util__Crc32); +#endif +#ifdef Util__GetSavePrivateProfileInt_x +//FUNCTION_AT_ADDRESS(int __cdecl Util::GetSavePrivateProfileInt(char *,char *,int,char *),Util__GetSavePrivateProfileInt); +#endif +#ifdef Util__PutValueVariable_x +//FUNCTION_AT_ADDRESS(int __cdecl Util::PutValueVariable(void *,unsigned int),Util__PutValueVariable); +#endif +#ifdef Util__PutValue32_x +//FUNCTION_AT_ADDRESS(unsigned int __cdecl Util::PutValue32(void *,unsigned int),Util__PutValue32); +#endif +#ifdef Util__GetValueVariable_x +//FUNCTION_AT_ADDRESS(int __cdecl Util::GetValueVariable(void const *,unsigned int *),Util__GetValueVariable); +#endif +#ifdef TextFileReader__TextFileReader_x +FUNCTION_AT_ADDRESS( TextFileReader::TextFileReader(char *,char),TextFileReader__TextFileReader); +#endif +#ifdef TextFileReader__dTextFileReader_x +FUNCTION_AT_ADDRESS( TextFileReader::~TextFileReader(void),TextFileReader__dTextFileReader); +#endif +#ifdef TextFileReader__ReadLine_x +FUNCTION_AT_ADDRESS(int TextFileReader::ReadLine(void),TextFileReader__ReadLine); +#endif +#ifdef TextFileReader__GetNextField_x +FUNCTION_AT_ADDRESS(int TextFileReader::GetNextField(char *,int),TextFileReader__GetNextField); +#endif +#ifdef TextFileReader__GetLine_x +FUNCTION_AT_ADDRESS(void TextFileReader::GetLine(char *,int),TextFileReader__GetLine); +#endif +#ifdef TextFileReader__IsOpen_x +FUNCTION_AT_ADDRESS(bool TextFileReader::IsOpen(void),TextFileReader__IsOpen); +#endif +#ifdef flex_unit__get_x +FUNCTION_AT_ADDRESS(unsigned int flex_unit::get(unsigned int)const ,flex_unit__get); +#endif +#ifdef flex_unit__flex_unit_x +FUNCTION_AT_ADDRESS( flex_unit::flex_unit(void),flex_unit__flex_unit); +#endif +#ifdef flex_unit__dflex_unit_x +FUNCTION_AT_ADDRESS( flex_unit::~flex_unit(void),flex_unit__dflex_unit); +#endif +#ifdef flex_unit__reserve_x +FUNCTION_AT_ADDRESS(void flex_unit::reserve(unsigned int),flex_unit__reserve); +#endif +#ifdef flex_unit__set_x +FUNCTION_AT_ADDRESS(void flex_unit::set(unsigned int,unsigned int),flex_unit__set); +#endif +#ifdef flex_unit__fast_mul_x +FUNCTION_AT_ADDRESS(void flex_unit::fast_mul(class flex_unit &,class flex_unit &,unsigned int),flex_unit__fast_mul); +#endif +#ifdef vlong_value__is_zero_x +FUNCTION_AT_ADDRESS(int vlong_value::is_zero(void)const ,vlong_value__is_zero); +#endif +#ifdef vlong_value__test_x +FUNCTION_AT_ADDRESS(int vlong_value::test(unsigned int)const ,vlong_value__test); +#endif +#ifdef vlong_value__bits_x +FUNCTION_AT_ADDRESS(unsigned int vlong_value::bits(void)const ,vlong_value__bits); +#endif +#ifdef vlong_value__cf_x +FUNCTION_AT_ADDRESS(int vlong_value::cf(class vlong_value &)const ,vlong_value__cf); +#endif +#ifdef vlong_value__shl_x +FUNCTION_AT_ADDRESS(void vlong_value::shl(void),vlong_value__shl); +#endif +#ifdef vlong_value__shr_x +FUNCTION_AT_ADDRESS(void vlong_value::shr(void),vlong_value__shr); +#endif +#ifdef vlong_value__shr1_x +FUNCTION_AT_ADDRESS(void vlong_value::shr(unsigned int),vlong_value__shr1); +#endif +#ifdef vlong_value__add_x +FUNCTION_AT_ADDRESS(void vlong_value::add(class vlong_value &),vlong_value__add); +#endif +#ifdef vlong_value__subtract_x +FUNCTION_AT_ADDRESS(void vlong_value::subtract(class vlong_value &),vlong_value__subtract); +#endif +#ifdef vlong_value__init_x +FUNCTION_AT_ADDRESS(void vlong_value::init(unsigned int),vlong_value__init); +#endif +#ifdef vlong_value__init2_x +FUNCTION_AT_ADDRESS(void vlong_value::init2(unsigned int,unsigned int),vlong_value__init2); +#endif +#ifdef vlong_value__copy_x +FUNCTION_AT_ADDRESS(void vlong_value::copy(class vlong_value &),vlong_value__copy); +#endif +#ifdef vlong_value__vlong_value_x +FUNCTION_AT_ADDRESS( vlong_value::vlong_value(void),vlong_value__vlong_value); +#endif +#ifdef vlong_value__mul_x +FUNCTION_AT_ADDRESS(void vlong_value::mul(class vlong_value &,class vlong_value &),vlong_value__mul); +#endif +#ifdef vlong_value__divide_x +FUNCTION_AT_ADDRESS(void vlong_value::divide(class vlong_value &,class vlong_value &,class vlong_value &),vlong_value__divide); +#endif +#ifdef vlong_value__dvlong_value_x +FUNCTION_AT_ADDRESS( vlong_value::~vlong_value(void),vlong_value__dvlong_value); +#endif +#ifdef vlong__docopy_x +FUNCTION_AT_ADDRESS(void vlong::docopy(void),vlong__docopy); +#endif +#ifdef vlong__cf_x +//FUNCTION_AT_ADDRESS(int vlong::cf(class vlong)const ,vlong__cf); +#endif +#ifdef vlong__vlong_x +FUNCTION_AT_ADDRESS( vlong::vlong(unsigned __int64),vlong__vlong); +#endif +#ifdef vlong__vlong1_x +FUNCTION_AT_ADDRESS( vlong::vlong(class vlong const &),vlong__vlong1); +#endif +#ifdef vlong__operator_equal_x +FUNCTION_AT_ADDRESS(class vlong & vlong::operator=(class vlong),vlong__operator_equal); +#endif +#ifdef vlong__dvlong_x +FUNCTION_AT_ADDRESS( vlong::~vlong(void),vlong__dvlong); +#endif +#ifdef vlong__operator_plus_equal_x +FUNCTION_AT_ADDRESS(class vlong & vlong::operator+=(class vlong const &),vlong__operator_plus_equal); +#endif +#ifdef vlong__operator_minus_equal_x +FUNCTION_AT_ADDRESS(class vlong & vlong::operator-=(class vlong const &),vlong__operator_minus_equal); +#endif +#ifdef monty__monty_x +FUNCTION_AT_ADDRESS( monty::monty(class vlong const &),monty__monty); +#endif +#ifdef monty__mul_x +FUNCTION_AT_ADDRESS(void monty::mul(class vlong &,class vlong const &),monty__mul); +#endif +#ifdef monty__exp_x +FUNCTION_AT_ADDRESS(class vlong monty::exp(class vlong const &,class vlong const &),monty__exp); +#endif +#ifdef monty__dmonty_x +FUNCTION_AT_ADDRESS( monty::~monty(void),monty__dmonty); +#endif +#ifdef ZlibUtil__zcalloc_x +FUNCTION_AT_ADDRESS(void * __cdecl ZlibUtil::zcalloc(void *,unsigned int,unsigned int),ZlibUtil__zcalloc); +#endif +#ifdef ZlibUtil__zfree_x +FUNCTION_AT_ADDRESS(void __cdecl ZlibUtil::zfree(void *,void *),ZlibUtil__zfree); +#endif +#ifdef ZlibUtil__zcompress_x +FUNCTION_AT_ADDRESS(int __cdecl ZlibUtil::zcompress(unsigned char *,unsigned long *,unsigned char const *,unsigned long,int),ZlibUtil__zcompress); +#endif +#ifdef ZlibUtil__zuncompress_x +FUNCTION_AT_ADDRESS(int __cdecl ZlibUtil::zuncompress(unsigned char *,unsigned long *,unsigned char const *,unsigned long),ZlibUtil__zuncompress); +#endif +#ifdef ZlibUtil__Compress_x +FUNCTION_AT_ADDRESS(int __cdecl ZlibUtil::Compress(char const *,int,char *,int,int),ZlibUtil__Compress); +#endif +#ifdef ZlibUtil__Decompress_x +FUNCTION_AT_ADDRESS(int __cdecl ZlibUtil::Decompress(char const *,int,char *,int),ZlibUtil__Decompress); +#endif +#ifdef PackFS__PackFS_x +FUNCTION_AT_ADDRESS( PackFS::PackFS(void),PackFS__PackFS); +#endif +#ifdef PackFS__addFileSystem_x +//FUNCTION_AT_ADDRESS(bool PackFS::addFileSystem(class FilePath),PackFS__addFileSystem); +#endif +#ifdef PackFS__removeFileSystem_x +FUNCTION_AT_ADDRESS(void PackFS::removeFileSystem(class FilePath),PackFS__removeFileSystem); +#endif +#ifdef SharedString___updateTag_x +FUNCTION_AT_ADDRESS(void SharedString::_updateTag(void)const ,SharedString___updateTag); +#endif +#ifdef FilePath__FilePath2_x +FUNCTION_AT_ADDRESS( FilePath::FilePath(void),FilePath__FilePath2); +#endif +#ifdef PackFile__dPackFile_x +FUNCTION_AT_ADDRESS( PackFile::~PackFile(void),PackFile__dPackFile); +#endif +#ifdef PackFile__close_x +FUNCTION_AT_ADDRESS(void PackFile::close(void),PackFile__close); +#endif +#ifdef _PackFileData__d_PackFileData_x +FUNCTION_AT_ADDRESS( _PackFileData::~_PackFileData(void),_PackFileData__d_PackFileData); +#endif +#ifdef PackFile__length_x +FUNCTION_AT_ADDRESS(int PackFile::length(void)const ,PackFile__length); +#endif +#ifdef PackFile__read_x +FUNCTION_AT_ADDRESS(int PackFile::read(void * const,int),PackFile__read); +#endif +#ifdef PackFS__openFile_x +//FUNCTION_AT_ADDRESS(bool PackFS::openFile(class FilePath,class PackFile *)const ,PackFS__openFile); +#endif +#ifdef CRC32Generator__generateCRC32_x +FUNCTION_AT_ADDRESS(unsigned int CRC32Generator::generateCRC32(unsigned char const *,unsigned int)const ,CRC32Generator__generateCRC32); +#endif +#ifdef CRC32Generator__updateCRC32_x +FUNCTION_AT_ADDRESS(unsigned int CRC32Generator::updateCRC32(unsigned int,unsigned char const *,unsigned int)const ,CRC32Generator__updateCRC32); +#endif +#ifdef CSidlScreenWnd__dCSidlScreenWnd_x +FUNCTION_AT_ADDRESS( CSidlScreenWnd::~CSidlScreenWnd(void),CSidlScreenWnd__dCSidlScreenWnd); +#endif +#ifdef CSidlScreenWnd__WndNotification_x +FUNCTION_AT_ADDRESS( int CSidlScreenWnd::WndNotification(class CXWnd *,unsigned __int32,void *),CSidlScreenWnd__WndNotification); +#endif +#ifdef CSidlScreenWnd__CSidlScreenWnd_x +FUNCTION_AT_ADDRESS( CSidlScreenWnd::CSidlScreenWnd(class CXWnd *,unsigned __int32,class CXRect,class CXStr),CSidlScreenWnd__CSidlScreenWnd); +#endif +#ifdef CSidlScreenWnd__CSidlScreenWnd1_x +FUNCTION_AT_ADDRESS( CSidlScreenWnd::CSidlScreenWnd(class CXWnd *x,class CXStr*,int,int,char *),CSidlScreenWnd__CSidlScreenWnd1); +#endif +#ifdef CSidlScreenWnd__CSidlScreenWnd2_x +FUNCTION_AT_ADDRESS( CSidlScreenWnd::CSidlScreenWnd(class CXWnd *x,class CXStr),CSidlScreenWnd__CSidlScreenWnd2); +#endif +#ifdef CSidlScreenWnd__Init_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::Init(class CXWnd *,unsigned __int32,class CXRect,class CXStr,int,char *),CSidlScreenWnd__Init); +#endif +#ifdef CSidlScreenWnd__Init1_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::Init(int,class CXStr*,int,int,int),CSidlScreenWnd__Init1); +#endif +#ifdef CSidlScreenWnd__SetScreen_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::SetScreen(class CXStr*),CSidlScreenWnd__SetScreen); +#endif +#ifdef CSidlScreenWnd__LoadSidlScreen_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::LoadSidlScreen(void),CSidlScreenWnd__LoadSidlScreen); +#endif +#ifdef CSidlScreenWnd__CalculateVSBRange_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::CalculateVSBRange(void),CSidlScreenWnd__CalculateVSBRange); +#endif +#ifdef CSidlScreenWnd__CalculateHSBRange_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::CalculateHSBRange(void),CSidlScreenWnd__CalculateHSBRange); +#endif +#ifdef CSidlScreenWnd__DrawSidlPiece_x +FUNCTION_AT_ADDRESS(int CSidlScreenWnd::DrawSidlPiece(class CScreenPieceTemplate *,class CXRect,class CXRect)const ,CSidlScreenWnd__DrawSidlPiece); +#endif +#ifdef CSidlScreenWnd__GetSidlPiece_x +FUNCTION_AT_ADDRESS(class CScreenPieceTemplate * CSidlScreenWnd::GetSidlPiece(class CXStr*, int dummy)const ,CSidlScreenWnd__GetSidlPiece); +#endif +#ifdef CSidlScreenWnd__GetSidlPieceRect_x +FUNCTION_AT_ADDRESS(class CXRect CSidlScreenWnd::GetSidlPieceRect(class CScreenPieceTemplate *,class CXRect)const ,CSidlScreenWnd__GetSidlPieceRect); +#endif +#ifdef CSidlScreenWnd__AddButtonToRadioGroup_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::AddButtonToRadioGroup(class CXStr,class CButtonWnd *),CSidlScreenWnd__AddButtonToRadioGroup); +#endif +#ifdef CRadioGroup__CRadioGroup_x +FUNCTION_AT_ADDRESS( CRadioGroup::CRadioGroup(class CXStr),CRadioGroup__CRadioGroup); +#endif +#ifdef CRadioGroup__GetName_x +FUNCTION_AT_ADDRESS(class CXStr CRadioGroup::GetName(void)const ,CRadioGroup__GetName); +#endif +#ifdef CSidlScreenWnd__CreateChildrenFromSidl_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::CreateChildrenFromSidl(void),CSidlScreenWnd__CreateChildrenFromSidl); +#endif +#ifdef CSidlScreenWnd__StoreIniVis_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::StoreIniVis(void),CSidlScreenWnd__StoreIniVis); +#endif +#ifdef CSidlScreenWnd__EnableIniStorage_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::EnableIniStorage(int,char *),CSidlScreenWnd__EnableIniStorage); +#endif +#ifdef CSidlScreenWnd__ConvertToRes_x +FUNCTION_AT_ADDRESS(int CSidlScreenWnd::ConvertToRes(int,int,int,int),CSidlScreenWnd__ConvertToRes); +#endif +#ifdef CSidlScreenWnd__GetChildItem_x +FUNCTION_AT_ADDRESS(class CXWnd * CSidlScreenWnd::GetChildItem(CXStr const &),CSidlScreenWnd__GetChildItem); +#endif +#ifdef CSidlScreenWnd__LoadIniListWnd_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::LoadIniListWnd(class CListWnd *,char *),CSidlScreenWnd__LoadIniListWnd); +#endif +#ifdef CSidlScreenWnd__StoreIniListWnd_x +FUNCTION_AT_ADDRESS(void CSidlScreenWnd::StoreIniListWnd(class CListWnd const *,char *),CSidlScreenWnd__StoreIniListWnd); +#endif +#ifdef CXWndDrawTemplate__CXWndDrawTemplate_x +FUNCTION_AT_ADDRESS( CXWndDrawTemplate::CXWndDrawTemplate(void),CXWndDrawTemplate__CXWndDrawTemplate); +#endif +#ifdef CUITextureInfo__CUITextureInfo1_x +FUNCTION_AT_ADDRESS( CUITextureInfo::CUITextureInfo(void),CUITextureInfo__CUITextureInfo1); +#endif +#ifdef CButtonDrawTemplate__CButtonDrawTemplate_x +FUNCTION_AT_ADDRESS( CButtonDrawTemplate::CButtonDrawTemplate(void),CButtonDrawTemplate__CButtonDrawTemplate); +#endif +#ifdef CScrollbarTemplate__dCScrollbarTemplate_x +FUNCTION_AT_ADDRESS( CScrollbarTemplate::~CScrollbarTemplate(void),CScrollbarTemplate__dCScrollbarTemplate); +#endif +#ifdef CXWndDrawTemplate__dCXWndDrawTemplate_x +FUNCTION_AT_ADDRESS( CXWndDrawTemplate::~CXWndDrawTemplate(void),CXWndDrawTemplate__dCXWndDrawTemplate); +#endif +#ifdef CButtonDrawTemplate__GetSize_x +FUNCTION_AT_ADDRESS(class CXSize CButtonDrawTemplate::GetSize(void)const ,CButtonDrawTemplate__GetSize); +#endif +#ifdef CXWnd__CXWnd_x +FUNCTION_AT_ADDRESS( CXWnd::CXWnd(class CXWnd *,unsigned __int32,class CXRect),CXWnd__CXWnd); +#endif +#ifdef CXWnd__IsType_x +//FUNCTION_AT_ADDRESS(bool CXWnd::IsType(enum EWndRuntimeType)const ,CXWnd__IsType); +#endif +#ifdef CXWnd__SetFocus_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWnd::SetFocus(void),CXWnd__SetFocus); +#endif +#ifdef CXWnd__ClrFocus_x +FUNCTION_AT_ADDRESS(void CXWnd::ClrFocus(void),CXWnd__ClrFocus); +#endif +#ifdef CXWnd__HasFocus_x +FUNCTION_AT_ADDRESS(bool CXWnd::HasFocus(void)const ,CXWnd__HasFocus); +#endif +#ifdef CXWnd__Show_x +FUNCTION_AT_ADDRESS(int CXWnd::Show(bool,bool),CXWnd__Show); +#endif +#ifdef CXWnd__DrawCloseBox_x +FUNCTION_AT_ADDRESS(int CXWnd::DrawCloseBox(void)const ,CXWnd__DrawCloseBox); +#endif +#ifdef CXWnd__DrawMinimizeBox_x +FUNCTION_AT_ADDRESS(int CXWnd::DrawMinimizeBox(void)const ,CXWnd__DrawMinimizeBox); +#endif +#ifdef CXWnd__DrawTileBox_x +FUNCTION_AT_ADDRESS(int CXWnd::DrawTileBox(void)const ,CXWnd__DrawTileBox); +#endif +#ifdef CXWnd__DrawVScrollbar_x +FUNCTION_AT_ADDRESS(int CXWnd::DrawVScrollbar(int,int,int)const ,CXWnd__DrawVScrollbar); +#endif +#ifdef CXRect__CXRect_x +FUNCTION_AT_ADDRESS( CXRect::CXRect(int,int,int,int),CXRect__CXRect); +#endif +#ifdef CXRect__operator_equal_x +FUNCTION_AT_ADDRESS(class CXRect & CXRect::operator=(class CXRect const &),CXRect__operator_equal); +#endif +#ifdef CXWnd__DrawHScrollbar_x +FUNCTION_AT_ADDRESS(int CXWnd::DrawHScrollbar(int,int,int)const ,CXWnd__DrawHScrollbar); +#endif +#ifdef CXWnd__Refade_x +FUNCTION_AT_ADDRESS(void CXWnd::Refade(void),CXWnd__Refade); +#endif +#ifdef CXWnd__Move_x +FUNCTION_AT_ADDRESS(int CXWnd::Move(class CXPoint),CXWnd__Move); +#endif +#ifdef CXWnd__Move1_x +FUNCTION_AT_ADDRESS(int CXWnd::Move(class CXRect),CXWnd__Move1); +#endif +#ifdef CXPoint__operator_equal_x +FUNCTION_AT_ADDRESS(class CXPoint CXPoint::operator=(class CXPoint),CXPoint__operator_equal); +#endif +#ifdef CXWnd__ProcessTransition_x +FUNCTION_AT_ADDRESS(int CXWnd::ProcessTransition(void),CXWnd__ProcessTransition); +#endif +#ifdef CXWnd__BringToTop_x +FUNCTION_AT_ADDRESS(void CXWnd::BringToTop(bool),CXWnd__BringToTop); +#endif +#ifdef CXWnd__StartFade_x +FUNCTION_AT_ADDRESS(void CXWnd::StartFade(unsigned char,unsigned __int32),CXWnd__StartFade); +#endif +#ifdef CXWnd__Minimize_x +FUNCTION_AT_ADDRESS(int CXWnd::Minimize(bool),CXWnd__Minimize); +#endif +#ifdef CXWnd__IsReallyVisible_x +FUNCTION_AT_ADDRESS(bool CXWnd::IsReallyVisible(void)const ,CXWnd__IsReallyVisible); +#endif +#ifdef CXWnd__GetNextChildWnd_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWnd::GetNextChildWnd(class CXWnd *)const ,CXWnd__GetNextChildWnd); +#endif +#ifdef CXWnd__GetChildWndAt_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWnd::GetChildWndAt(class CXPoint)const ,CXWnd__GetChildWndAt); +#endif +#ifdef CXWnd__GetFirstChildWnd_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWnd::GetFirstChildWnd(void)const ,CXWnd__GetFirstChildWnd); +#endif +#ifdef CXWnd__GetNextSib_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWnd::GetNextSib(void)const ,CXWnd__GetNextSib); +#endif +#ifdef CXWnd__DoAllDrawing_x +FUNCTION_AT_ADDRESS(int CXWnd::DoAllDrawing(void)const ,CXWnd__DoAllDrawing); +#endif +#ifdef CXWnd__DrawLasso_x +FUNCTION_AT_ADDRESS(int __cdecl CXWnd::DrawLasso(class CXRect,unsigned long,class CXRect),CXWnd__DrawLasso); +#endif +#ifdef CXWnd__DrawChildren_x +FUNCTION_AT_ADDRESS(int CXWnd::DrawChildren(void)const ,CXWnd__DrawChildren); +#endif +#ifdef CXWnd__BringChildWndToTop_x +FUNCTION_AT_ADDRESS(void CXWnd::BringChildWndToTop(class CXWnd *),CXWnd__BringChildWndToTop); +#endif +#ifdef CXWnd__DrawColoredRect_x +FUNCTION_AT_ADDRESS(int __cdecl CXWnd::DrawColoredRect(class CXRect,unsigned long,class CXRect),CXWnd__DrawColoredRect); +#endif +#ifdef CXWnd__GetTooltipRect_x +FUNCTION_AT_ADDRESS(class CXRect __cdecl CXWnd::GetTooltipRect(class CXSize),CXWnd__GetTooltipRect); +#endif +#ifdef CXWnd__GetTooltipRect1_x +FUNCTION_AT_ADDRESS(class CXRect __cdecl CXWnd::GetTooltipRect(class CXPoint,class CXSize),CXWnd__GetTooltipRect1); +#endif +#ifdef CXWnd__DrawTooltipAtPoint_x +FUNCTION_AT_ADDRESS(void CXWnd::DrawTooltipAtPoint(class CXPoint)const ,CXWnd__DrawTooltipAtPoint); +#endif +#ifdef CXWnd__Bottom_x +FUNCTION_AT_ADDRESS(void CXWnd::Bottom(void),CXWnd__Bottom); +#endif +#ifdef CXWnd__Center_x +FUNCTION_AT_ADDRESS(void CXWnd::Center(void),CXWnd__Center); +#endif +#ifdef CXWnd__Right_x +FUNCTION_AT_ADDRESS(void CXWnd::Right(void),CXWnd__Right); +#endif +#ifdef CXWnd__Left_x +FUNCTION_AT_ADDRESS(void CXWnd::Left(void),CXWnd__Left); +#endif +#ifdef CXWnd__SetLookLikeParent_x +FUNCTION_AT_ADDRESS(void CXWnd::SetLookLikeParent(void),CXWnd__SetLookLikeParent); +#endif +#ifdef CXWnd__GetClientClipRect_x +FUNCTION_AT_ADDRESS(class CXRect CXWnd::GetClientClipRect(void)const ,CXWnd__GetClientClipRect); +#endif +#ifdef CXWnd__GetScreenClipRect_x +FUNCTION_AT_ADDRESS(class CXRect CXWnd::GetScreenClipRect(void)const ,CXWnd__GetScreenClipRect); +#endif +#ifdef CXWnd__IsActive_x +FUNCTION_AT_ADDRESS(bool CXWnd::IsActive(void)const ,CXWnd__IsActive); +#endif +#ifdef CXWnd__IsDescendantOf_x +FUNCTION_AT_ADDRESS(bool CXWnd::IsDescendantOf(class CXWnd const *)const ,CXWnd__IsDescendantOf); +#endif +#ifdef CXWnd__GetBorderFrame_x +FUNCTION_AT_ADDRESS(class CTAFrameDraw const * CXWnd::GetBorderFrame(void)const ,CXWnd__GetBorderFrame); +#endif +#ifdef CXWnd__GetTitlebarHeader_x +FUNCTION_AT_ADDRESS(class CTAFrameDraw const * CXWnd::GetTitlebarHeader(void)const ,CXWnd__GetTitlebarHeader); +#endif +#ifdef CXWnd__GetCloseBoxTemplate_x +FUNCTION_AT_ADDRESS(class CButtonDrawTemplate const * CXWnd::GetCloseBoxTemplate(void)const ,CXWnd__GetCloseBoxTemplate); +#endif +#ifdef CXWnd__GetMinimizeBoxTemplate_x +FUNCTION_AT_ADDRESS(class CButtonDrawTemplate const * CXWnd::GetMinimizeBoxTemplate(void)const ,CXWnd__GetMinimizeBoxTemplate); +#endif +#ifdef CXWnd__GetTileBoxTemplate_x +FUNCTION_AT_ADDRESS(class CButtonDrawTemplate const * CXWnd::GetTileBoxTemplate(void)const ,CXWnd__GetTileBoxTemplate); +#endif +#ifdef CXWnd__GetRelativeRect_x +FUNCTION_AT_ADDRESS(class CXRect CXWnd::GetRelativeRect(void)const ,CXWnd__GetRelativeRect); +#endif +#ifdef CXWnd__GetScreenRect_x +FUNCTION_AT_ADDRESS(class CXRect CXWnd::GetScreenRect(void)const ,CXWnd__GetScreenRect); +#endif +#ifdef CXWnd__Resize_x +FUNCTION_AT_ADDRESS(int CXWnd::Resize(int,int),CXWnd__Resize); +#endif +#ifdef CXWnd__GetChildItem_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWnd::GetChildItem(CXStr const &),CXWnd__GetChildItem); +#endif +#ifdef CXWnd__SetZLayer_x +FUNCTION_AT_ADDRESS(void CXWnd::SetZLayer(int),CXWnd__SetZLayer); +#endif +#ifdef CXWnd__SetFirstChildPointer_x +FUNCTION_AT_ADDRESS(void CXWnd::SetFirstChildPointer(class CXWnd *),CXWnd__SetFirstChildPointer); +#endif +#ifdef CXWnd__SetNextSibPointer_x +FUNCTION_AT_ADDRESS(void CXWnd::SetNextSibPointer(class CXWnd *),CXWnd__SetNextSibPointer); +#endif +#ifdef CXWnd__SetMouseOver_x +FUNCTION_AT_ADDRESS(void CXWnd::SetMouseOver(bool),CXWnd__SetMouseOver); +#endif +#ifdef CXWnd__SetKeyTooltip_x +FUNCTION_AT_ADDRESS(void CXWnd::SetKeyTooltip(int,int),CXWnd__SetKeyTooltip); +#endif +#ifdef CXWnd__GetXMLTooltip_x +FUNCTION_AT_ADDRESS(class CXStr CXWnd::GetXMLTooltip(void)const ,CXWnd__GetXMLTooltip); +#endif +#ifdef CXWnd__DrawTooltip_x +FUNCTION_AT_ADDRESS(int CXWnd::DrawTooltip(class CXWnd const *)const,CXWnd__DrawTooltip); +#endif +#ifdef CMutexSyncCounted__CMutexSyncCounted_x +FUNCTION_AT_ADDRESS( CMutexSyncCounted::CMutexSyncCounted(void),CMutexSyncCounted__CMutexSyncCounted); +#endif +#ifdef CMutexSyncCounted__dCMutexSyncCounted_x +FUNCTION_AT_ADDRESS( CMutexSyncCounted::~CMutexSyncCounted(void),CMutexSyncCounted__dCMutexSyncCounted); +#endif +#ifdef CMutexLockCounted__dCMutexLockCounted_x +FUNCTION_AT_ADDRESS( CMutexLockCounted::~CMutexLockCounted(void),CMutexLockCounted__dCMutexLockCounted); +#endif +#ifdef CXStr__AssureCopy_x +FUNCTION_AT_ADDRESS(void CXStr::AssureCopy(void),CXStr__AssureCopy); +#endif +#ifdef CXStr__Assure_x +//FUNCTION_AT_ADDRESS(void CXStr::Assure(long,enum EStringEncoding),CXStr__Assure); +#endif +#ifdef CXStr__AllocRepNoLock_x +//FUNCTION_AT_ADDRESS(struct CStrRep * CXStr::AllocRepNoLock(long,enum EStringEncoding),CXStr__AllocRepNoLock); +#endif +#ifdef CXStr__FreeRep_x +FUNCTION_AT_ADDRESS(void CXStr::FreeRep(struct CStrRep *),CXStr__FreeRep); +#endif +#ifdef CXStr__FreeRepNoLock_x +FUNCTION_AT_ADDRESS(void CXStr::FreeRepNoLock(struct CStrRep *),CXStr__FreeRepNoLock); +#endif +#ifdef CXStr__CXStr2_x +FUNCTION_AT_ADDRESS( CXStr::CXStr(char),CXStr__CXStr2); +#endif +#ifdef CXStr__CXStr3_x +FUNCTION_AT_ADDRESS( CXStr::CXStr(char const *),CXStr__CXStr3); +#endif +#ifdef CXStr__CXStr4_x +FUNCTION_AT_ADDRESS( CXStr::CXStr(char const *,int),CXStr__CXStr4); +#endif +#ifdef CXStr__CXStr5_x +FUNCTION_AT_ADDRESS( CXStr::CXStr(unsigned short const *),CXStr__CXStr5); +#endif +#ifdef CXStr__CXStr6_x +FUNCTION_AT_ADDRESS( CXStr::CXStr(int,int,char),CXStr__CXStr6); +#endif +#ifdef CXStr__operator_equal_x +FUNCTION_AT_ADDRESS(class CXStr & CXStr::operator=(class CXStr const &),CXStr__operator_equal); +#endif +#ifdef CXStr__operator_equal1_x +FUNCTION_AT_ADDRESS(class CXStr & CXStr::operator=(char const *),CXStr__operator_equal1); +#endif +#define CINITIALIZE_EQGAME_OFFSET(var) DWORD var = (((DWORD)var##_x - 0x400000) + (DWORD)GetModuleHandle(NULL)) +#define CCXStr__operator_equal1_x CXStr__operator_equal1_x +#ifdef CCXStr__operator_equal1_x +CINITIALIZE_EQGAME_OFFSET(CCXStr__operator_equal1); +FUNCTION_AT_ADDRESS(class CCXStr& CCXStr::operator=(char const *), CCXStr__operator_equal1); +#endif +#ifdef CXStr__GetChar_x +FUNCTION_AT_ADDRESS(char CXStr::GetChar(long)const ,CXStr__GetChar); +#endif +#ifdef CXStr__SetChar_x +FUNCTION_AT_ADDRESS(char CXStr::SetChar(long,char),CXStr__SetChar); +#endif +#ifdef CXStr__GetUnicode_x +FUNCTION_AT_ADDRESS(unsigned short CXStr::GetUnicode(long)const ,CXStr__GetUnicode); +#endif +#ifdef CXStr__SetUnicode_x +FUNCTION_AT_ADDRESS(unsigned short CXStr::SetUnicode(long,unsigned short),CXStr__SetUnicode); +#endif +#ifdef CXStr__Compare_x +//FUNCTION_AT_ADDRESS(int CXStr::Compare(class CXStr const &,enum CompareCode)const ,CXStr__Compare); +#endif +#ifdef CXStr__CompareN_x +//FUNCTION_AT_ADDRESS(int CXStr::CompareN(class CXStr const &,int,enum CompareCode)const ,CXStr__CompareN); +#endif +#ifdef CXStr__operator_equal_equal_x +FUNCTION_AT_ADDRESS(int CXStr::operator==(class CXStr const &)const ,CXStr__operator_equal_equal); +#endif +#ifdef CXStr__operator_equal_equal1_x +FUNCTION_AT_ADDRESS(int CXStr::operator==(char const *)const ,CXStr__operator_equal_equal1); +#endif +#ifdef CXStr__operatort__x +FUNCTION_AT_ADDRESS(int CXStr::operator>(class CXStr const &)const ,CXStr__operatort_); +#endif +#ifdef CXStr__BlankPreAllocate_x +FUNCTION_AT_ADDRESS(void CXStr::BlankPreAllocate(int),CXStr__BlankPreAllocate); +#endif +#ifdef CXStr__operator_plus_equal_x +FUNCTION_AT_ADDRESS(void CXStr::operator+=(class CXStr const &),CXStr__operator_plus_equal); +#endif +#ifdef CXStr__operator_plus_equal1_x +FUNCTION_AT_ADDRESS(void CXStr::operator+=(char const *),CXStr__operator_plus_equal1); +#endif +#ifdef CXStr__operator_plus_equal2_x +FUNCTION_AT_ADDRESS(void CXStr::operator+=(char),CXStr__operator_plus_equal2); +#endif +#ifdef CXStr__operator_plus_equal3_x +FUNCTION_AT_ADDRESS(void CXStr::operator+=(unsigned short),CXStr__operator_plus_equal3); +#endif +#ifdef CXStr__Delete_x +FUNCTION_AT_ADDRESS(void CXStr::Delete(long,long),CXStr__Delete); +#endif +#ifdef CXStr__Insert_x +FUNCTION_AT_ADDRESS(void CXStr::Insert(long,char),CXStr__Insert); +#endif +#ifdef CXStr__Insert1_x +FUNCTION_AT_ADDRESS(void CXStr::Insert(long,class CXStr const &),CXStr__Insert1); +#endif +#ifdef CXStr__Copy_x +FUNCTION_AT_ADDRESS(class CXStr CXStr::Copy(long,long)const ,CXStr__Copy); +#endif +#ifdef CXStr__CopySelf_x +FUNCTION_AT_ADDRESS(void CXStr::CopySelf(long,long),CXStr__CopySelf); +#endif +#ifdef CXStr__StripTrailing_x +FUNCTION_AT_ADDRESS(void CXStr::StripTrailing(char),CXStr__StripTrailing); +#endif +#ifdef CXStr__StripLeading_x +FUNCTION_AT_ADDRESS(void CXStr::StripLeading(char),CXStr__StripLeading); +#endif +#ifdef CXStr__StripAll_x +FUNCTION_AT_ADDRESS(void CXStr::StripAll(char),CXStr__StripAll); +#endif +#ifdef CXStr__Strip_x +FUNCTION_AT_ADDRESS(void CXStr::Strip(char),CXStr__Strip); +#endif +#ifdef CXStr__GetEncoding_x +//FUNCTION_AT_ADDRESS(enum EStringEncoding CXStr::GetEncoding(void)const ,CXStr__GetEncoding); +#endif +#ifdef CXStr__SetEncoding_x +//FUNCTION_AT_ADDRESS(void CXStr::SetEncoding(enum EStringEncoding),CXStr__SetEncoding); +#endif +#ifdef CXStr__operator_char_p_x +//FUNCTION_AT_ADDRESS( CXStr::operator char *(void)const ,CXStr__operator_char_p); +#endif +#ifdef CXStr__operator_unsigned_short_p_x +//FUNCTION_AT_ADDRESS( CXStr::operator unsigned short *(void)const ,CXStr__operator_unsigned_short_p); +#endif +#ifdef CXStr__SetUpperCase_x +FUNCTION_AT_ADDRESS(void CXStr::SetUpperCase(void),CXStr__SetUpperCase); +#endif +#ifdef CXStr__SetLowerCase_x +FUNCTION_AT_ADDRESS(void CXStr::SetLowerCase(void),CXStr__SetLowerCase); +#endif +#ifdef CXStr__ConvertToInt_x +FUNCTION_AT_ADDRESS(int CXStr::ConvertToInt(void),CXStr__ConvertToInt); +#endif +#ifdef CXStr__PrintString_x +FUNCTION_AT_ADDRESS(int __cdecl CXStr::PrintString(char const *,...),CXStr__PrintString); +#endif +#ifdef CXStr__FindLast_x +FUNCTION_AT_ADDRESS(bool CXStr::FindLast(char,int &),CXStr__FindLast); +#endif +#ifdef CXStr__Find_x +FUNCTION_AT_ADDRESS(bool CXStr::Find(char,int &),CXStr__Find); +#endif +#ifdef CXStr__Find1_x +FUNCTION_AT_ADDRESS(bool CXStr::Find(unsigned short,int &),CXStr__Find1); +#endif +#ifdef CXStr__Find2_x +FUNCTION_AT_ADDRESS(bool CXStr::Find(class CXStr const &,int &),CXStr__Find2); +#endif +#ifdef CXStr__AddCr_x +FUNCTION_AT_ADDRESS(void CXStr::AddCr(void),CXStr__AddCr); +#endif +#ifdef CXStr__Utf8ToUnicode_x +FUNCTION_AT_ADDRESS(int __cdecl CXStr::Utf8ToUnicode(char const *,unsigned short *,int),CXStr__Utf8ToUnicode); +#endif +#ifdef CXStr__LenUnicodeToUtf8_x +FUNCTION_AT_ADDRESS(int __cdecl CXStr::LenUnicodeToUtf8(unsigned short const *),CXStr__LenUnicodeToUtf8); +#endif +#ifdef CXStr__UnicodeToUtf8_x +FUNCTION_AT_ADDRESS(int __cdecl CXStr::UnicodeToUtf8(unsigned short const *,char *,int),CXStr__UnicodeToUtf8); +#endif +#ifdef CListWnd__CListWnd_x +FUNCTION_AT_ADDRESS( CListWnd::CListWnd(class CXWnd *,unsigned __int32,class CXRect),CListWnd__CListWnd); +#endif +#ifdef CListWnd__GetCurSel_x +FUNCTION_AT_ADDRESS(int CListWnd::GetCurSel(void)const,CListWnd__GetCurSel); +#endif +#ifdef CListWnd__GetCurCol_x +FUNCTION_AT_ADDRESS(int CListWnd::GetCurCol(void)const ,CListWnd__GetCurCol); +#endif +#ifdef CListWnd__GetItemData_x +FUNCTION_AT_ADDRESS(unsigned __int32 CListWnd::GetItemData(int)const ,CListWnd__GetItemData); +#endif +#ifdef CListWnd__GetItemText_x +FUNCTION_AT_ADDRESS(class CXStr *CListWnd::GetItemText(class CXStr *,int,int)const ,CListWnd__GetItemText); +#endif +#ifdef CListWnd__GetItemIcon_x +FUNCTION_AT_ADDRESS(class CTextureAnimation const * CListWnd::GetItemIcon(int,int)const ,CListWnd__GetItemIcon); +#endif +#ifdef CListWnd__GetItemColor_x +FUNCTION_AT_ADDRESS(unsigned long CListWnd::GetItemColor(int,int)const ,CListWnd__GetItemColor); +#endif +#ifdef CListWnd__GetColumnFlags_x +FUNCTION_AT_ADDRESS(unsigned __int32 CListWnd::GetColumnFlags(int)const ,CListWnd__GetColumnFlags); +#endif +#ifdef CListWnd__GetColumnWidth_x +FUNCTION_AT_ADDRESS(int CListWnd::GetColumnWidth(int)const ,CListWnd__GetColumnWidth); +#endif +#ifdef CListWnd__SetColumnWidth_x +FUNCTION_AT_ADDRESS(void CListWnd::SetColumnWidth(int,int),CListWnd__SetColumnWidth); +#endif +#ifdef CListWnd__ShiftColumnSeparator_x +FUNCTION_AT_ADDRESS(void CListWnd::ShiftColumnSeparator(int,int),CListWnd__ShiftColumnSeparator); +#endif +#ifdef CListWnd__GetColumnMinWidth_x +FUNCTION_AT_ADDRESS(int CListWnd::GetColumnMinWidth(int)const ,CListWnd__GetColumnMinWidth); +#endif +#ifdef CListWnd__GetColumnJustification_x +FUNCTION_AT_ADDRESS(int CListWnd::GetColumnJustification(int)const ,CListWnd__GetColumnJustification); +#endif +#ifdef CListWnd__SetColumnJustification_x +FUNCTION_AT_ADDRESS(void CListWnd::SetColumnJustification(int,int),CListWnd__SetColumnJustification); +#endif +#ifdef CListWnd__GetColumnLabel_x +FUNCTION_AT_ADDRESS(class CXStr CListWnd::GetColumnLabel(int)const ,CListWnd__GetColumnLabel); +#endif +#ifdef CListWnd__GetColumnAnimation_x +FUNCTION_AT_ADDRESS(class CTextureAnimation const * CListWnd::GetColumnAnimation(int)const ,CListWnd__GetColumnAnimation); +#endif +#ifdef CListWnd__GetColumnAnimationSelected_x +FUNCTION_AT_ADDRESS(class CTextureAnimation const * CListWnd::GetColumnAnimationSelected(int)const ,CListWnd__GetColumnAnimationSelected); +#endif +#ifdef CListWnd__GetColumnAnimationMouseOver_x +FUNCTION_AT_ADDRESS(class CTextureAnimation const * CListWnd::GetColumnAnimationMouseOver(int)const ,CListWnd__GetColumnAnimationMouseOver); +#endif +#ifdef CListWnd__AddLine_x +FUNCTION_AT_ADDRESS(int CListWnd::AddLine(class SListWndLine const *),CListWnd__AddLine); +#endif +#ifdef CListWnd__AddString_x +FUNCTION_AT_ADDRESS(int CListWnd::AddString(const CXStr &Str, COLORREF Color, uint32_t Data, const CTextureAnimation *pTa, const char*TooltipStr), CListWnd__AddString); +#endif +#ifdef CListWnd__RemoveString_x +FUNCTION_AT_ADDRESS(void CListWnd::RemoveString(int),CListWnd__RemoveString); +#endif +#ifdef CListWnd__RemoveLine_x +FUNCTION_AT_ADDRESS(void CListWnd::RemoveLine(int),CListWnd__RemoveLine); +#endif +#ifdef CListWnd__SetCurSel_x +FUNCTION_AT_ADDRESS(void CListWnd::SetCurSel(int),CListWnd__SetCurSel); +#endif +#ifdef CListWnd__ToggleSel_x +FUNCTION_AT_ADDRESS(void CListWnd::ToggleSel(int),CListWnd__ToggleSel); +#endif +#ifdef CListWnd__ExtendSel_x +FUNCTION_AT_ADDRESS(void CListWnd::ExtendSel(int),CListWnd__ExtendSel); +#endif +#ifdef CListWnd__ClearAllSel_x +FUNCTION_AT_ADDRESS(void CListWnd::ClearAllSel(void),CListWnd__ClearAllSel); +#endif +#ifdef CListWnd__ClearSel_x +FUNCTION_AT_ADDRESS(void CListWnd::ClearSel(int),CListWnd__ClearSel); +#endif +#ifdef CListWnd__SetItemData_x +FUNCTION_AT_ADDRESS(void CListWnd::SetItemData(int,unsigned __int32),CListWnd__SetItemData); +#endif +#ifdef CListWnd__SetItemText_x +FUNCTION_AT_ADDRESS(void CListWnd::SetItemText(int,int,class CXStr *),CListWnd__SetItemText); +#endif +#ifdef CListWnd__SetItemColor_x +FUNCTION_AT_ADDRESS(void CListWnd::SetItemColor(int,int,unsigned long),CListWnd__SetItemColor); +#endif +#ifdef CListWnd__IsLineEnabled_x +FUNCTION_AT_ADDRESS(bool CListWnd::IsLineEnabled(int)const ,CListWnd__IsLineEnabled); +#endif +#ifdef CListWnd__EnableLine_x +FUNCTION_AT_ADDRESS(void CListWnd::EnableLine(int,bool),CListWnd__EnableLine); +#endif +#ifdef CListWnd__AddColumn_x +FUNCTION_AT_ADDRESS(int CListWnd::AddColumn(class CXStr,int,unsigned __int32,unsigned __int32),CListWnd__AddColumn); +#endif +#ifdef CListWnd__AddColumn1_x +FUNCTION_AT_ADDRESS(int CListWnd::AddColumn(class CXStr,class CTextureAnimation *,int,unsigned __int32,unsigned __int32,class CTextureAnimation *,class CTextureAnimation *),CListWnd__AddColumn1); +#endif +#ifdef SListWndColumn__SListWndColumn_x +FUNCTION_AT_ADDRESS( SListWndColumn::SListWndColumn(class CXStr,int,class CTextureAnimation *,unsigned __int32,unsigned __int32,class CTextureAnimation *,class CTextureAnimation *),SListWndColumn__SListWndColumn); +#endif +#ifdef SLinkInfo__dSLinkInfo_x +//FUNCTION_AT_ADDRESS( SLinkInfo::~SLinkInfo(void),SLinkInfo__dSLinkInfo); +#endif +#ifdef SListWndCellEditUpdate__dSListWndCellEditUpdate_x +FUNCTION_AT_ADDRESS( SListWndCellEditUpdate::~SListWndCellEditUpdate(void),SListWndCellEditUpdate__dSListWndCellEditUpdate); +#endif +#ifdef SListWndColumn__dSListWndColumn_x +FUNCTION_AT_ADDRESS( SListWndColumn::~SListWndColumn(void),SListWndColumn__dSListWndColumn); +#endif +#ifdef CListWnd__SetColumnLabel_x +FUNCTION_AT_ADDRESS(void CListWnd::SetColumnLabel(int,class CXStr),CListWnd__SetColumnLabel); +#endif +#ifdef CXRect__CXRect1_x +FUNCTION_AT_ADDRESS( CXRect::CXRect(void),CXRect__CXRect1); +#endif +#ifdef CListWnd__GetItemHeight_x +FUNCTION_AT_ADDRESS(int CListWnd::GetItemHeight(int)const ,CListWnd__GetItemHeight); +#endif +#ifdef CListWnd__CalculateLineHeights_x +FUNCTION_AT_ADDRESS(void CListWnd::CalculateLineHeights(void),CListWnd__CalculateLineHeights); +#endif +#ifdef CListWnd__CalculateVSBRange_x +FUNCTION_AT_ADDRESS(void CListWnd::CalculateVSBRange(void),CListWnd__CalculateVSBRange); +#endif +#ifdef CListWnd__CalculateFirstVisibleLine_x +FUNCTION_AT_ADDRESS(void CListWnd::CalculateFirstVisibleLine(void),CListWnd__CalculateFirstVisibleLine); +#endif +#ifdef CListWnd__EnsureVisible_x +FUNCTION_AT_ADDRESS(void CListWnd::EnsureVisible(int),CListWnd__EnsureVisible); +#endif +#ifdef CListWnd__GetItemRect_x +FUNCTION_AT_ADDRESS(class CXRect CListWnd::GetItemRect(int,int)const ,CListWnd__GetItemRect); +#endif +#ifdef CListWnd__GetItemAtPoint_x +FUNCTION_AT_ADDRESS(int CListWnd::GetItemAtPoint(class CXPoint)const ,CListWnd__GetItemAtPoint); +#endif +#ifdef CListWnd__GetItemAtPoint1_x +FUNCTION_AT_ADDRESS(void CListWnd::GetItemAtPoint(class CXPoint,int *,int *)const ,CListWnd__GetItemAtPoint1); +#endif +#ifdef CListWnd__CloseAndUpdateEditWindow_x +FUNCTION_AT_ADDRESS(void CListWnd::CloseAndUpdateEditWindow(void),CListWnd__CloseAndUpdateEditWindow); +#endif +#ifdef CListWnd__SetColors_x +FUNCTION_AT_ADDRESS(void CListWnd::SetColors(unsigned long,unsigned long,unsigned long),CListWnd__SetColors); +#endif +#ifdef CListWnd__GetSeparatorRect_x +FUNCTION_AT_ADDRESS(class CXRect CListWnd::GetSeparatorRect(int)const ,CListWnd__GetSeparatorRect); +#endif +#ifdef SListWndSortInfo__dSListWndSortInfo_x +FUNCTION_AT_ADDRESS( SListWndSortInfo::~SListWndSortInfo(void),SListWndSortInfo__dSListWndSortInfo); +#endif +#ifdef CListWnd__GetHeaderRect_x +FUNCTION_AT_ADDRESS(class CXRect CListWnd::GetHeaderRect(int)const ,CListWnd__GetHeaderRect); +#endif +#ifdef SListWndLine__SListWndLine_x +FUNCTION_AT_ADDRESS( SListWndLine::SListWndLine(void),SListWndLine__SListWndLine); +#endif +#ifdef SListWndCell__operator_equal_x +FUNCTION_AT_ADDRESS(struct SListWndCell & SListWndCell::operator=(struct SListWndCell const &),SListWndCell__operator_equal); +#endif +#ifdef SListWndLine__operator_equal_x +FUNCTION_AT_ADDRESS(class SListWndLine & SListWndLine::operator=(class SListWndLine const &),SListWndLine__operator_equal); +#endif +#ifdef CScreenPieceTemplate__CScreenPieceTemplate_x +FUNCTION_AT_ADDRESS( CScreenPieceTemplate::CScreenPieceTemplate(class CParamScreenPiece *),CScreenPieceTemplate__CScreenPieceTemplate); +#endif +#ifdef CScreenPieceTemplate__IsType_x +FUNCTION_AT_ADDRESS(bool CScreenPieceTemplate::IsType(unsigned __int32)const ,CScreenPieceTemplate__IsType); +#endif +#ifdef CStaticScreenPieceTemplate__CStaticScreenPieceTemplate_x +FUNCTION_AT_ADDRESS( CStaticScreenPieceTemplate::CStaticScreenPieceTemplate(class CParamStaticScreenPiece *),CStaticScreenPieceTemplate__CStaticScreenPieceTemplate); +#endif +#ifdef CStaticAnimationTemplate__CStaticAnimationTemplate_x +FUNCTION_AT_ADDRESS( CStaticAnimationTemplate::CStaticAnimationTemplate(class CParamStaticAnimation *),CStaticAnimationTemplate__CStaticAnimationTemplate); +#endif +#ifdef CStaticTextTemplate__CStaticTextTemplate_x +FUNCTION_AT_ADDRESS( CStaticTextTemplate::CStaticTextTemplate(class CParamStaticText *),CStaticTextTemplate__CStaticTextTemplate); +#endif +#ifdef CStaticTextTemplate__SetText_x +FUNCTION_AT_ADDRESS(class CXStr CStaticTextTemplate::SetText(class CXStr),CStaticTextTemplate__SetText); +#endif +#ifdef CStaticFrameTemplate__CStaticFrameTemplate_x +FUNCTION_AT_ADDRESS( CStaticFrameTemplate::CStaticFrameTemplate(class CParamStaticFrame *),CStaticFrameTemplate__CStaticFrameTemplate); +#endif +#ifdef CStaticHeaderTemplate__CStaticHeaderTemplate_x +FUNCTION_AT_ADDRESS( CStaticHeaderTemplate::CStaticHeaderTemplate(class CParamStaticHeader *),CStaticHeaderTemplate__CStaticHeaderTemplate); +#endif +#ifdef CControlTemplate__CControlTemplate_x +FUNCTION_AT_ADDRESS( CControlTemplate::CControlTemplate(class CParamControl *),CControlTemplate__CControlTemplate); +#endif +#ifdef CListboxColumnTemplate__CListboxColumnTemplate_x +FUNCTION_AT_ADDRESS( CListboxColumnTemplate::CListboxColumnTemplate(class CParamListboxColumn *),CListboxColumnTemplate__CListboxColumnTemplate); +#endif +#ifdef CListboxTemplate__CListboxTemplate_x +FUNCTION_AT_ADDRESS( CListboxTemplate::CListboxTemplate(class CParamListbox *),CListboxTemplate__CListboxTemplate); +#endif +#ifdef CListboxColumnTemplate__dCListboxColumnTemplate_x +FUNCTION_AT_ADDRESS( CListboxColumnTemplate::~CListboxColumnTemplate(void),CListboxColumnTemplate__dCListboxColumnTemplate); +#endif +#ifdef CButtonTemplate__CButtonTemplate_x +FUNCTION_AT_ADDRESS( CButtonTemplate::CButtonTemplate(class CParamButton *),CButtonTemplate__CButtonTemplate); +#endif +#ifdef CGaugeTemplate__CGaugeTemplate_x +FUNCTION_AT_ADDRESS( CGaugeTemplate::CGaugeTemplate(class CParamGauge *),CGaugeTemplate__CGaugeTemplate); +#endif +#ifdef CSpellGemTemplate__CSpellGemTemplate_x +FUNCTION_AT_ADDRESS( CSpellGemTemplate::CSpellGemTemplate(class CParamSpellGem *),CSpellGemTemplate__CSpellGemTemplate); +#endif +#ifdef CInvSlotTemplate__CInvSlotTemplate_x +FUNCTION_AT_ADDRESS( CInvSlotTemplate::CInvSlotTemplate(class CParamInvSlot *),CInvSlotTemplate__CInvSlotTemplate); +#endif +#ifdef CEditboxTemplate__CEditboxTemplate_x +FUNCTION_AT_ADDRESS( CEditboxTemplate::CEditboxTemplate(class CParamEditbox *),CEditboxTemplate__CEditboxTemplate); +#endif +#ifdef CSliderTemplate__CSliderTemplate_x +FUNCTION_AT_ADDRESS( CSliderTemplate::CSliderTemplate(class CParamSlider *),CSliderTemplate__CSliderTemplate); +#endif +#ifdef CLabelTemplate__CLabelTemplate_x +FUNCTION_AT_ADDRESS( CLabelTemplate::CLabelTemplate(class CParamLabel *),CLabelTemplate__CLabelTemplate); +#endif +#ifdef CSTMLboxTemplate__CSTMLboxTemplate_x +FUNCTION_AT_ADDRESS( CSTMLboxTemplate::CSTMLboxTemplate(class CParamSTMLbox *),CSTMLboxTemplate__CSTMLboxTemplate); +#endif +#ifdef CComboboxTemplate__CComboboxTemplate_x +FUNCTION_AT_ADDRESS( CComboboxTemplate::CComboboxTemplate(class CParamCombobox *),CComboboxTemplate__CComboboxTemplate); +#endif +#ifdef CPageTemplate__CPageTemplate_x +FUNCTION_AT_ADDRESS( CPageTemplate::CPageTemplate(class CParamPage *),CPageTemplate__CPageTemplate); +#endif +#ifdef CTabBoxTemplate__CTabBoxTemplate_x +FUNCTION_AT_ADDRESS( CTabBoxTemplate::CTabBoxTemplate(class CParamTabBox *),CTabBoxTemplate__CTabBoxTemplate); +#endif +#ifdef CScreenTemplate__CScreenTemplate_x +FUNCTION_AT_ADDRESS( CScreenTemplate::CScreenTemplate(class CParamScreen *),CScreenTemplate__CScreenTemplate); +#endif +#ifdef CStmlWnd__CStmlWnd_x +FUNCTION_AT_ADDRESS( CStmlWnd::CStmlWnd(class CXWnd *,unsigned __int32,class CXRect),CStmlWnd__CStmlWnd); +#endif +#ifdef CStmlWnd__InitializeTextLine_x +FUNCTION_AT_ADDRESS(void CStmlWnd::InitializeTextLine(class SParseVariables *,int),CStmlWnd__InitializeTextLine); +#endif +#ifdef CStmlWnd__AddTextPieceToLine_x +FUNCTION_AT_ADDRESS(void CStmlWnd::AddTextPieceToLine(class SParseVariables *),CStmlWnd__AddTextPieceToLine); +#endif +#ifdef CStmlWnd__MakeStmlColorTag_x +FUNCTION_AT_ADDRESS(class CXStr __cdecl CStmlWnd::MakeStmlColorTag(unsigned long),CStmlWnd__MakeStmlColorTag); +#endif +#ifdef CTextureAnimation__GetName_x +FUNCTION_AT_ADDRESS(class CXStr CTextureAnimation::GetName(void)const ,CTextureAnimation__GetName); +#endif +#ifdef CStmlWnd__MakeWndNotificationTag_x +FUNCTION_AT_ADDRESS(class CXStr __cdecl CStmlWnd::MakeWndNotificationTag(unsigned __int32,class CXStr&,class CXStr&),CStmlWnd__MakeWndNotificationTag); +#endif +#ifdef CStmlWnd__ParseTagColor_x +FUNCTION_AT_ADDRESS(void CStmlWnd::ParseTagColor(class CXStr,unsigned long *)const ,CStmlWnd__ParseTagColor); +#endif +#ifdef CStmlWnd__ParseTagFace_x +FUNCTION_AT_ADDRESS(void CStmlWnd::ParseTagFace(class CXStr,class CTextureFont const * *)const ,CStmlWnd__ParseTagFace); +#endif +#ifdef CStmlWnd__ParseTagAlign_x +//FUNCTION_AT_ADDRESS(void CStmlWnd::ParseTagAlign(class CXStr,enum ESTMLAlign *)const ,CStmlWnd__ParseTagAlign); +#endif +#ifdef SAmpersandEntry__SAmpersandEntry_x +FUNCTION_AT_ADDRESS( SAmpersandEntry::SAmpersandEntry(class CXStr,char),SAmpersandEntry__SAmpersandEntry); +#endif +#ifdef CButtonDrawTemplate__dCButtonDrawTemplate_x +FUNCTION_AT_ADDRESS( CButtonDrawTemplate::~CButtonDrawTemplate(void),CButtonDrawTemplate__dCButtonDrawTemplate); +#endif +#ifdef CGaugeDrawTemplate__dCGaugeDrawTemplate_x +FUNCTION_AT_ADDRESS( CGaugeDrawTemplate::~CGaugeDrawTemplate(void),CGaugeDrawTemplate__dCGaugeDrawTemplate); +#endif +#ifdef CSpellGemDrawTemplate__dCSpellGemDrawTemplate_x +FUNCTION_AT_ADDRESS( CSpellGemDrawTemplate::~CSpellGemDrawTemplate(void),CSpellGemDrawTemplate__dCSpellGemDrawTemplate); +#endif +#ifdef CTAFrameDraw__dCTAFrameDraw_x +FUNCTION_AT_ADDRESS( CTAFrameDraw::~CTAFrameDraw(void),CTAFrameDraw__dCTAFrameDraw); +#endif +#ifdef SAmpersandEntry__dSAmpersandEntry_x +FUNCTION_AT_ADDRESS( SAmpersandEntry::~SAmpersandEntry(void),SAmpersandEntry__dSAmpersandEntry); +#endif +#ifdef STempTableCell__dSTempTableCell_x +FUNCTION_AT_ADDRESS( STempTableCell::~STempTableCell(void),STempTableCell__dSTempTableCell); +#endif +#ifdef CXStr__Blank_x +FUNCTION_AT_ADDRESS(void CXStr::Blank(void),CXStr__Blank); +#endif +#ifdef CStmlWnd__ParseAmpersand_x +FUNCTION_AT_ADDRESS(bool CStmlWnd::ParseAmpersand(class CXStr&,char *)const ,CStmlWnd__ParseAmpersand); +#endif +#ifdef CStmlWnd__ParseLinkTarget_x +//FUNCTION_AT_ADDRESS(void CStmlWnd::ParseLinkTarget(class CXStr,enum ESTMLTargetValue *)const ,CStmlWnd__ParseLinkTarget); +#endif +#ifdef CStmlWnd__FastForwardPastSpaces_x +FUNCTION_AT_ADDRESS(unsigned short CStmlWnd::FastForwardPastSpaces(class CXStr&,int *),CStmlWnd__FastForwardPastSpaces); +#endif +#ifdef CStmlWnd__FastForwardPastSpacesAndQuotes_x +FUNCTION_AT_ADDRESS(unsigned short CStmlWnd::FastForwardPastSpacesAndQuotes(class CXStr&,int *),CStmlWnd__FastForwardPastSpacesAndQuotes); +#endif +#ifdef CStmlWnd__GetNextTagPiece_x +FUNCTION_AT_ADDRESS(unsigned short CStmlWnd::GetNextTagPiece(class CXStr&,class CXStr *,int *,bool (__cdecl*)(unsigned short),bool),CStmlWnd__GetNextTagPiece); +#endif +#ifdef CStmlWnd__IsCharacterNotQuotes_x +FUNCTION_AT_ADDRESS(bool __cdecl CStmlWnd::IsCharacterNotQuotes(unsigned short),CStmlWnd__IsCharacterNotQuotes); +#endif +#ifdef CStmlWnd__FastForwardPastQuotesAndGetNextTagPiece_x +FUNCTION_AT_ADDRESS(unsigned short CStmlWnd::FastForwardPastQuotesAndGetNextTagPiece(class CXStr&,class CXStr *,int *,bool),CStmlWnd__FastForwardPastQuotesAndGetNextTagPiece); +#endif +#ifdef CStmlWnd__FastForwardToEndOfTag_x +FUNCTION_AT_ADDRESS(unsigned short CStmlWnd::FastForwardToEndOfTag(class CXStr&,class CXStr *,int *,char),CStmlWnd__FastForwardToEndOfTag); +#endif +#ifdef CStmlWnd__InitializeTempVariables_x +FUNCTION_AT_ADDRESS(void CStmlWnd::InitializeTempVariables(class SParseVariables *,class CXRect),CStmlWnd__InitializeTempVariables); +#endif +#ifdef CStmlWnd__InitializeWindowVariables_x +FUNCTION_AT_ADDRESS(void CStmlWnd::InitializeWindowVariables(void),CStmlWnd__InitializeWindowVariables); +#endif +#ifdef CStmlWnd__ResetTempVariablesForNewLine_x +FUNCTION_AT_ADDRESS(void CStmlWnd::ResetTempVariablesForNewLine(class SParseVariables *),CStmlWnd__ResetTempVariablesForNewLine); +#endif +#ifdef CStmlWnd__GetNextChar_x +FUNCTION_AT_ADDRESS(unsigned short CStmlWnd::GetNextChar(int *,class CXStr&),CStmlWnd__GetNextChar); +#endif +#ifdef CStmlWnd__GetThisChar_x +FUNCTION_AT_ADDRESS(unsigned short CStmlWnd::GetThisChar(int,class CXStr&),CStmlWnd__GetThisChar); +#endif +#ifdef CStmlWnd__IsCharacterNotEquals_x +FUNCTION_AT_ADDRESS(bool __cdecl CStmlWnd::IsCharacterNotEquals(unsigned short),CStmlWnd__IsCharacterNotEquals); +#endif +#ifdef CStmlWnd__IsCharacterNotASpaceAndNotNULL_x +FUNCTION_AT_ADDRESS(bool __cdecl CStmlWnd::IsCharacterNotASpaceAndNotNULL(unsigned short),CStmlWnd__IsCharacterNotASpaceAndNotNULL); +#endif +#ifdef SParseVariables__dSParseVariables_x +FUNCTION_AT_ADDRESS( SParseVariables::~SParseVariables(void),SParseVariables__dSParseVariables); +#endif +#ifdef SFormattedText__dSFormattedText_x +FUNCTION_AT_ADDRESS( SFormattedText::~SFormattedText(void),SFormattedText__dSFormattedText); +#endif +#ifdef CStmlWnd__ParseSTMLHead_x +FUNCTION_AT_ADDRESS(void CStmlWnd::ParseSTMLHead(class CXStr&),CStmlWnd__ParseSTMLHead); +#endif +#ifdef CStmlWnd__ParseSTMLTable_x +FUNCTION_AT_ADDRESS(void CStmlWnd::ParseSTMLTable(class CXStr&,int *,class CXStr&,class SParseVariables *),CStmlWnd__ParseSTMLTable); +#endif +#ifdef STempTable__dSTempTable_x +FUNCTION_AT_ADDRESS( STempTable::~STempTable(void),STempTable__dSTempTable); +#endif +#ifdef STable__STable_x +FUNCTION_AT_ADDRESS( STable::STable(void),STable__STable); +#endif +#ifdef STable__dSTable_x +FUNCTION_AT_ADDRESS( STable::~STable(void),STable__dSTable); +#endif +#ifdef STableCell__dSTableCell_x +FUNCTION_AT_ADDRESS( STableCell::~STableCell(void),STableCell__dSTableCell); +#endif +#ifdef CStmlWnd__ParseSTMLTableAttributes_x +FUNCTION_AT_ADDRESS(void CStmlWnd::ParseSTMLTableAttributes(class CXStr,class STable *),CStmlWnd__ParseSTMLTableAttributes); +#endif +#ifdef CStmlWnd__GetVisibleText_x +FUNCTION_AT_ADDRESS(class CXStr CStmlWnd::GetVisibleText(class CXStr&,class CXRect)const ,CStmlWnd__GetVisibleText); +#endif +#ifdef CStmlWnd__ForceParseNow_x +FUNCTION_AT_ADDRESS(void CStmlWnd::ForceParseNow(void),CStmlWnd__ForceParseNow); +#endif +#ifdef CStmlWnd__CalculateVSBRange_x +FUNCTION_AT_ADDRESS(void CStmlWnd::CalculateVSBRange(int),CStmlWnd__CalculateVSBRange); +#endif +#ifdef CStmlWnd__CalculateHSBRange_x +FUNCTION_AT_ADDRESS(void CStmlWnd::CalculateHSBRange(int),CStmlWnd__CalculateHSBRange); +#endif +#ifdef CStmlReport__GetReport_x +FUNCTION_AT_ADDRESS(class CXStr CStmlReport::GetReport(void)const ,CStmlReport__GetReport); +#endif +#ifdef CStmlWnd__CompleteParse_x +FUNCTION_AT_ADDRESS(void CStmlWnd::CompleteParse(void),CStmlWnd__CompleteParse); +#endif +#ifdef CStmlWnd__StripFirstSTMLLines_x +FUNCTION_AT_ADDRESS(void CStmlWnd::StripFirstSTMLLines(int),CStmlWnd__StripFirstSTMLLines); +#endif +#ifdef CStmlWnd__ActivateLink_x +//FUNCTION_AT_ADDRESS(void CStmlWnd::ActivateLink(class SLinkInfo),CStmlWnd__ActivateLink); +#endif +#ifdef SLinkInfo__SLinkInfo_x +//FUNCTION_AT_ADDRESS( SLinkInfo::SLinkInfo(class SLinkInfo const &),SLinkInfo__SLinkInfo); +#endif +#ifdef CStmlWnd__CanBreakAtCharacter_x +FUNCTION_AT_ADDRESS(bool __cdecl CStmlWnd::CanBreakAtCharacter(unsigned short),CStmlWnd__CanBreakAtCharacter); +#endif +#ifdef CStmlWnd__ActivateLinkFile_x +//FUNCTION_AT_ADDRESS(void CStmlWnd::ActivateLinkFile(class SLinkInfo),CStmlWnd__ActivateLinkFile); +#endif +#ifdef CStmlWnd__ActivateLinkMessageId_x +//FUNCTION_AT_ADDRESS(void CStmlWnd::ActivateLinkMessageId(class SLinkInfo),CStmlWnd__ActivateLinkMessageId); +#endif +#ifdef CStmlWnd__ActivateLinkReport_x +//FUNCTION_AT_ADDRESS(void CStmlWnd::ActivateLinkReport(class SLinkInfo,bool),CStmlWnd__ActivateLinkReport); +#endif +#ifdef CStmlWnd__ActivateLinkWndNotify_x +//FUNCTION_AT_ADDRESS(void CStmlWnd::ActivateLinkWndNotify(class SLinkInfo),CStmlWnd__ActivateLinkWndNotify); +#endif +#ifdef CStmlWnd__LoadPage_x +//FUNCTION_AT_ADDRESS(void CStmlWnd::LoadPage(class CXStr,enum ESTMLTargetValue,bool),CStmlWnd__LoadPage); +#endif +#ifdef CStmlWnd__AddLinkToHistory_x +//FUNCTION_AT_ADDRESS(void CStmlWnd::AddLinkToHistory(class SLinkInfo,class CXStr),CStmlWnd__AddLinkToHistory); +#endif +#ifdef SLinkInfo__operator_equal_x +//FUNCTION_AT_ADDRESS(class SLinkInfo & SLinkInfo::operator=(class SLinkInfo const &),SLinkInfo__operator_equal); +#endif +#ifdef CStmlWnd__UpdateHistoryString_x +FUNCTION_AT_ADDRESS(void CStmlWnd::UpdateHistoryString(__int32,class CXStr&),CStmlWnd__UpdateHistoryString); +#endif +#ifdef CStmlWnd__SetSTMLText_x +FUNCTION_AT_ADDRESS(void CStmlWnd::SetSTMLText(class CXStr,bool,class SLinkInfo *),CStmlWnd__SetSTMLText); +#endif +#ifdef SLinkInfo__SLinkInfo1_x +//FUNCTION_AT_ADDRESS( SLinkInfo::SLinkInfo(void),SLinkInfo__SLinkInfo1); +#endif +#ifdef CStmlWnd__SetSTMLTextWithoutHistory_x +FUNCTION_AT_ADDRESS(void CStmlWnd::SetSTMLTextWithoutHistory(class CXStr),CStmlWnd__SetSTMLTextWithoutHistory); +#endif +#ifdef CStmlWnd__GoToBackHistoryLink_x +FUNCTION_AT_ADDRESS(void CStmlWnd::GoToBackHistoryLink(void),CStmlWnd__GoToBackHistoryLink); +#endif +#ifdef CStmlWnd__CanGoBackward_x +FUNCTION_AT_ADDRESS(bool CStmlWnd::CanGoBackward(void),CStmlWnd__CanGoBackward); +#endif +#ifdef CStmlWnd__IsLinkActive_x +//FUNCTION_AT_ADDRESS(bool CStmlWnd::IsLinkActive(class SLinkInfo)const,CStmlWnd__IsLinkActive); +#endif +#ifdef CXStr__GetLength_x +FUNCTION_AT_ADDRESS(long CXStr::GetLength(void)const ,CXStr__GetLength); +#endif +#ifdef STextLine__STextLine_x +FUNCTION_AT_ADDRESS( STextLine::STextLine(void),STextLine__STextLine); +#endif +#ifdef STextLine__dSTextLine_x +FUNCTION_AT_ADDRESS( STextLine::~STextLine(void),STextLine__dSTextLine); +#endif +#ifdef STempTableCell__STempTableCell_x +FUNCTION_AT_ADDRESS( STempTableCell::STempTableCell(void),STempTableCell__STempTableCell); +#endif +#ifdef STempTableRow__STempTableRow_x +FUNCTION_AT_ADDRESS( STempTableRow::STempTableRow(void),STempTableRow__STempTableRow); +#endif +#ifdef STempTableRow__dSTempTableRow_x +FUNCTION_AT_ADDRESS( STempTableRow::~STempTableRow(void),STempTableRow__dSTempTableRow); +#endif +#ifdef STextLine__operator_equal_x +FUNCTION_AT_ADDRESS(class STextLine & STextLine::operator=(class STextLine const &),STextLine__operator_equal); +#endif +#ifdef SHistoryElement__SHistoryElement_x +FUNCTION_AT_ADDRESS( SHistoryElement::SHistoryElement(void),SHistoryElement__SHistoryElement); +#endif +#ifdef SHistoryElement__dSHistoryElement_x +FUNCTION_AT_ADDRESS( SHistoryElement::~SHistoryElement(void),SHistoryElement__dSHistoryElement); +#endif +#ifdef SFormattedText__SFormattedText_x +FUNCTION_AT_ADDRESS( SFormattedText::SFormattedText(void),SFormattedText__SFormattedText); +#endif +#ifdef STable__operator_equal_x +FUNCTION_AT_ADDRESS(class STable & STable::operator=(class STable const &),STable__operator_equal); +#endif +#ifdef STableCell__STableCell_x +FUNCTION_AT_ADDRESS( STableCell::STableCell(void),STableCell__STableCell); +#endif +#ifdef CTabWnd__CTabWnd_x +FUNCTION_AT_ADDRESS( CTabWnd::CTabWnd(class CXWnd *,unsigned __int32,class CXRect,class CTabBoxTemplate *),CTabWnd__CTabWnd); +#endif +#ifdef CTabWnd__GetNumTabs_x +FUNCTION_AT_ADDRESS(int CTabWnd::GetNumTabs(void)const ,CTabWnd__GetNumTabs); +#endif +#ifdef CTabWnd__GetCurrentTabIndex_x +FUNCTION_AT_ADDRESS(int CTabWnd::GetCurrentTabIndex(void)const ,CTabWnd__GetCurrentTabIndex); +#endif +#ifdef CTabWnd__GetCurrentPage_x +FUNCTION_AT_ADDRESS(class CPageWnd * CTabWnd::GetCurrentPage(void)const ,CTabWnd__GetCurrentPage); +#endif +#ifdef CTabWnd__GetTabRect_x +FUNCTION_AT_ADDRESS(class CXRect CTabWnd::GetTabRect(int)const ,CTabWnd__GetTabRect); +#endif +#ifdef CTabWnd__GetTabInnerRect_x +FUNCTION_AT_ADDRESS(class CXRect CTabWnd::GetTabInnerRect(int)const ,CTabWnd__GetTabInnerRect); +#endif +#ifdef CTabWnd__GetPageClientRect_x +FUNCTION_AT_ADDRESS(class CXRect CTabWnd::GetPageClientRect(void)const ,CTabWnd__GetPageClientRect); +#endif +#ifdef CTabWnd__GetPageInnerRect_x +FUNCTION_AT_ADDRESS(class CXRect CTabWnd::GetPageInnerRect(void)const ,CTabWnd__GetPageInnerRect); +#endif +#ifdef CTabWnd__SetPage_x +FUNCTION_AT_ADDRESS(void CTabWnd::SetPage(int,bool),CTabWnd__SetPage); +#endif +#ifdef CTabWnd__SetPage1_x +FUNCTION_AT_ADDRESS(void CTabWnd::SetPage(class CPageWnd *,bool),CTabWnd__SetPage1); +#endif +#ifdef CTabWnd__InsertPage_x +FUNCTION_AT_ADDRESS(void CTabWnd::InsertPage(class CPageWnd *,int),CTabWnd__InsertPage); +#endif +#ifdef CTabWnd__SetPageRect_x +FUNCTION_AT_ADDRESS(void CTabWnd::SetPageRect(class CXRect),CTabWnd__SetPageRect); +#endif +#ifdef CXWnd__Tile_x +FUNCTION_AT_ADDRESS(int CXWnd::Tile(bool),CXWnd__Tile); +#endif +#ifdef CTabWnd__UpdatePage_x +FUNCTION_AT_ADDRESS(void CTabWnd::UpdatePage(void),CTabWnd__UpdatePage); +#endif +#ifdef CTabWnd__IndexInBounds_x +FUNCTION_AT_ADDRESS(bool CTabWnd::IndexInBounds(int)const ,CTabWnd__IndexInBounds); +#endif +#ifdef CTabWnd__GetPageFromTabIndex_x +FUNCTION_AT_ADDRESS(class CPageWnd * CTabWnd::GetPageFromTabIndex(int)const ,CTabWnd__GetPageFromTabIndex); +#endif +#ifdef CTabWnd__GetPageFromTabPoint_x +FUNCTION_AT_ADDRESS(class CPageWnd * CTabWnd::GetPageFromTabPoint(class CXPoint)const ,CTabWnd__GetPageFromTabPoint); +#endif +#ifdef CTabWnd__DrawTab_x +FUNCTION_AT_ADDRESS(int CTabWnd::DrawTab(int)const ,CTabWnd__DrawTab); +#endif +#ifdef CPageWnd__GetTabText_x +FUNCTION_AT_ADDRESS(class CXStr CPageWnd::GetTabText(void)const ,CPageWnd__GetTabText); +#endif +#ifdef CTabWnd__DrawCurrentPage_x +FUNCTION_AT_ADDRESS(int CTabWnd::DrawCurrentPage(void)const ,CTabWnd__DrawCurrentPage); +#endif +#ifdef CXMLSOMDocumentBase__Init_x +FUNCTION_AT_ADDRESS(void CXMLSOMDocumentBase::Init(void),CXMLSOMDocumentBase__Init); +#endif +#ifdef CXMLSOMNodePtr__Assure_x +FUNCTION_AT_ADDRESS(void CXMLSOMNodePtr::Assure(void)const ,CXMLSOMNodePtr__Assure); +#endif +#ifdef CXMLSOMDocumentBase__CursorInit_x +FUNCTION_AT_ADDRESS(void CXMLSOMDocumentBase::CursorInit(void),CXMLSOMDocumentBase__CursorInit); +#endif +#ifdef CXMLSOMNode__CXMLSOMNode_x +FUNCTION_AT_ADDRESS( CXMLSOMNode::CXMLSOMNode(void),CXMLSOMNode__CXMLSOMNode); +#endif +#ifdef CXMLSOMDocumentBase__Cursor_x +FUNCTION_AT_ADDRESS(class CXMLSOMCursor & CXMLSOMDocumentBase::Cursor(void),CXMLSOMDocumentBase__Cursor); +#endif +#ifdef CXMLSOMDocumentBase__CursorParent_x +FUNCTION_AT_ADDRESS(class CXMLSOMCursor & CXMLSOMDocumentBase::CursorParent(void),CXMLSOMDocumentBase__CursorParent); +#endif +#ifdef CXMLSOMDocumentBase__CursorNewChild_x +FUNCTION_AT_ADDRESS(void CXMLSOMDocumentBase::CursorNewChild(void),CXMLSOMDocumentBase__CursorNewChild); +#endif +#ifdef CXMLSOMDocumentBase__CursorNewSibling_x +FUNCTION_AT_ADDRESS(void CXMLSOMDocumentBase::CursorNewSibling(void),CXMLSOMDocumentBase__CursorNewSibling); +#endif +#ifdef CXMLSOMNodePtr__operator_equal_x +FUNCTION_AT_ADDRESS(class CXMLSOMNodePtr & CXMLSOMNodePtr::operator=(class CXMLSOMNodePtr const &),CXMLSOMNodePtr__operator_equal); +#endif +#ifdef CXMLSOMDocumentBase__CursorSetPtr_x +//FUNCTION_AT_ADDRESS(void CXMLSOMDocumentBase::CursorSetPtr(class CXMLSOMNodePtr),CXMLSOMDocumentBase__CursorSetPtr); +#endif +#ifdef CXMLSOMNodePtr__operator_minust__x +FUNCTION_AT_ADDRESS(class CXMLSOMNode * CXMLSOMNodePtr::operator->(void)const ,CXMLSOMNodePtr__operator_minust_); +#endif +#ifdef CXMLSOMDocumentBase__CursorPush_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::CursorPush(void),CXMLSOMDocumentBase__CursorPush); +#endif +#ifdef CXMLSOMDocumentBase__CursorPop_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::CursorPop(void),CXMLSOMDocumentBase__CursorPop); +#endif +#ifdef CXMLSOMDocumentBase__CursorNextSibling_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::CursorNextSibling(void),CXMLSOMDocumentBase__CursorNextSibling); +#endif +#ifdef CXMLSOMDocumentBase__CursorNextInOrder_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::CursorNextInOrder(void),CXMLSOMDocumentBase__CursorNextInOrder); +#endif +#ifdef CXMLSOMDocumentBase__CursorFind_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::CursorFind(class CXStr),CXMLSOMDocumentBase__CursorFind); +#endif +#ifdef CXMLSOMDocumentBase__GetAttrValueStr_x +FUNCTION_AT_ADDRESS(class CXStr CXMLSOMDocumentBase::GetAttrValueStr(class CXStr),CXMLSOMDocumentBase__GetAttrValueStr); +#endif +#ifdef CXMLSOMDocumentBase__GetAttrValueStr1_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::GetAttrValueStr(class CXStr,class CXStr &),CXMLSOMDocumentBase__GetAttrValueStr1); +#endif +#ifdef CXMLSOMDocumentBase__GetAttrValueInt_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::GetAttrValueInt(class CXStr,__int32 &),CXMLSOMDocumentBase__GetAttrValueInt); +#endif +#ifdef CXMLSOMCursorSave__dCXMLSOMCursorSave_x +FUNCTION_AT_ADDRESS( CXMLSOMCursorSave::~CXMLSOMCursorSave(void),CXMLSOMCursorSave__dCXMLSOMCursorSave); +#endif +#ifdef CXMLSOMDocumentBase__CursorFieldFind_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::CursorFieldFind(class CXStr),CXMLSOMDocumentBase__CursorFieldFind); +#endif +#ifdef CXMLSOMDocumentBase__GetValue_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::GetValue(class CXStr,class CXStr &),CXMLSOMDocumentBase__GetValue); +#endif +#ifdef CXMLSOMDocumentBase__GetValue1_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::GetValue(class CXStr,__int32 &),CXMLSOMDocumentBase__GetValue1); +#endif +#ifdef CXMLSOMDocumentBase__GetValue2_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::GetValue(class CXStr,bool &),CXMLSOMDocumentBase__GetValue2); +#endif +#ifdef CXMLSOMDocumentBase__FieldParseClassItem_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::FieldParseClassItem(class CXStr,class CXStr &,class CXStr &),CXMLSOMDocumentBase__FieldParseClassItem); +#endif +#ifdef CXMLSOMDocumentBase__FieldParseItemOfClass_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::FieldParseItemOfClass(class CXStr,class CXStr,__int32 &,__int32 &),CXMLSOMDocumentBase__FieldParseItemOfClass); +#endif +#ifdef CXMLSOMDocumentBase__SetValue_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::SetValue(class CXStr,class CXStr),CXMLSOMDocumentBase__SetValue); +#endif +#ifdef CXMLSOMDocumentBase__SetValue1_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::SetValue(class CXStr,__int32),CXMLSOMDocumentBase__SetValue1); +#endif +#ifdef CXMLSOMDocumentBase__SetValue2_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::SetValue(class CXStr,bool),CXMLSOMDocumentBase__SetValue2); +#endif +#ifdef CXMLSOMDocumentBase__XMLReadNoValidate_x +FUNCTION_AT_ADDRESS(int CXMLSOMDocumentBase::XMLReadNoValidate(class CXStr,class CXStr,class CXStr),CXMLSOMDocumentBase__XMLReadNoValidate); +#endif +#ifdef CXMLSOMDocumentBase__XMLRead_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::XMLRead(class CXStr*,class CXStr*,class CXStr*),CXMLSOMDocumentBase__XMLRead); +#endif +#ifdef CXMLSOMDocumentBase__XMLProcessComposite_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::XMLProcessComposite(class CXStr,class CXStr),CXMLSOMDocumentBase__XMLProcessComposite); +#endif +#ifdef CXMLSOMDocumentBase__SetErrorMsg_x +FUNCTION_AT_ADDRESS(void CXMLSOMDocumentBase::SetErrorMsg(class CXStr),CXMLSOMDocumentBase__SetErrorMsg); +#endif +#ifdef CXMLSOMDocumentBase__GetErrorMsg_x +FUNCTION_AT_ADDRESS(class CXStr CXMLSOMDocumentBase::GetErrorMsg(void)const ,CXMLSOMDocumentBase__GetErrorMsg); +#endif +#ifdef CXMLSOMSchema__CXMLSOMSchema_x +FUNCTION_AT_ADDRESS( CXMLSOMSchema::CXMLSOMSchema(void),CXMLSOMSchema__CXMLSOMSchema); +#endif +#ifdef CXMLSOMSchema__dCXMLSOMSchema_x +FUNCTION_AT_ADDRESS( CXMLSOMSchema::~CXMLSOMSchema(void),CXMLSOMSchema__dCXMLSOMSchema); +#endif +#ifdef CXMLSOMCursorTraverseChildren__dCXMLSOMCursorTraverseChildren_x +FUNCTION_AT_ADDRESS( CXMLSOMCursorTraverseChildren::~CXMLSOMCursorTraverseChildren(void),CXMLSOMCursorTraverseChildren__dCXMLSOMCursorTraverseChildren); +#endif +#ifdef CXMLSOMDocumentBase__XMLMerge_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::XMLMerge(class CXMLSOMDocumentBase &),CXMLSOMDocumentBase__XMLMerge); +#endif +#ifdef CXMLSOMCursorTraverseChildren__Cursor_x +FUNCTION_AT_ADDRESS(class CXMLSOMCursor & CXMLSOMCursorTraverseChildren::Cursor(void),CXMLSOMCursorTraverseChildren__Cursor); +#endif +#ifdef CXMLSOMDocumentBase__SetErrorMsgAtLine_x +FUNCTION_AT_ADDRESS(void CXMLSOMDocumentBase::SetErrorMsgAtLine(class CXStr,int,class CXStr),CXMLSOMDocumentBase__SetErrorMsgAtLine); +#endif +#ifdef CXMLSOMDocumentBase__SetErrorMsgAtCursor_x +FUNCTION_AT_ADDRESS(void CXMLSOMDocumentBase::SetErrorMsgAtCursor(class CXStr),CXMLSOMDocumentBase__SetErrorMsgAtCursor); +#endif +#ifdef CXMLSOMDocumentBase__ValidateSchemaSimpleTypeNode_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::ValidateSchemaSimpleTypeNode(class CXMLSOMSimpleType &),CXMLSOMDocumentBase__ValidateSchemaSimpleTypeNode); +#endif +#ifdef CXMLSOMDocumentBase__ValidateSchemaElementType_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::ValidateSchemaElementType(void),CXMLSOMDocumentBase__ValidateSchemaElementType); +#endif +#ifdef CXMLSOMElementType__dCXMLSOMElementType_x +FUNCTION_AT_ADDRESS( CXMLSOMElementType::~CXMLSOMElementType(void),CXMLSOMElementType__dCXMLSOMElementType); +#endif +#ifdef CXMLSOMElement__dCXMLSOMElement_x +FUNCTION_AT_ADDRESS( CXMLSOMElement::~CXMLSOMElement(void),CXMLSOMElement__dCXMLSOMElement); +#endif +#ifdef CXMLSOMAttributeType__dCXMLSOMAttributeType_x +FUNCTION_AT_ADDRESS( CXMLSOMAttributeType::~CXMLSOMAttributeType(void),CXMLSOMAttributeType__dCXMLSOMAttributeType); +#endif +#ifdef CXMLSOMDocumentBase__ValidateSchemaSimpleType_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::ValidateSchemaSimpleType(void),CXMLSOMDocumentBase__ValidateSchemaSimpleType); +#endif +#ifdef CXMLSOMSimpleType__dCXMLSOMSimpleType_x +FUNCTION_AT_ADDRESS( CXMLSOMSimpleType::~CXMLSOMSimpleType(void),CXMLSOMSimpleType__dCXMLSOMSimpleType); +#endif +#ifdef CXMLSOMDocumentBase__ValidateSchemaDefinition_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::ValidateSchemaDefinition(void),CXMLSOMDocumentBase__ValidateSchemaDefinition); +#endif +#ifdef CXMLSOMDocumentBase__ValidateSchemaCategories_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::ValidateSchemaCategories(void),CXMLSOMDocumentBase__ValidateSchemaCategories); +#endif +#ifdef CXMLSOMDocumentBase__ValidateSchemaTypeRefs_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::ValidateSchemaTypeRefs(void),CXMLSOMDocumentBase__ValidateSchemaTypeRefs); +#endif +#ifdef CXMLSOMDocumentBase__ValidateSchema_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::ValidateSchema(void),CXMLSOMDocumentBase__ValidateSchema); +#endif +#ifdef CXMLSOMDocumentBase__ValidateDataElements_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::ValidateDataElements(class CXMLSOMElementType &),CXMLSOMDocumentBase__ValidateDataElements); +#endif +#ifdef CXMLSOMDocumentBase__ValidateData_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocumentBase::ValidateData(void),CXMLSOMDocumentBase__ValidateData); +#endif +#ifdef CXMLSOMElementType__GetItemIdx_x +FUNCTION_AT_ADDRESS(int CXMLSOMElementType::GetItemIdx(class CXStr),CXMLSOMElementType__GetItemIdx); +#endif +#ifdef CXMLSOMSchema__GetElementTypeIdx_x +FUNCTION_AT_ADDRESS(int CXMLSOMSchema::GetElementTypeIdx(class CXStr),CXMLSOMSchema__GetElementTypeIdx); +#endif +#ifdef CXMLSOMSchema__IsDerivedFrom_x +FUNCTION_AT_ADDRESS(bool CXMLSOMSchema::IsDerivedFrom(class CXStr,class CXStr),CXMLSOMSchema__IsDerivedFrom); +#endif +#ifdef CXMLSOMSchema__FindElementType_x +FUNCTION_AT_ADDRESS(bool CXMLSOMSchema::FindElementType(class CXStr),CXMLSOMSchema__FindElementType); +#endif +#ifdef CXMLSOMSchema__FindSimpleType_x +FUNCTION_AT_ADDRESS(bool CXMLSOMSchema::FindSimpleType(class CXStr),CXMLSOMSchema__FindSimpleType); +#endif +#ifdef CXMLSOMSchema__FindItem_x +FUNCTION_AT_ADDRESS(bool CXMLSOMSchema::FindItem(class CXStr,class CXStr),CXMLSOMSchema__FindItem); +#endif +#ifdef CXMLSOMSchema__AddItem_x +FUNCTION_AT_ADDRESS(bool CXMLSOMSchema::AddItem(class CXStr,class CXStr),CXMLSOMSchema__AddItem); +#endif +#ifdef CXMLSOMNode__FreeAllAllocs_x +FUNCTION_AT_ADDRESS(void __cdecl CXMLSOMNode::FreeAllAllocs(void),CXMLSOMNode__FreeAllAllocs); +#endif +#ifdef CXMLSOMNode__operator_new_x +FUNCTION_AT_ADDRESS(void * __cdecl CXMLSOMNode::operator new(unsigned int),CXMLSOMNode__operator_new); +#endif +#ifdef CMutexLock__dCMutexLock_x +FUNCTION_AT_ADDRESS( CMutexLock::~CMutexLock(void),CMutexLock__dCMutexLock); +#endif +#ifdef CXMLSOMNode__operator_delete_x +FUNCTION_AT_ADDRESS(void __cdecl CXMLSOMNode::operator delete(void *),CXMLSOMNode__operator_delete); +#endif +#ifdef CKeyCXStrValueInt32__CKeyCXStrValueInt32_x +FUNCTION_AT_ADDRESS( CKeyCXStrValueInt32::CKeyCXStrValueInt32(void),CKeyCXStrValueInt32__CKeyCXStrValueInt32); +#endif +#ifdef CXMLSOMCursor__CXMLSOMCursor_x +FUNCTION_AT_ADDRESS( CXMLSOMCursor::CXMLSOMCursor(void),CXMLSOMCursor__CXMLSOMCursor); +#endif +#ifdef CXMLSOMNodePtr__CXMLSOMNodePtr_x +FUNCTION_AT_ADDRESS( CXMLSOMNodePtr::CXMLSOMNodePtr(void),CXMLSOMNodePtr__CXMLSOMNodePtr); +#endif +#ifdef CXMLSOMAttribute__operator_equal_x +FUNCTION_AT_ADDRESS(class CXMLSOMAttribute & CXMLSOMAttribute::operator=(class CXMLSOMAttribute const &),CXMLSOMAttribute__operator_equal); +#endif +#ifdef CXMLSOMCursor__operator_equal_x +FUNCTION_AT_ADDRESS(class CXMLSOMCursor & CXMLSOMCursor::operator=(class CXMLSOMCursor const &),CXMLSOMCursor__operator_equal); +#endif +#ifdef CXMLSOMAttribute__CXMLSOMAttribute_x +FUNCTION_AT_ADDRESS( CXMLSOMAttribute::CXMLSOMAttribute(void),CXMLSOMAttribute__CXMLSOMAttribute); +#endif +#ifdef CXMLSOMSimpleType__CXMLSOMSimpleType_x +FUNCTION_AT_ADDRESS( CXMLSOMSimpleType::CXMLSOMSimpleType(void),CXMLSOMSimpleType__CXMLSOMSimpleType); +#endif +#ifdef CXMLSOMElementType__CXMLSOMElementType_x +FUNCTION_AT_ADDRESS( CXMLSOMElementType::CXMLSOMElementType(void),CXMLSOMElementType__CXMLSOMElementType); +#endif +#ifdef CXMLSOMAttributeType__operator_equal_x +FUNCTION_AT_ADDRESS(class CXMLSOMAttributeType & CXMLSOMAttributeType::operator=(class CXMLSOMAttributeType const &),CXMLSOMAttributeType__operator_equal); +#endif +#ifdef CXMLSOMElement__operator_equal_x +FUNCTION_AT_ADDRESS(class CXMLSOMElement & CXMLSOMElement::operator=(class CXMLSOMElement const &),CXMLSOMElement__operator_equal); +#endif +#ifdef CXMLSOMAttributeType__CXMLSOMAttributeType_x +FUNCTION_AT_ADDRESS( CXMLSOMAttributeType::CXMLSOMAttributeType(void),CXMLSOMAttributeType__CXMLSOMAttributeType); +#endif +#ifdef CXMLSOMElement__CXMLSOMElement_x +FUNCTION_AT_ADDRESS( CXMLSOMElement::CXMLSOMElement(void),CXMLSOMElement__CXMLSOMElement); +#endif +#ifdef KeyCombo__KeyCombo_x +FUNCTION_AT_ADDRESS( KeyCombo::KeyCombo(void),KeyCombo__KeyCombo); +#endif +#ifdef KeyCombo__KeyCombo1_x +FUNCTION_AT_ADDRESS( KeyCombo::KeyCombo(unsigned char,bool,bool,bool),KeyCombo__KeyCombo1); +#endif +#ifdef KeyCombo__KeyCombo2_x +FUNCTION_AT_ADDRESS( KeyCombo::KeyCombo(int),KeyCombo__KeyCombo2); +#endif +#ifdef KeyCombo__KeyCombo3_x +FUNCTION_AT_ADDRESS( KeyCombo::KeyCombo(unsigned int,unsigned int,bool,bool,bool),KeyCombo__KeyCombo3); +#endif +#ifdef KeyCombo__GetKey_x +FUNCTION_AT_ADDRESS(unsigned int KeyCombo::GetKey(void)const ,KeyCombo__GetKey); +#endif +#ifdef KeyCombo__UsesCtrl_x +FUNCTION_AT_ADDRESS(bool KeyCombo::UsesCtrl(void)const ,KeyCombo__UsesCtrl); +#endif +#ifdef KeyCombo__UsesShift_x +FUNCTION_AT_ADDRESS(bool KeyCombo::UsesShift(void)const ,KeyCombo__UsesShift); +#endif +#ifdef KeyCombo__UsesAlt_x +FUNCTION_AT_ADDRESS(bool KeyCombo::UsesAlt(void)const ,KeyCombo__UsesAlt); +#endif +#ifdef KeyCombo__GetTextDescription_x +FUNCTION_AT_ADDRESS(class CXStr KeyCombo::GetTextDescription(void)const ,KeyCombo__GetTextDescription); +#endif +#ifdef KeyCombo__GetPrintableLetter_x +FUNCTION_AT_ADDRESS(bool KeyCombo::GetPrintableLetter(unsigned short *)const ,KeyCombo__GetPrintableLetter); +#endif +#ifdef KeyCombo__operator_equal_equal_x +FUNCTION_AT_ADDRESS(int KeyCombo::operator==(class KeyCombo const &)const ,KeyCombo__operator_equal_equal); +#endif +#ifdef KeyCombo__operator_equal_x +FUNCTION_AT_ADDRESS(class KeyCombo const & KeyCombo::operator=(int),KeyCombo__operator_equal); +#endif +#ifdef KeyCombo__operator_int_x +//FUNCTION_AT_ADDRESS( KeyCombo::operator int(void)const ,KeyCombo__operator_int); +#endif +#ifdef KeyCombo__GetVirtualKeyFromScanCode_x +FUNCTION_AT_ADDRESS(bool KeyCombo::GetVirtualKeyFromScanCode(unsigned char,int *)const ,KeyCombo__GetVirtualKeyFromScanCode); +#endif +#ifdef KeyCombo__GetPrintableLetterFromScanCode_x +FUNCTION_AT_ADDRESS(bool KeyCombo::GetPrintableLetterFromScanCode(unsigned char,bool,bool,unsigned short *)const ,KeyCombo__GetPrintableLetterFromScanCode); +#endif +#ifdef KeyCombo__GetScanCodeFromVirtualKey_x +FUNCTION_AT_ADDRESS(bool KeyCombo::GetScanCodeFromVirtualKey(unsigned int,unsigned int,unsigned char *)const ,KeyCombo__GetScanCodeFromVirtualKey); +#endif +#ifdef KeyCombo__GetPrintableLetterFromVirtualKey_x +FUNCTION_AT_ADDRESS(bool KeyCombo::GetPrintableLetterFromVirtualKey(unsigned int,unsigned int,bool,bool,unsigned short *)const ,KeyCombo__GetPrintableLetterFromVirtualKey); +#endif +#ifdef CButtonWnd__CButtonWnd_x +FUNCTION_AT_ADDRESS( CButtonWnd::CButtonWnd(class CXWnd *,unsigned __int32,class CXRect,class CXPoint,class CXSize,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *),CButtonWnd__CButtonWnd); +#endif +#ifdef CXWnd__IsEnabled_x +FUNCTION_AT_ADDRESS(bool CXWnd::IsEnabled(void)const ,CXWnd__IsEnabled); +#endif +#ifdef CButtonWnd__SetCheck_x +FUNCTION_AT_ADDRESS(void CButtonWnd::SetCheck(bool),CButtonWnd__SetCheck); +#endif +#ifdef CComboWnd__CComboWnd_x +//FUNCTION_AT_ADDRESS( CComboWnd::CComboWnd(class CXWnd *,unsigned __int32,class CXRect,int,class CButtonDrawTemplate,class CListWnd *),CComboWnd__CComboWnd); +#endif +#ifdef CXWnd__GetWidth_x +FUNCTION_AT_ADDRESS(int CXWnd::GetWidth(void)const ,CXWnd__GetWidth); +#endif +#ifdef CComboWnd__GetListRect_x +FUNCTION_AT_ADDRESS(class CXRect CComboWnd::GetListRect(void)const ,CComboWnd__GetListRect); +#endif +#ifdef CComboWnd__SetColors_x +FUNCTION_AT_ADDRESS(void CComboWnd::SetColors(unsigned long,unsigned long,unsigned long),CComboWnd__SetColors); +#endif +#ifdef CComboWnd__InsertChoice_x +FUNCTION_AT_ADDRESS(void CComboWnd::InsertChoice(class CXStr *, unsigned long),CComboWnd__InsertChoice); +#endif +#ifdef CComboWnd__SetChoice_x +FUNCTION_AT_ADDRESS(void CComboWnd::SetChoice(int),CComboWnd__SetChoice); +#endif +#ifdef CComboWnd__GetItemCount_x +FUNCTION_AT_ADDRESS(int CComboWnd::GetItemCount(void),CComboWnd__GetItemCount); +#endif +#ifdef CComboWnd__GetCurChoice_x +FUNCTION_AT_ADDRESS(int CComboWnd::GetCurChoice(void)const ,CComboWnd__GetCurChoice); +#endif +#ifdef CComboWnd__GetCurChoiceText_x +FUNCTION_AT_ADDRESS(class CXStr CComboWnd::GetCurChoiceText(void)const ,CComboWnd__GetCurChoiceText); +#endif +#ifdef CComboWnd__DeleteAll_x +FUNCTION_AT_ADDRESS(void CComboWnd::DeleteAll(void),CComboWnd__DeleteAll); +#endif +#ifdef CComboWnd__GetButtonRect_x +FUNCTION_AT_ADDRESS(class CXRect CComboWnd::GetButtonRect(void)const ,CComboWnd__GetButtonRect); +#endif +#ifdef CComboWnd__GetTextRect_x +FUNCTION_AT_ADDRESS(class CXRect CComboWnd::GetTextRect(void)const ,CComboWnd__GetTextRect); +#endif +#ifdef CXWndManager__CXWndManager_x +FUNCTION_AT_ADDRESS( CXWndManager::CXWndManager(class CSidlManager *),CXWndManager__CXWndManager); +#endif +#ifdef CXWndManager__DestroyAllWindows_x +FUNCTION_AT_ADDRESS(void CXWndManager::DestroyAllWindows(void),CXWndManager__DestroyAllWindows); +#endif +#ifdef CXWndManager__DrawWindows_x +FUNCTION_AT_ADDRESS(int CXWndManager::DrawWindows(void)const ,CXWndManager__DrawWindows); +#endif +#ifdef CXWndManager__DrawCursor_x +FUNCTION_AT_ADDRESS(int CXWndManager::DrawCursor(void)const ,CXWndManager__DrawCursor); +#endif +#ifdef CXWndManager__AddWnd_x +FUNCTION_AT_ADDRESS(int CXWndManager::AddWnd(class CXWnd *),CXWndManager__AddWnd); +#endif +#ifdef CXWndManager__RemoveWnd_x +FUNCTION_AT_ADDRESS(int CXWndManager::RemoveWnd(class CXWnd *),CXWndManager__RemoveWnd); +#endif +#ifdef CXWndManager__CheckInvalidateLastFoundWnd_x +FUNCTION_AT_ADDRESS(void CXWndManager::CheckInvalidateLastFoundWnd(void),CXWndManager__CheckInvalidateLastFoundWnd); +#endif +#ifdef CXWndManager__GetKeyboardFlags_x +FUNCTION_AT_ADDRESS(unsigned __int32 CXWndManager::GetKeyboardFlags(void)const ,CXWndManager__GetKeyboardFlags); +#endif +#ifdef CXWndManager__FlushKeyboardFlags_x +FUNCTION_AT_ADDRESS(void CXWndManager::FlushKeyboardFlags(void),CXWndManager__FlushKeyboardFlags); +#endif +#ifdef CXWndManager__UpdateChildAndSiblingInfo_x +FUNCTION_AT_ADDRESS(void CXWndManager::UpdateChildAndSiblingInfo(void),CXWndManager__UpdateChildAndSiblingInfo); +#endif +#ifdef CXWndManager__HandleKeyboardMsg_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleKeyboardMsg(unsigned __int32,bool),CXWndManager__HandleKeyboardMsg); +#endif +#ifdef CXWndManager__OkayToSendMouseMessage_x +FUNCTION_AT_ADDRESS(bool CXWndManager::OkayToSendMouseMessage(class CXWnd *)const,CXWndManager__OkayToSendMouseMessage); +#endif +#ifdef CXWndManager__HandleMouseMove_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleMouseMove(class CXPoint),CXWndManager__HandleMouseMove); +#endif +#ifdef CXWndManager__HandleWheelMove_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleWheelMove(int),CXWndManager__HandleWheelMove); +#endif +#ifdef CXWndManager__HandleLButtonDown_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleLButtonDown(class CXPoint),CXWndManager__HandleLButtonDown); +#endif +#ifdef CXWndManager__IsWindowPieceDown_x +FUNCTION_AT_ADDRESS(bool CXWndManager::IsWindowPieceDown(class CXWnd const *,int)const ,CXWndManager__IsWindowPieceDown); +#endif +#ifdef CXWndManager__OnWindowCloseBox_x +FUNCTION_AT_ADDRESS(int CXWndManager::OnWindowCloseBox(class CXWnd *),CXWndManager__OnWindowCloseBox); +#endif +#ifdef CXWndManager__OnWindowMinimizeBox_x +FUNCTION_AT_ADDRESS(int CXWndManager::OnWindowMinimizeBox(class CXWnd *),CXWndManager__OnWindowMinimizeBox); +#endif +#ifdef CXWndManager__OnWindowTileBox_x +FUNCTION_AT_ADDRESS(int CXWndManager::OnWindowTileBox(class CXWnd *),CXWndManager__OnWindowTileBox); +#endif +#ifdef CXWndManager__HandleLButtonHeld_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleLButtonHeld(class CXPoint),CXWndManager__HandleLButtonHeld); +#endif +#ifdef CXWndManager__HandleLButtonUpAfterHeld_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleLButtonUpAfterHeld(class CXPoint),CXWndManager__HandleLButtonUpAfterHeld); +#endif +#ifdef CXWndManager__HandleRButtonHeld_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleRButtonHeld(class CXPoint),CXWndManager__HandleRButtonHeld); +#endif +#ifdef CXWndManager__HandleRButtonUpAfterHeld_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleRButtonUpAfterHeld(class CXPoint),CXWndManager__HandleRButtonUpAfterHeld); +#endif +#ifdef CXWndManager__HandleLButtonUp_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleLButtonUp(class CXPoint),CXWndManager__HandleLButtonUp); +#endif +#ifdef CXWndManager__HandleRButtonDown_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleRButtonDown(class CXPoint),CXWndManager__HandleRButtonDown); +#endif +#ifdef CXWndManager__HandleRButtonUp_x +FUNCTION_AT_ADDRESS(int CXWndManager::HandleRButtonUp(class CXPoint),CXWndManager__HandleRButtonUp); +#endif +#ifdef CXWndManager__FindWnd_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWndManager::FindWnd(class CXPoint,int *)const,CXWndManager__FindWnd); +#endif +#ifdef CXWndManager__GetCursorToDisplay_x +FUNCTION_AT_ADDRESS(class CTextureAnimation const * CXWndManager::GetCursorToDisplay(void)const ,CXWndManager__GetCursorToDisplay); +#endif +#ifdef CXWndManager__SetFocusWnd_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWndManager::SetFocusWnd(class CXWnd *),CXWndManager__SetFocusWnd); +#endif +#ifdef CXWndManager__GetFocusWnd_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWndManager::GetFocusWnd(void)const ,CXWndManager__GetFocusWnd); +#endif +#ifdef CXWndManager__ProcessFrame_x +FUNCTION_AT_ADDRESS(int CXWndManager::ProcessFrame(void),CXWndManager__ProcessFrame); +#endif +#ifdef CXWndManager__OnWindowShown_x +FUNCTION_AT_ADDRESS(void CXWndManager::OnWindowShown(class CXWnd *,bool),CXWndManager__OnWindowShown); +#endif +#ifdef CXWndManager__BringWndToTop_x +FUNCTION_AT_ADDRESS(void CXWndManager::BringWndToTop(class CXWnd *,bool),CXWndManager__BringWndToTop); +#endif +#ifdef CXWndManager__NotifyAllWindows_x +FUNCTION_AT_ADDRESS(int CXWndManager::NotifyAllWindows(class CXWnd *,unsigned __int32,void *),CXWndManager__NotifyAllWindows); +#endif +#ifdef CXWndManager__CleanupWindows_x +FUNCTION_AT_ADDRESS(void CXWndManager::CleanupWindows(void),CXWndManager__CleanupWindows); +#endif +#ifdef CXWndManager__GetFirstChildWnd_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWndManager::GetFirstChildWnd(class CXWnd const *)const ,CXWndManager__GetFirstChildWnd); +#endif +#ifdef CXWndManager__GetNextSib_x +FUNCTION_AT_ADDRESS(class CXWnd * CXWndManager::GetNextSib(class CXWnd const *)const ,CXWndManager__GetNextSib); +#endif +#ifdef CXWndManager__ActivateWnd_x +FUNCTION_AT_ADDRESS(int CXWndManager::ActivateWnd(class CXWnd *),CXWndManager__ActivateWnd); +#endif +#ifdef CXWndManager__IsWindowActive_x +FUNCTION_AT_ADDRESS(bool CXWndManager::IsWindowActive(class CXWnd const *)const ,CXWndManager__IsWindowActive); +#endif +#ifdef CXWndManager__IsWindowMovingOrSizing_x +FUNCTION_AT_ADDRESS(bool CXWndManager::IsWindowMovingOrSizing(class CXWnd *)const ,CXWndManager__IsWindowMovingOrSizing); +#endif +#ifdef CXWndManager__AddFont_x +FUNCTION_AT_ADDRESS(int CXWndManager::AddFont(class CTextureFont *),CXWndManager__AddFont); +#endif +#ifdef CXWndManager__GetFont1_x +FUNCTION_AT_ADDRESS(class CTextureFont * CXWndManager::GetFont(class CXStr),CXWndManager__GetFont1); +#endif +#ifdef CXWndManager__SetSystemFont_x +FUNCTION_AT_ADDRESS(void CXWndManager::SetSystemFont(class CTextureFont *),CXWndManager__SetSystemFont); +#endif +#ifdef CXWndManager__SetGlobalFadeDuration_x +FUNCTION_AT_ADDRESS(void CXWndManager::SetGlobalFadeDuration(unsigned __int32),CXWndManager__SetGlobalFadeDuration); +#endif +#ifdef CXWndManager__GetGlobalFadeDuration_x +FUNCTION_AT_ADDRESS(unsigned __int32 CXWndManager::GetGlobalFadeDuration(void)const ,CXWndManager__GetGlobalFadeDuration); +#endif +#ifdef CXWndManager__SetGlobalFadeDelay_x +FUNCTION_AT_ADDRESS(void CXWndManager::SetGlobalFadeDelay(unsigned long),CXWndManager__SetGlobalFadeDelay); +#endif +#ifdef CXWndManager__GetGlobalFadeDelay_x +FUNCTION_AT_ADDRESS(unsigned long CXWndManager::GetGlobalFadeDelay(void)const ,CXWndManager__GetGlobalFadeDelay); +#endif +#ifdef CXWndManager__SetGlobalAlpha_x +FUNCTION_AT_ADDRESS(void CXWndManager::SetGlobalAlpha(unsigned char),CXWndManager__SetGlobalAlpha); +#endif +#ifdef CXWndManager__GetGlobalAlpha_x +FUNCTION_AT_ADDRESS(unsigned char CXWndManager::GetGlobalAlpha(void)const ,CXWndManager__GetGlobalAlpha); +#endif +#ifdef CXWndManager__SetGlobalFadeToAlpha_x +FUNCTION_AT_ADDRESS(void CXWndManager::SetGlobalFadeToAlpha(unsigned char),CXWndManager__SetGlobalFadeToAlpha); +#endif +#ifdef CXWndManager__GetGlobalFadeToAlpha_x +FUNCTION_AT_ADDRESS(unsigned char CXWndManager::GetGlobalFadeToAlpha(void)const ,CXWndManager__GetGlobalFadeToAlpha); +#endif +#ifdef CXWndManager__IsAllValid_x +FUNCTION_AT_ADDRESS(bool CXWndManager::IsAllValid(void),CXWndManager__IsAllValid); +#endif +#ifdef CEditWnd__CEditWnd_x +//FUNCTION_AT_ADDRESS( CEditWnd::CEditWnd(class CXWnd *,unsigned __int32,class CXRect,unsigned __int32),CEditWnd__CEditWnd); +#endif +#ifdef CEditWnd__GetLineForPrintableChar_x +FUNCTION_AT_ADDRESS(int CEditWnd::GetLineForPrintableChar(int)const ,CEditWnd__GetLineForPrintableChar); +#endif +#ifdef CEditWnd__GetLineLength_x +FUNCTION_AT_ADDRESS(int CEditWnd::GetLineLength(int)const ,CEditWnd__GetLineLength); +#endif +#ifdef CEditWnd__FillIndexArray_x +FUNCTION_AT_ADDRESS(void CEditWnd::FillIndexArray(class CXStr)const ,CEditWnd__FillIndexArray); +#endif +#ifdef CEditWnd__SelectableCharFromPoint_x +FUNCTION_AT_ADDRESS(int CEditWnd::SelectableCharFromPoint(class CXPoint)const ,CEditWnd__SelectableCharFromPoint); +#endif +#ifdef CEditWnd__AddItemTag_x +FUNCTION_AT_ADDRESS(void CEditWnd::AddItemTag(int,char *,int),CEditWnd__AddItemTag); +#endif +#ifdef CEditWnd__ProcessText_x +FUNCTION_AT_ADDRESS(void CEditWnd::ProcessText(void),CEditWnd__ProcessText); +#endif +#ifdef CEditWnd__GetCharIndexPt_x +FUNCTION_AT_ADDRESS(class CXPoint CEditWnd::GetCharIndexPt(int)const ,CEditWnd__GetCharIndexPt); +#endif +#ifdef CEditWnd__GetSelStartPt_x +FUNCTION_AT_ADDRESS(class CXPoint CEditWnd::GetSelStartPt(void)const ,CEditWnd__GetSelStartPt); +#endif +#ifdef CEditWnd__GetSelEndPt_x +FUNCTION_AT_ADDRESS(class CXPoint CEditWnd::GetSelEndPt(void)const ,CEditWnd__GetSelEndPt); +#endif +#ifdef CEditWnd__FilterInputStr_x +FUNCTION_AT_ADDRESS(void CEditWnd::FilterInputStr(class CXStr &),CEditWnd__FilterInputStr); +#endif +#ifdef CEditWnd__ReplaceSelection_x +FUNCTION_AT_ADDRESS(void CEditWnd::ReplaceSelection(class CXStr,bool),CEditWnd__ReplaceSelection); +#endif +#ifdef CEditWnd__ReplaceSelection1_x +FUNCTION_AT_ADDRESS(void CEditWnd::ReplaceSelection(char,bool),CEditWnd__ReplaceSelection1); +#endif +#ifdef CEditWnd__CalculateScrollRange_x +FUNCTION_AT_ADDRESS(void CEditWnd::CalculateScrollRange(void),CEditWnd__CalculateScrollRange); +#endif +#ifdef CEditWnd__EnsureCaretVisible_x +FUNCTION_AT_ADDRESS(void CEditWnd::EnsureCaretVisible(void),CEditWnd__EnsureCaretVisible); +#endif +#ifdef CEditWnd__SetEditable_x +FUNCTION_AT_ADDRESS(void CEditWnd::SetEditable(bool),CEditWnd__SetEditable); +#endif +#ifdef CEditWnd__GetSTMLSafeText_x +FUNCTION_AT_ADDRESS(class CXStr CEditWnd::GetSTMLSafeText(void),CEditWnd__GetSTMLSafeText); +#endif +#ifdef CEditWnd__ConvertIndexPrintableToTagged_x +FUNCTION_AT_ADDRESS(int CEditWnd::ConvertIndexPrintableToTagged(int),CEditWnd__ConvertIndexPrintableToTagged); +#endif +#ifdef CEditWnd__ConvertIndexTaggedToPrintable_x +FUNCTION_AT_ADDRESS(int CEditWnd::ConvertIndexTaggedToPrintable(int),CEditWnd__ConvertIndexTaggedToPrintable); +#endif +#ifdef CTextureFont__GetWidth_x +FUNCTION_AT_ADDRESS(int CTextureFont::GetWidth(unsigned short)const ,CTextureFont__GetWidth); +#endif +#ifdef CTextureFont__GetKerning_x +FUNCTION_AT_ADDRESS(int CTextureFont::GetKerning(unsigned short,unsigned short)const ,CTextureFont__GetKerning); +#endif +#ifdef CTextureFont__GetTextExtent_x +FUNCTION_AT_ADDRESS(int CTextureFont::GetTextExtent(class CXStr)const ,CTextureFont__GetTextExtent); +#endif +#ifdef CTextureFont__GetHeight_x +FUNCTION_AT_ADDRESS(int CTextureFont::GetHeight(void)const ,CTextureFont__GetHeight); +#endif +#ifdef CTextureFont__GetName_x +FUNCTION_AT_ADDRESS(class CXStr CTextureFont::GetName(void)const ,CTextureFont__GetName); +#endif +#ifdef CTextureFont__DrawWrappedText_x +FUNCTION_AT_ADDRESS(int CTextureFont::DrawWrappedText(class CXStr *,int,int,int,class CXRect *,unsigned long,unsigned short,int)const ,CTextureFont__DrawWrappedText); +#endif +#ifdef CTextureFont__DrawWrappedText1_x +FUNCTION_AT_ADDRESS(int CTextureFont::DrawWrappedText(class CXStr,class CXRect,class CXRect,unsigned long,unsigned short,int)const ,CTextureFont__DrawWrappedText1); +#endif +#ifdef CTextureAnimation__CTextureAnimation_x +FUNCTION_AT_ADDRESS( CTextureAnimation::CTextureAnimation(void),CTextureAnimation__CTextureAnimation); +#endif +#ifdef CTextureAnimation__CTextureAnimation1_x +FUNCTION_AT_ADDRESS( CTextureAnimation::CTextureAnimation(class CXStr),CTextureAnimation__CTextureAnimation1); +#endif +#ifdef CUITexturePiece__CUITexturePiece1_x +FUNCTION_AT_ADDRESS( CUITexturePiece::CUITexturePiece(class CUITexturePiece const &),CUITexturePiece__CUITexturePiece1); +#endif +#ifdef CTextureAnimation__AddFrame_x +FUNCTION_AT_ADDRESS(int CTextureAnimation::AddFrame(class CUITextureInfo const *,class CXRect,unsigned __int32,class CXPoint),CTextureAnimation__AddFrame); +#endif +#ifdef CUITexturePiece__CUITexturePiece2_x +//FUNCTION_AT_ADDRESS( CUITexturePiece::CUITexturePiece(class CUITextureInfo,class CXRect),CUITexturePiece__CUITexturePiece2); +#endif +#ifdef CUITextureInfo__CUITextureInfo2_x +FUNCTION_AT_ADDRESS( CUITextureInfo::CUITextureInfo(class CUITextureInfo const &),CUITextureInfo__CUITextureInfo2); +#endif +#ifdef CTextureAnimation__AddFrame1_x +//FUNCTION_AT_ADDRESS(int CTextureAnimation::AddFrame(class CUITexturePiece,unsigned __int32,class CXPoint),CTextureAnimation__AddFrame1); +#endif +#ifdef STextureAnimationFrame__STextureAnimationFrame1_x +FUNCTION_AT_ADDRESS( STextureAnimationFrame::STextureAnimationFrame(class CUITexturePiece,unsigned __int32,class CXPoint),STextureAnimationFrame__STextureAnimationFrame1); +#endif +#ifdef CUITextureInfo__CUITextureInfo3_x +FUNCTION_AT_ADDRESS( CUITextureInfo::CUITextureInfo(unsigned __int32,int),CUITextureInfo__CUITextureInfo3); +#endif +#ifdef CTextureAnimation__AddBlankFrame_x +FUNCTION_AT_ADDRESS(int CTextureAnimation::AddBlankFrame(unsigned __int32,class CXPoint),CTextureAnimation__AddBlankFrame); +#endif +#ifdef CTextureAnimation__SetCurFrame_x +FUNCTION_AT_ADDRESS(void CTextureAnimation::SetCurFrame(int),CTextureAnimation__SetCurFrame); +#endif +#ifdef CTextureAnimation__GetCurFrame_x +FUNCTION_AT_ADDRESS(int CTextureAnimation::GetCurFrame(void)const ,CTextureAnimation__GetCurFrame); +#endif +#ifdef CTextureAnimation__Draw_x +FUNCTION_AT_ADDRESS(int CTextureAnimation::Draw(class CXRect,class CXRect,unsigned long,unsigned long)const ,CTextureAnimation__Draw); +#endif +#ifdef CTextureAnimation__Draw1_x +FUNCTION_AT_ADDRESS(int CTextureAnimation::Draw(class CXPoint,class CXRect,unsigned long,unsigned long)const ,CTextureAnimation__Draw1); +#endif +#ifdef CTextureAnimation__GetHotspot_x +FUNCTION_AT_ADDRESS(class CXPoint CTextureAnimation::GetHotspot(void)const ,CTextureAnimation__GetHotspot); +#endif +#ifdef CTextureAnimation__SetCurCell_x +FUNCTION_AT_ADDRESS(void CTextureAnimation::SetCurCell(int),CTextureAnimation__SetCurCell); +#endif +#ifdef CTextureAnimation__Preload_x +FUNCTION_AT_ADDRESS(int CTextureAnimation::Preload(void),CTextureAnimation__Preload); +#endif +#ifdef CUITextureInfo__operator_equal_x +FUNCTION_AT_ADDRESS(class CUITextureInfo & CUITextureInfo::operator=(class CUITextureInfo const &),CUITextureInfo__operator_equal); +#endif +#ifdef CSidlManager__CSidlManager_x +FUNCTION_AT_ADDRESS( CSidlManager::CSidlManager(void),CSidlManager__CSidlManager); +#endif +#ifdef CSidlManager__GetPointFromParamPoint_x +FUNCTION_AT_ADDRESS(class CXPoint __cdecl CSidlManager::GetPointFromParamPoint(class CParamPoint const &),CSidlManager__GetPointFromParamPoint); +#endif +#ifdef CSidlManager__GetSizeFromParamSize_x +FUNCTION_AT_ADDRESS(class CXSize __cdecl CSidlManager::GetSizeFromParamSize(class CParamSize const &),CSidlManager__GetSizeFromParamSize); +#endif +#ifdef CSidlManager__GetRectFromParamPointSize_x +FUNCTION_AT_ADDRESS(class CXRect __cdecl CSidlManager::GetRectFromParamPointSize(class CParamPoint const &,class CParamSize const &),CSidlManager__GetRectFromParamPointSize); +#endif +#ifdef CSidlManager__GetD3DCOLOR_x +FUNCTION_AT_ADDRESS(unsigned long __cdecl CSidlManager::GetD3DCOLOR(class CParamRGB const &),CSidlManager__GetD3DCOLOR); +#endif +#ifdef CSidlManager__GetButtonDrawTemplateFromParamButtonDrawTemplate_x +FUNCTION_AT_ADDRESS(class CButtonDrawTemplate CSidlManager::GetButtonDrawTemplateFromParamButtonDrawTemplate(class CParamButtonDrawTemplate const &)const ,CSidlManager__GetButtonDrawTemplateFromParamButtonDrawTemplate); +#endif +#ifdef CSidlManager__GetGaugeDrawTemplateFromParamGaugeDrawTemplate_x +FUNCTION_AT_ADDRESS(class CGaugeDrawTemplate CSidlManager::GetGaugeDrawTemplateFromParamGaugeDrawTemplate(class CParamGaugeDrawTemplate const &)const ,CSidlManager__GetGaugeDrawTemplateFromParamGaugeDrawTemplate); +#endif +#ifdef CSidlManager__GetSpellGemDrawTemplateFromParamSpellGemDrawTemplate_x +FUNCTION_AT_ADDRESS(class CSpellGemDrawTemplate CSidlManager::GetSpellGemDrawTemplateFromParamSpellGemDrawTemplate(class CParamSpellGemDrawTemplate const &)const ,CSidlManager__GetSpellGemDrawTemplateFromParamSpellGemDrawTemplate); +#endif +#ifdef CSidlManager__DeleteContents_x +FUNCTION_AT_ADDRESS(void CSidlManager::DeleteContents(void),CSidlManager__DeleteContents); +#endif +#ifdef CParamScrollbarDrawTemplate__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamScrollbarDrawTemplate & CParamScrollbarDrawTemplate::operator=(class CParamScrollbarDrawTemplate const &),CParamScrollbarDrawTemplate__operator_equal); +#endif +#ifdef CParamFrameTemplate__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamFrameTemplate & CParamFrameTemplate::operator=(class CParamFrameTemplate const &),CParamFrameTemplate__operator_equal); +#endif +#ifdef CParamButtonDrawTemplate__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamButtonDrawTemplate & CParamButtonDrawTemplate::operator=(class CParamButtonDrawTemplate const &),CParamButtonDrawTemplate__operator_equal); +#endif +#ifdef CParamClass__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamClass & CParamClass::operator=(class CParamClass const &),CParamClass__operator_equal); +#endif +#ifdef CParamRGB__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamRGB & CParamRGB::operator=(class CParamRGB const &),CParamRGB__operator_equal); +#endif +#ifdef CParam__operator_equal_x +FUNCTION_AT_ADDRESS(class CParam & CParam::operator=(class CParam const &),CParam__operator_equal); +#endif +#ifdef CXMLData__operator_equal_x +FUNCTION_AT_ADDRESS(class CXMLData & CXMLData::operator=(class CXMLData const &),CXMLData__operator_equal); +#endif +#ifdef CTAFrameDraw__GetName_x +FUNCTION_AT_ADDRESS(class CXStr CTAFrameDraw::GetName(void)const ,CTAFrameDraw__GetName); +#endif +#ifdef CScreenPieceTemplate__GetName_x +FUNCTION_AT_ADDRESS(class CXStr CScreenPieceTemplate::GetName(void)const ,CScreenPieceTemplate__GetName); +#endif +#ifdef CSidlManager__LoadSidl_x +FUNCTION_AT_ADDRESS(void CSidlManager::LoadSidl(class CXStr,class CXStr,class CXStr),CSidlManager__LoadSidl); +#endif +#ifdef CUITextureInfo__CUITextureInfo4_x +FUNCTION_AT_ADDRESS( CUITextureInfo::CUITextureInfo(class CXStr,class CXSize),CUITextureInfo__CUITextureInfo4); +#endif +#ifdef CSidlManager__CreateTextureAnimationFromSidlAnimation_x +FUNCTION_AT_ADDRESS(class CTextureAnimation CSidlManager::CreateTextureAnimationFromSidlAnimation(class CParamUi2DAnimation const *)const ,CSidlManager__CreateTextureAnimationFromSidlAnimation); +#endif +#ifdef CSidlManager__CreateTAFrameDrawFromSidlFrame_x +FUNCTION_AT_ADDRESS(class CTAFrameDraw CSidlManager::CreateTAFrameDrawFromSidlFrame(class CParamFrameTemplate const *)const ,CSidlManager__CreateTAFrameDrawFromSidlFrame); +#endif +#ifdef CSidlManager__GetScrollbarTemplateFromParamScrollbarTemplate_x +FUNCTION_AT_ADDRESS(class CScrollbarTemplate CSidlManager::GetScrollbarTemplateFromParamScrollbarTemplate(class CParamScrollbarDrawTemplate const &)const ,CSidlManager__GetScrollbarTemplateFromParamScrollbarTemplate); +#endif +#ifdef CScrollbarTemplate__CScrollbarTemplate_x +FUNCTION_AT_ADDRESS( CScrollbarTemplate::CScrollbarTemplate(class CScrollbarTemplate const &),CScrollbarTemplate__CScrollbarTemplate); +#endif +#ifdef CSidlManager__GetSliderDrawTemplateFromParamSliderDrawTemplate_x +FUNCTION_AT_ADDRESS(class CSliderDrawTemplate CSidlManager::GetSliderDrawTemplateFromParamSliderDrawTemplate(class CParamSliderDrawTemplate const &)const ,CSidlManager__GetSliderDrawTemplateFromParamSliderDrawTemplate); +#endif +#ifdef CButtonDrawTemplate__CButtonDrawTemplate1_x +FUNCTION_AT_ADDRESS( CButtonDrawTemplate::CButtonDrawTemplate(class CButtonDrawTemplate const &),CButtonDrawTemplate__CButtonDrawTemplate1); +#endif +#ifdef CSliderDrawTemplate__dCSliderDrawTemplate_x +FUNCTION_AT_ADDRESS( CSliderDrawTemplate::~CSliderDrawTemplate(void),CSliderDrawTemplate__dCSliderDrawTemplate); +#endif +#ifdef CSidlManager__CreateDrawTemplateFromParamWindowDrawTemplate_x +FUNCTION_AT_ADDRESS(class CXWndDrawTemplate CSidlManager::CreateDrawTemplateFromParamWindowDrawTemplate(class CParamWindowDrawTemplate const *)const ,CSidlManager__CreateDrawTemplateFromParamWindowDrawTemplate); +#endif +#ifdef CScrollbarTemplate__CScrollbarTemplate1_x +FUNCTION_AT_ADDRESS( CScrollbarTemplate::CScrollbarTemplate(void),CScrollbarTemplate__CScrollbarTemplate1); +#endif +#ifdef CXWndDrawTemplate__CXWndDrawTemplate1_x +FUNCTION_AT_ADDRESS( CXWndDrawTemplate::CXWndDrawTemplate(class CXWndDrawTemplate const &),CXWndDrawTemplate__CXWndDrawTemplate1); +#endif +#ifdef CTAFrameDraw__CTAFrameDraw_x +FUNCTION_AT_ADDRESS( CTAFrameDraw::CTAFrameDraw(class CTAFrameDraw const &),CTAFrameDraw__CTAFrameDraw); +#endif +#ifdef CSidlManager__CreateScreenPieceTemplateFromParamScreenPiece_x +FUNCTION_AT_ADDRESS(class CScreenPieceTemplate * CSidlManager::CreateScreenPieceTemplateFromParamScreenPiece(class CParamScreenPiece const *)const ,CSidlManager__CreateScreenPieceTemplateFromParamScreenPiece); +#endif +#ifdef CSidlManager__GetParsingErrorMsg_x +FUNCTION_AT_ADDRESS(class CXStr CSidlManager::GetParsingErrorMsg(void)const ,CSidlManager__GetParsingErrorMsg); +#endif +#ifdef CSidlManager__GetScreenPieceEnum_x +//FUNCTION_AT_ADDRESS(enum EStaticScreenPieceClasses CSidlManager::GetScreenPieceEnum(class CScreenPieceTemplate *)const ,CSidlManager__GetScreenPieceEnum); +#endif +#ifdef CSidlManager__FindAnimation_x +FUNCTION_AT_ADDRESS(class CTextureAnimation * CSidlManager::FindAnimation(unsigned __int32)const ,CSidlManager__FindAnimation); +#endif +#ifdef CSidlManager__FindAnimation1_x +FUNCTION_AT_ADDRESS(class CTextureAnimation * CSidlManager::FindAnimation(class CXStr)const ,CSidlManager__FindAnimation1); +#endif +#ifdef CSidlManager__FindFrameDraw_x +FUNCTION_AT_ADDRESS(class CTAFrameDraw * CSidlManager::FindFrameDraw(unsigned __int32)const ,CSidlManager__FindFrameDraw); +#endif +#ifdef CSidlManager__FindDrawTemplate_x +FUNCTION_AT_ADDRESS(class CXWndDrawTemplate * CSidlManager::FindDrawTemplate(unsigned __int32)const ,CSidlManager__FindDrawTemplate); +#endif +#ifdef CSidlManager__FindDrawTemplate1_x +FUNCTION_AT_ADDRESS(class CXWndDrawTemplate * CSidlManager::FindDrawTemplate(class CXStr)const ,CSidlManager__FindDrawTemplate1); +#endif +#ifdef CSidlManager__FindScreenPieceTemplate_x +FUNCTION_AT_ADDRESS(class CScreenPieceTemplate * CSidlManager::FindScreenPieceTemplate(unsigned __int32)const ,CSidlManager__FindScreenPieceTemplate); +#endif +#ifdef CSidlManager__FindScreenPieceTemplate1_x +FUNCTION_AT_ADDRESS(class CScreenPieceTemplate * CSidlManager::FindScreenPieceTemplate(class CXStr *)const ,CSidlManager__FindScreenPieceTemplate1); +#endif +#ifdef CSidlManager__AddAnimationInOrder_x +FUNCTION_AT_ADDRESS(void CSidlManager::AddAnimationInOrder(class CTextureAnimation *),CSidlManager__AddAnimationInOrder); +#endif +#ifdef CSidlManager__AddDrawTemplateInOrder_x +FUNCTION_AT_ADDRESS(void CSidlManager::AddDrawTemplateInOrder(class CXWndDrawTemplate *),CSidlManager__AddDrawTemplateInOrder); +#endif +#ifdef CSidlManager__AddTAFrameDrawInOrder_x +FUNCTION_AT_ADDRESS(void CSidlManager::AddTAFrameDrawInOrder(class CTAFrameDraw *),CSidlManager__AddTAFrameDrawInOrder); +#endif +#ifdef CSidlManager__AddScreenPieceTemplateInOrder_x +FUNCTION_AT_ADDRESS(void CSidlManager::AddScreenPieceTemplateInOrder(class CScreenPieceTemplate *),CSidlManager__AddScreenPieceTemplateInOrder); +#endif +#ifdef CSidlManager__FindTexture_x +FUNCTION_AT_ADDRESS(class CUITextureInfo * CSidlManager::FindTexture(class CXStr)const ,CSidlManager__FindTexture); +#endif +#ifdef CSidlManager__FindTexture1_x +FUNCTION_AT_ADDRESS(class CUITextureInfo * CSidlManager::FindTexture(unsigned __int32)const ,CSidlManager__FindTexture1); +#endif +#ifdef CSidlManager__FindButtonDrawTemplate_x +FUNCTION_AT_ADDRESS(class CButtonDrawTemplate * CSidlManager::FindButtonDrawTemplate(unsigned __int32)const ,CSidlManager__FindButtonDrawTemplate); +#endif +#ifdef CSidlManager__FindSliderDrawTemplate_x +FUNCTION_AT_ADDRESS(class CSliderDrawTemplate * CSidlManager::FindSliderDrawTemplate(class CXStr)const ,CSidlManager__FindSliderDrawTemplate); +#endif +#ifdef CSidlManager__FindSliderDrawTemplate1_x +FUNCTION_AT_ADDRESS(class CSliderDrawTemplate * CSidlManager::FindSliderDrawTemplate(unsigned __int32)const ,CSidlManager__FindSliderDrawTemplate1); +#endif +#ifdef CSidlManager__CreateXWndFromTemplate_x +FUNCTION_AT_ADDRESS(class CXWnd * CSidlManager::CreateXWndFromTemplate(class CXWnd *,class CControlTemplate *),CSidlManager__CreateXWndFromTemplate); +#endif +#ifdef CTAFrameDraw__GetAnimation_x +FUNCTION_AT_ADDRESS(class CTextureAnimation * CTAFrameDraw::GetAnimation(int)const ,CTAFrameDraw__GetAnimation); +#endif +#ifdef CXWnd__SetXMLTooltip_x +FUNCTION_AT_ADDRESS(void CXWnd::SetXMLTooltip(class CXStr),CXWnd__SetXMLTooltip); +#endif +#ifdef CSidlManager__TranslateString_x +FUNCTION_AT_ADDRESS(class CXStr __cdecl CSidlManager::TranslateString(class CXStr),CSidlManager__TranslateString); +#endif +#ifdef CXMLEnumInfo__dCXMLEnumInfo_x +FUNCTION_AT_ADDRESS( CXMLEnumInfo::~CXMLEnumInfo(void),CXMLEnumInfo__dCXMLEnumInfo); +#endif +#ifdef CXMLDataClass__dCXMLDataClass_x +FUNCTION_AT_ADDRESS( CXMLDataClass::~CXMLDataClass(void),CXMLDataClass__dCXMLDataClass); +#endif +#ifdef CTAFrameDraw__CTAFrameDraw1_x +FUNCTION_AT_ADDRESS( CTAFrameDraw::CTAFrameDraw(class CXStr),CTAFrameDraw__CTAFrameDraw1); +#endif +#ifdef CTAFrameDraw__Set_x +FUNCTION_AT_ADDRESS(void CTAFrameDraw::Set(class CTextureAnimation * * const),CTAFrameDraw__Set); +#endif +#ifdef CTAFrameDraw__Draw_x +FUNCTION_AT_ADDRESS(int CTAFrameDraw::Draw(class CXRect,class CXRect)const ,CTAFrameDraw__Draw); +#endif +#ifdef CTAFrameDraw__Draw1_x +FUNCTION_AT_ADDRESS(int CTAFrameDraw::Draw(class CXRect,class CXRect,int)const ,CTAFrameDraw__Draw1); +#endif +#ifdef CTAFrameDraw__GetHitTestRect_x +FUNCTION_AT_ADDRESS(class CXRect CTAFrameDraw::GetHitTestRect(class CXRect,int)const ,CTAFrameDraw__GetHitTestRect); +#endif +#ifdef CTAFrameDraw__GetPieceRect_x +FUNCTION_AT_ADDRESS(class CXRect CTAFrameDraw::GetPieceRect(class CXRect,int)const ,CTAFrameDraw__GetPieceRect); +#endif +#ifdef CTAFrameDraw__IsHorizontal_x +FUNCTION_AT_ADDRESS(bool CTAFrameDraw::IsHorizontal(void)const ,CTAFrameDraw__IsHorizontal); +#endif +#ifdef CTAFrameDraw__IsVertical_x +FUNCTION_AT_ADDRESS(bool CTAFrameDraw::IsVertical(void)const ,CTAFrameDraw__IsVertical); +#endif +#ifdef CTAFrameDraw__GetExtent_x +FUNCTION_AT_ADDRESS(int CTAFrameDraw::GetExtent(void)const ,CTAFrameDraw__GetExtent); +#endif +#ifdef CTAFrameDraw__GetMinLength_x +FUNCTION_AT_ADDRESS(int CTAFrameDraw::GetMinLength(void)const ,CTAFrameDraw__GetMinLength); +#endif +#ifdef CTAFrameDraw__GetInnerRect_x +FUNCTION_AT_ADDRESS(class CXRect CTAFrameDraw::GetInnerRect(class CXRect)const ,CTAFrameDraw__GetInnerRect); +#endif +#ifdef CSpellGemWnd__CSpellGemWnd_x +FUNCTION_AT_ADDRESS( CSpellGemWnd::CSpellGemWnd(class CXWnd *,unsigned __int32,class CXRect,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,int,int,unsigned long),CSpellGemWnd__CSpellGemWnd); +#endif +#ifdef CSpellGemWnd__Init_x +FUNCTION_AT_ADDRESS(void CSpellGemWnd::Init(void),CSpellGemWnd__Init); +#endif +#ifdef CSpellGemWnd__SetSpellIconIndex_x +FUNCTION_AT_ADDRESS(void CSpellGemWnd::SetSpellIconIndex(int),CSpellGemWnd__SetSpellIconIndex); +#endif +#ifdef CSpellGemWnd__SetSpellGemTint_x +FUNCTION_AT_ADDRESS(void CSpellGemWnd::SetSpellGemTint(unsigned long),CSpellGemWnd__SetSpellGemTint); +#endif +#ifdef CSpellGemWnd__SetGemTintStage_x +FUNCTION_AT_ADDRESS(void CSpellGemWnd::SetGemTintStage(int),CSpellGemWnd__SetGemTintStage); +#endif +#ifdef CSpellGemWnd__SetCheck_x +FUNCTION_AT_ADDRESS(void CSpellGemWnd::SetCheck(bool),CSpellGemWnd__SetCheck); +#endif +#ifdef CSliderWnd__CSliderWnd_x +FUNCTION_AT_ADDRESS( CSliderWnd::CSliderWnd(class CXWnd *,unsigned __int32,class CXRect,class CSliderTemplate *),CSliderWnd__CSliderWnd); +#endif +#ifdef CSliderWnd__SetValue_x +FUNCTION_AT_ADDRESS(void CSliderWnd::SetValue(int),CSliderWnd__SetValue); +#endif +#ifdef CSliderWnd__SetNumTicks_x +FUNCTION_AT_ADDRESS(void CSliderWnd::SetNumTicks(int),CSliderWnd__SetNumTicks); +#endif +#ifdef CSliderWnd__UpdateThumb_x +FUNCTION_AT_ADDRESS(void CSliderWnd::UpdateThumb(void),CSliderWnd__UpdateThumb); +#endif +#ifdef CSliderWnd__UpdateMiddleRange_x +FUNCTION_AT_ADDRESS(void CSliderWnd::UpdateMiddleRange(void),CSliderWnd__UpdateMiddleRange); +#endif +#ifdef CSliderWnd__GetValue_x +FUNCTION_AT_ADDRESS(int CSliderWnd::GetValue(void)const,CSliderWnd__GetValue); +#endif +#ifdef CSliderWnd__GetMiddleRangeRect_x +FUNCTION_AT_ADDRESS(class CXRect CSliderWnd::GetMiddleRangeRect(void)const ,CSliderWnd__GetMiddleRangeRect); +#endif +#ifdef CSliderWnd__GetEndCapLeftRect_x +FUNCTION_AT_ADDRESS(class CXRect CSliderWnd::GetEndCapLeftRect(void)const ,CSliderWnd__GetEndCapLeftRect); +#endif +#ifdef CSliderWnd__GetEndCapRightRect_x +FUNCTION_AT_ADDRESS(class CXRect CSliderWnd::GetEndCapRightRect(void)const ,CSliderWnd__GetEndCapRightRect); +#endif +#ifdef CSliderWnd__GetThumbRect_x +FUNCTION_AT_ADDRESS(class CXRect CSliderWnd::GetThumbRect(void)const ,CSliderWnd__GetThumbRect); +#endif +#ifdef CSliderWnd__SetThumbToOffset_x +FUNCTION_AT_ADDRESS(void CSliderWnd::SetThumbToOffset(int),CSliderWnd__SetThumbToOffset); +#endif +#ifdef CSliderWnd__DrawMiddleRange_x +FUNCTION_AT_ADDRESS(int CSliderWnd::DrawMiddleRange(void)const ,CSliderWnd__DrawMiddleRange); +#endif +#ifdef CSliderWnd__DrawEndCapLeft_x +FUNCTION_AT_ADDRESS(int CSliderWnd::DrawEndCapLeft(void)const ,CSliderWnd__DrawEndCapLeft); +#endif +#ifdef CSliderWnd__DrawEndCapRight_x +FUNCTION_AT_ADDRESS(int CSliderWnd::DrawEndCapRight(void)const ,CSliderWnd__DrawEndCapRight); +#endif +#ifdef CSliderWnd__DrawThumb_x +FUNCTION_AT_ADDRESS(int CSliderWnd::DrawThumb(void)const ,CSliderWnd__DrawThumb); +#endif +#ifdef CXWnd__DrawRaisedRect_x +FUNCTION_AT_ADDRESS(int __cdecl CXWnd::DrawRaisedRect(class CXRect,class CXRect),CXWnd__DrawRaisedRect); +#endif +#ifdef CXWnd__DrawSunkenRect_x +FUNCTION_AT_ADDRESS(int __cdecl CXWnd::DrawSunkenRect(class CXRect,class CXRect),CXWnd__DrawSunkenRect); +#endif +#ifdef CEditBaseWnd__SetSel_x +FUNCTION_AT_ADDRESS(void CEditBaseWnd::SetSel(int,int),CEditBaseWnd__SetSel); +#endif +#ifdef CInvSlotWnd__CInvSlotWnd_x +FUNCTION_AT_ADDRESS( CInvSlotWnd::CInvSlotWnd(class CXWnd *,unsigned __int32,class CXRect,class CTextureAnimation *,int,int,int),CInvSlotWnd__CInvSlotWnd); +#endif +#ifdef CInvSlotWnd__SetInvSlot_x +FUNCTION_AT_ADDRESS(void CInvSlotWnd::SetInvSlot(class CInvSlot *),CInvSlotWnd__SetInvSlot); +#endif +#ifdef CInvSlotWnd__DrawTooltip_x +FUNCTION_AT_ADDRESS(int CInvSlotWnd::DrawTooltip(class CXWnd const *)const,CInvSlotWnd__DrawTooltip); +#endif +#ifdef CLabel__CLabel_x +FUNCTION_AT_ADDRESS( CLabel::CLabel(class CXWnd *,unsigned __int32,class CXRect,int),CLabel__CLabel); +#endif +#ifdef CLabel__SetNoWrap_x +FUNCTION_AT_ADDRESS(void CLabel::SetNoWrap(bool),CLabel__SetNoWrap); +#endif +#ifdef CLabel__SetAlignRight_x +FUNCTION_AT_ADDRESS(void CLabel::SetAlignRight(bool),CLabel__SetAlignRight); +#endif +#ifdef CLabel__SetAlignCenter_x +FUNCTION_AT_ADDRESS(void CLabel::SetAlignCenter(bool),CLabel__SetAlignCenter); +#endif +#ifdef CIMEManager__CIMEManager_x +FUNCTION_AT_ADDRESS( CIMEManager::CIMEManager(struct HWND__ *),CIMEManager__CIMEManager); +#endif +#ifdef CIMEManager__dCIMEManager_x +FUNCTION_AT_ADDRESS( CIMEManager::~CIMEManager(void),CIMEManager__dCIMEManager); +#endif +#ifdef CIMEManager__handleWndProc_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleWndProc(unsigned int,unsigned int,long),CIMEManager__handleWndProc); +#endif +#ifdef CIMEManager__handleAddChar_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleAddChar(unsigned short),CIMEManager__handleAddChar); +#endif +#ifdef CIMEManager__handleInputComposition_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleInputComposition(long),CIMEManager__handleInputComposition); +#endif +#ifdef CIMEManager__handleEndComposition_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleEndComposition(void),CIMEManager__handleEndComposition); +#endif +#ifdef CIMEManager__handleStartComposition_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleStartComposition(void),CIMEManager__handleStartComposition); +#endif +#ifdef CIMEManager__handleOpenCandidates_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleOpenCandidates(void),CIMEManager__handleOpenCandidates); +#endif +#ifdef CIMEManager__handleChangeCandidates_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleChangeCandidates(void),CIMEManager__handleChangeCandidates); +#endif +#ifdef CIMEManager__handleCloseCandidates_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleCloseCandidates(void),CIMEManager__handleCloseCandidates); +#endif +#ifdef CIMEManager__handleImeStatusChanged_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleImeStatusChanged(void),CIMEManager__handleImeStatusChanged); +#endif +#ifdef CIMEManager__handleImeChanged_x +FUNCTION_AT_ADDRESS(int CIMEManager::handleImeChanged(void),CIMEManager__handleImeChanged); +#endif +#ifdef CIMEManager__setInputEditWnd_x +FUNCTION_AT_ADDRESS(int CIMEManager::setInputEditWnd(class CEditWnd *),CIMEManager__setInputEditWnd); +#endif +#ifdef CIMEManager__turnImeOn_x +FUNCTION_AT_ADDRESS(void CIMEManager::turnImeOn(void),CIMEManager__turnImeOn); +#endif +#ifdef CIMEManager__turnImeOff_x +FUNCTION_AT_ADDRESS(void CIMEManager::turnImeOff(void),CIMEManager__turnImeOff); +#endif +#ifdef CIMEManager__imeIsOn_x +FUNCTION_AT_ADDRESS(bool CIMEManager::imeIsOn(void)const ,CIMEManager__imeIsOn); +#endif +#ifdef CIMEManager__imeIsOff_x +FUNCTION_AT_ADDRESS(bool CIMEManager::imeIsOff(void)const ,CIMEManager__imeIsOff); +#endif +#ifdef CIMEManager__enableIme_x +FUNCTION_AT_ADDRESS(void CIMEManager::enableIme(bool),CIMEManager__enableIme); +#endif +#ifdef CIMEManager__queryImeLanguage_x +FUNCTION_AT_ADDRESS(int CIMEManager::queryImeLanguage(void)const ,CIMEManager__queryImeLanguage); +#endif +#ifdef CIMEManager__queryImeProperties_x +FUNCTION_AT_ADDRESS(int CIMEManager::queryImeProperties(void)const ,CIMEManager__queryImeProperties); +#endif +#ifdef CIMEManager__setInputState_x +FUNCTION_AT_ADDRESS(void CIMEManager::setInputState(int),CIMEManager__setInputState); +#endif +#ifdef CIMEManager__getInputState_x +FUNCTION_AT_ADDRESS(int CIMEManager::getInputState(void)const ,CIMEManager__getInputState); +#endif +#ifdef CIMEManager__getInputLanguage_x +FUNCTION_AT_ADDRESS(int CIMEManager::getInputLanguage(void)const ,CIMEManager__getInputLanguage); +#endif +#ifdef CIMEManager__getImeProperties_x +FUNCTION_AT_ADDRESS(int CIMEManager::getImeProperties(void)const ,CIMEManager__getImeProperties); +#endif +#ifdef CIMEManager__getWindowHandle_x +FUNCTION_AT_ADDRESS(struct HWND__ * CIMEManager::getWindowHandle(void)const ,CIMEManager__getWindowHandle); +#endif +#ifdef CUITextureInfo__Draw_x +FUNCTION_AT_ADDRESS(int CUITextureInfo::Draw(class CXRect,class CXRect,class CXRect,unsigned long,unsigned long)const ,CUITextureInfo__Draw); +#endif +#ifdef CUITextureInfo__Draw1_x +FUNCTION_AT_ADDRESS(int CUITextureInfo::Draw(class CXRect,class CXRect,class CXRect,unsigned long *,unsigned long *)const ,CUITextureInfo__Draw1); +#endif +#ifdef CUITexturePiece__Draw_x +FUNCTION_AT_ADDRESS(int CUITexturePiece::Draw(class CXRect,class CXRect,unsigned long,unsigned long)const ,CUITexturePiece__Draw); +#endif +#ifdef CUITexturePiece__Draw1_x +FUNCTION_AT_ADDRESS(int CUITexturePiece::Draw(class CXRect,class CXRect,class CXRect,unsigned long,unsigned long)const ,CUITexturePiece__Draw1); +#endif +#ifdef CUITextureInfo__Tile_x +FUNCTION_AT_ADDRESS(int CUITextureInfo::Tile(class CXRect,unsigned long,unsigned long)const ,CUITextureInfo__Tile); +#endif +#ifdef CUITextureInfo__Tile1_x +FUNCTION_AT_ADDRESS(int CUITextureInfo::Tile(class CXRect,unsigned long *,unsigned long *)const ,CUITextureInfo__Tile1); +#endif +#ifdef CUITextureInfo__Preload_x +FUNCTION_AT_ADDRESS(int CUITextureInfo::Preload(void),CUITextureInfo__Preload); +#endif +#ifdef CXMLDataPtr__SetNewPtr_x +FUNCTION_AT_ADDRESS(void CXMLDataPtr::SetNewPtr(class CXMLData *),CXMLDataPtr__SetNewPtr); +#endif +#ifdef CXMLEnumInfo__GetStreamSize_x +FUNCTION_AT_ADDRESS(int CXMLEnumInfo::GetStreamSize(void),CXMLEnumInfo__GetStreamSize); +#endif +#ifdef CXMLEnumInfo__ReadFromStream_x +FUNCTION_AT_ADDRESS(void CXMLEnumInfo::ReadFromStream(class CMemoryStream &),CXMLEnumInfo__ReadFromStream); +#endif +#ifdef CMemoryStream__GetString_x +FUNCTION_AT_ADDRESS(void CMemoryStream::GetString(class CXStr &),CMemoryStream__GetString); +#endif +#ifdef CXMLEnumInfo__WriteToStream_x +FUNCTION_AT_ADDRESS(void CXMLEnumInfo::WriteToStream(class CMemoryStream &),CXMLEnumInfo__WriteToStream); +#endif +#ifdef CXMLDataClass__GetNumLeaf_x +FUNCTION_AT_ADDRESS(int CXMLDataClass::GetNumLeaf(void),CXMLDataClass__GetNumLeaf); +#endif +#ifdef CXMLDataClass__GetStreamSize_x +FUNCTION_AT_ADDRESS(int CXMLDataClass::GetStreamSize(void),CXMLDataClass__GetStreamSize); +#endif +#ifdef CXMLDataClass__ReadFromStream_x +FUNCTION_AT_ADDRESS(void CXMLDataClass::ReadFromStream(class CMemoryStream &,class CXMLDataManager &),CXMLDataClass__ReadFromStream); +#endif +#ifdef CXMLDataClass__WriteToStream_x +FUNCTION_AT_ADDRESS(void CXMLDataClass::WriteToStream(class CMemoryStream &),CXMLDataClass__WriteToStream); +#endif +#ifdef CXMLDataManager__CXMLDataManager_x +FUNCTION_AT_ADDRESS( CXMLDataManager::CXMLDataManager(void),CXMLDataManager__CXMLDataManager); +#endif +#ifdef CXMLDataManager__GetXMLData_x +FUNCTION_AT_ADDRESS(class CXMLData * CXMLDataManager::GetXMLData(int,int),CXMLDataManager__GetXMLData); +#endif +#ifdef CXMLDataManager__GetXMLData1_x +FUNCTION_AT_ADDRESS(class CXMLData * CXMLDataManager::GetXMLData(class CXStr,class CXStr),CXMLDataManager__GetXMLData1); +#endif +#ifdef CXMLDataManager__GetNumClass_x +FUNCTION_AT_ADDRESS(int CXMLDataManager::GetNumClass(void),CXMLDataManager__GetNumClass); +#endif +#ifdef CXMLDataManager__GetNumItem_x +FUNCTION_AT_ADDRESS(int CXMLDataManager::GetNumItem(int),CXMLDataManager__GetNumItem); +#endif +#ifdef CXMLDataManager__GetClassIdx_x +FUNCTION_AT_ADDRESS(int CXMLDataManager::GetClassIdx(class CXStr),CXMLDataManager__GetClassIdx); +#endif +#ifdef CXMLDataManager__GetItemIdx_x +FUNCTION_AT_ADDRESS(int CXMLDataManager::GetItemIdx(int,class CXStr),CXMLDataManager__GetItemIdx); +#endif +#ifdef CXMLDataPtr__Free_x +FUNCTION_AT_ADDRESS(void CXMLDataPtr::Free(void),CXMLDataPtr__Free); +#endif +#ifdef CXMLDataManager__AddToSuperType_x +//FUNCTION_AT_ADDRESS(void CXMLDataManager::AddToSuperType(class CXStr,class CXMLDataPtr),CXMLDataManager__AddToSuperType); +#endif +#ifdef CXMLDataPtr__operator_equal_x +FUNCTION_AT_ADDRESS(class CXMLDataPtr & CXMLDataPtr::operator=(class CXMLDataPtr const &),CXMLDataPtr__operator_equal); +#endif +#ifdef CXMLDataManager__IsDerivedFrom_x +FUNCTION_AT_ADDRESS(bool CXMLDataManager::IsDerivedFrom(int,int),CXMLDataManager__IsDerivedFrom); +#endif +#ifdef CXMLDataManager__SetEnumHash_x +FUNCTION_AT_ADDRESS(void CXMLDataManager::SetEnumHash(void),CXMLDataManager__SetEnumHash); +#endif +#ifdef CXMLDataManager__ReadFromXMLSOM_x +FUNCTION_AT_ADDRESS(bool CXMLDataManager::ReadFromXMLSOM(class CXMLSOMDocument &),CXMLDataManager__ReadFromXMLSOM); +#endif +#ifdef CXMLDataPtr__CXMLDataPtr_x +FUNCTION_AT_ADDRESS( CXMLDataPtr::CXMLDataPtr(void),CXMLDataPtr__CXMLDataPtr); +#endif +#ifdef CXMLDataClass__CXMLDataClass_x +FUNCTION_AT_ADDRESS( CXMLDataClass::CXMLDataClass(void),CXMLDataClass__CXMLDataClass); +#endif +#ifdef CXMLEnumInfo__CXMLEnumInfo_x +FUNCTION_AT_ADDRESS( CXMLEnumInfo::CXMLEnumInfo(void),CXMLEnumInfo__CXMLEnumInfo); +#endif +#ifdef CStmlReport__CreateReport_x +FUNCTION_AT_ADDRESS(class CStmlReport * __cdecl CStmlReport::CreateReport(class CXStr),CStmlReport__CreateReport); +#endif +#ifdef CXFileXML__Load_x +FUNCTION_AT_ADDRESS(bool CXFileXML::Load(char *),CXFileXML__Load); +#endif +#ifdef CParseTokXML__GetEntityRef_x +FUNCTION_AT_ADDRESS(bool CParseTokXML::GetEntityRef(char &),CParseTokXML__GetEntityRef); +#endif +#ifdef CParseTokXML__NextToken_x +//FUNCTION_AT_ADDRESS(enum ETokTypeXML CParseTokXML::NextToken(void),CParseTokXML__NextToken); +#endif +#ifdef CParseTokensXML__SetError_x +FUNCTION_AT_ADDRESS(void __cdecl CParseTokensXML::SetError(char const *,...),CParseTokensXML__SetError); +#endif +#ifdef CParseTokensXML__GetCurFile_x +FUNCTION_AT_ADDRESS(class CXStr CParseTokensXML::GetCurFile(void),CParseTokensXML__GetCurFile); +#endif +#ifdef CParseTokensXML__Accept_x +//FUNCTION_AT_ADDRESS(bool CParseTokensXML::Accept(enum ETokTypeXML),CParseTokensXML__Accept); +#endif +#ifdef CXMLSOMParser__ParseProcess_x +FUNCTION_AT_ADDRESS(bool CXMLSOMParser::ParseProcess(void),CXMLSOMParser__ParseProcess); +#endif +#ifdef CXMLSOMParser__ParseNameSpaceToken_x +FUNCTION_AT_ADDRESS(bool CXMLSOMParser::ParseNameSpaceToken(class CXStr &),CXMLSOMParser__ParseNameSpaceToken); +#endif +#ifdef CXMLSOMParser__ParseStartTag_x +FUNCTION_AT_ADDRESS(bool CXMLSOMParser::ParseStartTag(bool &),CXMLSOMParser__ParseStartTag); +#endif +#ifdef CXMLSOMParser__ParseEndTag_x +FUNCTION_AT_ADDRESS(bool CXMLSOMParser::ParseEndTag(class CXStr),CXMLSOMParser__ParseEndTag); +#endif +#ifdef CXMLSOMParser__ParseNodeList_x +FUNCTION_AT_ADDRESS(bool CXMLSOMParser::ParseNodeList(void),CXMLSOMParser__ParseNodeList); +#endif +#ifdef CXMLSOMParser__ParseNode_x +FUNCTION_AT_ADDRESS(bool CXMLSOMParser::ParseNode(void),CXMLSOMParser__ParseNode); +#endif +#ifdef CXMLSOMParser__ParseDocument_x +FUNCTION_AT_ADDRESS(bool CXMLSOMParser::ParseDocument(void),CXMLSOMParser__ParseDocument); +#endif +#ifdef CParseTokensXML__StartFileBased_x +FUNCTION_AT_ADDRESS(bool CParseTokensXML::StartFileBased(class CXStr),CParseTokensXML__StartFileBased); +#endif +#ifdef CXFileXML__dCXFileXML_x +FUNCTION_AT_ADDRESS( CXFileXML::~CXFileXML(void),CXFileXML__dCXFileXML); +#endif +#ifdef CTokenXML__dCTokenXML_x +FUNCTION_AT_ADDRESS( CTokenXML::~CTokenXML(void),CTokenXML__dCTokenXML); +#endif +#ifdef CXMLSOMParser__ParseFile_x +FUNCTION_AT_ADDRESS(bool CXMLSOMParser::ParseFile(class CXStr),CXMLSOMParser__ParseFile); +#endif +#ifdef CParseTokensXML__dCParseTokensXML_x +FUNCTION_AT_ADDRESS( CParseTokensXML::~CParseTokensXML(void),CParseTokensXML__dCParseTokensXML); +#endif +#ifdef CXMLSOMParser__dCXMLSOMParser_x +FUNCTION_AT_ADDRESS( CXMLSOMParser::~CXMLSOMParser(void),CXMLSOMParser__dCXMLSOMParser); +#endif +#ifdef CParseTokXML__dCParseTokXML_x +FUNCTION_AT_ADDRESS( CParseTokXML::~CParseTokXML(void),CParseTokXML__dCParseTokXML); +#endif +#ifdef CClickStickInfo__CClickStickInfo_x +FUNCTION_AT_ADDRESS( CClickStickInfo::CClickStickInfo(void),CClickStickInfo__CClickStickInfo); +#endif +#ifdef CDIMap__CDIMap_x +FUNCTION_AT_ADDRESS( CDIMap::CDIMap(void),CDIMap__CDIMap); +#endif +#ifdef CXStr__CheckNoLock_x +FUNCTION_AT_ADDRESS(void CXStr::CheckNoLock(void),CXStr__CheckNoLock); +#endif +#ifdef CDIMap__dCDIMap_x +FUNCTION_AT_ADDRESS( CDIMap::~CDIMap(void),CDIMap__dCDIMap); +#endif +#ifdef CIMECandidateList__dCIMECandidateList_x +FUNCTION_AT_ADDRESS( CIMECandidateList::~CIMECandidateList(void),CIMECandidateList__dCIMECandidateList); +#endif +#ifdef CDIMap__LoadMappingFromFile_x +FUNCTION_AT_ADDRESS(void CDIMap::LoadMappingFromFile(char *),CDIMap__LoadMappingFromFile); +#endif +#ifdef CHashCXStrInt32__CHashCXStrInt32_x +FUNCTION_AT_ADDRESS( CHashCXStrInt32::CHashCXStrInt32(void),CHashCXStrInt32__CHashCXStrInt32); +#endif +#ifdef CHashCXStrInt32__dCHashCXStrInt32_x +FUNCTION_AT_ADDRESS( CHashCXStrInt32::~CHashCXStrInt32(void),CHashCXStrInt32__dCHashCXStrInt32); +#endif +#ifdef CHashCXStrInt32__KeyToBin_x +FUNCTION_AT_ADDRESS(int CHashCXStrInt32::KeyToBin(class CXStr const &)const ,CHashCXStrInt32__KeyToBin); +#endif +#ifdef CHashCXStrInt32__LookUp_x +FUNCTION_AT_ADDRESS(bool CHashCXStrInt32::LookUp(class CXStr const &,int &)const ,CHashCXStrInt32__LookUp); +#endif +#ifdef CHashCXStrInt32__Insert_x +FUNCTION_AT_ADDRESS(bool CHashCXStrInt32::Insert(class CXStr const &,int),CHashCXStrInt32__Insert); +#endif +#ifdef CHashCXStrInt32__Reset_x +FUNCTION_AT_ADDRESS(void CHashCXStrInt32::Reset(void),CHashCXStrInt32__Reset); +#endif +#ifdef CParamPoint__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamPoint & CParamPoint::operator=(class CParamPoint const &),CParamPoint__operator_equal); +#endif +#ifdef CParamSize__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamSize & CParamSize::operator=(class CParamSize const &),CParamSize__operator_equal); +#endif +#ifdef CParamGaugeDrawTemplate__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamGaugeDrawTemplate & CParamGaugeDrawTemplate::operator=(class CParamGaugeDrawTemplate const &),CParamGaugeDrawTemplate__operator_equal); +#endif +#ifdef CParamSpellGemDrawTemplate__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamSpellGemDrawTemplate & CParamSpellGemDrawTemplate::operator=(class CParamSpellGemDrawTemplate const &),CParamSpellGemDrawTemplate__operator_equal); +#endif +#ifdef CParamScreenPiece__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamScreenPiece & CParamScreenPiece::operator=(class CParamScreenPiece const &),CParamScreenPiece__operator_equal); +#endif +#ifdef CParamControl__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamControl & CParamControl::operator=(class CParamControl const &),CParamControl__operator_equal); +#endif +#ifdef CParamSliderDrawTemplate__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamSliderDrawTemplate & CParamSliderDrawTemplate::operator=(class CParamSliderDrawTemplate const &),CParamSliderDrawTemplate__operator_equal); +#endif +#ifdef CParamStaticText__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamStaticText & CParamStaticText::operator=(class CParamStaticText const &),CParamStaticText__operator_equal); +#endif +#ifdef CParamStaticAnimation__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamStaticAnimation & CParamStaticAnimation::operator=(class CParamStaticAnimation const &),CParamStaticAnimation__operator_equal); +#endif +#ifdef CParamStaticFrame__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamStaticFrame & CParamStaticFrame::operator=(class CParamStaticFrame const &),CParamStaticFrame__operator_equal); +#endif +#ifdef CParamStaticHeader__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamStaticHeader & CParamStaticHeader::operator=(class CParamStaticHeader const &),CParamStaticHeader__operator_equal); +#endif +#ifdef CParamListboxColumn__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamListboxColumn & CParamListboxColumn::operator=(class CParamListboxColumn const &),CParamListboxColumn__operator_equal); +#endif +#ifdef CParamListbox__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamListbox & CParamListbox::operator=(class CParamListbox const &),CParamListbox__operator_equal); +#endif +#ifdef CParamButton__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamButton & CParamButton::operator=(class CParamButton const &),CParamButton__operator_equal); +#endif +#ifdef CParamGauge__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamGauge & CParamGauge::operator=(class CParamGauge const &),CParamGauge__operator_equal); +#endif +#ifdef CParamSpellGem__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamSpellGem & CParamSpellGem::operator=(class CParamSpellGem const &),CParamSpellGem__operator_equal); +#endif +#ifdef CParamInvSlot__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamInvSlot & CParamInvSlot::operator=(class CParamInvSlot const &),CParamInvSlot__operator_equal); +#endif +#ifdef CParamEditbox__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamEditbox & CParamEditbox::operator=(class CParamEditbox const &),CParamEditbox__operator_equal); +#endif +#ifdef CParamSlider__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamSlider & CParamSlider::operator=(class CParamSlider const &),CParamSlider__operator_equal); +#endif +#ifdef CParamLabel__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamLabel & CParamLabel::operator=(class CParamLabel const &),CParamLabel__operator_equal); +#endif +#ifdef CParamCombobox__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamCombobox & CParamCombobox::operator=(class CParamCombobox const &),CParamCombobox__operator_equal); +#endif +#ifdef CParamPage__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamPage & CParamPage::operator=(class CParamPage const &),CParamPage__operator_equal); +#endif +#ifdef CParamTabBox__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamTabBox & CParamTabBox::operator=(class CParamTabBox const &),CParamTabBox__operator_equal); +#endif +#ifdef CParamScreen__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamScreen & CParamScreen::operator=(class CParamScreen const &),CParamScreen__operator_equal); +#endif +#ifdef CParamSuiteDefaults__operator_equal_x +FUNCTION_AT_ADDRESS(class CParamSuiteDefaults & CParamSuiteDefaults::operator=(class CParamSuiteDefaults const &),CParamSuiteDefaults__operator_equal); +#endif +#ifdef CParamClass__CParamClass_x +FUNCTION_AT_ADDRESS( CParamClass::CParamClass(void),CParamClass__CParamClass); +#endif +#ifdef CParamRGB__CParamRGB_x +FUNCTION_AT_ADDRESS( CParamRGB::CParamRGB(void),CParamRGB__CParamRGB); +#endif +#ifdef CParamPoint__CParamPoint_x +FUNCTION_AT_ADDRESS( CParamPoint::CParamPoint(void),CParamPoint__CParamPoint); +#endif +#ifdef CParamSize__CParamSize_x +FUNCTION_AT_ADDRESS( CParamSize::CParamSize(void),CParamSize__CParamSize); +#endif +#ifdef CParamTextureInfo__CParamTextureInfo_x +FUNCTION_AT_ADDRESS( CParamTextureInfo::CParamTextureInfo(void),CParamTextureInfo__CParamTextureInfo); +#endif +#ifdef CXMLSOMCursorSaveFast__dCXMLSOMCursorSaveFast_x +FUNCTION_AT_ADDRESS( CXMLSOMCursorSaveFast::~CXMLSOMCursorSaveFast(void),CXMLSOMCursorSaveFast__dCXMLSOMCursorSaveFast); +#endif +#ifdef CParamFrame__CParamFrame_x +FUNCTION_AT_ADDRESS( CParamFrame::CParamFrame(void),CParamFrame__CParamFrame); +#endif +#ifdef CParamUi2DAnimation__CParamUi2DAnimation_x +FUNCTION_AT_ADDRESS( CParamUi2DAnimation::CParamUi2DAnimation(void),CParamUi2DAnimation__CParamUi2DAnimation); +#endif +#ifdef CParamButtonDrawTemplate__CParamButtonDrawTemplate_x +FUNCTION_AT_ADDRESS( CParamButtonDrawTemplate::CParamButtonDrawTemplate(void),CParamButtonDrawTemplate__CParamButtonDrawTemplate); +#endif +#ifdef CParamGaugeDrawTemplate__CParamGaugeDrawTemplate_x +FUNCTION_AT_ADDRESS( CParamGaugeDrawTemplate::CParamGaugeDrawTemplate(void),CParamGaugeDrawTemplate__CParamGaugeDrawTemplate); +#endif +#ifdef CParamSpellGemDrawTemplate__CParamSpellGemDrawTemplate_x +FUNCTION_AT_ADDRESS( CParamSpellGemDrawTemplate::CParamSpellGemDrawTemplate(void),CParamSpellGemDrawTemplate__CParamSpellGemDrawTemplate); +#endif +#ifdef CParamFrameTemplate__CParamFrameTemplate_x +FUNCTION_AT_ADDRESS( CParamFrameTemplate::CParamFrameTemplate(void),CParamFrameTemplate__CParamFrameTemplate); +#endif +#ifdef CParamScrollbarDrawTemplate__CParamScrollbarDrawTemplate_x +FUNCTION_AT_ADDRESS( CParamScrollbarDrawTemplate::CParamScrollbarDrawTemplate(void),CParamScrollbarDrawTemplate__CParamScrollbarDrawTemplate); +#endif +#ifdef CParamWindowDrawTemplate__CParamWindowDrawTemplate_x +FUNCTION_AT_ADDRESS( CParamWindowDrawTemplate::CParamWindowDrawTemplate(void),CParamWindowDrawTemplate__CParamWindowDrawTemplate); +#endif +#ifdef CParamSliderDrawTemplate__CParamSliderDrawTemplate_x +FUNCTION_AT_ADDRESS( CParamSliderDrawTemplate::CParamSliderDrawTemplate(void),CParamSliderDrawTemplate__CParamSliderDrawTemplate); +#endif +#ifdef CParamScreenPiece__CParamScreenPiece_x +FUNCTION_AT_ADDRESS( CParamScreenPiece::CParamScreenPiece(void),CParamScreenPiece__CParamScreenPiece); +#endif +#ifdef CParamStaticScreenPiece__CParamStaticScreenPiece_x +FUNCTION_AT_ADDRESS( CParamStaticScreenPiece::CParamStaticScreenPiece(void),CParamStaticScreenPiece__CParamStaticScreenPiece); +#endif +#ifdef CParamStaticAnimation__CParamStaticAnimation_x +FUNCTION_AT_ADDRESS( CParamStaticAnimation::CParamStaticAnimation(void),CParamStaticAnimation__CParamStaticAnimation); +#endif +#ifdef CParamStaticText__CParamStaticText_x +FUNCTION_AT_ADDRESS( CParamStaticText::CParamStaticText(void),CParamStaticText__CParamStaticText); +#endif +#ifdef CParamStaticFrame__CParamStaticFrame_x +FUNCTION_AT_ADDRESS( CParamStaticFrame::CParamStaticFrame(void),CParamStaticFrame__CParamStaticFrame); +#endif +#ifdef CParamStaticHeader__CParamStaticHeader_x +FUNCTION_AT_ADDRESS( CParamStaticHeader::CParamStaticHeader(void),CParamStaticHeader__CParamStaticHeader); +#endif +#ifdef CParamControl__CParamControl_x +FUNCTION_AT_ADDRESS( CParamControl::CParamControl(void),CParamControl__CParamControl); +#endif +#ifdef CParamListboxColumn__CParamListboxColumn_x +FUNCTION_AT_ADDRESS( CParamListboxColumn::CParamListboxColumn(void),CParamListboxColumn__CParamListboxColumn); +#endif +#ifdef CParamListbox__CParamListbox_x +FUNCTION_AT_ADDRESS( CParamListbox::CParamListbox(void),CParamListbox__CParamListbox); +#endif +#ifdef CParamButton__CParamButton_x +FUNCTION_AT_ADDRESS( CParamButton::CParamButton(void),CParamButton__CParamButton); +#endif +#ifdef CParamGauge__CParamGauge_x +FUNCTION_AT_ADDRESS( CParamGauge::CParamGauge(void),CParamGauge__CParamGauge); +#endif +#ifdef CParamSpellGem__CParamSpellGem_x +FUNCTION_AT_ADDRESS( CParamSpellGem::CParamSpellGem(void),CParamSpellGem__CParamSpellGem); +#endif +#ifdef CParamInvSlot__CParamInvSlot_x +FUNCTION_AT_ADDRESS( CParamInvSlot::CParamInvSlot(void),CParamInvSlot__CParamInvSlot); +#endif +#ifdef CParamEditbox__CParamEditbox_x +FUNCTION_AT_ADDRESS( CParamEditbox::CParamEditbox(void),CParamEditbox__CParamEditbox); +#endif +#ifdef CParamSlider__CParamSlider_x +FUNCTION_AT_ADDRESS( CParamSlider::CParamSlider(void),CParamSlider__CParamSlider); +#endif +#ifdef CParamLabel__CParamLabel_x +FUNCTION_AT_ADDRESS( CParamLabel::CParamLabel(void),CParamLabel__CParamLabel); +#endif +#ifdef CParamSTMLbox__CParamSTMLbox_x +FUNCTION_AT_ADDRESS( CParamSTMLbox::CParamSTMLbox(void),CParamSTMLbox__CParamSTMLbox); +#endif +#ifdef CParamCombobox__CParamCombobox_x +FUNCTION_AT_ADDRESS( CParamCombobox::CParamCombobox(void),CParamCombobox__CParamCombobox); +#endif +#ifdef CParamPage__CParamPage_x +FUNCTION_AT_ADDRESS( CParamPage::CParamPage(void),CParamPage__CParamPage); +#endif +#ifdef CParamTabBox__CParamTabBox_x +FUNCTION_AT_ADDRESS( CParamTabBox::CParamTabBox(void),CParamTabBox__CParamTabBox); +#endif +#ifdef CParamScreen__CParamScreen_x +FUNCTION_AT_ADDRESS( CParamScreen::CParamScreen(void),CParamScreen__CParamScreen); +#endif +#ifdef CParamSuiteDefaults__CParamSuiteDefaults_x +FUNCTION_AT_ADDRESS( CParamSuiteDefaults::CParamSuiteDefaults(void),CParamSuiteDefaults__CParamSuiteDefaults); +#endif +#ifdef CXMLData__CXMLData_x +FUNCTION_AT_ADDRESS( CXMLData::CXMLData(void),CXMLData__CXMLData); +#endif +#ifdef CPageWnd__CPageWnd_x +FUNCTION_AT_ADDRESS( CPageWnd::CPageWnd(class CXWnd *,unsigned __int32,class CXRect,class CXStr,class CPageTemplate *),CPageWnd__CPageWnd); +#endif +#ifdef CGaugeWnd__CGaugeWnd_x +FUNCTION_AT_ADDRESS( CGaugeWnd::CGaugeWnd(class CXWnd *,unsigned __int32,class CXRect,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,int,unsigned long,unsigned long,bool,int,int,int,int),CGaugeWnd__CGaugeWnd); +#endif +#ifdef CGaugeWnd__CalcFillRect_x +FUNCTION_AT_ADDRESS(class CXRect CGaugeWnd::CalcFillRect(class CXRect *,int)const ,CGaugeWnd__CalcFillRect); +#endif +#ifdef CGaugeWnd__CalcLinesFillRect_x +FUNCTION_AT_ADDRESS(class CXRect CGaugeWnd::CalcLinesFillRect(class CXRect *,int)const ,CGaugeWnd__CalcLinesFillRect); +#endif +#ifdef CGaugeWnd__SpecialToolTip_x +FUNCTION_AT_ADDRESS(void CGaugeWnd::SpecialToolTip(void),CGaugeWnd__SpecialToolTip); +#endif +#ifdef CCheckBoxWnd__CCheckBoxWnd_x +FUNCTION_AT_ADDRESS( CCheckBoxWnd::CCheckBoxWnd(class CXWnd *,unsigned __int32,class CXRect,class CXPoint,class CXSize,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *),CCheckBoxWnd__CCheckBoxWnd); +#endif +#ifdef CCheckBoxWnd__SetRadioLook_x +FUNCTION_AT_ADDRESS(void CCheckBoxWnd::SetRadioLook(void),CCheckBoxWnd__SetRadioLook); +#endif +#ifdef CIMEStatusBar__CIMEStatusBar_x +FUNCTION_AT_ADDRESS( CIMEStatusBar::CIMEStatusBar(class CIMEManager *),CIMEStatusBar__CIMEStatusBar); +#endif +#ifdef CIMEStatusBar__show_x +FUNCTION_AT_ADDRESS(int CIMEStatusBar::show(class CIMEComposition const *),CIMEStatusBar__show); +#endif +#ifdef CIMEStatusBar__update_x +FUNCTION_AT_ADDRESS(int CIMEStatusBar::update(void),CIMEStatusBar__update); +#endif +#ifdef CIMEStatusBar__hide_x +FUNCTION_AT_ADDRESS(int CIMEStatusBar::hide(void),CIMEStatusBar__hide); +#endif +#ifdef CIMEStatusBar__handleChineseSimplifiedStatusChange_x +FUNCTION_AT_ADDRESS(void CIMEStatusBar::handleChineseSimplifiedStatusChange(unsigned long),CIMEStatusBar__handleChineseSimplifiedStatusChange); +#endif +#ifdef CIMEStatusBar__handleChineseTraditionalStatusChange_x +FUNCTION_AT_ADDRESS(void CIMEStatusBar::handleChineseTraditionalStatusChange(unsigned long),CIMEStatusBar__handleChineseTraditionalStatusChange); +#endif +#ifdef CIMEStatusBar__handleJapaneseStatusChange_x +FUNCTION_AT_ADDRESS(void CIMEStatusBar::handleJapaneseStatusChange(unsigned long),CIMEStatusBar__handleJapaneseStatusChange); +#endif +#ifdef CIMEStatusBar__handleKoreanStatusChange_x +FUNCTION_AT_ADDRESS(void CIMEStatusBar::handleKoreanStatusChange(unsigned long),CIMEStatusBar__handleKoreanStatusChange); +#endif +#ifdef CIMEStatusBar__repositionStatusWindow_x +FUNCTION_AT_ADDRESS(int CIMEStatusBar::repositionStatusWindow(void),CIMEStatusBar__repositionStatusWindow); +#endif +#ifdef CIMECandidateList__CIMECandidateList_x +FUNCTION_AT_ADDRESS( CIMECandidateList::CIMECandidateList(class CIMEManager *),CIMECandidateList__CIMECandidateList); +#endif +#ifdef CIMECandidateList__show_x +FUNCTION_AT_ADDRESS(int CIMECandidateList::show(class CIMEComposition const *)const ,CIMECandidateList__show); +#endif +#ifdef CIMECandidateList__repositionImeCandidateList_x +FUNCTION_AT_ADDRESS(int CIMECandidateList::repositionImeCandidateList(int,int)const ,CIMECandidateList__repositionImeCandidateList); +#endif +#ifdef CIMEComposition__CIMEComposition_x +FUNCTION_AT_ADDRESS( CIMEComposition::CIMEComposition(class CIMEManager *),CIMEComposition__CIMEComposition); +#endif +#ifdef CIMEComposition__dCIMEComposition_x +FUNCTION_AT_ADDRESS( CIMEComposition::~CIMEComposition(void),CIMEComposition__dCIMEComposition); +#endif +#ifdef CIMEComposition__addInputChar_x +FUNCTION_AT_ADDRESS(int CIMEComposition::addInputChar(unsigned short),CIMEComposition__addInputChar); +#endif +#ifdef CIMEComposition__addInputString_x +FUNCTION_AT_ADDRESS(int CIMEComposition::addInputString(unsigned short *,int),CIMEComposition__addInputString); +#endif +#ifdef CIMEComposition__addInputString1_x +FUNCTION_AT_ADDRESS(int CIMEComposition::addInputString(class CXStr const &,int),CIMEComposition__addInputString1); +#endif +#ifdef CIMEComposition__addStringFromIme_x +FUNCTION_AT_ADDRESS(int CIMEComposition::addStringFromIme(long),CIMEComposition__addStringFromIme); +#endif +#ifdef CIMEComposition__directToEditWnd_x +FUNCTION_AT_ADDRESS(void CIMEComposition::directToEditWnd(class CEditWnd *),CIMEComposition__directToEditWnd); +#endif +#ifdef CIMEComposition__getCursorPoint_x +FUNCTION_AT_ADDRESS(class CXPoint CIMEComposition::getCursorPoint(void)const ,CIMEComposition__getCursorPoint); +#endif +#ifdef CIMEComposition__getCompositionArea_x +FUNCTION_AT_ADDRESS(class CXRect CIMEComposition::getCompositionArea(void)const ,CIMEComposition__getCompositionArea); +#endif +#ifdef CIMEComposition__repositionImeCompositionWindow_x +FUNCTION_AT_ADDRESS(int CIMEComposition::repositionImeCompositionWindow(int,int)const ,CIMEComposition__repositionImeCompositionWindow); +#endif +#ifdef CIMEComposition__allocateImeCompositionString_x +FUNCTION_AT_ADDRESS(unsigned short * CIMEComposition::allocateImeCompositionString(long)const ,CIMEComposition__allocateImeCompositionString); +#endif +#ifdef CIMEComposition__allocateImeCompositionAttributes_x +FUNCTION_AT_ADDRESS(struct CompAttr * CIMEComposition::allocateImeCompositionAttributes(void)const ,CIMEComposition__allocateImeCompositionAttributes); +#endif +#ifdef CIMEComposition__getCompositionInsertIndex_x +FUNCTION_AT_ADDRESS(int CIMEComposition::getCompositionInsertIndex(void)const ,CIMEComposition__getCompositionInsertIndex); +#endif +#ifdef CIMEComposition__handleImeComposing_x +FUNCTION_AT_ADDRESS(int CIMEComposition::handleImeComposing(void),CIMEComposition__handleImeComposing); +#endif +#ifdef CIMEComposition__applyJapaneseComposingRules_x +FUNCTION_AT_ADDRESS(int CIMEComposition::applyJapaneseComposingRules(class CXStr *),CIMEComposition__applyJapaneseComposingRules); +#endif +#ifdef CIMEComposition__applyChineseComposingRules_x +FUNCTION_AT_ADDRESS(int CIMEComposition::applyChineseComposingRules(class CXStr *),CIMEComposition__applyChineseComposingRules); +#endif +#ifdef CIMEComposition__applyKoreanComposingRules_x +FUNCTION_AT_ADDRESS(int CIMEComposition::applyKoreanComposingRules(class CXStr *),CIMEComposition__applyKoreanComposingRules); +#endif +#ifdef CIMEComposition__addCompositionHighlights_x +FUNCTION_AT_ADDRESS(int CIMEComposition::addCompositionHighlights(void),CIMEComposition__addCompositionHighlights); +#endif +#ifdef CIMEComposition__handleImeResult_x +FUNCTION_AT_ADDRESS(int CIMEComposition::handleImeResult(void),CIMEComposition__handleImeResult); +#endif +#ifdef CIMEComposition__backupCurrentText_x +FUNCTION_AT_ADDRESS(void CIMEComposition::backupCurrentText(void),CIMEComposition__backupCurrentText); +#endif +#ifdef CIMEComposition__revertToBackupText_x +FUNCTION_AT_ADDRESS(void CIMEComposition::revertToBackupText(void),CIMEComposition__revertToBackupText); +#endif +#ifdef CMemoryStream__GetStringSize_x +FUNCTION_AT_ADDRESS(int __cdecl CMemoryStream::GetStringSize(class CXStr &),CMemoryStream__GetStringSize); +#endif +#ifdef CMemoryStream__PutString_x +FUNCTION_AT_ADDRESS(void CMemoryStream::PutString(class CXStr &),CMemoryStream__PutString); +#endif +#ifdef CMemoryStream__GetString1_x +FUNCTION_AT_ADDRESS(class CXStr CMemoryStream::GetString(void),CMemoryStream__GetString1); +#endif +#ifdef CXMLSOMDocument__GetValueObjectId_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocument::GetValueObjectId(class CXStr,class CXStr,unsigned __int32 &),CXMLSOMDocument__GetValueObjectId); +#endif +#ifdef CXMLSOMDocument__SetValueObjectId_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocument::SetValueObjectId(class CXStr,class CXStr,unsigned __int32),CXMLSOMDocument__SetValueObjectId); +#endif +#ifdef CXMLSOMDocument__FieldParseItemOfClass_x +FUNCTION_AT_ADDRESS(bool CXMLSOMDocument::FieldParseItemOfClass(class CXStr,class CXStr,unsigned __int32 &),CXMLSOMDocument__FieldParseItemOfClass); +#endif +#ifdef EQOldPlayerAnimation__mAnimationPrefix_x +FUNCTION_AT_ADDRESS(char (* EQOldPlayerAnimation::mAnimationPrefix)[20],EQOldPlayerAnimation__mAnimationPrefix); +#endif +#ifdef CTextOverlay__DisplayText_x +FUNCTION_AT_ADDRESS(void CTextOverlay::DisplayText(char *,int,int,int,int,int,int),CTextOverlay__DisplayText); +#endif +#ifdef CDBStr__GetString_x +// GetString(index, subindex, &success) +FUNCTION_AT_ADDRESS(char *CDBStr::GetString(int, int, int *), CDBStr__GetString); +#endif +#ifdef EQMisc__GetActiveFavorCost_x +FUNCTION_AT_ADDRESS(int EQMisc::GetActiveFavorCost(void),EQMisc__GetActiveFavorCost); +#endif +#ifdef CSkillMgr__GetStrNumber_x +FUNCTION_AT_ADDRESS(unsigned long CSkillMgr::GetStrNumber(int),CSkillMgr__GetStrNumber); +#endif +#ifdef CSkillMgr__GetSkillCap_x +FUNCTION_AT_ADDRESS(unsigned long CSkillMgr::GetSkillCap(class EQ_Character *,int,int,int,bool,bool,bool),CSkillMgr__GetSkillCap) +#endif +#ifdef CSkillMgr__SkillAvailableAtLevel_x +FUNCTION_AT_ADDRESS(unsigned long CSkillMgr::SkillAvailableAtLevel(int,int),CSkillMgr__SkillAvailableAtLevel); +#endif +#ifdef CSkillMgr__IsActivatableSkill_x +FUNCTION_AT_ADDRESS(bool CSkillMgr::IsActivatableSkill(int),CSkillMgr__IsActivatableSkill); +#endif +#ifdef CSkillMgr__GetBaseDamage_x +FUNCTION_AT_ADDRESS(unsigned long CSkillMgr::GetBaseDamage(int),CSkillMgr__GetBaseDamage); +#endif +#ifdef CSkillMgr__GetReuseTime_x +FUNCTION_AT_ADDRESS(unsigned long CSkillMgr::GetReuseTime(int),CSkillMgr__GetReuseTime); +#endif +#ifdef CSkillMgr__IsAvailable_x +FUNCTION_AT_ADDRESS(bool CSkillMgr::IsAvailable(int),CSkillMgr__IsAvailable); +#endif +#ifdef CChatService__GetNumberOfFriends_x +FUNCTION_AT_ADDRESS(int CChatService::GetNumberOfFriends(void),CChatService__GetNumberOfFriends); +#endif +#ifdef CChatService__GetFriendName_x +FUNCTION_AT_ADDRESS(char *CChatService::GetFriendName(int),CChatService__GetFriendName); +#endif +#ifdef PlayerPointManager__GetAltCurrency_x +FUNCTION_AT_ADDRESS(unsigned long PlayerPointManager::GetAltCurrency(unsigned long,unsigned long),PlayerPointManager__GetAltCurrency); +#endif +#ifdef CharacterZoneClient__HasSkill_x +FUNCTION_AT_ADDRESS(bool CharacterZoneClient::HasSkill(int), CharacterZoneClient__HasSkill); +#endif + + +#ifdef PcZoneClient__GetPcSkillLimit_x +FUNCTION_AT_ADDRESS(int PcZoneClient::GetPcSkillLimit(int), PcZoneClient__GetPcSkillLimit); +#endif + +#ifdef CXWnd__SetFont_x +FUNCTION_AT_ADDRESS(int CXWnd::SetFont(void*), CXWnd__SetFont); +#endif diff --git a/client_files/native_autoloot/eq-core-dll/src/EQClasses.h b/client_files/native_autoloot/eq-core-dll/src/EQClasses.h new file mode 100644 index 0000000000..9a20cb63e5 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/EQClasses.h @@ -0,0 +1,6973 @@ +#pragma once +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +namespace EQClasses +{ +// Other +class CXSize +{ + DWORD A,B,C,D,E,F; +}; + +// Enumerations... +typedef DWORD EQZoneIndex; +typedef DWORD EQLocalizeLanguage; +typedef DWORD EScrollCode; + +// Forward class declarations +class _EverQuestinfo; +class _PackFileData; +class _PackFileDataRawFile; +class _partyGroup; +class AltAdvManager; +class bad_word_class; +class CAAWnd; +class CActionsWnd; +class CAlarmWnd; +class CBankWnd; +class CBazaarSearchWnd; +class CBazaarWnd; +class CBodyTintWnd; +class CBookWnd; +class CBreathWnd; +class CBuffWindow; +class CBugReportWnd; +class CButtonDrawTemplate; +class CButtonTemplate; +class CButtonWnd; +class CCastingWnd; +class CCastSpellWnd; +class CCharacterCreation; +class CCharacterSelect; +class CChatManager; +class CChatWindow; +class CCheckBoxWnd; +class CClickStickInfo; +class CColorPickerWnd; +class CComboboxTemplate; +class CComboWnd; +class CCompassWnd; +class CConfirmationDialog; +class CContainerMgr; +class CContainerWnd; +class CContextMenu; +class CContextMenuManager; +class CControlTemplate; +class CCursorAttachment; +class CDIMap; +class CDisplay; +class CEditBaseWnd; +class CEditboxTemplate; +class CEditLabelWnd; +class CEditWnd; +class CEQSuiteTextureLoader; +class CEverQuest; +class CExploreModeWnd; +class CFacePick; +class CFeedbackWnd; +class CFileSelectionWnd; +class CFriendsWnd; +class CGaugeDrawTemplate; +class CGaugeTemplate; +class CGaugeWnd; +class CGemsGameWnd; +class CGiveWnd; +class CGroupSearchFiltersWnd; +class CGroupSearchWnd; +class CGroupWnd; +class CGuild; +class CGuildMgmtWnd; +class ChannelServerApi; +class ChannelServerHandler; +class CHashCXStrInt32; +class CHelpWnd; +class CHotButtonWnd; +class CIMECandidateList; +class CIMEComposition; +class CIMEManager; +class CIMEStatusBar; +class CInspectWnd; +class CInventoryWnd; +class CInvSlot; +class CInvSlotMgr; +class CInvSlotTemplate; +class CInvSlotWnd; +class CItemDisplayWnd; +class CJournalCatWnd; +class CJournalNPCWnd; +class CJournalTextWnd; +class CKeyCXStrValueInt32; +class CLabel; +class CLabelTemplate; +class CListboxColumnTemplate; +class CListboxTemplate; +class CListWnd; +class CLoadskinWnd; +class CLootWnd; +class CMapToolbarWnd; +class CMapViewWnd; +class CMemoryStream; +class CMerchantWnd; +class CMusicPlayerWnd; +class CMutexLock; +class CMutexLockCounted; +class CMutexSync; +class CMutexSyncCounted; +class CNoteWnd; +class ConversationJournal; +class COptionsWnd; +class CPageTemplate; +class CPageWnd; +class CParam; +class CParamButton; +class CParamButtonDrawTemplate; +class CParamClass; +class CParamCombobox; +class CParamControl; +class CParamEditbox; +class CParamFrame; +class CParamFrameTemplate; +class CParamGauge; +class CParamGaugeDrawTemplate; +class CParamInvSlot; +class CParamLabel; +class CParamListbox; +class CParamListboxColumn; +class CParamPage; +class CParamPoint; +class CParamRGB; +class CParamScreen; +class CParamScreenPiece; +class CParamScrollbarDrawTemplate; +class CParamSize; +class CParamSlider; +class CParamSliderDrawTemplate; +class CParamSpellGem; +class CParamSpellGemDrawTemplate; +class CParamStaticAnimation; +class CParamStaticFrame; +class CParamStaticHeader; +class CParamStaticScreenPiece; +class CParamStaticText; +class CParamSTMLbox; +class CParamSuiteDefaults; +class CParamTabBox; +class CParamTextureInfo; +class CParamUi2DAnimation; +class CParamWindowDrawTemplate; +class CParseTokensXML; +class CParseTokXML; +class CPetInfoWnd; +class CPetitionQWnd; +class CPlayerNotesWnd; +class CPlayerWnd; +class CPotionBeltWnd; +class CQuantityWnd; +class CRadioGroup; +class CRaid; +class CRaidOptionsWnd; +class CRaidWnd; +class CRC32Generator; +class CResolutionHandler; +class CScreenPieceTemplate; +class CScreenTemplate; +class CScrollbarTemplate; +class CSelectorWnd; +class CSidlManager; +class CSidlScreenWnd; +class CSkillsSelectWnd; +class CSkillsWnd; +class CSliderDrawTemplate; +class CSliderTemplate; +class CSliderWnd; +class CSocialEditWnd; +class CSoulmarkWnd; +class CSpellBookWnd; +class CSpellGemDrawTemplate; +class CSpellGemTemplate; +class CSpellGemWnd; +class CStaticAnimationTemplate; +class CStaticFrameTemplate; +class CStaticHeaderTemplate; +class CStaticScreenPieceTemplate; +class CStaticTextTemplate; +class CSTMLboxTemplate; +class CStmlReport; +class CStmlWnd; +class CStoryWnd; +class CTabBoxTemplate; +class CTabWnd; +class CTAFrameDraw; +class CTargetWnd; +class CTextEntryWnd; +class CTextureAnimation; +class CTextureFont; +class CTimeLeftWnd; +class CTipWnd; +class CTokenXML; +class CTrackingWnd; +class CTradeWnd; +class CTrainWnd; +class CUITextureInfo; +class CUITexturePiece; +class CVector3; +class CVideoModesWnd; +class CXFileXML; +class CXMLData; +class CXMLDataClass; +class CXMLDataManager; +class CXMLDataPtr; +class CXMLEnumInfo; +class CXMLParamManager; +class CXMLSOMAttribute; +class CXMLSOMAttributeType; +class CXMLSOMCursor; +class CXMLSOMCursorSave; +class CXMLSOMCursorSaveFast; +class CXMLSOMCursorTraverseChildren; +class CXMLSOMDocument; +class CXMLSOMDocumentBase; +class CXMLSOMElement; +class CXMLSOMElementType; +class CXMLSOMNode; +class CXMLSOMNodePtr; +class CXMLSOMParser; +class CXMLSOMSchema; +class CXMLSOMSimpleType; +class CXPoint; +class CXRect; +class CXStr; +class CXStrSingleton; +class CXWnd; +class CXWndDrawTemplate; +class CXWndManager; +class EmitterManager; +class engineInterface; +class EQ_Affect; +class EQ_AltAbility; +class EQ_Character; +class EQ_CharacterData; +class EQ_Container; +class EQ_Equipment; +class EQ_Item; +class EQ_LoadingS; +class EQ_Note; +class EQ_PC; +class EQ_Skill; +class EQ_Spell; +class EQAnimation; +class EQEffect; +class EqEmitterData; +class EQHSprite; +class EQItemList; +class EQMissile; +class EqMobileEmitter; +class EQMoneyList; +class EQNewPlayerAnimation; +class EQObject; +class EQOldPlayerAnimation; +class EQPlayer; +class EQPMInfo; +class EqSoundManager; +class EQSwitch; +class EqSwitchManager; +class EQUtil; +class EQWorldData; +class EQZoneInfo; +class FilePath; +class flex_unit; +class GrammarRulesClass; +class GuildMember; +class JournalNPC; +class KeyCombo; +class KeypressHandler; +class LogicalPacket; +class MapViewMap; +class MemoryPoolManager; +class MidiInstance; +class monty; +class Mp3Manager; +class MusicManager; +class PacketPacker; +class PacketPackerManager; +class PackFile; +class PackFS; +class PooledLogicalPacket; +class public_key; +class SAmpersandEntry; +class SFormattedText; +class ShareBase; +class SharedString; +class SHistoryElement; +class SimpleLogicalPacket; +class SLinkInfo; +class SListWndCell; +class SListWndCellEditUpdate; +class SListWndColumn; +class SListWndLine; +class SListWndSortInfo; +class SoundAsset; +class SoundControl; +class SoundEmitter; +class SoundInstance; +class SoundManager; +class SoundObject; +class SParseVariables; +class SpellManager; +class STable; +class STableCell; +class STempTable; +class STempTableCell; +class STempTableRow; +class STextLine; +class STextureAnimationFrame; +class StringItem; +class StringTable; +class TextFileReader; +class type_info; +class UdpConnection; +class UdpConnectionHandler; +class UdpIpAddress; +class UdpManager; +class UdpMisc; +class UdpReliableChannel; +class vlong; +class vlong_value; +class Wave3dInstance; +class WaveInstance; +class WrappedLogicalPacket; +class ZlibUtil; +class ZoneNPCLoadTextManager; +class CTextOverlay; +// End forward class declarations + +// Class declarations +class CXStr +{ +public: +EQLIB_OBJECT CXStr::~CXStr(void); +EQLIB_OBJECT CXStr::CXStr(char const *); +EQLIB_OBJECT CXStr::CXStr(char const *,int); +EQLIB_OBJECT CXStr::CXStr(char); +EQLIB_OBJECT CXStr::CXStr(class CXStr const &); +EQLIB_OBJECT CXStr::CXStr(int,int,char); +EQLIB_OBJECT CXStr::CXStr(unsigned short const *); +EQLIB_OBJECT CXStr::CXStr(void); +EQLIB_OBJECT char *CXStr::operator char *(void)const; +EQLIB_OBJECT unsigned short *CXStr::operator unsigned short *(void)const; +EQLIB_OBJECT bool CXStr::Find(char,int &); +EQLIB_OBJECT bool CXStr::Find(class CXStr const &,int &); +EQLIB_OBJECT bool CXStr::Find(unsigned short,int &); +EQLIB_OBJECT bool CXStr::FindLast(char,int &); +EQLIB_OBJECT char CXStr::GetChar(long)const; +EQLIB_OBJECT char CXStr::operator[](int)const; +EQLIB_OBJECT char CXStr::SetChar(long,char); +EQLIB_OBJECT class CXStr & CXStr::operator=(char const *); +EQLIB_OBJECT class CXStr & CXStr::operator=(class CXStr const &); +EQLIB_OBJECT class CXStr CXStr::Copy(long,long)const; +EQLIB_OBJECT class CXStr CXStr::Left(int)const; +EQLIB_OBJECT class CXStr CXStr::Mid(int,int)const; +EQLIB_OBJECT class CXStr CXStr::Right(int)const; +//EQLIB_OBJECT enum EStringEncoding CXStr::GetEncoding(void)const; +EQLIB_OBJECT int __cdecl CXStr::PrintString(char const *,...); +//EQLIB_OBJECT int CXStr::Compare(class CXStr const &,enum CompareCode)const; +//EQLIB_OBJECT int CXStr::CompareN(class CXStr const &,int,enum CompareCode)const; +EQLIB_OBJECT int CXStr::ConvertToInt(void); +EQLIB_OBJECT int CXStr::operator==(char const *)const; +EQLIB_OBJECT int CXStr::operator==(class CXStr const &)const; +EQLIB_OBJECT int CXStr::operator>(class CXStr const &)const; +EQLIB_OBJECT long CXStr::GetLength(void)const; +EQLIB_OBJECT unsigned short CXStr::GetUnicode(long)const; +EQLIB_OBJECT unsigned short CXStr::SetUnicode(long,unsigned short); +//EQLIB_OBJECT void * CXStr::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CXStr::AddCr(void); +EQLIB_OBJECT void CXStr::Blank(void); +EQLIB_OBJECT void CXStr::BlankPreAllocate(int); +EQLIB_OBJECT void CXStr::CopySelf(long,long); +EQLIB_OBJECT void CXStr::Delete(long,long); +EQLIB_OBJECT void CXStr::Insert(long,char); +EQLIB_OBJECT void CXStr::Insert(long,class CXStr const &); +EQLIB_OBJECT void CXStr::operator+=(char const *); +EQLIB_OBJECT void CXStr::operator+=(char); +EQLIB_OBJECT void CXStr::operator+=(class CXStr const &); +EQLIB_OBJECT void CXStr::operator+=(unsigned short); +//EQLIB_OBJECT void CXStr::SetEncoding(enum EStringEncoding); +EQLIB_OBJECT void CXStr::SetLowerCase(void); +EQLIB_OBJECT void CXStr::SetUpperCase(void); +EQLIB_OBJECT void CXStr::Strip(char); +EQLIB_OBJECT void CXStr::StripAll(char); +EQLIB_OBJECT void CXStr::StripLeading(char); +EQLIB_OBJECT void CXStr::StripTrailing(char); +// protected +EQLIB_OBJECT static int __cdecl CXStr::LenUnicodeToUtf8(unsigned short const *); +EQLIB_OBJECT static int __cdecl CXStr::UnicodeToUtf8(unsigned short const *,char *,int); +EQLIB_OBJECT static int __cdecl CXStr::Utf8ToUnicode(char const *,unsigned short *,int); +//EQLIB_OBJECT struct CStrRep * CXStr::AllocRepNoLock(long,enum EStringEncoding); +//EQLIB_OBJECT void CXStr::Assure(long,enum EStringEncoding); +EQLIB_OBJECT void CXStr::AssureCopy(void); +EQLIB_OBJECT void CXStr::FreeRep(struct CStrRep *); +EQLIB_OBJECT void CXStr::FreeRepNoLock(struct CStrRep *); +// private +EQLIB_OBJECT void CXStr::CheckNoLock(void); + + PCXSTR Ptr; + +}; + +class CXWnd +{ +public: +EQLIB_OBJECT enum UIType CXWnd::GetType(); +EQLIB_OBJECT class CXMLData * CXWnd::GetXMLData(); +EQLIB_OBJECT class CXWnd * CXWnd::GetChildItem(PCHAR Name); +EQLIB_OBJECT CXWnd::CXWnd(class CXWnd *,unsigned __int32,class CXRect); +EQLIB_OBJECT bool CXWnd::HasFocus(void)const; +EQLIB_OBJECT bool CXWnd::IsActive(void)const; +EQLIB_OBJECT bool CXWnd::IsDescendantOf(class CXWnd const *)const; +EQLIB_OBJECT bool CXWnd::IsEnabled(void)const; +EQLIB_OBJECT bool CXWnd::IsReallyVisible(void)const; +//EQLIB_OBJECT bool CXWnd::IsType(enum EWndRuntimeType)const; +EQLIB_OBJECT class CButtonDrawTemplate const * CXWnd::GetCloseBoxTemplate(void)const; +EQLIB_OBJECT class CButtonDrawTemplate const * CXWnd::GetMinimizeBoxTemplate(void)const; +EQLIB_OBJECT class CButtonDrawTemplate const * CXWnd::GetTileBoxTemplate(void)const; +EQLIB_OBJECT class CTAFrameDraw const * CXWnd::GetBorderFrame(void)const; +EQLIB_OBJECT class CTAFrameDraw const * CXWnd::GetTitlebarHeader(void)const; +EQLIB_OBJECT class CXRect CXWnd::GetClientClipRect(void)const; +EQLIB_OBJECT class CXRect CXWnd::GetRelativeRect(void)const; +EQLIB_OBJECT class CXRect CXWnd::GetScreenClipRect(void)const; +EQLIB_OBJECT class CXRect CXWnd::GetScreenRect(void)const; +EQLIB_OBJECT class CXStr CXWnd::GetWindowTextA(void)const; +EQLIB_OBJECT class CXStr CXWnd::GetXMLTooltip(void)const; +EQLIB_OBJECT class CXWnd * CXWnd::GetChildItem(CXStr const &); +EQLIB_OBJECT class CXWnd * CXWnd::GetChildWndAt(class CXPoint)const; +EQLIB_OBJECT class CXWnd * CXWnd::GetFirstChildWnd(void)const; +EQLIB_OBJECT class CXWnd * CXWnd::GetNextChildWnd(class CXWnd *)const; +EQLIB_OBJECT class CXWnd * CXWnd::GetNextSib(void)const; +EQLIB_OBJECT class CXWnd * CXWnd::SetFocus(void); +EQLIB_OBJECT int CXWnd::DoAllDrawing(void)const; +EQLIB_OBJECT int CXWnd::DrawChildren(void)const; +EQLIB_OBJECT int CXWnd::DrawCloseBox(void)const; +EQLIB_OBJECT int CXWnd::DrawHScrollbar(int,int,int)const; +EQLIB_OBJECT int CXWnd::DrawMinimizeBox(void)const; +EQLIB_OBJECT int CXWnd::DrawTileBox(void)const; +EQLIB_OBJECT int CXWnd::DrawVScrollbar(int,int,int)const; +EQLIB_OBJECT int CXWnd::GetWidth(void)const; +EQLIB_OBJECT int CXWnd::Minimize(bool); +EQLIB_OBJECT int CXWnd::Move(class CXPoint); +EQLIB_OBJECT int CXWnd::Move(class CXRect); +EQLIB_OBJECT int CXWnd::ProcessTransition(void); +EQLIB_OBJECT int CXWnd::Resize(int,int); +EQLIB_OBJECT int CXWnd::Show(bool,bool,bool mq_c = 1); +EQLIB_OBJECT int CXWnd::Tile(bool); +EQLIB_OBJECT static class CXRect __cdecl CXWnd::GetTooltipRect(class CXPoint,class CXSize); +EQLIB_OBJECT static class CXRect __cdecl CXWnd::GetTooltipRect(class CXSize); +EQLIB_OBJECT static class CXWndDrawTemplate CXWnd::sm_wdtDefaults; +EQLIB_OBJECT static int __cdecl CXWnd::DrawColoredRect(class CXRect,unsigned long,class CXRect); +EQLIB_OBJECT static int __cdecl CXWnd::DrawLasso(class CXRect,unsigned long,class CXRect); +EQLIB_OBJECT static int __cdecl CXWnd::DrawRaisedRect(class CXRect,class CXRect); +EQLIB_OBJECT static int __cdecl CXWnd::DrawSunkenRect(class CXRect,class CXRect); +EQLIB_OBJECT void CXWnd::Bottom(void); +EQLIB_OBJECT void CXWnd::BringChildWndToTop(class CXWnd *); +EQLIB_OBJECT void CXWnd::BringToTop(bool); +EQLIB_OBJECT void CXWnd::Center(void); +EQLIB_OBJECT void CXWnd::ClrFocus(void); +EQLIB_OBJECT void CXWnd::DrawTooltipAtPoint(class CXPoint)const; +EQLIB_OBJECT void CXWnd::Left(void); +EQLIB_OBJECT void CXWnd::Refade(void); +EQLIB_OBJECT void CXWnd::Right(void); +EQLIB_OBJECT void CXWnd::SetFirstChildPointer(class CXWnd *); +EQLIB_OBJECT void CXWnd::SetKeyTooltip(int,int); +EQLIB_OBJECT void CXWnd::SetLookLikeParent(void); +EQLIB_OBJECT void CXWnd::SetMouseOver(bool); +EQLIB_OBJECT void CXWnd::SetNextSibPointer(class CXWnd *); +EQLIB_OBJECT void CXWnd::SetTooltip(class CXStr); +EQLIB_OBJECT void CXWnd::SetXMLTooltip(class CXStr); +EQLIB_OBJECT void CXWnd::SetZLayer(int); +EQLIB_OBJECT void CXWnd::StartFade(unsigned char,unsigned __int32); +// virtual +EQLIB_OBJECT bool CXWnd::IsPointTransparent(class CXPoint)const; +EQLIB_OBJECT bool CXWnd::IsValid(void)const; +EQLIB_OBJECT bool CXWnd::QueryClickStickDropOK(class CClickStickInfo *)const; +EQLIB_OBJECT bool CXWnd::QueryDropOK(struct SDragDropInfo *)const; +EQLIB_OBJECT class CTextureAnimation * CXWnd::GetClickStickCursor(class CClickStickInfo *)const; +EQLIB_OBJECT class CTextureAnimation * CXWnd::GetCursorToDisplay(void)const; +EQLIB_OBJECT class CTextureAnimation * CXWnd::GetDragDropCursor(struct SDragDropInfo *)const; +EQLIB_OBJECT class CXRect CXWnd::GetClientRect(void)const; +EQLIB_OBJECT class CXRect CXWnd::GetHitTestRect(int)const; +EQLIB_OBJECT class CXRect CXWnd::GetInnerRect(void)const; +EQLIB_OBJECT class CXRect CXWnd::GetMinimizedRect(void)const; +EQLIB_OBJECT class CXSize CXWnd::GetMinSize(void)const; +EQLIB_OBJECT class CXSize CXWnd::GetUntileSize(void)const; +EQLIB_OBJECT class CXStr CXWnd::GetTooltip(void)const; +EQLIB_OBJECT int CXWnd::AboutToDeleteWnd(class CXWnd *); +EQLIB_OBJECT int CXWnd::Draw(void)const; +EQLIB_OBJECT int CXWnd::DrawBackground(void)const; +EQLIB_OBJECT int CXWnd::DrawCaret(void)const; +EQLIB_OBJECT int CXWnd::DrawChildItem(class CXWnd const *,void *)const; +EQLIB_OBJECT int CXWnd::DrawCursor(class CXPoint,class CXRect,bool &); +EQLIB_OBJECT int CXWnd::DrawNC(void)const; +EQLIB_OBJECT int CXWnd::DrawTitleBar(class CXRect)const; +EQLIB_OBJECT int CXWnd::DrawTooltip(class CXWnd const *)const; +EQLIB_OBJECT int CXWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int CXWnd::HandleLButtonDown(class CXPoint *,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleLButtonHeld(class CXPoint *,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleLButtonUp(class CXPoint *,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleLButtonUpAfterHeld(class CXPoint *,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleMouseMove(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleRButtonDown(class CXPoint *,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleRButtonHeld(class CXPoint *,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleRButtonUp(class CXPoint *,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleRButtonUpAfterHeld(class CXPoint *,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleWheelButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleWheelButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CXWnd::HandleWheelMove(class CXPoint,int,unsigned __int32); +EQLIB_OBJECT int CXWnd::HitTest(class CXPoint,int *)const; +EQLIB_OBJECT int CXWnd::OnActivate(class CXWnd *); +EQLIB_OBJECT int CXWnd::OnBroughtToTop(void); +EQLIB_OBJECT int CXWnd::OnClickStick(class CClickStickInfo *,unsigned __int32,bool); +EQLIB_OBJECT int CXWnd::OnDragDrop(struct SDragDropInfo *); +EQLIB_OBJECT int CXWnd::OnHScroll(EScrollCode,int); +EQLIB_OBJECT int CXWnd::OnKillFocus(class CXWnd *); +EQLIB_OBJECT int CXWnd::OnMinimizeBox(void); +EQLIB_OBJECT int CXWnd::OnMove(class CXRect); +EQLIB_OBJECT int CXWnd::OnProcessFrame(void); +EQLIB_OBJECT int CXWnd::OnResize(int,int); +EQLIB_OBJECT int CXWnd::OnSetFocus(class CXWnd *); +EQLIB_OBJECT int CXWnd::OnShow(void); +EQLIB_OBJECT int CXWnd::OnTile(void); +EQLIB_OBJECT int CXWnd::OnTileBox(void); +EQLIB_OBJECT int CXWnd::OnVScroll(EScrollCode,int); +EQLIB_OBJECT int CXWnd::PostDraw(void)const; +//EQLIB_OBJECT int CXWnd::RequestDockInfo(enum EDockAction,class CXWnd *,class CXRect *); +EQLIB_OBJECT int CXWnd::SetVScrollPos(int); +EQLIB_OBJECT int CXWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CXWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CXWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CXWnd::Deactivate(void); +EQLIB_OBJECT void CXWnd::OnReloadSidl(void); +EQLIB_OBJECT void CXWnd::SetAttributesFromSidl(class CParamScreenPiece *); +EQLIB_OBJECT void CXWnd::SetDrawTemplate(class CXWndDrawTemplate *); +EQLIB_OBJECT void CXWnd::SetWindowTextA(class CXStr &); +// protected +EQLIB_OBJECT static class CXWndManager * & CXWnd::sm_pMgr; +// private +EQLIB_OBJECT static unsigned char CXWnd::sm_byCurrentAlpha; +EQLIB_OBJECT int CXWnd::SetFont(void*); + +CXW; + +}; +#define ZoneToGoTo 0 + +struct CStrPtr +{ + int RefCount; + long MaxLength; + long Length; + int Encoding; + void *Buff; + union + { + char Ansi[1000]; + wchar_t Unicode[500]; + CStrPtr* pNext; + }; +}; +class CCXStr +{ +public: + EQLIB_OBJECT CCXStr& operator= (char const *str); + + CStrPtr* Ptr; +}; + +static inline VOID SetCCXStr(PCXSTR *cxstr, PCHAR text) +{ + //cxstr=text; + CCXStr *Str = (CCXStr*)cxstr; + (*Str) = text; + cxstr = (PCXSTR*)Str; +} + +class CSidlScreenWnd +{ +public: +EQLIB_OBJECT enum UIType CSidlScreenWnd::GetType(); +EQLIB_OBJECT class CXMLData * CSidlScreenWnd::GetXMLData(); +EQLIB_OBJECT class CXWnd * CSidlScreenWnd::GetChildItem(PCHAR Name); +EQLIB_OBJECT CSidlScreenWnd::CSidlScreenWnd() {}; +EQLIB_OBJECT CSidlScreenWnd::CSidlScreenWnd(class CXWnd *,class CXStr); +EQLIB_OBJECT CSidlScreenWnd::CSidlScreenWnd(class CXWnd *pWnd,class CXStr *Template,int Flags,int unknown4, char *unknown5); +EQLIB_OBJECT CSidlScreenWnd::CSidlScreenWnd(class CXWnd *,unsigned __int32,class CXRect,class CXStr); +EQLIB_OBJECT class CScreenPieceTemplate * CSidlScreenWnd::GetSidlPiece(class CXStr*, int dummy=1)const; +EQLIB_OBJECT class CXRect CSidlScreenWnd::GetSidlPieceRect(class CScreenPieceTemplate *,class CXRect)const; +EQLIB_OBJECT class CXWnd * CSidlScreenWnd::GetChildItem(CXStr const &); +EQLIB_OBJECT int CSidlScreenWnd::DrawSidlPiece(class CScreenPieceTemplate *,class CXRect,class CXRect)const; +EQLIB_OBJECT void CSidlScreenWnd::AddButtonToRadioGroup(class CXStr,class CButtonWnd *); +EQLIB_OBJECT void CSidlScreenWnd::CalculateHSBRange(void); +EQLIB_OBJECT void CSidlScreenWnd::CalculateVSBRange(void); +EQLIB_OBJECT void CSidlScreenWnd::CreateChildrenFromSidl(void); +EQLIB_OBJECT void CSidlScreenWnd::EnableIniStorage(int,char *); +EQLIB_OBJECT void CSidlScreenWnd::Init(int,class CXStr*,int,int,int); +EQLIB_OBJECT void CSidlScreenWnd::Init(class CXWnd *,unsigned __int32,class CXRect,class CXStr,int,char *); +EQLIB_OBJECT void CSidlScreenWnd::LoadIniListWnd(class CListWnd *,char *); +EQLIB_OBJECT void CSidlScreenWnd::SetScreen(class CXStr*); +EQLIB_OBJECT void CSidlScreenWnd::StoreIniListWnd(class CListWnd const *,char *); +EQLIB_OBJECT void CSidlScreenWnd::StoreIniVis(void); +// virtual +EQLIB_OBJECT CSidlScreenWnd::~CSidlScreenWnd(void); +EQLIB_OBJECT int CSidlScreenWnd::DrawBackground(void)const; +EQLIB_OBJECT int CSidlScreenWnd::HandleRButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSidlScreenWnd::OnResize(int,int); +EQLIB_OBJECT int CSidlScreenWnd::OnShow(void); +EQLIB_OBJECT int CSidlScreenWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CSidlScreenWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSidlScreenWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CSidlScreenWnd::LoadIniInfo(void); +EQLIB_OBJECT void CSidlScreenWnd::StoreIniInfo(void); +// protected +EQLIB_OBJECT int CSidlScreenWnd::ConvertToRes(int,int,int,int); +EQLIB_OBJECT void CSidlScreenWnd::LoadSidlScreen(void); +// private +EQLIB_OBJECT static bool CSidlScreenWnd::m_useIniFile; + +inline CXWnd *pXWnd() {return (CXWnd*)this;}; + +CSW; +}; + + + + +class _EverQuestinfo +{ +public: +EQLIB_OBJECT void _EverQuestinfo::SetAutoAttack(bool); +}; + +class _PackFileData +{ +public: +EQLIB_OBJECT _PackFileData::~_PackFileData(void); +// virtual +EQLIB_OBJECT int _PackFileData::readBlock(void); +}; + +class _PackFileDataRawFile +{ +public: +// virtual +EQLIB_OBJECT int _PackFileDataRawFile::readBlock(void); +}; + +class _partyGroup +{ +public: +EQLIB_OBJECT int _partyGroup::getNumMembers(void)const; +}; + +class AltAdvManager +{ +public: +EQLIB_OBJECT AltAdvManager::AltAdvManager(void); +EQLIB_OBJECT bool AltAdvManager::IsAbilityReady(class EQ_PC *,EQData::PALTABILITY,int *,int mq2_dummy = 0); +EQLIB_OBJECT int AltAdvManager::AbilitiesByClass(int,int); +EQLIB_OBJECT int AltAdvManager::AltSkillReqs(class EQ_PC *,int); +EQLIB_OBJECT int AltAdvManager::CalculateDoubleAttackChance(class EQ_PC *,int,unsigned char); +EQLIB_OBJECT int AltAdvManager::CalculateFleetOfFoot(class EQ_PC *); +EQLIB_OBJECT int AltAdvManager::CalculateHideTimeReduce(class EQ_PC *); +EQLIB_OBJECT int AltAdvManager::CalculateInstrumentMasteryMod(class EQ_PC *); +EQLIB_OBJECT int AltAdvManager::CalculateLoHHarmTouchReuseTimer(class EQ_PC *,int); +EQLIB_OBJECT int AltAdvManager::CalculateMaxHPAA(class EQ_PC *,int); +EQLIB_OBJECT int AltAdvManager::CalculateMaxStatAA(class EQ_PC *,int); +EQLIB_OBJECT int AltAdvManager::CalculateMitigationBoost(class EQ_PC *,int); +EQLIB_OBJECT int AltAdvManager::CalculateNimbleEvasionChance(class EQ_PC *); +EQLIB_OBJECT int AltAdvManager::CalculateSingingMasteryMod(class EQ_PC *,int); +EQLIB_OBJECT int AltAdvManager::CalculateSpellCastingMastery(class EQ_PC *); +EQLIB_OBJECT int AltAdvManager::CalculateStalwartEnduranceChance(class EQ_PC *); +EQLIB_OBJECT int AltAdvManager::CanTrainAbility(class EQ_PC *,int); +EQLIB_OBJECT int AltAdvManager::GetAALevelNeeded(class EQ_PC *,int); +EQLIB_OBJECT int AltAdvManager::GetAbilityTitle(class EQPlayer *); +EQLIB_OBJECT int AltAdvManager::GetNextAbilityCost(int,int); +EQLIB_OBJECT int AltAdvManager::MeetsPoPLevelReqs(class EQ_PC *,int,int); +EQLIB_OBJECT int AltAdvManager::TotalPointsInSkill(int,int); +EQLIB_OBJECT unsigned long AltAdvManager::GetCalculatedTimer(class EQ_PC *,EQData::PALTABILITY); +EQLIB_OBJECT void AltAdvManager::GetAbilityReqs(char *,int); +EQLIB_OBJECT struct _ALTABILITY *AltAdvManager::GetAltAbility(int); +}; + +class bad_word_class +{ +public: +EQLIB_OBJECT bad_word_class::bad_word_class(char *); +}; + +class CAAWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CAAWnd::CAAWnd(class CXWnd *); +EQLIB_OBJECT void CAAWnd::Activate(void); +EQLIB_OBJECT void CAAWnd::CancelAASpend(void); +EQLIB_OBJECT void CAAWnd::ConfirmAASpend(void); +EQLIB_OBJECT void CAAWnd::SendNewPercent(void); +EQLIB_OBJECT void CAAWnd::ShowAbility(int); +EQLIB_OBJECT void CAAWnd::Update(void); +EQLIB_OBJECT void CAAWnd::UpdateTimer(void); +// virtual +EQLIB_OBJECT CAAWnd::~CAAWnd(void); +EQLIB_OBJECT int CAAWnd::OnProcessFrame(void); +EQLIB_OBJECT int CAAWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CAAWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CAAWnd::`vector deleting destructor'(unsigned int); +#define SafeZLoc 0 +EQLIB_OBJECT void CAAWnd::Deactivate(void); +// private +EQLIB_OBJECT void CAAWnd::Init(void); +EQLIB_OBJECT void CAAWnd::UpdateSelected(void); +}; + +class CActionsWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CActionsWnd::CActionsWnd(class CXWnd *); +EQLIB_OBJECT class CButtonWnd * CActionsWnd::GetAbilityBtn(int); +EQLIB_OBJECT class CButtonWnd * CActionsWnd::GetCombatBtn(int); +EQLIB_OBJECT class CButtonWnd * CActionsWnd::GetMenuBtn(int); +EQLIB_OBJECT int CActionsWnd::GetCurrentPageEnum(void)const; +EQLIB_OBJECT void CActionsWnd::Activate(int); +EQLIB_OBJECT void CActionsWnd::KeyMapUpdated(void); +EQLIB_OBJECT void CActionsWnd::SelectSkillForAbilityBtn(int); +EQLIB_OBJECT void CActionsWnd::SelectSkillForCombatBtn(int); +EQLIB_OBJECT void CActionsWnd::UpdateButtonText(void); +// virtual +EQLIB_OBJECT CActionsWnd::~CActionsWnd(void); +EQLIB_OBJECT int CActionsWnd::OnProcessFrame(void); +EQLIB_OBJECT int CActionsWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CActionsWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CActionsWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CActionsWnd::Deactivate(void); +// private +EQLIB_OBJECT int CActionsWnd::AbilitiesPageActivate(void); +EQLIB_OBJECT int CActionsWnd::AbilitiesPageDeactivate(void); +EQLIB_OBJECT int CActionsWnd::AbilitiesPageOnProcessFrame(void); +EQLIB_OBJECT int CActionsWnd::AbilitiesPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int CActionsWnd::CombatPageActivate(void); +EQLIB_OBJECT int CActionsWnd::CombatPageDeactivate(void); +EQLIB_OBJECT int CActionsWnd::CombatPageOnProcessFrame(void); +EQLIB_OBJECT int CActionsWnd::CombatPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int CActionsWnd::MainPageActivate(void); +EQLIB_OBJECT int CActionsWnd::MainPageDeactivate(void); +EQLIB_OBJECT int CActionsWnd::MainPageOnProcessFrame(void); +EQLIB_OBJECT int CActionsWnd::MainPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int CActionsWnd::RedirectActivateTo(class CPageWnd *); +EQLIB_OBJECT int CActionsWnd::RedirectDeactivateTo(class CPageWnd *); +EQLIB_OBJECT int CActionsWnd::RedirectOnProcessFrameTo(class CPageWnd *); +EQLIB_OBJECT int CActionsWnd::RedirectWndNotificationTo(class CPageWnd *,class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int CActionsWnd::SocialsPageActivate(void); +EQLIB_OBJECT int CActionsWnd::SocialsPageDeactivate(void); +EQLIB_OBJECT int CActionsWnd::SocialsPageOnProcessFrame(void); +EQLIB_OBJECT int CActionsWnd::SocialsPageWndNotification(class CXWnd *,unsigned __int32,void *); +}; + +class CAlarmWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CAlarmWnd::CAlarmWnd(class CXWnd *); +EQLIB_OBJECT void CAlarmWnd::Activate(void); +// virtual +EQLIB_OBJECT CAlarmWnd::~CAlarmWnd(void); +EQLIB_OBJECT int CAlarmWnd::OnProcessFrame(void); +EQLIB_OBJECT int CAlarmWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CAlarmWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CAlarmWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CAlarmWnd::Deactivate(void); +// private +EQLIB_OBJECT void CAlarmWnd::DoNeverButton(void); +}; + +class CBankWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CBankWnd::CBankWnd(class CXWnd *,class CXStr); +EQLIB_OBJECT int CBankWnd::GetNumBankSlots(void)const; +EQLIB_OBJECT void CBankWnd::Activate(class EQPlayer *); +EQLIB_OBJECT void CBankWnd::Deactivate(bool); +// virtual +EQLIB_OBJECT CBankWnd::~CBankWnd(void); +EQLIB_OBJECT int CBankWnd::OnProcessFrame(void); +EQLIB_OBJECT int CBankWnd::PostDraw(void)const; +EQLIB_OBJECT int CBankWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CBankWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CBankWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CBankWnd::Deactivate(void); +// private +EQLIB_OBJECT long CBankWnd::GetBankQtyFromCoinType(int); +EQLIB_OBJECT void CBankWnd::ClickedMoneyButton(int,int); +EQLIB_OBJECT void CBankWnd::Init(void); +EQLIB_OBJECT void CBankWnd::UpdateMoneyDisplay(void); +}; + +class CBazaarSearchWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CBazaarSearchWnd::CBazaarSearchWnd(class CXWnd *); +EQLIB_OBJECT char * CBazaarSearchWnd::GetPriceString(unsigned long); +EQLIB_OBJECT void CBazaarSearchWnd::Activate(void); +EQLIB_OBJECT void CBazaarSearchWnd::HandleBazaarMsg(char *,int); +EQLIB_OBJECT void CBazaarSearchWnd::UpdatePlayerCombo(void); +EQLIB_OBJECT void CBazaarSearchWnd::UpdatePlayerUpdateButton(bool); +// virtual +EQLIB_OBJECT CBazaarSearchWnd::~CBazaarSearchWnd(void); +EQLIB_OBJECT int CBazaarSearchWnd::Draw(void)const; +EQLIB_OBJECT int CBazaarSearchWnd::OnProcessFrame(void); +EQLIB_OBJECT int CBazaarSearchWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CBazaarSearchWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CBazaarSearchWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CBazaarSearchWnd::Deactivate(void); +// private +EQLIB_OBJECT void CBazaarSearchWnd::AddItemtoList(char *,unsigned long,char *,int,int); +EQLIB_OBJECT void CBazaarSearchWnd::doQuery(void); +EQLIB_OBJECT void CBazaarSearchWnd::Init(void); +EQLIB_OBJECT void CBazaarSearchWnd::InitListArray(void); +EQLIB_OBJECT void CBazaarSearchWnd::SortItemList(int); +EQLIB_OBJECT void CBazaarSearchWnd::UpdateComboButtons(void); +}; + +class CBazaarWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CBazaarWnd::CBazaarWnd(class CXWnd *); +EQLIB_OBJECT bool CBazaarWnd::StoreSelectedPrice(void); +EQLIB_OBJECT char * CBazaarWnd::GetPriceString(unsigned long); +EQLIB_OBJECT class EQ_Item * CBazaarWnd::ReturnItemByIndex(int); +EQLIB_OBJECT int CBazaarWnd::UpdateBazaarListtoServer(void); +EQLIB_OBJECT long CBazaarWnd::GetQtyFromCoinType(int); +EQLIB_OBJECT unsigned long CBazaarWnd::GetPrice(void); +EQLIB_OBJECT void CBazaarWnd::Activate(void); +EQLIB_OBJECT void CBazaarWnd::AddBazaarText(char *,int); +EQLIB_OBJECT void CBazaarWnd::AddEquipmentToBazaarArray(class EQ_Item *,int,unsigned long); +EQLIB_OBJECT void CBazaarWnd::BuildBazaarItemArray(void); +EQLIB_OBJECT void CBazaarWnd::ClickedMoneyButton(int,int); +EQLIB_OBJECT void CBazaarWnd::HandleTraderMsg(char *); +EQLIB_OBJECT void CBazaarWnd::RebuildItemArray(void); +EQLIB_OBJECT void CBazaarWnd::SelectBazaarSlotItem(int,class CTextureAnimation *); +EQLIB_OBJECT void CBazaarWnd::SetMoneyButton(int,int); +EQLIB_OBJECT void CBazaarWnd::UpdatePriceButtons(void); +// virtual +EQLIB_OBJECT CBazaarWnd::~CBazaarWnd(void); +EQLIB_OBJECT int CBazaarWnd::OnProcessFrame(void); +EQLIB_OBJECT int CBazaarWnd::PostDraw(void)const; +EQLIB_OBJECT int CBazaarWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CBazaarWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CBazaarWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CBazaarWnd::Deactivate(void); +// protected +EQLIB_OBJECT void CBazaarWnd::UpdateButtons(void); +// private +EQLIB_OBJECT void CBazaarWnd::CreateBZRIniFilename(void); +EQLIB_OBJECT void CBazaarWnd::Init(void); +EQLIB_OBJECT void CBazaarWnd::ToggleBzrItemActive(int,bool); +}; + +class CBodyTintWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CBodyTintWnd::CBodyTintWnd(class CXWnd *); +EQLIB_OBJECT char * CBodyTintWnd::BuildRBGTooltip(unsigned long,char * const); +EQLIB_OBJECT unsigned long CBodyTintWnd::GetButtonTint(int); +EQLIB_OBJECT unsigned long CBodyTintWnd::GetItemTint(int); +EQLIB_OBJECT void CBodyTintWnd::Activate(void); +EQLIB_OBJECT void CBodyTintWnd::GetReagentCount(void); +EQLIB_OBJECT void CBodyTintWnd::GetTintChangeCount(void); +EQLIB_OBJECT void CBodyTintWnd::ResetToOrigBodyTints(void); +EQLIB_OBJECT void CBodyTintWnd::SetSlotLabels(bool); +EQLIB_OBJECT void CBodyTintWnd::StoreModifiedBodyTints(void); +EQLIB_OBJECT void CBodyTintWnd::UpdateLabelsAndButtons(void); +EQLIB_OBJECT void CBodyTintWnd::UpdateLocalTintColor(unsigned long); +EQLIB_OBJECT void CBodyTintWnd::UpdateMaterialTintLocal(unsigned long); +// virtual +EQLIB_OBJECT CBodyTintWnd::~CBodyTintWnd(void); +EQLIB_OBJECT int CBodyTintWnd::OnProcessFrame(void); +EQLIB_OBJECT int CBodyTintWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CBodyTintWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CBodyTintWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CBodyTintWnd::Deactivate(void); +}; + +class CBookWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CBookWnd::CBookWnd(class CXWnd *); +EQLIB_OBJECT bool CBookWnd::CheckBook(class EQ_Note *); +EQLIB_OBJECT void CBookWnd::Activate(void); +EQLIB_OBJECT void CBookWnd::SetBook(char *); +// virtual +EQLIB_OBJECT CBookWnd::~CBookWnd(void); +EQLIB_OBJECT int CBookWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int CBookWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CBookWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CBookWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CBookWnd::Deactivate(void); +// protected +EQLIB_OBJECT void CBookWnd::CleanPages(void); +EQLIB_OBJECT void CBookWnd::DisplayText(void); +EQLIB_OBJECT void CBookWnd::ProcessText(void); +EQLIB_OBJECT void CBookWnd::ShowButtons(void); +// private +EQLIB_OBJECT void CBookWnd::Init(void); +}; + +class CBreathWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CBreathWnd::CBreathWnd(class CXWnd *); +EQLIB_OBJECT void CBreathWnd::Activate(void); +// virtual +EQLIB_OBJECT CBreathWnd::~CBreathWnd(void); +EQLIB_OBJECT int CBreathWnd::OnProcessFrame(void); +//EQLIB_OBJECT void * CBreathWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CBreathWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CBreathWnd::Deactivate(void); +// private +EQLIB_OBJECT void CBreathWnd::Init(void); +}; + +class CBuffWindow : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CBuffWindow::CBuffWindow(class CXWnd *,enum BuffWindowType); +EQLIB_OBJECT void CBuffWindow::Activate(void); +EQLIB_OBJECT void CBuffWindow::SetBuffIcon(class CButtonWnd *,int,int); +// virtual +EQLIB_OBJECT CBuffWindow::~CBuffWindow(void); +EQLIB_OBJECT class CXSize CBuffWindow::GetMinSize(void)const; +EQLIB_OBJECT int CBuffWindow::OnProcessFrame(void); +EQLIB_OBJECT int CBuffWindow::PostDraw(void)const; +EQLIB_OBJECT int CBuffWindow::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CBuffWindow::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CBuffWindow::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CBuffWindow::Deactivate(void); +// private +EQLIB_OBJECT void CBuffWindow::HandleSpellInfoDisplay(class CXWnd *); +EQLIB_OBJECT void CBuffWindow::Init(void); +EQLIB_OBJECT void CBuffWindow::RefreshBuffDisplay(void); +EQLIB_OBJECT void CBuffWindow::RefreshIconArrangement(void); +}; + +class CBugReportWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CBugReportWnd::CBugReportWnd(class CXWnd *); +EQLIB_OBJECT void CBugReportWnd::Activate(void); +// virtual +EQLIB_OBJECT CBugReportWnd::~CBugReportWnd(void); +EQLIB_OBJECT int CBugReportWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CBugReportWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CBugReportWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CBugReportWnd::Deactivate(void); +// private +EQLIB_OBJECT void CBugReportWnd::UpdateLocation(void); +}; + +class CButtonDrawTemplate +{ +public: +EQLIB_OBJECT CButtonDrawTemplate::~CButtonDrawTemplate(void); +EQLIB_OBJECT CButtonDrawTemplate::CButtonDrawTemplate(class CButtonDrawTemplate const &); +EQLIB_OBJECT CButtonDrawTemplate::CButtonDrawTemplate(void); +EQLIB_OBJECT class CButtonDrawTemplate & CButtonDrawTemplate::operator=(class CButtonDrawTemplate const &); +EQLIB_OBJECT class CXSize CButtonDrawTemplate::GetSize(void)const; +}; + +class CButtonTemplate +{ +public: +EQLIB_OBJECT CButtonTemplate::CButtonTemplate(class CParamButton *); +// virtual +EQLIB_OBJECT CButtonTemplate::~CButtonTemplate(void); +//EQLIB_OBJECT void * CButtonTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CButtonTemplate::`vector deleting destructor'(unsigned int); +}; + +class CButtonWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CButtonWnd::CButtonWnd(class CXWnd *,unsigned __int32,class CXRect,class CXPoint,class CXSize,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *); +EQLIB_OBJECT void CButtonWnd::SetCheck(bool); +// virtual +EQLIB_OBJECT CButtonWnd::~CButtonWnd(void); +EQLIB_OBJECT bool CButtonWnd::IsPointTransparent(class CXPoint)const; +EQLIB_OBJECT int CButtonWnd::Draw(void)const; +EQLIB_OBJECT int CButtonWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CButtonWnd::HandleLButtonHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CButtonWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CButtonWnd::HandleLButtonUpAfterHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CButtonWnd::HandleMouseMove(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CButtonWnd::HandleRButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CButtonWnd::HandleRButtonHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CButtonWnd::HandleRButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CButtonWnd::HandleRButtonUpAfterHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CButtonWnd::OnProcessFrame(void); +//EQLIB_OBJECT void * CButtonWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CButtonWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CButtonWnd::SetAttributesFromSidl(class CParamScreenPiece *); +EQLIB_OBJECT void CButtonWnd::SetRadioGroup(class CRadioGroup *); +}; + +class CCastingWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CCastingWnd::CCastingWnd(class CXWnd *); +EQLIB_OBJECT void CCastingWnd::Activate(void); +// virtual +EQLIB_OBJECT CCastingWnd::~CCastingWnd(void); +EQLIB_OBJECT int CCastingWnd::OnProcessFrame(void); +//EQLIB_OBJECT void * CCastingWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CCastingWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CCastingWnd::Deactivate(void); +}; + +class CCastSpellWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CCastSpellWnd::CCastSpellWnd(class CXWnd *); +//EQLIB_OBJECT CCastSpellWnd::SpellCategoryMajor::~SpellCategoryMajor(void); +//EQLIB_OBJECT CCastSpellWnd::SpellCategoryMinor::~SpellCategoryMinor(void); +EQLIB_OBJECT static void __cdecl CCastSpellWnd::Unmemorize(int); +EQLIB_OBJECT static void __cdecl CCastSpellWnd::UnmemorizeList(int *,int); +EQLIB_OBJECT void CCastSpellWnd::Activate(void); +EQLIB_OBJECT void CCastSpellWnd::ForgetMemorizedSpell(int); +EQLIB_OBJECT void CCastSpellWnd::HandleSpellInfoDisplay(class CXWnd *); +EQLIB_OBJECT void CCastSpellWnd::HandleSpellLeftClick(int); +EQLIB_OBJECT void CCastSpellWnd::HandleSpellRightClick(int); +EQLIB_OBJECT void CCastSpellWnd::KeyMapUpdated(void); +EQLIB_OBJECT void CCastSpellWnd::RecacheCategorizedSpells(void); +EQLIB_OBJECT void CCastSpellWnd::RecacheLoadoutContextMenu(void); +EQLIB_OBJECT void CCastSpellWnd::SpellBookDeactivating(void); +// virtual +EQLIB_OBJECT CCastSpellWnd::~CCastSpellWnd(void); +EQLIB_OBJECT int CCastSpellWnd::OnProcessFrame(void); +EQLIB_OBJECT int CCastSpellWnd::PostDraw(void)const; +EQLIB_OBJECT int CCastSpellWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CCastSpellWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CCastSpellWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CCastSpellWnd::Deactivate(void); +// private +EQLIB_OBJECT bool CCastSpellWnd::IsBardSongPlaying(void); +EQLIB_OBJECT unsigned long CCastSpellWnd::GetSpellGemColor(class EQ_Spell *); +EQLIB_OBJECT void CCastSpellWnd::CategorizeSpell(int,int,int,int); +EQLIB_OBJECT void CCastSpellWnd::ClearSpellCategories(void); +EQLIB_OBJECT void CCastSpellWnd::Init(void); +EQLIB_OBJECT void CCastSpellWnd::MakeSpellSelectMenu(void); +EQLIB_OBJECT void CCastSpellWnd::RefreshSpellGemButtons(void); +EQLIB_OBJECT void CCastSpellWnd::UpdateSpellGems(int); +EQLIB_OBJECT void CCastSpellWnd::UpdateSpellGemTooltips(int); +}; + +class CCharacterCreation : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CCharacterCreation::CCharacterCreation(class CXWnd *); +EQLIB_OBJECT void CCharacterCreation::Activate(void); +EQLIB_OBJECT void CCharacterCreation::ActivateScreen(int); +EQLIB_OBJECT void CCharacterCreation::DoBackButton(void); +EQLIB_OBJECT void CCharacterCreation::DoNextButton(void); +EQLIB_OBJECT void CCharacterCreation::HandleNameApprovalResponse(int); +EQLIB_OBJECT void CCharacterCreation::NameGenerated(char *); +// virtual +EQLIB_OBJECT CCharacterCreation::~CCharacterCreation(void); +EQLIB_OBJECT int CCharacterCreation::Draw(void)const; +EQLIB_OBJECT int CCharacterCreation::OnProcessFrame(void); +EQLIB_OBJECT int CCharacterCreation::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CCharacterCreation::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CCharacterCreation::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CCharacterCreation::Deactivate(void); +// private +EQLIB_OBJECT bool CCharacterCreation::IsLackingExpansion(bool,bool); +EQLIB_OBJECT char * CCharacterCreation::GetCharCreateText(char *,int,int,int,int); +EQLIB_OBJECT int CCharacterCreation::GetClassButtonIndex(int); +EQLIB_OBJECT int CCharacterCreation::GetRaceButtonIndex(int); +EQLIB_OBJECT void CCharacterCreation::DoStatButton(int); +EQLIB_OBJECT void CCharacterCreation::FinalizeNewPCAndSendToWorld(void); +EQLIB_OBJECT void CCharacterCreation::Init(void); +EQLIB_OBJECT void CCharacterCreation::InitNewPC(void); +EQLIB_OBJECT void CCharacterCreation::InitStartingCities(void); +EQLIB_OBJECT void CCharacterCreation::InitStats(bool); +EQLIB_OBJECT void CCharacterCreation::RandomizeCharacter(bool,bool); +EQLIB_OBJECT void CCharacterCreation::RandomizeFacialFeatures(void); +EQLIB_OBJECT void CCharacterCreation::SelectedClassButton(int); +EQLIB_OBJECT void CCharacterCreation::SelectedRaceButton(int); +EQLIB_OBJECT void CCharacterCreation::SelectStartingCity(int); +EQLIB_OBJECT void CCharacterCreation::SetNewPCDeityFromBtnIndex(int); +EQLIB_OBJECT void CCharacterCreation::SetPlayerAppearanceFromNewPC(class EQPlayer *,class EQ_PC *,bool); +EQLIB_OBJECT void CCharacterCreation::SubmitNameToWorld(void); +EQLIB_OBJECT void CCharacterCreation::UpdatePlayerFromNewPC(void); +EQLIB_OBJECT void CCharacterCreation::UpdateScreenZeroButtons(bool); +}; + +class CCharacterSelect : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CCharacterSelect::CCharacterSelect(class CXWnd *); +EQLIB_OBJECT int CCharacterSelect::IsEmptyCharacterSlot(int); +EQLIB_OBJECT int CCharacterSelect::IsValidCharacterSelected(void); +EQLIB_OBJECT int CCharacterSelect::NumberOfCharacters(void); +EQLIB_OBJECT unsigned char CCharacterSelect::IsEvil(int,int,int); +EQLIB_OBJECT void CCharacterSelect::Activate(void); +EQLIB_OBJECT void CCharacterSelect::DeleteCharacter(void); +EQLIB_OBJECT void CCharacterSelect::EnterExplorationMode(void); +EQLIB_OBJECT void CCharacterSelect::EnterWorld(void); +EQLIB_OBJECT void CCharacterSelect::LeaveExplorationMode(void); +EQLIB_OBJECT void CCharacterSelect::Quit(void); +EQLIB_OBJECT void CCharacterSelect::SelectCharacter(int,int); +EQLIB_OBJECT void CCharacterSelect::SetLoadZonePlayerLocation(void); +EQLIB_OBJECT void CCharacterSelect::SwitchModel(class EQPlayer *,unsigned char,int,unsigned char,unsigned char); +EQLIB_OBJECT void CCharacterSelect::UpdateButtonNames(void); +// virtual +EQLIB_OBJECT CCharacterSelect::~CCharacterSelect(void); +EQLIB_OBJECT int CCharacterSelect::Draw(void)const; +EQLIB_OBJECT int CCharacterSelect::OnProcessFrame(void); +EQLIB_OBJECT int CCharacterSelect::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CCharacterSelect::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CCharacterSelect::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CCharacterSelect::Deactivate(void); +// private +EQLIB_OBJECT void CCharacterSelect::CreateExplorationModePlayers(void); +EQLIB_OBJECT void CCharacterSelect::EnableButtons(bool); +EQLIB_OBJECT void CCharacterSelect::EnableEqMovementCommands(bool); +EQLIB_OBJECT void CCharacterSelect::Init(void); +EQLIB_OBJECT void CCharacterSelect::RemoveExplorationModePlayers(void); +EQLIB_OBJECT void CCharacterSelect::SetLocationByClass(class EQPlayer *,bool,int); +EQLIB_OBJECT void CCharacterSelect::SetRoomLocationByIndex(int,class EQPlayer *); +}; + +class CChatManager +{ +public: +EQLIB_OBJECT CChatManager::~CChatManager(void); +EQLIB_OBJECT CChatManager::CChatManager(void); +EQLIB_OBJECT class CChatWindow * CChatManager::GetActiveChatWindow(void); +EQLIB_OBJECT class CChatWindow * CChatManager::GetChannelMap(int); +EQLIB_OBJECT class CXStr CChatManager::GetAllVisibleText(class CXStr); +EQLIB_OBJECT int CChatManager::GetChannelFromColor(int); +EQLIB_OBJECT int CChatManager::InitContextMenu(class CChatWindow *); +EQLIB_OBJECT unsigned long CChatManager::GetRGBAFromIndex(int); +EQLIB_OBJECT void CChatManager::Activate(void); +EQLIB_OBJECT void CChatManager::AddText(class CXStr,int); +EQLIB_OBJECT void CChatManager::ClearChannelMap(int); +EQLIB_OBJECT void CChatManager::ClearChannelMaps(class CChatWindow *); +EQLIB_OBJECT void CChatManager::CreateChatWindow(char *,char *,int,int,int,char *,int); +EQLIB_OBJECT void CChatManager::CreateChatWindow(void); +EQLIB_OBJECT void CChatManager::Deactivate(void); +EQLIB_OBJECT void CChatManager::FreeChatWindow(class CChatWindow *); +EQLIB_OBJECT void CChatManager::LoadChatInis(void); +EQLIB_OBJECT void CChatManager::Process(void); +EQLIB_OBJECT void CChatManager::SetActiveChatWindow(class CChatWindow *); +EQLIB_OBJECT void CChatManager::SetChannelMap(int,class CChatWindow *); +EQLIB_OBJECT void CChatManager::SetLockedActiveChatWindow(class CChatWindow *); +EQLIB_OBJECT void CChatManager::UpdateContextMenus(class CChatWindow *); +EQLIB_OBJECT void CChatManager::UpdateTellMenus(class CChatWindow *); +}; + +class CChatWindow : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CChatWindow::CChatWindow(class CXWnd *); +EQLIB_OBJECT class CEditWnd * CChatWindow::GetInputWnd(void); +EQLIB_OBJECT class CStmlWnd * CChatWindow::GetOutputWnd(void); +EQLIB_OBJECT class CXStr CChatWindow::GetInputText(void); +EQLIB_OBJECT void CChatWindow::AddHistory(class CXStr); +EQLIB_OBJECT void CChatWindow::AddOutputText(class CXStr,int); +EQLIB_OBJECT void CChatWindow::Clear(void); +EQLIB_OBJECT void CChatWindow::HistoryBack(void); +EQLIB_OBJECT void CChatWindow::HistoryForward(void); +EQLIB_OBJECT void CChatWindow::PageDown(void); +EQLIB_OBJECT void CChatWindow::PageUp(void); +EQLIB_OBJECT void CChatWindow::SetChatFont(int); +// virtual +EQLIB_OBJECT CChatWindow::~CChatWindow(void); +EQLIB_OBJECT int CChatWindow::Draw(void)const; +EQLIB_OBJECT int CChatWindow::HandleRButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CChatWindow::OnKillFocus(class CXWnd *); +EQLIB_OBJECT int CChatWindow::OnProcessFrame(void); +EQLIB_OBJECT int CChatWindow::OnSetFocus(class CXWnd *); +EQLIB_OBJECT int CChatWindow::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CChatWindow::`scalar deleting destructor'(unsigned int); +EQLIB_OBJECT void CChatWindow::operator delete[](void *); +EQLIB_OBJECT void CChatWindow::Deactivate(void); + +/*0x188*/ struct _EQCHATMGR *ChatManager; +/*0x18c*/ struct _CSIDLWND* InputWnd; +/*0x190*/ struct _CSIDLWND* OutputWnd; +/*0x194*/ DWORD Unknown0x194; +/*0x198*/ DWORD Unknown0x198;// need to update locations.. +/*0x19c*/ BYTE Unknown0x19c; +/*0x19d*/ BYTE Unknown0x19d[0x3f]; +/*0x1dc*/ DWORD Unknown0x1dc; +/*0x1e0*/ DWORD Unknown0x1e0; +/*0x1e4*/ struct _CXSTR *CommandHistory[0x28]; // ->0x198 +/*0x284*/ DWORD Unknown0x284; // CChatWindow::HistoryBack/forward .. maybe total or current history lines +/*0x288*/ DWORD Unknown0x288; // CChatWindow::HistoryBack/forward .. maybe total or current history lines +/*0x28c*/ DWORD FontSize; // +/*0x290*/ DWORD Unknown0x290; + +//EQLIB_OBJECT void *CChatWindow::operator new(size_t stAllocateBlock) {return malloc(sizeof(EQCHATWINDOW));} // 11-15-2003 lax +}; + +class CCheckBoxWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CCheckBoxWnd::CCheckBoxWnd(class CXWnd *,unsigned __int32,class CXRect,class CXPoint,class CXSize,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *); +EQLIB_OBJECT void CCheckBoxWnd::SetRadioLook(void); +// virtual +EQLIB_OBJECT CCheckBoxWnd::~CCheckBoxWnd(void); +EQLIB_OBJECT int CCheckBoxWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CCheckBoxWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CCheckBoxWnd::HandleMouseMove(class CXPoint,unsigned __int32); +//EQLIB_OBJECT void * CCheckBoxWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CCheckBoxWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CCheckBoxWnd::SetRadioGroup(class CRadioGroup *); +// protected +EQLIB_OBJECT static bool CCheckBoxWnd::sm_bAnimsInitialized; +EQLIB_OBJECT static class CButtonDrawTemplate CCheckBoxWnd::sm_bdtCheck; +EQLIB_OBJECT static class CButtonDrawTemplate CCheckBoxWnd::sm_bdtRadio; +}; + +class CClickStickInfo +{ +public: +EQLIB_OBJECT CClickStickInfo::CClickStickInfo(void); +// virtual +EQLIB_OBJECT CClickStickInfo::~CClickStickInfo(void); +//EQLIB_OBJECT void * CClickStickInfo::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CClickStickInfo::`vector deleting destructor'(unsigned int); +}; + +class CColorPickerWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CColorPickerWnd::CColorPickerWnd(class CXWnd *); +EQLIB_OBJECT void CColorPickerWnd::Activate(class CXWnd *,unsigned long); +EQLIB_OBJECT void CColorPickerWnd::CheckMaxEditWnd(void); +EQLIB_OBJECT void CColorPickerWnd::SetCurrentColor(unsigned long); +EQLIB_OBJECT void CColorPickerWnd::SetTemplateColor(int,unsigned long); +EQLIB_OBJECT void CColorPickerWnd::UpdateCurrentColor(void); +EQLIB_OBJECT void CColorPickerWnd::UpdateEditWndFromSlider(class CSliderWnd *,class CEditWnd *,int *); +EQLIB_OBJECT void CColorPickerWnd::UpdateSliderFromEditWnd(class CSliderWnd *,class CEditWnd *,int *); +// virtual +EQLIB_OBJECT CColorPickerWnd::~CColorPickerWnd(void); +EQLIB_OBJECT int CColorPickerWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CColorPickerWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CColorPickerWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CColorPickerWnd::Deactivate(void); +// private +EQLIB_OBJECT void CColorPickerWnd::Init(void); +}; + +class CComboboxTemplate +{ +public: +EQLIB_OBJECT CComboboxTemplate::CComboboxTemplate(class CParamCombobox *); +// virtual +EQLIB_OBJECT CComboboxTemplate::~CComboboxTemplate(void); +//EQLIB_OBJECT void * CComboboxTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CComboboxTemplate::`vector deleting destructor'(unsigned int); +}; + +class CComboWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CComboWnd::CComboWnd(class CXWnd *,unsigned __int32,class CXRect,int,class CButtonDrawTemplate,class CListWnd *); +EQLIB_OBJECT class CXRect CComboWnd::GetButtonRect(void)const; +EQLIB_OBJECT class CXRect CComboWnd::GetListRect(void)const; +EQLIB_OBJECT class CXRect CComboWnd::GetTextRect(void)const; +EQLIB_OBJECT class CXStr CComboWnd::GetCurChoiceText(void)const; +EQLIB_OBJECT int CComboWnd::GetCurChoice(void)const; +EQLIB_OBJECT int CComboWnd::GetItemCount(void); +EQLIB_OBJECT void CComboWnd::DeleteAll(void); +EQLIB_OBJECT void CComboWnd::InsertChoice(class CXStr *,unsigned long); +EQLIB_OBJECT void CComboWnd::InsertChoice(char *); +EQLIB_OBJECT void CComboWnd::SetChoice(int); +EQLIB_OBJECT void CComboWnd::SetColors(unsigned long,unsigned long,unsigned long); +// virtual +EQLIB_OBJECT CComboWnd::~CComboWnd(void); +EQLIB_OBJECT class CXSize CComboWnd::GetMinSize(void)const; +EQLIB_OBJECT int CComboWnd::Draw(void)const; +EQLIB_OBJECT int CComboWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CComboWnd::HitTest(class CXPoint,int *)const; +EQLIB_OBJECT int CComboWnd::OnMove(class CXRect); +EQLIB_OBJECT int CComboWnd::OnResize(int,int); +EQLIB_OBJECT int CComboWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CComboWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CComboWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CComboWnd::SetDrawTemplate(class CXWndDrawTemplate *); +}; + +class CCompassWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CCompassWnd::CCompassWnd(class CXWnd *); +EQLIB_OBJECT void CCompassWnd::Activate(void); +EQLIB_OBJECT void CCompassWnd::SenseHeading(void); +// virtual +EQLIB_OBJECT CCompassWnd::~CCompassWnd(void); +EQLIB_OBJECT int CCompassWnd::Draw(void)const; +EQLIB_OBJECT int CCompassWnd::OnProcessFrame(void); +//EQLIB_OBJECT void * CCompassWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CCompassWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CCompassWnd::Deactivate(void); +// protected +EQLIB_OBJECT static double const CCompassWnd::HI_SPEED; +EQLIB_OBJECT static double const CCompassWnd::LO_SPEED; +EQLIB_OBJECT void CCompassWnd::PickNewTarget(void); +EQLIB_OBJECT void CCompassWnd::SetSpeed(void); +// private +EQLIB_OBJECT void CCompassWnd::Init(void); +}; + +class CConfirmationDialog : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CConfirmationDialog::CConfirmationDialog(class CXWnd *); +EQLIB_OBJECT void CConfirmationDialog::Activate(int,unsigned int,char const *,int,int,int,int); +EQLIB_OBJECT void CConfirmationDialog::HandleButtonNoPressed(void); +EQLIB_OBJECT void CConfirmationDialog::HandleButtonOkPressed(void); +EQLIB_OBJECT void CConfirmationDialog::HandleButtonYesPressed(void); +EQLIB_OBJECT void CConfirmationDialog::ProcessNo(int); +EQLIB_OBJECT void CConfirmationDialog::ProcessYes(void); +EQLIB_OBJECT void CConfirmationDialog::SetNameApprovalData(char *,char *,int,int,char *); +// virtual +EQLIB_OBJECT CConfirmationDialog::~CConfirmationDialog(void); +EQLIB_OBJECT int CConfirmationDialog::Draw(void)const; +EQLIB_OBJECT int CConfirmationDialog::OnProcessFrame(void); +EQLIB_OBJECT int CConfirmationDialog::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CConfirmationDialog::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CConfirmationDialog::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CConfirmationDialog::Deactivate(void); +// private +EQLIB_OBJECT void CConfirmationDialog::ExpireCurrentDialog(void); +EQLIB_OBJECT void CConfirmationDialog::Init(void); +EQLIB_OBJECT void CConfirmationDialog::ResetFocusOnClose(void); +// Data members +/*0x15c*/ struct _CXWND *OutputText; +/*0x160*/ struct _CXWND *pYesButton; +/*0x164*/ struct _CXWND *pNoButton; +/*0x168*/ DWORD Unknown0x168; +/*0x16c*/ struct _CXWND *pOKButton; +/*0x170*/ BYTE Unknown0x170[0x18]; +/*0x188*/ +}; + +class CContainerMgr +{ +public: +EQLIB_OBJECT CContainerMgr::CContainerMgr(void); +EQLIB_OBJECT bool CContainerMgr::CloseAllContainers(void); +EQLIB_OBJECT class EQ_Item * CContainerMgr::GetWorldContainerItem(int); +EQLIB_OBJECT void CContainerMgr::ClearWorldContainerItems(void); +EQLIB_OBJECT void CContainerMgr::CloseContainer(class EQ_Container *,bool); +EQLIB_OBJECT void CContainerMgr::CloseEQContainer(class EQ_Container *); +EQLIB_OBJECT void CContainerMgr::OpenContainer(class EQ_Container *,int); +EQLIB_OBJECT void CContainerMgr::OpenWorldContainer(class EQ_Container *,unsigned long); +EQLIB_OBJECT void CContainerMgr::Process(void); +EQLIB_OBJECT void CContainerMgr::SetWorldContainerItem(class EQ_Item *,int); +// virtual +EQLIB_OBJECT CContainerMgr::~CContainerMgr(void); +//EQLIB_OBJECT void * CContainerMgr::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CContainerMgr::`vector deleting destructor'(unsigned int); +// private +EQLIB_OBJECT class CContainerWnd * CContainerMgr::GetFreeContainerWnd(void); +}; + +class CContainerWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CContainerWnd::CContainerWnd(class CXWnd *); +EQLIB_OBJECT void CContainerWnd::Activate(void); +EQLIB_OBJECT void CContainerWnd::CheckCloseable(void); +EQLIB_OBJECT void CContainerWnd::SetContainer(class EQ_Container *,int); +// virtual +EQLIB_OBJECT CContainerWnd::~CContainerWnd(void); +EQLIB_OBJECT int CContainerWnd::OnProcessFrame(void); +EQLIB_OBJECT int CContainerWnd::PostDraw(void)const; +EQLIB_OBJECT int CContainerWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CContainerWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CContainerWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CContainerWnd::Deactivate(void); +// private +EQLIB_OBJECT bool CContainerWnd::ContainsNoDrop(void); +EQLIB_OBJECT void CContainerWnd::HandleCombine(void); +EQLIB_OBJECT void CContainerWnd::Init(void); +}; + +class CContextMenu +{ +public: +EQLIB_OBJECT CContextMenu::CContextMenu(class CXWnd *,unsigned __int32,class CXRect); +EQLIB_OBJECT int CContextMenu::AddMenuItem(class CXStr,unsigned int,bool,unsigned long); +EQLIB_OBJECT int CContextMenu::AddSeparator(void); +EQLIB_OBJECT void CContextMenu::Activate(class CXPoint,int,int); +EQLIB_OBJECT void CContextMenu::CheckMenuItem(int,bool,bool); +EQLIB_OBJECT void CContextMenu::EnableMenuItem(int,bool); +EQLIB_OBJECT void CContextMenu::RemoveAllMenuItems(void); +// virtual +EQLIB_OBJECT CContextMenu::~CContextMenu(void); +EQLIB_OBJECT int CContextMenu::OnKillFocus(class CXWnd *); +//EQLIB_OBJECT void * CContextMenu::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CContextMenu::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CContextMenu::Deactivate(void); +}; + +class CContextMenuManager +{ +public: +EQLIB_OBJECT CContextMenuManager::CContextMenuManager(class CXWnd *,unsigned __int32,class CXRect); +EQLIB_OBJECT int CContextMenuManager::AddMenu(class CContextMenu *); +EQLIB_OBJECT int CContextMenuManager::GetDefaultMenuIndex(void); +EQLIB_OBJECT int CContextMenuManager::HandleWindowMenuCommands(class CXWnd *,int); +EQLIB_OBJECT int CContextMenuManager::PopupMenu(int,class CXPoint,class CXWnd *); +EQLIB_OBJECT int CContextMenuManager::RemoveMenu(int,bool); +EQLIB_OBJECT void CContextMenuManager::Flush(void); +EQLIB_OBJECT void CContextMenuManager::WarnDefaultMenu(class CXWnd *); +// virtual +EQLIB_OBJECT CContextMenuManager::~CContextMenuManager(void); +EQLIB_OBJECT int CContextMenuManager::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CContextMenuManager::HandleRButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CContextMenuManager::HandleWheelButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CContextMenuManager::OnProcessFrame(void); +EQLIB_OBJECT int CContextMenuManager::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CContextMenuManager::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CContextMenuManager::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CContextMenuManager::Deactivate(void); +// private +EQLIB_OBJECT void CContextMenuManager::CreateDefaultMenu(void); +}; + +class CControlTemplate +{ +public: +EQLIB_OBJECT CControlTemplate::CControlTemplate(class CParamControl *); +// virtual +EQLIB_OBJECT CControlTemplate::~CControlTemplate(void); +//EQLIB_OBJECT void * CControlTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CControlTemplate::`vector deleting destructor'(unsigned int); +}; + +class CCursorAttachment +{ +public: +EQLIB_OBJECT CCursorAttachment::CCursorAttachment(class CXWnd *); +EQLIB_OBJECT bool CCursorAttachment::IsOkToActivate(int); +EQLIB_OBJECT bool CCursorAttachment::RemoveAttachment(void); +EQLIB_OBJECT void CCursorAttachment::Activate(class CTextureAnimation *,int,int,int); +// virtual +EQLIB_OBJECT CCursorAttachment::~CCursorAttachment(void); +EQLIB_OBJECT int CCursorAttachment::Draw(void)const; +EQLIB_OBJECT int CCursorAttachment::OnProcessFrame(void); +EQLIB_OBJECT int CCursorAttachment::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CCursorAttachment::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CCursorAttachment::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CCursorAttachment::Deactivate(void); +// private +EQLIB_OBJECT void CCursorAttachment::DrawButtonText(void)const; +EQLIB_OBJECT void CCursorAttachment::DrawQuantity(void)const; +EQLIB_OBJECT void CCursorAttachment::Init(void); +}; + +class CDIMap +{ +public: +EQLIB_OBJECT CDIMap::~CDIMap(void); +EQLIB_OBJECT CDIMap::CDIMap(void); +// private +EQLIB_OBJECT static char * CDIMap::mKeymapAltArray; +EQLIB_OBJECT static char * CDIMap::mKeymapArray; +EQLIB_OBJECT static char * CDIMap::mKeymapShiftArray; +EQLIB_OBJECT void CDIMap::LoadMappingFromFile(char *); +}; + +class CDisplay +{ +public: +EQLIB_OBJECT CDisplay::~CDisplay(void); +EQLIB_OBJECT CDisplay::CDisplay(struct HWND__ *); +EQLIB_OBJECT bool CDisplay::GenericSphereColl(float,float,float,float,float,float,float *,float *,float *,unsigned char); +EQLIB_OBJECT bool CDisplay::SlideSwitchLeftRight(class EQSwitch *,float,int,float); +EQLIB_OBJECT bool const CDisplay::GetWorldFilePath(char *,char const *); +EQLIB_OBJECT char * CDisplay::GetIniRaceName(int); +EQLIB_OBJECT class EQPlayer * CDisplay::GetNearestPlayerInView(float,bool); +EQLIB_OBJECT float CDisplay::FindZoneTopZ(float,float,float); +EQLIB_OBJECT float CDisplay::FixHeading(float); +EQLIB_OBJECT float CDisplay::GetFloorHeight(float,float,float); +EQLIB_OBJECT float CDisplay::HeadingDiff(float,float,float *); +EQLIB_OBJECT float CDisplay::PlayerDistance(class EQPlayer *,class EQPlayer *,float); +EQLIB_OBJECT float CDisplay::PlayerSimpleDistance(class EQPlayer *,class EQPlayer *,float); +EQLIB_OBJECT float CDisplay::SetActorBoundingRadius(struct T3D_tagACTORINSTANCE *,float,float); +EQLIB_OBJECT float CDisplay::SimpleDistance(float,float,float,float,float,float,float); +EQLIB_OBJECT float CDisplay::TrueDistance(float,float,float,float,float,float,float); +EQLIB_OBJECT int CDisplay::GetItemType(int); +EQLIB_OBJECT int CDisplay::GetNewPCIniFlag(int,int); +EQLIB_OBJECT int CDisplay::GetSkyTime(int *,int *); +EQLIB_OBJECT int CDisplay::is_3dON(void); +EQLIB_OBJECT int CDisplay::is_ParticleSystemON(void); +EQLIB_OBJECT int CDisplay::MoveMissile(class EQMissile *); +EQLIB_OBJECT int CDisplay::ReplaceCloakMaterials(int,struct T3D_HIERARCHICALSPRITEINSTANCE *,struct T3D_RGB *); +EQLIB_OBJECT int CDisplay::ReplaceMaterial(char *,char *,struct T3D_HIERARCHICALSPRITEINSTANCE *,struct T3D_RGB *,int); +EQLIB_OBJECT int CDisplay::SetBoneSpriteTint(struct T3D_DAG *,struct T3D_RGB *); +EQLIB_OBJECT int CDisplay::ShouldLoadNewPcModel(int,int); +EQLIB_OBJECT int CDisplay::TurnInfravisionEffectOff(void); +EQLIB_OBJECT int CDisplay::TurnInfravisionEffectOn(void); +EQLIB_OBJECT long CDisplay::SetUserRender(int); +EQLIB_OBJECT static char * CDisplay::DefaultUIPath; +EQLIB_OBJECT static char * CDisplay::UIPath; +EQLIB_OBJECT static int __cdecl CDisplay::WriteTextHD2(char const *text,int X,int Y,int color); +EQLIB_OBJECT static unsigned long __cdecl CDisplay::GetUserDefinedColor(int); +EQLIB_OBJECT static void __cdecl CDisplay::SetUserDefinedColor(int,int,int,int); +EQLIB_OBJECT struct T3D_POINTLIGHT * CDisplay::CreateLight(unsigned char,float,float,float,float); +EQLIB_OBJECT struct T3D_tagACTORINSTANCE * CDisplay::CreateActor(char *,float,float,float,float,float,float,bool,bool); +EQLIB_OBJECT struct T3D_tagACTORINSTANCE * CDisplay::GetClickedActor(unsigned long,unsigned long,unsigned long,void *,void *); +EQLIB_OBJECT unsigned char CDisplay::GetEnvironment(float,float,float,int *); +EQLIB_OBJECT unsigned char CDisplay::GetIntensity(unsigned char); +EQLIB_OBJECT unsigned char CDisplay::LoadBMPFile(void); +EQLIB_OBJECT unsigned char CDisplay::LoadNPCFromS3D(char *,char *,char *); +EQLIB_OBJECT unsigned char CDisplay::LoadWorldFile(char *,char *,int,unsigned char); +EQLIB_OBJECT unsigned int CDisplay::IsShield(int)const; +EQLIB_OBJECT void CDisplay::ActivateMainUI(bool); +EQLIB_OBJECT void CDisplay::ChangeVideoMode(void); +EQLIB_OBJECT void CDisplay::CheckForScreenModeToggle(void); +EQLIB_OBJECT void CDisplay::CleanUpDDraw(void); +EQLIB_OBJECT void CDisplay::ClearScreen(void); +EQLIB_OBJECT void CDisplay::CreatePlayerActor(class EQPlayer *); +EQLIB_OBJECT void CDisplay::DDrawUpdateDisplay(void); +EQLIB_OBJECT void CDisplay::DeactivateMainUI(void); +EQLIB_OBJECT void CDisplay::default_cameras(void); +EQLIB_OBJECT void CDisplay::DefineSoloMode(void); +EQLIB_OBJECT void CDisplay::DeleteActor(struct T3D_tagACTORINSTANCE *); +EQLIB_OBJECT void CDisplay::DeleteLight(struct T3D_POINTLIGHT *); +EQLIB_OBJECT void CDisplay::DeleteParticleCloudInstance(struct T3D_PARTICLECLOUDINSTANCE * *); +EQLIB_OBJECT void CDisplay::GetOnActor(struct T3D_tagACTORINSTANCE *,class EQPlayer *); +EQLIB_OBJECT void CDisplay::HandleMaterial(class EQ_PC *,int,class EQ_Item *,class EQ_Item *); +EQLIB_OBJECT void CDisplay::hideGrassObjects(void); +EQLIB_OBJECT void CDisplay::InitCharSelectUI(void); +EQLIB_OBJECT void CDisplay::InitCommonLights(void); +EQLIB_OBJECT void CDisplay::InitDDraw(void); +EQLIB_OBJECT void CDisplay::InitEverQuestLocale(EQLocalizeLanguage); +EQLIB_OBJECT void CDisplay::InitUserDefinedColors(void); +EQLIB_OBJECT void CDisplay::InitWorld(void); +EQLIB_OBJECT void CDisplay::KeyMapUpdated(void); +EQLIB_OBJECT void CDisplay::LightningStrike(void); +EQLIB_OBJECT void CDisplay::loadGrassObjects(char *); +EQLIB_OBJECT void CDisplay::MoveLight(struct T3D_POINTLIGHT *,struct _physicsinfo *); +EQLIB_OBJECT void CDisplay::MoveLocalPlayerToSafeCoords(void); +EQLIB_OBJECT void CDisplay::NewUIProcessEscape(void); +EQLIB_OBJECT void CDisplay::PlaySoundAtLocation(float,float,float,int); +EQLIB_OBJECT void CDisplay::ProcessCloud(void); +EQLIB_OBJECT void CDisplay::ProcessEffects(void); +EQLIB_OBJECT void CDisplay::ProcessParticleEmitter(class EQSwitch *); +EQLIB_OBJECT void CDisplay::ProcessSky(void); +EQLIB_OBJECT void CDisplay::ProcessSwitches(void); +EQLIB_OBJECT void CDisplay::ProcessWeather(void); +EQLIB_OBJECT void CDisplay::RealRender_World(void); +EQLIB_OBJECT void CDisplay::ReloadUI(bool); +EQLIB_OBJECT void CDisplay::Render_MinWorld(void); +EQLIB_OBJECT void CDisplay::Render_World(void); +EQLIB_OBJECT void CDisplay::ResetRenderWindow(void); +EQLIB_OBJECT void CDisplay::SetActorScaleFactor(struct T3D_tagACTORINSTANCE *,float,unsigned char); +EQLIB_OBJECT void CDisplay::SetActorSpriteTint(struct _EQRGB *,struct T3D_tagACTORINSTANCE *); +EQLIB_OBJECT void CDisplay::SetActorUserData(struct T3D_tagACTORINSTANCE *,void *); +EQLIB_OBJECT void CDisplay::SetActorYon(float); +EQLIB_OBJECT void CDisplay::SetAmbientLight(float); +EQLIB_OBJECT void CDisplay::SetCCreateCamera(int); +EQLIB_OBJECT void CDisplay::SetDayPeriod(unsigned char); +EQLIB_OBJECT void CDisplay::SetFog(bool,float,float,unsigned char,unsigned char,unsigned char); +EQLIB_OBJECT void CDisplay::SetGammaCorrection(float); +EQLIB_OBJECT void CDisplay::SetGenericEnvironment(void); +EQLIB_OBJECT void CDisplay::SetPCloudDensity(int); +EQLIB_OBJECT void CDisplay::SetSkyBackground(void); +EQLIB_OBJECT void CDisplay::SetSkyLayer(int); +EQLIB_OBJECT void CDisplay::SetSpecialEnvironment(enum EnvironmentType); +EQLIB_OBJECT void CDisplay::SetSunLight(void); +EQLIB_OBJECT void CDisplay::SetupEmitterEnvironment(void); +EQLIB_OBJECT void CDisplay::SetupEQPlayers(void); +EQLIB_OBJECT void CDisplay::SetViewActor(struct T3D_tagACTORINSTANCE *); +EQLIB_OBJECT void CDisplay::SetViewActorByName(char *); +EQLIB_OBJECT void CDisplay::SetViewAngle(int); +EQLIB_OBJECT void CDisplay::SetYon(float); +EQLIB_OBJECT void CDisplay::ShowDisplay(void); +EQLIB_OBJECT void CDisplay::SpurtBloodOnDag(struct T3D_DAG *); +EQLIB_OBJECT void CDisplay::StartWeather(int,unsigned char); +EQLIB_OBJECT void CDisplay::StartWorldDisplay(EQZoneIndex); +EQLIB_OBJECT void CDisplay::StartWorldDisplay_Bailout(char const *); +EQLIB_OBJECT void CDisplay::StopWeather(int,unsigned char); +EQLIB_OBJECT void CDisplay::StopWorldDisplay(void); +EQLIB_OBJECT void CDisplay::SwitchToDefaultCameraMode(void); +EQLIB_OBJECT void CDisplay::ToggleCharacterNameSprites(bool); +EQLIB_OBJECT void CDisplay::ToggleNpcNameSprites(bool); +EQLIB_OBJECT void CDisplay::ToggleView(void); +EQLIB_OBJECT void CDisplay::UpdateCameraAfterModeSwitch(void); +EQLIB_OBJECT void CDisplay::updateGrassObjects(void); +EQLIB_OBJECT void CDisplay::UpdateMobileEmitterLocations(void); +EQLIB_OBJECT void CDisplay::FreeAllItemLists(void); +// private +EQLIB_OBJECT struct T3D_HIERARCHICALSPRITEINSTANCE * CDisplay::dupActorHierarchicalSprite(struct T3D_tagACTORINSTANCE *); +EQLIB_OBJECT void CDisplay::CleanCharSelectUI(void); +EQLIB_OBJECT void CDisplay::CleanGameUI(void); +EQLIB_OBJECT void CDisplay::CleanUpNewUI(void); +EQLIB_OBJECT void CDisplay::InitGameUI(void); +EQLIB_OBJECT void CDisplay::InitNewUI(void); +}; + +class CEditBaseWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT void CEditBaseWnd::SetMaxChars(int); +EQLIB_OBJECT void CEditBaseWnd::SetSel(int,int); +// virtual +EQLIB_OBJECT CEditBaseWnd::~CEditBaseWnd(void); +EQLIB_OBJECT int CEditBaseWnd::OnKillFocus(class CXWnd *); +//EQLIB_OBJECT void * CEditBaseWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CEditBaseWnd::`vector deleting destructor'(unsigned int); +}; + +class CEditboxTemplate +{ +public: +EQLIB_OBJECT CEditboxTemplate::CEditboxTemplate(class CParamEditbox *); +// virtual +EQLIB_OBJECT CEditboxTemplate::~CEditboxTemplate(void); +//EQLIB_OBJECT void * CEditboxTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CEditboxTemplate::`vector deleting destructor'(unsigned int); +}; + +class CEditLabelWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CEditLabelWnd::CEditLabelWnd(class CXWnd *); +EQLIB_OBJECT class CXStr CEditLabelWnd::GetLabelText(void); +EQLIB_OBJECT void CEditLabelWnd::Activate(class CXWnd *,char *,int,unsigned long); +// virtual +EQLIB_OBJECT CEditLabelWnd::~CEditLabelWnd(void); +EQLIB_OBJECT int CEditLabelWnd::OnProcessFrame(void); +EQLIB_OBJECT int CEditLabelWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CEditLabelWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CEditLabelWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CEditLabelWnd::Deactivate(void); +}; + +class CEditWnd : public CEditBaseWnd +{ +public: +EQLIB_OBJECT CEditWnd::CEditWnd(class CXWnd *,unsigned __int32,class CXRect,unsigned __int32); +EQLIB_OBJECT class CXPoint CEditWnd::GetCharIndexPt(int)const; +EQLIB_OBJECT class CXPoint CEditWnd::GetSelEndPt(void)const; +EQLIB_OBJECT class CXPoint CEditWnd::GetSelStartPt(void)const; +EQLIB_OBJECT class CXStr CEditWnd::GetSTMLSafeText(void); +EQLIB_OBJECT int CEditWnd::ConvertIndexPrintableToTagged(int); +EQLIB_OBJECT int CEditWnd::ConvertIndexTaggedToPrintable(int); +EQLIB_OBJECT int CEditWnd::GetLineForPrintableChar(int)const; +EQLIB_OBJECT int CEditWnd::GetLineLength(int)const; +EQLIB_OBJECT int CEditWnd::SelectableCharFromPoint(class CXPoint)const; +EQLIB_OBJECT void CEditWnd::AddItemTag(int,char *,int); +EQLIB_OBJECT void CEditWnd::CalculateScrollRange(void); +EQLIB_OBJECT void CEditWnd::EnsureCaretVisible(void); +EQLIB_OBJECT void CEditWnd::ReplaceSelection(char,bool); +EQLIB_OBJECT void CEditWnd::ReplaceSelection(class CXStr,bool); +EQLIB_OBJECT void CEditWnd::SetEditable(bool); +// virtual +EQLIB_OBJECT CEditWnd::~CEditWnd(void); +EQLIB_OBJECT class CXPoint CEditWnd::GetCaretPt(void)const; +EQLIB_OBJECT class CXPoint CEditWnd::PointFromPrintableChar(int)const; +EQLIB_OBJECT class CXStr CEditWnd::GetDisplayString(void)const; +EQLIB_OBJECT class CXStr CEditWnd::GetWindowTextA(void)const; +EQLIB_OBJECT int CEditWnd::Draw(void)const; +EQLIB_OBJECT int CEditWnd::DrawCaret(void)const; +EQLIB_OBJECT int CEditWnd::DrawMultiline(void)const; +EQLIB_OBJECT int CEditWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int CEditWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CEditWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CEditWnd::HandleMouseMove(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CEditWnd::OnKillFocus(class CXWnd *); +EQLIB_OBJECT int CEditWnd::OnMove(class CXRect); +EQLIB_OBJECT int CEditWnd::OnResize(int,int); +EQLIB_OBJECT int CEditWnd::OnSetFocus(class CXWnd *); +EQLIB_OBJECT int CEditWnd::ResetWnd(void); +//EQLIB_OBJECT void * CEditWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CEditWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CEditWnd::SetWindowTextA(class CXStr); +// protected +EQLIB_OBJECT static class CDIMap CEditWnd::m_mapKeys; +EQLIB_OBJECT virtual int CEditWnd::GetHorzOffset(void)const; +EQLIB_OBJECT void CEditWnd::FillIndexArray(class CXStr)const; +EQLIB_OBJECT void CEditWnd::FilterInputStr(class CXStr &); +EQLIB_OBJECT void CEditWnd::ProcessText(void); +}; + +class CEQSuiteTextureLoader +{ +public: +EQLIB_OBJECT CEQSuiteTextureLoader::~CEQSuiteTextureLoader(void); +EQLIB_OBJECT CEQSuiteTextureLoader::CEQSuiteTextureLoader(void); +EQLIB_OBJECT struct T3D_tagBMINFO * CEQSuiteTextureLoader::GetTexture(class CUITextureInfo const &); +EQLIB_OBJECT unsigned int CEQSuiteTextureLoader::CreateTexture(class CUITextureInfo const &); +EQLIB_OBJECT void CEQSuiteTextureLoader::UnloadAllTextures(void); +}; + +class CEverQuest +{ +public: +EQLIB_OBJECT CEverQuest::~CEverQuest(void); +EQLIB_OBJECT CEverQuest::CEverQuest(struct HWND__ *); +EQLIB_OBJECT bool CEverQuest::IsInTypingMode(void); +EQLIB_OBJECT bool CEverQuest::IsOkToTransact(void); +EQLIB_OBJECT bool CEverQuest::ReadClientINIBool(char *,char *,bool); +EQLIB_OBJECT bool CEverQuest::ReadUIINIBool(char *,char *,bool); +EQLIB_OBJECT char * CEverQuest::GetBodyTypeDesc(int); +EQLIB_OBJECT char * CEverQuest::GetClassDesc(int); +EQLIB_OBJECT char * CEverQuest::GetClassThreeLetterCode(int); +EQLIB_OBJECT char * CEverQuest::GetDeityDesc(int); +EQLIB_OBJECT char * CEverQuest::GetInnateDesc(int); +EQLIB_OBJECT char * CEverQuest::GetItemClassDesc(int); +EQLIB_OBJECT char * CEverQuest::GetLangDesc(int); +EQLIB_OBJECT char * CEverQuest::GetRaceDesc(int); +EQLIB_OBJECT char * CEverQuest::GetSingleMessage(unsigned __int32,int,int *,char *); +EQLIB_OBJECT char * CEverQuest::GrabFirstWord(char *,char *); +EQLIB_OBJECT char * CEverQuest::GrabFirstWord2(char *,char *,int); +EQLIB_OBJECT char * CEverQuest::ReadClientINIString(char *,char *,char *,char *,int); +EQLIB_OBJECT char * CEverQuest::ReadUIINIString(char *,char *,char *,char *,int); +EQLIB_OBJECT char * CEverQuest::stripName(char *); +EQLIB_OBJECT char * CEverQuest::StripShipName(char *,char *); +EQLIB_OBJECT char * CEverQuest::trimName(char *); +EQLIB_OBJECT class EQPlayer * CEverQuest::ClickedPlayer(int,int); +EQLIB_OBJECT class EQSwitch * CEverQuest::ClickedSwitch(int,int); +EQLIB_OBJECT enum ZONE_REQ_STATUS CEverQuest::IsZoneAvailable(char *,EQZoneIndex,enum ZONE_REQ_REASON); +EQLIB_OBJECT float CEverQuest::GetMaxLightRadius(void); +EQLIB_OBJECT float CEverQuest::ReadClientINIFloat(char *,char *,float); +EQLIB_OBJECT int CEverQuest::BeingIgnored(char *); +EQLIB_OBJECT int CEverQuest::DoLogin(struct HWND__ *,struct HINSTANCE__ *); +EQLIB_OBJECT int CEverQuest::GetCombatSound(class EQPlayer *,class EQPlayer *); +EQLIB_OBJECT int CEverQuest::GetCurrentLanguage(void); +EQLIB_OBJECT int CEverQuest::HandleItems(void *,int); +EQLIB_OBJECT int CEverQuest::IsFriend(char const *); +EQLIB_OBJECT int CEverQuest::IsValidName(char *); +EQLIB_OBJECT int CEverQuest::LootCorpse(class EQPlayer *,int); +EQLIB_OBJECT int CEverQuest::MoveMoney(int,int,int,int,int,bool); +EQLIB_OBJECT int CEverQuest::msgStartIcon(void *); +EQLIB_OBJECT int CEverQuest::msgStartIeq(void *); +EQLIB_OBJECT int CEverQuest::msgStartInotes(void *); +EQLIB_OBJECT int CEverQuest::ProcessMBox(void); +EQLIB_OBJECT int CEverQuest::ReadClientINIInt(char *,char *,int); +EQLIB_OBJECT int CEverQuest::ReadUIINIInt(char *,char *,int); +EQLIB_OBJECT int CEverQuest::TypingMode(void); +EQLIB_OBJECT unsigned char CEverQuest::HandleWorldMessage(struct connection_t *,unsigned __int32,char *,unsigned __int32); +EQLIB_OBJECT unsigned char CEverQuest::IFoundMyVehicle(void); +EQLIB_OBJECT void __cdecl CEverQuest::DoLoadScreenProgressBar(int,char const *,...); +EQLIB_OBJECT void CEverQuest::ApplyPoison(unsigned long); +EQLIB_OBJECT void CEverQuest::Camp(void); +EQLIB_OBJECT void CEverQuest::CancelSneakHide(void); +EQLIB_OBJECT void CEverQuest::ChatServerConnect(char *,int,char *,char *); +EQLIB_OBJECT void CEverQuest::ChatServerDisconnect(void); +EQLIB_OBJECT void CEverQuest::ChatServerGiveTime(void); +EQLIB_OBJECT void CEverQuest::ChatServerMessage(char *); +EQLIB_OBJECT void CEverQuest::ChatServerNotificationAdd(bool,char *,char *,int); +EQLIB_OBJECT void CEverQuest::ChatServerNotificationFlush(void); +EQLIB_OBJECT void CEverQuest::CleanupBadFiles(void); +EQLIB_OBJECT void CEverQuest::clr_chat_input(void); +EQLIB_OBJECT void CEverQuest::Consider(class EQPlayer *,void *); +EQLIB_OBJECT void CEverQuest::CopyFirstWord(char *,char *); +EQLIB_OBJECT void CEverQuest::CreateDataSubdirectories(void); +EQLIB_OBJECT void CEverQuest::CreateFilenameServerCode(char *); +EQLIB_OBJECT void CEverQuest::CreateIniFilenames(void); +EQLIB_OBJECT void CEverQuest::CreateInitialActors(void); +EQLIB_OBJECT void CEverQuest::DeacSpellScreen(void); +EQLIB_OBJECT void CEverQuest::Disband(void); +EQLIB_OBJECT void CEverQuest::DisplayScreen(char *); +EQLIB_OBJECT void CEverQuest::DoCharacterSelection(void); +EQLIB_OBJECT void CEverQuest::doInspect(class EQPlayer *); +EQLIB_OBJECT void CEverQuest::doInvite(unsigned __int32,char *); +EQLIB_OBJECT void CEverQuest::DoLoadScreen(int); +EQLIB_OBJECT void CEverQuest::doLoot(void); +EQLIB_OBJECT void CEverQuest::DoMainLoop(struct HWND__ *); +EQLIB_OBJECT void CEverQuest::DoNewCharacterCreation(void); +EQLIB_OBJECT void CEverQuest::DoPercentConvert(char *,bool); +EQLIB_OBJECT void CEverQuest::DoSplit(char *); +EQLIB_OBJECT void CEverQuest::DoTellWindow(char *,char *,char *,void *,int,bool); +EQLIB_OBJECT void CEverQuest::doUnInvite(char *); +EQLIB_OBJECT void CEverQuest::DropHeldItemOnGround(int); +EQLIB_OBJECT void CEverQuest::DropHeldMoneyOnGround(int); +EQLIB_OBJECT void CEverQuest::DropItemOrMoneyOnPlayer(class EQPlayer *); +EQLIB_OBJECT void CEverQuest::dsp_chat(char const *); +EQLIB_OBJECT void CEverQuest::dsp_chat(char const *,int,bool,bool); +EQLIB_OBJECT void CEverQuest::dsp_chat(char const *,int,bool); +EQLIB_OBJECT void CEverQuest::Emote(void); +EQLIB_OBJECT void CEverQuest::EnterZone(struct HWND__ *); +EQLIB_OBJECT void CEverQuest::Follow(void); +EQLIB_OBJECT void CEverQuest::FreeSwitches(void); +EQLIB_OBJECT void CEverQuest::GetSndDriver(void); +EQLIB_OBJECT void CEverQuest::GetZoneInfoFromNetwork(char *); +EQLIB_OBJECT void CEverQuest::GuildDelete(void); +EQLIB_OBJECT void CEverQuest::GuildInvite(char *,char *); +EQLIB_OBJECT void CEverQuest::GuildLeader(char *); +EQLIB_OBJECT void CEverQuest::GuildPeace(char *); +EQLIB_OBJECT void CEverQuest::GuildRemove(char *); +EQLIB_OBJECT void CEverQuest::GuildSay(char *); +EQLIB_OBJECT void CEverQuest::GuildStatus(char *); +EQLIB_OBJECT void CEverQuest::GuildWar(char *,int); +EQLIB_OBJECT void CEverQuest::InitCommands(void); +EQLIB_OBJECT void CEverQuest::initCustom(void); +EQLIB_OBJECT void CEverQuest::InterpretCmd(class EQPlayer *,char *); +EQLIB_OBJECT void CEverQuest::Invite(int); +EQLIB_OBJECT void CEverQuest::InviteOk(char *); +EQLIB_OBJECT void CEverQuest::IssueLfgGroupQuery(struct LfgGroupQuery *); +EQLIB_OBJECT void CEverQuest::IssueLfgPlayerQuery(struct LfgPlayerQuery *); +EQLIB_OBJECT void CEverQuest::IssuePetCommand(enum PetCommandType,int); +EQLIB_OBJECT void CEverQuest::Kill(char *,char *); +EQLIB_OBJECT void CEverQuest::LeaveBankMode(bool); +EQLIB_OBJECT void CEverQuest::LeaveGuildMaster(void); +EQLIB_OBJECT void CEverQuest::LeftClickedOnPlayer(class EQPlayer *); +EQLIB_OBJECT void CEverQuest::LMouseDown(int,int); +EQLIB_OBJECT void CEverQuest::LMouseUp(int,int); +EQLIB_OBJECT void CEverQuest::loadCustom(void); +EQLIB_OBJECT void CEverQuest::loadCustomFromINI(char *); +EQLIB_OBJECT void CEverQuest::loadOptions(void); +EQLIB_OBJECT void CEverQuest::loadSoundsGame(void); +EQLIB_OBJECT void CEverQuest::LoadStringTables(void); +EQLIB_OBJECT void CEverQuest::LoadSwitchesNonAvatar(EQZoneIndex); +EQLIB_OBJECT void CEverQuest::LocalDeath(struct _EQPlayerDeath *,unsigned char); +EQLIB_OBJECT void CEverQuest::MouseWheelScrolled(int); +EQLIB_OBJECT void CEverQuest::MoveToZone(int,char*,int,int,float,float,float,int); +EQLIB_OBJECT void CEverQuest::MoveToZone(char *,char *,int,enum ZONE_REQ_REASON); +EQLIB_OBJECT void CEverQuest::MoveToZone(EQZoneIndex,char *,int,enum ZONE_REQ_REASON); +EQLIB_OBJECT void CEverQuest::PrepareLocalPCForRepop(void); +EQLIB_OBJECT void CEverQuest::ProcessControls(void); +EQLIB_OBJECT void CEverQuest::ProcessGame(struct HWND__ *,struct HINSTANCE__ *); +EQLIB_OBJECT void CEverQuest::ProcessLocalPCIni(int); +EQLIB_OBJECT void CEverQuest::procMouse(int); +EQLIB_OBJECT void CEverQuest::RemoveCharacterOptionFile(char *); +EQLIB_OBJECT void CEverQuest::ReportDeath(struct _EQPlayerDeath *); +EQLIB_OBJECT void CEverQuest::ReportSuccessfulHit(struct _EQSuccessfulHit *,unsigned char,int); +EQLIB_OBJECT void CEverQuest::reqChannel(void); +EQLIB_OBJECT void CEverQuest::ResetVisionRGBs(void); +EQLIB_OBJECT void CEverQuest::RightClickedOnPlayer(class EQPlayer *, int); +EQLIB_OBJECT void CEverQuest::RMouseDown(int,int); +EQLIB_OBJECT void CEverQuest::RMouseUp(int,int); +EQLIB_OBJECT void CEverQuest::SaveCamerasToINI(void); +EQLIB_OBJECT void CEverQuest::saveCustom(void); +EQLIB_OBJECT void CEverQuest::saveOptions(void); +EQLIB_OBJECT void CEverQuest::saveOptions2(void); +EQLIB_OBJECT void CEverQuest::SavePC(int,int,unsigned char); +EQLIB_OBJECT void CEverQuest::SavePCForce(int); +EQLIB_OBJECT void CEverQuest::send_auction(void); +EQLIB_OBJECT void CEverQuest::send_broadcast(void); +EQLIB_OBJECT void CEverQuest::send_chat(void); +EQLIB_OBJECT void CEverQuest::send_gsay(void); +EQLIB_OBJECT void CEverQuest::send_ooc(void); +EQLIB_OBJECT void CEverQuest::send_petition(void); +EQLIB_OBJECT void CEverQuest::send_private(void); +EQLIB_OBJECT void CEverQuest::send_shout(void); +EQLIB_OBJECT void CEverQuest::send_social(int,char *,char *); +EQLIB_OBJECT void CEverQuest::send_tell(char *,char *); +EQLIB_OBJECT void CEverQuest::send_update_filters(void); +EQLIB_OBJECT void CEverQuest::SendLightInfo(class EQPlayer *,unsigned char); +EQLIB_OBJECT void CEverQuest::SendNewText(int,char *,char *); +EQLIB_OBJECT void CEverQuest::SetDefaultDamageDescByRace(char *,int,unsigned char); +EQLIB_OBJECT void CEverQuest::SetDefaultGameValues(void); +EQLIB_OBJECT void CEverQuest::SetGameState(int); +EQLIB_OBJECT void CEverQuest::SetLfgGroupStatus(struct LfgGroupStatus *); +EQLIB_OBJECT void CEverQuest::SetLfgPlayerStatus(struct LfgPlayerStatus *); +EQLIB_OBJECT void CEverQuest::SetPlayerAppearanceFromPInfo(class EQPlayer *,int,bool); +EQLIB_OBJECT void CEverQuest::SetTimedFog(int); +EQLIB_OBJECT void CEverQuest::SetupCharSelectCamera(void); +EQLIB_OBJECT void CEverQuest::Sit(void); +EQLIB_OBJECT void CEverQuest::SortSpellLoadouts(void); +EQLIB_OBJECT void CEverQuest::StartCasting(void *); +EQLIB_OBJECT void CEverQuest::StartNetworkGame(struct HWND__ *,struct HINSTANCE__ *,char *); +EQLIB_OBJECT void CEverQuest::Surname(char *); +EQLIB_OBJECT void CEverQuest::ToggleAutoSplit(void); +EQLIB_OBJECT void CEverQuest::UpdateMyAppearance(void); +EQLIB_OBJECT void CEverQuest::UseCharge(unsigned long); +EQLIB_OBJECT void CEverQuest::WhatTimeIsIt(void); +EQLIB_OBJECT void CEverQuest::Who(char *); +EQLIB_OBJECT void CEverQuest::WriteBoolToClientINI(bool,char *,char *); +EQLIB_OBJECT void CEverQuest::WriteBoolToUIINI(bool,char *,char *); +EQLIB_OBJECT void CEverQuest::WriteFloatToClientINI(float,char *,char *); +EQLIB_OBJECT void CEverQuest::WriteIntToClientINI(int,char *,char *); +EQLIB_OBJECT void CEverQuest::WriteIntToUIINI(int,char *,char *); +EQLIB_OBJECT void CEverQuest::WriteStringToClientINI(char *,char *,char *); +EQLIB_OBJECT void CEverQuest::WriteStringToUIINI(char *,char *,char *); +// virtual +EQLIB_OBJECT void CEverQuest::CshOnBuddyStatusChange(char *,int BuddyStatus); +EQLIB_OBJECT void CEverQuest::CshOnChannelListChange(void); +EQLIB_OBJECT void CEverQuest::CshOnMessage(char *,char *,int,char *,bool); +EQLIB_OBJECT void CEverQuest::CshOnPlayerEntering(char *,int,char *); +EQLIB_OBJECT void CEverQuest::CshOnPlayerLeaving(char *,int,char *); +}; + +class CExploreModeWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CExploreModeWnd::CExploreModeWnd(class CXWnd *); +EQLIB_OBJECT void CExploreModeWnd::Activate(void); +// virtual +EQLIB_OBJECT CExploreModeWnd::~CExploreModeWnd(void); +//EQLIB_OBJECT void * CExploreModeWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CExploreModeWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CExploreModeWnd::Deactivate(void); +}; + +class CFacePick : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CFacePick::CFacePick(class CXWnd *); +EQLIB_OBJECT void CFacePick::Activate(void); +EQLIB_OBJECT void CFacePick::SetFaceSelectionsFromPlayer(void); +// virtual +EQLIB_OBJECT CFacePick::~CFacePick(void); +EQLIB_OBJECT int CFacePick::Draw(void)const; +EQLIB_OBJECT int CFacePick::OnProcessFrame(void); +EQLIB_OBJECT int CFacePick::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CFacePick::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CFacePick::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CFacePick::Deactivate(void); +// private +EQLIB_OBJECT void CFacePick::CycleThroughFHEB(int,int); +EQLIB_OBJECT void CFacePick::Init(void); +EQLIB_OBJECT void CFacePick::ShowButtonGroup(int,bool); +}; + +class CFeedbackWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CFeedbackWnd::CFeedbackWnd(class CXWnd *); +EQLIB_OBJECT void CFeedbackWnd::Activate(void); +// virtual +EQLIB_OBJECT CFeedbackWnd::~CFeedbackWnd(void); +EQLIB_OBJECT int CFeedbackWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CFeedbackWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CFeedbackWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CFeedbackWnd::Deactivate(void); +}; + +class CFileSelectionWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CFileSelectionWnd::CFileSelectionWnd(class CXWnd *); +EQLIB_OBJECT class CXStr CFileSelectionWnd::GetSelectedFile(int); +EQLIB_OBJECT int CFileSelectionWnd::GetSelectedFileCount(void); +EQLIB_OBJECT void CFileSelectionWnd::Activate(class CXWnd *,int); +EQLIB_OBJECT void CFileSelectionWnd::Callback(bool); +// virtual +EQLIB_OBJECT CFileSelectionWnd::~CFileSelectionWnd(void); +EQLIB_OBJECT int CFileSelectionWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CFileSelectionWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CFileSelectionWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CFileSelectionWnd::Deactivate(void); +// private +EQLIB_OBJECT bool CFileSelectionWnd::DirectoryEmpty(struct IShellFolder *,struct _ITEMIDLIST *); +EQLIB_OBJECT unsigned long CFileSelectionWnd::GetPath(struct IShellFolder *,struct _ITEMIDLIST *,bool,class CXStr &); +EQLIB_OBJECT void CFileSelectionWnd::ClearFileList(void); +EQLIB_OBJECT void CFileSelectionWnd::GoSubdirectory(struct _ITEMIDLIST *); +EQLIB_OBJECT void CFileSelectionWnd::MakeFilePath(void); +EQLIB_OBJECT void CFileSelectionWnd::UpdateButtons(void); +EQLIB_OBJECT void CFileSelectionWnd::UpdateFileList(void); +}; + +class CFriendsWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CFriendsWnd::CFriendsWnd(class CXWnd *); +EQLIB_OBJECT void CFriendsWnd::Activate(void); +EQLIB_OBJECT void CFriendsWnd::UpdateFriendsList(void); +EQLIB_OBJECT void CFriendsWnd::UpdateIgnoreList(void); +// virtual +EQLIB_OBJECT CFriendsWnd::~CFriendsWnd(void); +EQLIB_OBJECT int CFriendsWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CFriendsWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CFriendsWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CFriendsWnd::Deactivate(void); +// protected +EQLIB_OBJECT void CFriendsWnd::AddFriend(void); +EQLIB_OBJECT void CFriendsWnd::AddIgnore(void); +EQLIB_OBJECT void CFriendsWnd::UpdateButtons(void); +}; + +class CGaugeDrawTemplate +{ +public: +EQLIB_OBJECT CGaugeDrawTemplate::~CGaugeDrawTemplate(void); +}; + +class CGaugeTemplate +{ +public: +EQLIB_OBJECT CGaugeTemplate::CGaugeTemplate(class CParamGauge *); +// virtual +EQLIB_OBJECT CGaugeTemplate::~CGaugeTemplate(void); +//EQLIB_OBJECT void * CGaugeTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CGaugeTemplate::`vector deleting destructor'(unsigned int); +}; + +class CGaugeWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CGaugeWnd::CGaugeWnd(class CXWnd *,unsigned __int32,class CXRect,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,int,unsigned long,unsigned long,bool,int,int,int,int); +EQLIB_OBJECT class CXRect CGaugeWnd::CalcFillRect(class CXRect *,int)const; +EQLIB_OBJECT class CXRect CGaugeWnd::CalcLinesFillRect(class CXRect *,int)const; +EQLIB_OBJECT void CGaugeWnd::SpecialToolTip(void); +// virtual +EQLIB_OBJECT CGaugeWnd::~CGaugeWnd(void); +EQLIB_OBJECT int CGaugeWnd::Draw(void)const; +EQLIB_OBJECT int CGaugeWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CGaugeWnd::OnProcessFrame(void); +//EQLIB_OBJECT void * CGaugeWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CGaugeWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CGaugeWnd::SetAttributesFromSidl(class CParamScreenPiece *); +}; + +class CGemsGameWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CGemsGameWnd::CGemsGameWnd(class CXWnd *); +EQLIB_OBJECT void CGemsGameWnd::Activate(void); +EQLIB_OBJECT void CGemsGameWnd::MoveCurBlock(int); +// virtual +EQLIB_OBJECT CGemsGameWnd::~CGemsGameWnd(void); +EQLIB_OBJECT int CGemsGameWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CGemsGameWnd::OnProcessFrame(void); +EQLIB_OBJECT int CGemsGameWnd::PostDraw(void)const; +EQLIB_OBJECT int CGemsGameWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CGemsGameWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CGemsGameWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CGemsGameWnd::Deactivate(void); +// private +EQLIB_OBJECT bool CGemsGameWnd::BadSpecial(int)const; +EQLIB_OBJECT bool CGemsGameWnd::LegalBlockMove(int,int,int,int,bool); +EQLIB_OBJECT int CGemsGameWnd::GetRndBlockImage(void); +EQLIB_OBJECT void CGemsGameWnd::ActivateSpecialMode(int); +EQLIB_OBJECT void CGemsGameWnd::AdvanceToNextWave(void); +EQLIB_OBJECT void CGemsGameWnd::CheckForMatches(int,int); +EQLIB_OBJECT void CGemsGameWnd::CheckForNewHighScore(void); +EQLIB_OBJECT void CGemsGameWnd::ClearBlock(struct _GemsBlock *); +EQLIB_OBJECT void CGemsGameWnd::ClearHighScores(void); +EQLIB_OBJECT void CGemsGameWnd::DoMatchScore(int); +EQLIB_OBJECT void CGemsGameWnd::DrawSpellGem(int,class CXRect,int,bool)const; +EQLIB_OBJECT void CGemsGameWnd::GetNextBlock(void); +EQLIB_OBJECT void CGemsGameWnd::Init(void); +EQLIB_OBJECT void CGemsGameWnd::MakeBlockDrop(int,int,int); +EQLIB_OBJECT void CGemsGameWnd::MarkHigherBlocksFalling(int,int); +EQLIB_OBJECT void CGemsGameWnd::ProcessMatches(int); +EQLIB_OBJECT void CGemsGameWnd::ProcessMoveCurBlock(int); +EQLIB_OBJECT void CGemsGameWnd::ReadHighScores(void); +EQLIB_OBJECT void CGemsGameWnd::Restart(void); +EQLIB_OBJECT void CGemsGameWnd::SetNextUpdate(void); +EQLIB_OBJECT void CGemsGameWnd::SetPause(bool); +EQLIB_OBJECT void CGemsGameWnd::TogglePause(void); +EQLIB_OBJECT void CGemsGameWnd::Update(void); +EQLIB_OBJECT void CGemsGameWnd::UpdateDisplay(void); +EQLIB_OBJECT void CGemsGameWnd::WriteHighScores(void); +}; + +class CGiveWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CGiveWnd::CGiveWnd(class CXWnd *); +EQLIB_OBJECT void CGiveWnd::Activate(void); +EQLIB_OBJECT void CGiveWnd::UpdateGiveDisplay(void); +// virtual +EQLIB_OBJECT CGiveWnd::~CGiveWnd(void); +EQLIB_OBJECT int CGiveWnd::OnProcessFrame(void); +EQLIB_OBJECT int CGiveWnd::PostDraw(void)const; +EQLIB_OBJECT int CGiveWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CGiveWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CGiveWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CGiveWnd::Deactivate(void); +// private +EQLIB_OBJECT void CGiveWnd::Init(void); +}; + +class CGroupSearchFiltersWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CGroupSearchFiltersWnd::CGroupSearchFiltersWnd(class CXWnd *); +EQLIB_OBJECT bool CGroupSearchFiltersWnd::ShouldFilterPlayer(char const *,char const *)const; +EQLIB_OBJECT bool CGroupSearchFiltersWnd::UseExclusiveSearchMode(void)const; +EQLIB_OBJECT void CGroupSearchFiltersWnd::Activate(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleAddDesiredGuild(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleAddExcludedGuild(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleDesiredGuildsSelected(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleExcludeGuildsSelected(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleRemoveAllDesiredGuilds(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleRemoveAllExcludedGuilds(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleRemoveDesiredGuild(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleRemoveExcludedGuild(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleUseFriendsListSelected(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::HandleUseIgnoreListSelected(void); +// virtual +EQLIB_OBJECT CGroupSearchFiltersWnd::~CGroupSearchFiltersWnd(void); +EQLIB_OBJECT int CGroupSearchFiltersWnd::OnProcessFrame(void); +EQLIB_OBJECT int CGroupSearchFiltersWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CGroupSearchFiltersWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CGroupSearchFiltersWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CGroupSearchFiltersWnd::Deactivate(void); +// private +EQLIB_OBJECT bool CGroupSearchFiltersWnd::GuildIsInDesiredGuildsList(char const *)const; +EQLIB_OBJECT bool CGroupSearchFiltersWnd::GuildIsInExcludedGuildsList(char const *)const; +EQLIB_OBJECT bool CGroupSearchFiltersWnd::Load(void); +EQLIB_OBJECT bool CGroupSearchFiltersWnd::NameIsInFriendsList(char const *)const; +EQLIB_OBJECT bool CGroupSearchFiltersWnd::NameIsInIgnoreList(char const *)const; +EQLIB_OBJECT bool CGroupSearchFiltersWnd::UseDesiredGuilds(void)const; +EQLIB_OBJECT bool CGroupSearchFiltersWnd::UseExcludedGuilds(void)const; +EQLIB_OBJECT bool CGroupSearchFiltersWnd::UseFriendsList(void)const; +EQLIB_OBJECT bool CGroupSearchFiltersWnd::UseIgnoreList(void)const; +EQLIB_OBJECT void CGroupSearchFiltersWnd::ClearUiPointers(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::FetchUiPointers(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::InitPieces(void); +EQLIB_OBJECT void CGroupSearchFiltersWnd::Save(void)const; +}; + +class CGroupSearchWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CGroupSearchWnd::CGroupSearchWnd(class CXWnd *); +EQLIB_OBJECT void CGroupSearchWnd::Activate(int); +EQLIB_OBJECT void CGroupSearchWnd::AddGroupResult(struct LfgGroupResult const *); +EQLIB_OBJECT void CGroupSearchWnd::AddPlayerResult(struct LfgPlayerResult const *); +EQLIB_OBJECT void CGroupSearchWnd::HandleDeselectAllClasses(void); +EQLIB_OBJECT void CGroupSearchWnd::HandleDoubleClickedOnPlayer(char const *); +EQLIB_OBJECT void CGroupSearchWnd::HandleGroupInfoPost(void); +EQLIB_OBJECT void CGroupSearchWnd::HandleGroupInfoRemove(void); +EQLIB_OBJECT void CGroupSearchWnd::HandleGroupInfoUpdate(void); +EQLIB_OBJECT void CGroupSearchWnd::HandleGroupMakeupChanged(void); +EQLIB_OBJECT void CGroupSearchWnd::HandleGroupResultColSelected(int); +EQLIB_OBJECT void CGroupSearchWnd::HandleGroupResultRowSelected(int); +EQLIB_OBJECT void CGroupSearchWnd::HandleNumericSort(class SListWndSortInfo *); +EQLIB_OBJECT void CGroupSearchWnd::HandleOpenFiltersWindow(void); +EQLIB_OBJECT void CGroupSearchWnd::HandlePlayerInfoPost(void); +EQLIB_OBJECT void CGroupSearchWnd::HandlePlayerInfoRemove(void); +EQLIB_OBJECT void CGroupSearchWnd::HandlePlayerInfoUpdate(void); +EQLIB_OBJECT void CGroupSearchWnd::HandlePlayerResultColSelected(int); +EQLIB_OBJECT void CGroupSearchWnd::HandleQueryingForGroups(void); +EQLIB_OBJECT void CGroupSearchWnd::HandleQueryingForPlayers(void); +EQLIB_OBJECT void CGroupSearchWnd::HandleSelectAllClasses(void); +EQLIB_OBJECT void CGroupSearchWnd::ResetGroupList(void); +EQLIB_OBJECT void CGroupSearchWnd::ResetPlayerList(void); +EQLIB_OBJECT void CGroupSearchWnd::SendServerLfgOff(void); +EQLIB_OBJECT void CGroupSearchWnd::SendServerLfgOn(void); +EQLIB_OBJECT void CGroupSearchWnd::SendServerLfpOff(void); +EQLIB_OBJECT void CGroupSearchWnd::SendServerLfpOn(void); +// virtual +EQLIB_OBJECT CGroupSearchWnd::~CGroupSearchWnd(void); +EQLIB_OBJECT int CGroupSearchWnd::OnProcessFrame(void); +EQLIB_OBJECT int CGroupSearchWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CGroupSearchWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CGroupSearchWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CGroupSearchWnd::Deactivate(void); +// private +EQLIB_OBJECT bool CGroupSearchWnd::IsLevelRangeValid(int,int)const; +EQLIB_OBJECT bool CGroupSearchWnd::PlayerShouldBeFiltered(struct LfgPlayerData const *)const; +EQLIB_OBJECT int CGroupSearchWnd::CheckIfCurrentLfgInfoIsValid(void)const; +EQLIB_OBJECT int CGroupSearchWnd::CheckIfCurrentLfpInfoIsValid(void)const; +EQLIB_OBJECT int CGroupSearchWnd::GetDesiredClassesFlag(void)const; +EQLIB_OBJECT int CGroupSearchWnd::GetDesiredGroupMaxLevel(void)const; +EQLIB_OBJECT int CGroupSearchWnd::GetDesiredGroupMinLevel(void)const; +EQLIB_OBJECT int CGroupSearchWnd::GetDesiredPlayerMaxLevel(void)const; +EQLIB_OBJECT int CGroupSearchWnd::GetDesiredPlayerMinLevel(void)const; +EQLIB_OBJECT int CGroupSearchWnd::GetEqClassType(int)const; +EQLIB_OBJECT int CGroupSearchWnd::GroupInfoPageOnProcessFrame(void); +EQLIB_OBJECT int CGroupSearchWnd::GroupInfoPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int CGroupSearchWnd::GroupListPageOnProcessFrame(void); +EQLIB_OBJECT int CGroupSearchWnd::GroupListPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int CGroupSearchWnd::PlayerInfoPageOnProcessFrame(void); +EQLIB_OBJECT int CGroupSearchWnd::PlayerInfoPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int CGroupSearchWnd::PlayerListPageOnProcessFrame(void); +EQLIB_OBJECT int CGroupSearchWnd::PlayerListPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int CGroupSearchWnd::RedirectOnProcessFrameTo(class CPageWnd *); +EQLIB_OBJECT int CGroupSearchWnd::RedirectWndNotificationTo(class CPageWnd *,class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT void CGroupSearchWnd::ClearUiPointers(void); +EQLIB_OBJECT void CGroupSearchWnd::FetchUiPointers(void); +EQLIB_OBJECT void CGroupSearchWnd::FilterOutBadWords(char const *,char *)const; +EQLIB_OBJECT void CGroupSearchWnd::GetDefaultLfgLevelRange(class EQ_PC const *,int *,int *)const; +EQLIB_OBJECT void CGroupSearchWnd::GetDefaultLfpLevelRange(class EQ_PC const *,int *,int *)const; +EQLIB_OBJECT void CGroupSearchWnd::InitLfg(void); +EQLIB_OBJECT void CGroupSearchWnd::InitLfp(void); +EQLIB_OBJECT void CGroupSearchWnd::LockQueryButtonAtTime(long); +EQLIB_OBJECT void CGroupSearchWnd::PopUpErrorMessage(int)const; +EQLIB_OBJECT void CGroupSearchWnd::ShowGroupDetails(struct LfgGroupResult const *); +EQLIB_OBJECT void CGroupSearchWnd::UpdateGroupLabel(void); +EQLIB_OBJECT void CGroupSearchWnd::UpdateLfgPostingStatus(void); +EQLIB_OBJECT void CGroupSearchWnd::UpdateLfpPostingStatus(void); +EQLIB_OBJECT void CGroupSearchWnd::UpdatePlayerLabel(void); +EQLIB_OBJECT void CGroupSearchWnd::UpdateRemainingQueryLockedTime(long); +}; + +class CGroupWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CGroupWnd::CGroupWnd(class CXWnd *); +EQLIB_OBJECT void CGroupWnd::Activate(void); +EQLIB_OBJECT void CGroupWnd::CreateLocalMenu(void); +EQLIB_OBJECT void CGroupWnd::KeyMapUpdated(void); +EQLIB_OBJECT void CGroupWnd::SetInvited(bool); +EQLIB_OBJECT void CGroupWnd::UpdateContextMenu(void); +// virtual +EQLIB_OBJECT CGroupWnd::~CGroupWnd(void); +EQLIB_OBJECT int CGroupWnd::Draw(void)const; +EQLIB_OBJECT int CGroupWnd::OnProcessFrame(void); +EQLIB_OBJECT int CGroupWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CGroupWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CGroupWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CGroupWnd::Deactivate(void); +EQLIB_OBJECT void CGroupWnd::LoadIniInfo(void); +EQLIB_OBJECT void CGroupWnd::StoreIniInfo(void); +// protected +EQLIB_OBJECT void CGroupWnd::UpdateButtons(void); +// private +EQLIB_OBJECT void CGroupWnd::Init(void); +}; + +class CGuild +{ +public: +EQLIB_OBJECT CGuild::CGuild(void); +EQLIB_OBJECT bool CGuild::ValidGuildName(int); +EQLIB_OBJECT char * CGuild::GetGuildMotd(void); +EQLIB_OBJECT char * CGuild::GetGuildMotdAuthor(void); +EQLIB_OBJECT char * CGuild::GetGuildName(int); +EQLIB_OBJECT int CGuild::GetGuildIndex(char *); +EQLIB_OBJECT class GuildMember * CGuild::FindMemberByName(char *); +EQLIB_OBJECT void CGuild::DeleteAllMembers(void); +EQLIB_OBJECT void CGuild::DemoteMember(class GuildMember *); +EQLIB_OBJECT void CGuild::HandleGuildMessage(struct connection_t *,unsigned __int32,char *,unsigned __int32); +EQLIB_OBJECT void CGuild::SendPublicCommentChange(char *,char *); +EQLIB_OBJECT void CGuild::SetGuildMotd(struct guildmotdSet *); +// virtual +EQLIB_OBJECT CGuild::~CGuild(void); +//EQLIB_OBJECT void * CGuild::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CGuild::`vector deleting destructor'(unsigned int); +// private +EQLIB_OBJECT void CGuild::AddGuildMember(class GuildMember *); +EQLIB_OBJECT void CGuild::ChangeGuildMemberName(char *); +EQLIB_OBJECT void CGuild::HandleAddGuildMember(char *,int); +EQLIB_OBJECT void CGuild::HandleDeleteGuildResponse(char *); +EQLIB_OBJECT void CGuild::HandleGuildInvite(struct connection_t *,unsigned __int32,char *,unsigned __int32); +EQLIB_OBJECT void CGuild::HandleMemberLevelUpdate(char *); +EQLIB_OBJECT void CGuild::HandleRemoveGuildMember(char *,int); +EQLIB_OBJECT void CGuild::InitializeFromDump(char *); +EQLIB_OBJECT void CGuild::UpdateGuildMemberOnWindow(class GuildMember *); +EQLIB_OBJECT void CGuild::UpdateMemberStatus(char *); +EQLIB_OBJECT void CGuild::UpdatePublicComment(char *); +}; + +class CGuildMgmtWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CGuildMgmtWnd::CGuildMgmtWnd(class CXWnd *); +EQLIB_OBJECT void CGuildMgmtWnd::Activate(void); +EQLIB_OBJECT void CGuildMgmtWnd::AddMember(class GuildMember *); +EQLIB_OBJECT void CGuildMgmtWnd::Clean(void); +EQLIB_OBJECT void CGuildMgmtWnd::DumpToFile(char *); +EQLIB_OBJECT void CGuildMgmtWnd::RemoveMember(class GuildMember *); +EQLIB_OBJECT void CGuildMgmtWnd::RenameMember(char *,char *); +EQLIB_OBJECT void CGuildMgmtWnd::SetMOTD(char *,char *); +EQLIB_OBJECT void CGuildMgmtWnd::SetPlayerCount(int); +EQLIB_OBJECT void CGuildMgmtWnd::SortList(int,bool); +EQLIB_OBJECT void CGuildMgmtWnd::UpdateButtons(void); +EQLIB_OBJECT void CGuildMgmtWnd::UpdateListMember(class GuildMember *,int); +// virtual +EQLIB_OBJECT CGuildMgmtWnd::~CGuildMgmtWnd(void); +EQLIB_OBJECT int CGuildMgmtWnd::OnProcessFrame(void); +EQLIB_OBJECT int CGuildMgmtWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CGuildMgmtWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CGuildMgmtWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CGuildMgmtWnd::Deactivate(void); +// protected +EQLIB_OBJECT char * CGuildMgmtWnd::GetPersonalNote(char *); +EQLIB_OBJECT int CGuildMgmtWnd::FindListMember(class GuildMember *); +EQLIB_OBJECT void CGuildMgmtWnd::CleanAndRefillListWnd(bool); +EQLIB_OBJECT void CGuildMgmtWnd::CreatePersonalNotesFilename(void); +EQLIB_OBJECT void CGuildMgmtWnd::LoadINI(void); +EQLIB_OBJECT void CGuildMgmtWnd::LoadPersonalNotes(void); +EQLIB_OBJECT void CGuildMgmtWnd::SavePersonalNotes(void); +EQLIB_OBJECT void CGuildMgmtWnd::SetPersonalNote(char *,char *); +// private +EQLIB_OBJECT void CGuildMgmtWnd::Init(void); +}; + +class ChannelServerApi +{ +public: +EQLIB_OBJECT ChannelServerApi::~ChannelServerApi(void); +EQLIB_OBJECT ChannelServerApi::ChannelServerApi(char *,int,char *,char *,class ChannelServerHandler *,bool,bool,char *); +EQLIB_OBJECT char * ChannelServerApi::GetChannelName(int); +//EQLIB_OBJECT enum ChannelServerApi::Status ChannelServerApi::GetStatus(void); +EQLIB_OBJECT int ChannelServerApi::GetChannelCount(void); +EQLIB_OBJECT int ChannelServerApi::GetChannelNumber(char *); +EQLIB_OBJECT static char * __cdecl ChannelServerApi::AllocateString(char *); +EQLIB_OBJECT static char * __cdecl ChannelServerApi::Strncpy(char *,char *,int); +EQLIB_OBJECT static int __cdecl ChannelServerApi::GetNextField(char *,int,char * *,char); +EQLIB_OBJECT static void * __cdecl ChannelServerApi::SmartResize(void *,int,int); +EQLIB_OBJECT void ChannelServerApi::GiveTime(void); +EQLIB_OBJECT void ChannelServerApi::SendMessageA(char *); +// virtual +EQLIB_OBJECT void ChannelServerApi::OnRoutePacket(class UdpConnection *,unsigned char const *,int); +// protected +EQLIB_OBJECT void ChannelServerApi::FreeChannelList(void); +//EQLIB_OBJECT void ChannelServerApi::SetBuddyStatus(char *,enum ChannelServerApi::BuddyStatus); +EQLIB_OBJECT void ChannelServerApi::SortBuddyList(void); +}; + +class ChannelServerHandler +{ +public: +// virtual +EQLIB_OBJECT void ChannelServerHandler::CshOnLoginConfirm(bool); +EQLIB_OBJECT void ChannelServerHandler::CshOnPacket(void *,int,char *,int,char *,bool); +}; + +class CHashCXStrInt32 +{ +public: +EQLIB_OBJECT CHashCXStrInt32::~CHashCXStrInt32(void); +EQLIB_OBJECT CHashCXStrInt32::CHashCXStrInt32(void); +EQLIB_OBJECT bool CHashCXStrInt32::Insert(class CXStr const &,int); +EQLIB_OBJECT bool CHashCXStrInt32::LookUp(class CXStr const &,int &)const; +EQLIB_OBJECT void CHashCXStrInt32::Reset(void); +// private +EQLIB_OBJECT int CHashCXStrInt32::KeyToBin(class CXStr const &)const; +}; + +class CHelpWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CHelpWnd::CHelpWnd(class CXWnd *); +EQLIB_OBJECT void CHelpWnd::Activate(void); +EQLIB_OBJECT void CHelpWnd::SetFile(char *); +// virtual +EQLIB_OBJECT CHelpWnd::~CHelpWnd(void); +EQLIB_OBJECT int CHelpWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int CHelpWnd::OnProcessFrame(void); +EQLIB_OBJECT int CHelpWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CHelpWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CHelpWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CHelpWnd::Deactivate(void); +// private +EQLIB_OBJECT void CHelpWnd::Init(void); +}; + +class CHotButtonWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CHotButtonWnd::CHotButtonWnd(class CXWnd *); +EQLIB_OBJECT void CHotButtonWnd::Activate(void); +EQLIB_OBJECT void CHotButtonWnd::DoHotButton(int Button,int AllowAutoRightClick); +EQLIB_OBJECT void CHotButtonWnd::DoHotButtonRightClick(int); +EQLIB_OBJECT void CHotButtonWnd::UpdatePage(void); +// virtual +EQLIB_OBJECT CHotButtonWnd::~CHotButtonWnd(void); +EQLIB_OBJECT int CHotButtonWnd::Draw(void)const; +EQLIB_OBJECT int CHotButtonWnd::OnProcessFrame(void); +EQLIB_OBJECT int CHotButtonWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CHotButtonWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CHotButtonWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CHotButtonWnd::Deactivate(void); +// private +EQLIB_OBJECT void CHotButtonWnd::Init(void); +}; + +class CIMECandidateList +{ +public: +EQLIB_OBJECT CIMECandidateList::~CIMECandidateList(void); +EQLIB_OBJECT CIMECandidateList::CIMECandidateList(class CIMEManager *); +EQLIB_OBJECT int CIMECandidateList::show(class CIMEComposition const *)const; +// private +EQLIB_OBJECT int CIMECandidateList::repositionImeCandidateList(int,int)const; +}; + +class CIMEComposition +{ +public: +EQLIB_OBJECT CIMEComposition::~CIMEComposition(void); +EQLIB_OBJECT CIMEComposition::CIMEComposition(class CIMEManager *); +EQLIB_OBJECT class CXPoint CIMEComposition::getCursorPoint(void)const; +EQLIB_OBJECT class CXRect CIMEComposition::getCompositionArea(void)const; +EQLIB_OBJECT int CIMEComposition::addInputChar(unsigned short); +EQLIB_OBJECT int CIMEComposition::addInputString(class CXStr const &,int); +EQLIB_OBJECT int CIMEComposition::addInputString(unsigned short *,int); +EQLIB_OBJECT int CIMEComposition::addStringFromIme(long); +EQLIB_OBJECT void CIMEComposition::directToEditWnd(class CEditWnd *); +// private +EQLIB_OBJECT int CIMEComposition::addCompositionHighlights(void); +EQLIB_OBJECT int CIMEComposition::applyChineseComposingRules(class CXStr *); +EQLIB_OBJECT int CIMEComposition::applyJapaneseComposingRules(class CXStr *); +EQLIB_OBJECT int CIMEComposition::applyKoreanComposingRules(class CXStr *); +EQLIB_OBJECT int CIMEComposition::getCompositionInsertIndex(void)const; +EQLIB_OBJECT int CIMEComposition::handleImeComposing(void); +EQLIB_OBJECT int CIMEComposition::handleImeResult(void); +EQLIB_OBJECT int CIMEComposition::repositionImeCompositionWindow(int,int)const; +EQLIB_OBJECT struct CompAttr * CIMEComposition::allocateImeCompositionAttributes(void)const; +EQLIB_OBJECT unsigned short * CIMEComposition::allocateImeCompositionString(long)const; +EQLIB_OBJECT void CIMEComposition::backupCurrentText(void); +EQLIB_OBJECT void CIMEComposition::revertToBackupText(void); +}; + +class CIMEManager +{ +public: +EQLIB_OBJECT CIMEManager::~CIMEManager(void); +EQLIB_OBJECT CIMEManager::CIMEManager(struct HWND__ *); +EQLIB_OBJECT bool CIMEManager::imeIsOff(void)const; +EQLIB_OBJECT bool CIMEManager::imeIsOn(void)const; +EQLIB_OBJECT int CIMEManager::getImeProperties(void)const; +EQLIB_OBJECT int CIMEManager::getInputLanguage(void)const; +EQLIB_OBJECT int CIMEManager::getInputState(void)const; +EQLIB_OBJECT int CIMEManager::handleWndProc(unsigned int,unsigned int,long); +EQLIB_OBJECT int CIMEManager::setInputEditWnd(class CEditWnd *); +EQLIB_OBJECT struct HWND__ * CIMEManager::getWindowHandle(void)const; +EQLIB_OBJECT void CIMEManager::setInputState(int); +EQLIB_OBJECT void CIMEManager::turnImeOff(void); +EQLIB_OBJECT void CIMEManager::turnImeOn(void); +// private +EQLIB_OBJECT int CIMEManager::handleAddChar(unsigned short); +EQLIB_OBJECT int CIMEManager::handleChangeCandidates(void); +EQLIB_OBJECT int CIMEManager::handleCloseCandidates(void); +EQLIB_OBJECT int CIMEManager::handleEndComposition(void); +EQLIB_OBJECT int CIMEManager::handleImeChanged(void); +EQLIB_OBJECT int CIMEManager::handleImeStatusChanged(void); +EQLIB_OBJECT int CIMEManager::handleInputComposition(long); +EQLIB_OBJECT int CIMEManager::handleOpenCandidates(void); +EQLIB_OBJECT int CIMEManager::handleStartComposition(void); +EQLIB_OBJECT int CIMEManager::queryImeLanguage(void)const; +EQLIB_OBJECT int CIMEManager::queryImeProperties(void)const; +EQLIB_OBJECT void CIMEManager::enableIme(bool); +}; + +class CIMEStatusBar +{ +public: +EQLIB_OBJECT CIMEStatusBar::CIMEStatusBar(class CIMEManager *); +EQLIB_OBJECT int CIMEStatusBar::hide(void); +EQLIB_OBJECT int CIMEStatusBar::show(class CIMEComposition const *); +EQLIB_OBJECT int CIMEStatusBar::update(void); +// private +EQLIB_OBJECT int CIMEStatusBar::repositionStatusWindow(void); +EQLIB_OBJECT void CIMEStatusBar::handleChineseSimplifiedStatusChange(unsigned long); +EQLIB_OBJECT void CIMEStatusBar::handleChineseTraditionalStatusChange(unsigned long); +EQLIB_OBJECT void CIMEStatusBar::handleJapaneseStatusChange(unsigned long); +EQLIB_OBJECT void CIMEStatusBar::handleKoreanStatusChange(unsigned long); +}; + +class CInspectWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CInspectWnd::CInspectWnd(class CXWnd *); +EQLIB_OBJECT void CInspectWnd::Activate(struct _inspect *); +EQLIB_OBJECT void CInspectWnd::PlayerBeingDeleted(class EQPlayer *); +// virtual +EQLIB_OBJECT CInspectWnd::~CInspectWnd(void); +EQLIB_OBJECT int CInspectWnd::Draw(void)const; +EQLIB_OBJECT int CInspectWnd::OnProcessFrame(void); +EQLIB_OBJECT int CInspectWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CInspectWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CInspectWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CInspectWnd::Deactivate(void); +// private +EQLIB_OBJECT void CInspectWnd::AcceptInspectText(void); +EQLIB_OBJECT void CInspectWnd::Init(void); +}; + +class CInventoryWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CInventoryWnd::CInventoryWnd(class CXWnd *); +EQLIB_OBJECT void CInventoryWnd::Activate(void); +// virtual +EQLIB_OBJECT CInventoryWnd::~CInventoryWnd(void); +EQLIB_OBJECT int CInventoryWnd::Draw(void)const; +EQLIB_OBJECT int CInventoryWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CInventoryWnd::OnProcessFrame(void); +EQLIB_OBJECT int CInventoryWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CInventoryWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CInventoryWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CInventoryWnd::Deactivate(void); +// private +EQLIB_OBJECT long CInventoryWnd::GetInventoryQtyFromCoinType(int); +EQLIB_OBJECT void CInventoryWnd::ClickedMoneyButton(int,int); +EQLIB_OBJECT void CInventoryWnd::DestroyHeld(void); +EQLIB_OBJECT void CInventoryWnd::Init(void); +EQLIB_OBJECT void CInventoryWnd::UpdateMoneyDisplay(void); +}; + +class CInvSlot +{ +public: +EQLIB_OBJECT CInvSlot::CInvSlot(void); +EQLIB_OBJECT bool CInvSlot::IllegalBigBank(int); +EQLIB_OBJECT void CInvSlot::DoDrinkEatPoison(class EQ_Item *,int); +EQLIB_OBJECT void CInvSlot::HandleLButtonDown(class CXPoint); +EQLIB_OBJECT void CInvSlot::HandleLButtonHeld(class CXPoint); +EQLIB_OBJECT void CInvSlot::HandleLButtonUp(class CXPoint,bool); +EQLIB_OBJECT void CInvSlot::HandleLButtonUpAfterHeld(class CXPoint); +EQLIB_OBJECT void CInvSlot::HandleRButtonDown(class CXPoint); +EQLIB_OBJECT void CInvSlot::HandleRButtonHeld(class CXPoint); +EQLIB_OBJECT void CInvSlot::HandleRButtonUp(class CXPoint *); +EQLIB_OBJECT void CInvSlot::HandleRButtonUpAfterHeld(class CXPoint); +EQLIB_OBJECT void CInvSlot::SetInvSlotWnd(class CInvSlotWnd *); +EQLIB_OBJECT void CInvSlot::SetItem(class EQ_Item *); +EQLIB_OBJECT void CInvSlot::SliderComplete(int); +EQLIB_OBJECT void CInvSlot::GetItemBase(struct _CONTENTS **); +// virtual +EQLIB_OBJECT CInvSlot::~CInvSlot(void); +//EQLIB_OBJECT void * CInvSlot::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CInvSlot::`vector deleting destructor'(unsigned int); +}; + +class CMoveItemData +{ +public: + unsigned short InventoryType; // 0 = regular inventory slots, 1 = bank slots, 2 = shared bank slots + unsigned short Unknown2; // always 0? + unsigned short InvSlot; + unsigned short BagSlot; // 0xFFFF if not in a bag, otherwise the bag slot number (0 through 9, or 0 through 19 if it's a 20-slot bag, etc) + DWORD Unknown8; +}; + +class CInvSlotMgr +{ +public: +EQLIB_OBJECT CInvSlotMgr::CInvSlotMgr(void); +EQLIB_OBJECT class CInvSlot * CInvSlotMgr::CreateInvSlot(class CInvSlotWnd *); +EQLIB_OBJECT class CInvSlot * CInvSlotMgr::FindInvSlot(int,int x=-1); +EQLIB_OBJECT bool CInvSlotMgr::MoveItem(CMoveItemData*,CMoveItemData*,int valueOne,int valueOne2,int valueZero,int valueZero2); +EQLIB_OBJECT void CInvSlotMgr::Process(void); +EQLIB_OBJECT void CInvSlotMgr::SelectSlot(class CInvSlot *); +EQLIB_OBJECT void CInvSlotMgr::UpdateSlots(void); +// virtual +EQLIB_OBJECT CInvSlotMgr::~CInvSlotMgr(void); +//EQLIB_OBJECT void * CInvSlotMgr::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CInvSlotMgr::`vector deleting destructor'(unsigned int); +}; + +class CInvSlotTemplate +{ +public: +EQLIB_OBJECT CInvSlotTemplate::CInvSlotTemplate(class CParamInvSlot *); +// virtual +EQLIB_OBJECT CInvSlotTemplate::~CInvSlotTemplate(void); +//EQLIB_OBJECT void * CInvSlotTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CInvSlotTemplate::`vector deleting destructor'(unsigned int); +}; + +class CInvSlotWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CInvSlotWnd::CInvSlotWnd(class CXWnd *,unsigned __int32,class CXRect,class CTextureAnimation *,int,int,int); +EQLIB_OBJECT void CInvSlotWnd::SetInvSlot(class CInvSlot *); +// virtual +EQLIB_OBJECT CInvSlotWnd::~CInvSlotWnd(void); +EQLIB_OBJECT int CInvSlotWnd::Draw(void)const; +EQLIB_OBJECT int CInvSlotWnd::DrawTooltip(class CXWnd const *)const; +EQLIB_OBJECT int CInvSlotWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CInvSlotWnd::HandleLButtonHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CInvSlotWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CInvSlotWnd::HandleLButtonUpAfterHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CInvSlotWnd::HandleRButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CInvSlotWnd::HandleRButtonHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CInvSlotWnd::HandleRButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CInvSlotWnd::HandleRButtonUpAfterHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CInvSlotWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CInvSlotWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CInvSlotWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CInvSlotWnd::SetAttributesFromSidl(class CParamScreenPiece *); +}; + +class CItemDisplayWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CItemDisplayWnd::CItemDisplayWnd(class CXWnd *); +EQLIB_OBJECT class CXStr CItemDisplayWnd::CreateEquipmentStatusString(class EQ_Item *); +EQLIB_OBJECT void CItemDisplayWnd::SetItem(class EQ_Item *,bool); +EQLIB_OBJECT void CItemDisplayWnd::SetItemText(char *); +EQLIB_OBJECT void CItemDisplayWnd::SetSpell(int SpellID,bool HasSpellDescr,int); +EQLIB_OBJECT void CItemDisplayWnd::UpdateStrings(void); +// virtual +EQLIB_OBJECT CItemDisplayWnd::~CItemDisplayWnd(void); +EQLIB_OBJECT int CItemDisplayWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int CItemDisplayWnd::OnProcessFrame(void); +EQLIB_OBJECT int CItemDisplayWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CItemDisplayWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CItemDisplayWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CItemDisplayWnd::Activate(void); +EQLIB_OBJECT void CItemDisplayWnd::Deactivate(void); +// protected +EQLIB_OBJECT class CXStr CItemDisplayWnd::CreateClassString(class EQ_Equipment *); +EQLIB_OBJECT class CXStr CItemDisplayWnd::CreateMealSizeString(class EQ_Equipment *); +EQLIB_OBJECT class CXStr CItemDisplayWnd::CreateModString(class EQ_Equipment *,int,int,int *); +EQLIB_OBJECT class CXStr CItemDisplayWnd::CreateRaceString(class EQ_Equipment *); +EQLIB_OBJECT void CItemDisplayWnd::GetSizeString(int,char *); +}; + +class CJournalCatWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CJournalCatWnd::CJournalCatWnd(class CXWnd *); +EQLIB_OBJECT void CJournalCatWnd::Activate(void); +EQLIB_OBJECT void CJournalCatWnd::Clean(void); +EQLIB_OBJECT void CJournalCatWnd::UpdateAll(bool); +EQLIB_OBJECT void CJournalCatWnd::UpdateButtons(void); +// virtual +EQLIB_OBJECT CJournalCatWnd::~CJournalCatWnd(void); +EQLIB_OBJECT int CJournalCatWnd::OnProcessFrame(void); +EQLIB_OBJECT int CJournalCatWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CJournalCatWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CJournalCatWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CJournalCatWnd::Deactivate(void); +// protected +EQLIB_OBJECT void CJournalCatWnd::BuildList(void); +EQLIB_OBJECT void CJournalCatWnd::LoadINI(void); +EQLIB_OBJECT void CJournalCatWnd::SelectCategory(int); +EQLIB_OBJECT void CJournalCatWnd::SortList(int,bool); +EQLIB_OBJECT void CJournalCatWnd::StoreINI(void); +EQLIB_OBJECT void CJournalCatWnd::UpdateListWnd(bool); +// private +EQLIB_OBJECT void CJournalCatWnd::Init(void); +}; + +class CJournalNPCWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CJournalNPCWnd::CJournalNPCWnd(class CXWnd *); +EQLIB_OBJECT void CJournalNPCWnd::Activate(void); +EQLIB_OBJECT void CJournalNPCWnd::EnterIntoJournal(char *,float,float,float,char *); +EQLIB_OBJECT void CJournalNPCWnd::LoadJournal(int); +EQLIB_OBJECT void CJournalNPCWnd::SaveJournal(void); +EQLIB_OBJECT void CJournalNPCWnd::UpdateAll(bool); +EQLIB_OBJECT void CJournalNPCWnd::UpdateCategories(void); +// virtual +EQLIB_OBJECT CJournalNPCWnd::~CJournalNPCWnd(void); +EQLIB_OBJECT int CJournalNPCWnd::OnProcessFrame(void); +EQLIB_OBJECT int CJournalNPCWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CJournalNPCWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CJournalNPCWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CJournalNPCWnd::Deactivate(void); +// protected +EQLIB_OBJECT void CJournalNPCWnd::BuildList(void); +EQLIB_OBJECT void CJournalNPCWnd::DoBackups(class CXStr); +EQLIB_OBJECT void CJournalNPCWnd::GetLogState(void); +EQLIB_OBJECT void CJournalNPCWnd::SelectNPCIndex(int); +EQLIB_OBJECT void CJournalNPCWnd::SortList(int,bool); +EQLIB_OBJECT void CJournalNPCWnd::StoreLogState(void); +EQLIB_OBJECT void CJournalNPCWnd::UpdateButtons(void); +EQLIB_OBJECT void CJournalNPCWnd::UpdateListWnd(bool); +// private +EQLIB_OBJECT void CJournalNPCWnd::Init(void); +}; + +class CJournalTextWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CJournalTextWnd::CJournalTextWnd(class CXWnd *); +EQLIB_OBJECT void CJournalTextWnd::Activate(void); +EQLIB_OBJECT void CJournalTextWnd::Clear(void); +EQLIB_OBJECT void CJournalTextWnd::DisplayNPC(class JournalNPC *); +EQLIB_OBJECT void CJournalTextWnd::SetSearch(class CXStr); +EQLIB_OBJECT void CJournalTextWnd::UpdateAll(bool); +EQLIB_OBJECT void CJournalTextWnd::UpdateCategories(void); +// virtual +EQLIB_OBJECT CJournalTextWnd::~CJournalTextWnd(void); +EQLIB_OBJECT int CJournalTextWnd::OnProcessFrame(void); +EQLIB_OBJECT int CJournalTextWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CJournalTextWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CJournalTextWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CJournalTextWnd::Deactivate(void); +// protected +EQLIB_OBJECT void CJournalTextWnd::BuildList(void); +EQLIB_OBJECT void CJournalTextWnd::SelectEntryIndex(int); +EQLIB_OBJECT void CJournalTextWnd::SortList(int,bool); +EQLIB_OBJECT void CJournalTextWnd::UpdateButtons(void); +EQLIB_OBJECT void CJournalTextWnd::UpdateListWnd(bool); +}; + +class CKeyCXStrValueInt32 +{ +public: +EQLIB_OBJECT CKeyCXStrValueInt32::~CKeyCXStrValueInt32(void); +EQLIB_OBJECT CKeyCXStrValueInt32::CKeyCXStrValueInt32(void); +//EQLIB_OBJECT void * CKeyCXStrValueInt32::`vector deleting destructor'(unsigned int); +}; + +class CLabel +{ +public: +EQLIB_OBJECT CLabel::CLabel(class CXWnd *,unsigned __int32,class CXRect,int); +EQLIB_OBJECT void CLabel::SetAlignCenter(bool); +EQLIB_OBJECT void CLabel::SetAlignRight(bool); +EQLIB_OBJECT void CLabel::SetNoWrap(bool); +// virtual +EQLIB_OBJECT CLabel::~CLabel(void); +EQLIB_OBJECT int CLabel::Draw(void)const; +//EQLIB_OBJECT void * CLabel::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CLabel::`vector deleting destructor'(unsigned int); +}; + +class CLabelTemplate +{ +public: +EQLIB_OBJECT CLabelTemplate::CLabelTemplate(class CParamLabel *); +// virtual +EQLIB_OBJECT CLabelTemplate::~CLabelTemplate(void); +//EQLIB_OBJECT void * CLabelTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CLabelTemplate::`vector deleting destructor'(unsigned int); +}; + +class CListboxColumnTemplate +{ +public: +EQLIB_OBJECT CListboxColumnTemplate::~CListboxColumnTemplate(void); +EQLIB_OBJECT CListboxColumnTemplate::CListboxColumnTemplate(class CParamListboxColumn *); +//EQLIB_OBJECT void CListboxColumnTemplate::`default constructor closure'(void); +}; + +class CListboxTemplate +{ +public: +EQLIB_OBJECT CListboxTemplate::CListboxTemplate(class CParamListbox *); +// virtual +EQLIB_OBJECT CListboxTemplate::~CListboxTemplate(void); +//EQLIB_OBJECT void * CListboxTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CListboxTemplate::`vector deleting destructor'(unsigned int); +}; + +class CListWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CListWnd::CListWnd(class CXWnd *,unsigned __int32,class CXRect); +EQLIB_OBJECT bool CListWnd::IsLineEnabled(int)const; +EQLIB_OBJECT class CTextureAnimation const * CListWnd::GetColumnAnimation(int)const; +EQLIB_OBJECT class CTextureAnimation const * CListWnd::GetColumnAnimationMouseOver(int)const; +EQLIB_OBJECT class CTextureAnimation const * CListWnd::GetColumnAnimationSelected(int)const; +EQLIB_OBJECT class CTextureAnimation const * CListWnd::GetItemIcon(int,int)const; +EQLIB_OBJECT class CXRect CListWnd::GetHeaderRect(int)const; +EQLIB_OBJECT class CXRect CListWnd::GetItemRect(int,int)const; +EQLIB_OBJECT class CXRect CListWnd::GetSeparatorRect(int)const; +EQLIB_OBJECT class CXStr CListWnd::GetColumnLabel(int)const; +EQLIB_OBJECT class CXStr *CListWnd::GetItemText(class CXStr *,int,int)const; +EQLIB_OBJECT int CListWnd::AddColumn(class CXStr,class CTextureAnimation *,int,unsigned __int32,unsigned __int32,class CTextureAnimation *,class CTextureAnimation *); +EQLIB_OBJECT int CListWnd::AddColumn(class CXStr,int,unsigned __int32,unsigned __int32); +EQLIB_OBJECT int CListWnd::AddLine(class SListWndLine const *); +EQLIB_OBJECT int CListWnd::AddString(const CXStr &Str, COLORREF Color, uint32_t Data = 0, const CTextureAnimation *pTa = NULL, const char*TooltipStr = NULL); +EQLIB_OBJECT int CListWnd::AddString(const char *Str, COLORREF Color, uint32_t Data, const CTextureAnimation *pTa, const char* TooltipStr = NULL); +EQLIB_OBJECT int CListWnd::GetColumnJustification(int)const; +EQLIB_OBJECT int CListWnd::GetColumnMinWidth(int)const; +EQLIB_OBJECT int CListWnd::GetColumnWidth(int)const; +EQLIB_OBJECT int CListWnd::GetCurCol(void)const; +EQLIB_OBJECT int CListWnd::GetCurSel(void)const; +EQLIB_OBJECT int CListWnd::GetItemAtPoint(class CXPoint)const; +EQLIB_OBJECT int CListWnd::GetItemHeight(int)const; +EQLIB_OBJECT unsigned __int32 CListWnd::GetColumnFlags(int)const; +EQLIB_OBJECT unsigned __int32 CListWnd::GetItemData(int)const; +EQLIB_OBJECT unsigned long CListWnd::GetItemColor(int,int)const; +EQLIB_OBJECT void CListWnd::CalculateFirstVisibleLine(void); +EQLIB_OBJECT void CListWnd::CalculateLineHeights(void); +EQLIB_OBJECT void CListWnd::CalculateVSBRange(void); +EQLIB_OBJECT void CListWnd::ClearAllSel(void); +EQLIB_OBJECT void CListWnd::ClearSel(int); +EQLIB_OBJECT void CListWnd::CloseAndUpdateEditWindow(void); +EQLIB_OBJECT void CListWnd::EnableLine(int,bool); +EQLIB_OBJECT void CListWnd::EnsureVisible(int); +EQLIB_OBJECT void CListWnd::ExtendSel(int); +EQLIB_OBJECT void CListWnd::GetItemAtPoint(class CXPoint,int *,int *)const; +EQLIB_OBJECT void CListWnd::RemoveLine(int); +EQLIB_OBJECT void CListWnd::RemoveString(int); +EQLIB_OBJECT void CListWnd::SetColors(unsigned long,unsigned long,unsigned long); +EQLIB_OBJECT void CListWnd::SetColumnJustification(int,int); +EQLIB_OBJECT void CListWnd::SetColumnLabel(int,class CXStr); +EQLIB_OBJECT void CListWnd::SetColumnWidth(int,int); +EQLIB_OBJECT void CListWnd::SetCurSel(int); +EQLIB_OBJECT void CListWnd::SetItemColor(int,int,unsigned long); +EQLIB_OBJECT void CListWnd::SetItemData(int,unsigned __int32); +EQLIB_OBJECT void CListWnd::SetItemText(int,int,class CXStr *); +EQLIB_OBJECT void CListWnd::ShiftColumnSeparator(int,int); +EQLIB_OBJECT void CListWnd::ToggleSel(int); +// virtual +EQLIB_OBJECT CListWnd::~CListWnd(void); +EQLIB_OBJECT class CTextureAnimation * CListWnd::GetCursorToDisplay(void)const; +EQLIB_OBJECT int CListWnd::Compare(class SListWndLine const &,class SListWndLine const &)const; +EQLIB_OBJECT int CListWnd::Draw(void)const; +EQLIB_OBJECT int CListWnd::DrawBackground(void)const; +EQLIB_OBJECT int CListWnd::DrawColumnSeparators(void)const; +EQLIB_OBJECT int CListWnd::DrawHeader(void)const; +EQLIB_OBJECT int CListWnd::DrawItem(int,int,int)const; +EQLIB_OBJECT int CListWnd::DrawLine(int)const; +EQLIB_OBJECT int CListWnd::DrawSeparator(int)const; +EQLIB_OBJECT int CListWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CListWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CListWnd::HandleLButtonUpAfterHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CListWnd::HandleMouseMove(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CListWnd::HandleRButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CListWnd::OnHeaderClick(class CXPoint); +EQLIB_OBJECT int CListWnd::OnMove(class CXRect); +EQLIB_OBJECT int CListWnd::OnResize(int,int); +EQLIB_OBJECT int CListWnd::OnVScroll(EScrollCode,int); +EQLIB_OBJECT int CListWnd::SetVScrollPos(int); +EQLIB_OBJECT int CListWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CListWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CListWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CListWnd::DeleteAll(void); +EQLIB_OBJECT void CListWnd::Sort(void); +}; + +class CLoadskinWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CLoadskinWnd::CLoadskinWnd(class CXWnd *); +EQLIB_OBJECT void CLoadskinWnd::Activate(void); +EQLIB_OBJECT void CLoadskinWnd::UpdateSkinList(void); +// virtual +EQLIB_OBJECT CLoadskinWnd::~CLoadskinWnd(void); +EQLIB_OBJECT int CLoadskinWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CLoadskinWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CLoadskinWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CLoadskinWnd::Deactivate(void); +}; + +class CLootWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CLootWnd::CLootWnd(class CXWnd *); +EQLIB_OBJECT void CLootWnd::Activate(unsigned char,long,long,long,long); +EQLIB_OBJECT void CLootWnd::AddContainerToLootArray(class EQ_Item *); +EQLIB_OBJECT void CLootWnd::AddEquipmentToLootArray(class EQ_Item *); +EQLIB_OBJECT void CLootWnd::AddNoteToLootArray(class EQ_Item *); +EQLIB_OBJECT void CLootWnd::Deactivate(bool); +EQLIB_OBJECT void CLootWnd::RequestLootSlot(int,bool); +EQLIB_OBJECT void CLootWnd::SlotLooted(int); +// virtual +EQLIB_OBJECT CLootWnd::~CLootWnd(void); +EQLIB_OBJECT int CLootWnd::OnProcessFrame(void); +EQLIB_OBJECT int CLootWnd::PostDraw(void)const; +EQLIB_OBJECT int CLootWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CLootWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CLootWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CLootWnd::Deactivate(void); +// private +EQLIB_OBJECT void CLootWnd::FinalizeLoot(void); +EQLIB_OBJECT void CLootWnd::Init(void); +/*0x208*/ BYTE Unknown0x1b8[0xd1]; // should be 2d9 on 2012/01/11 +/*0x2d9*/ BYTE LootAll; +/*0x2da*/ +}; + +class CMapToolbarWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CMapToolbarWnd::CMapToolbarWnd(class CXWnd *); +EQLIB_OBJECT void CMapToolbarWnd::Activate(void); +EQLIB_OBJECT void CMapToolbarWnd::SetAutoMapButton(bool); +// virtual +EQLIB_OBJECT CMapToolbarWnd::~CMapToolbarWnd(void); +EQLIB_OBJECT int CMapToolbarWnd::OnProcessFrame(void); +EQLIB_OBJECT int CMapToolbarWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CMapToolbarWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CMapToolbarWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CMapToolbarWnd::Deactivate(void); +}; + +class CMapViewWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CMapViewWnd::CMapViewWnd(class CXWnd *); +EQLIB_OBJECT bool CMapViewWnd::IsMappingEnabled(void); +EQLIB_OBJECT void CMapViewWnd::Activate(void); +EQLIB_OBJECT void CMapViewWnd::ActivateAutoMapping(void); +EQLIB_OBJECT void CMapViewWnd::DeactivateAutoMapping(void); +//EQLIB_OBJECT void CMapViewWnd::SetCurrentZone(EQZoneIndex,struct T3D_XYZ *,struct T3D_XYZ *); +// virtual +EQLIB_OBJECT CMapViewWnd::~CMapViewWnd(void); +EQLIB_OBJECT int CMapViewWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CMapViewWnd::HandleLButtonHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CMapViewWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CMapViewWnd::HandleLButtonUpAfterHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CMapViewWnd::HandleWheelMove(class CXPoint,int,unsigned __int32); +EQLIB_OBJECT int CMapViewWnd::OnProcessFrame(void); +EQLIB_OBJECT int CMapViewWnd::PostDraw(void)const; +EQLIB_OBJECT int CMapViewWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CMapViewWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CMapViewWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CMapViewWnd::Deactivate(void); +EQLIB_OBJECT void CMapViewWnd::LoadIniInfo(void); +EQLIB_OBJECT void CMapViewWnd::StoreIniInfo(void); +// private +EQLIB_OBJECT void CMapViewWnd::Init(void); +}; + +class CMemoryStream +{ +public: +EQLIB_OBJECT class CXStr CMemoryStream::GetString(void); +EQLIB_OBJECT static int __cdecl CMemoryStream::GetStringSize(class CXStr &); +EQLIB_OBJECT void CMemoryStream::GetString(class CXStr &); +EQLIB_OBJECT void CMemoryStream::PutString(class CXStr &); +}; + +class CMerchantWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CMerchantWnd::CMerchantWnd(class CXWnd *); +EQLIB_OBJECT void CMerchantWnd::Activate(class EQPlayer *,float); +EQLIB_OBJECT void CMerchantWnd::AddContainerToMercArray(class EQ_Container *); +EQLIB_OBJECT void CMerchantWnd::AddEquipmentToMercArray(class EQ_Equipment *); +EQLIB_OBJECT void CMerchantWnd::AddNoteToMercArray(class EQ_Note *); +EQLIB_OBJECT void CMerchantWnd::ClearMerchantSlot(int); +EQLIB_OBJECT void CMerchantWnd::FinishBuyingItem(struct _sell_msg *); +EQLIB_OBJECT void CMerchantWnd::FinishSellingItem(struct _sell_msg *); +EQLIB_OBJECT void CMerchantWnd::SelectBuySellSlot(int,class CTextureAnimation *); +// virtual +EQLIB_OBJECT CMerchantWnd::~CMerchantWnd(void); +EQLIB_OBJECT int CMerchantWnd::OnProcessFrame(void); +EQLIB_OBJECT int CMerchantWnd::PostDraw(void)const; +EQLIB_OBJECT int CMerchantWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CMerchantWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CMerchantWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CMerchantWnd::Deactivate(void); +// private +EQLIB_OBJECT void CMerchantWnd::DisplayBuyOrSellPrice(bool,class EQ_Item *); +EQLIB_OBJECT void CMerchantWnd::HandleBuy(int); +EQLIB_OBJECT void CMerchantWnd::HandleSell(int); +EQLIB_OBJECT void CMerchantWnd::Init(void); +EQLIB_OBJECT void CMerchantWnd::RequestBuyItem(int); +EQLIB_OBJECT void CMerchantWnd::RequestSellItem(int); +EQLIB_OBJECT void CMerchantWnd::UpdateBuySellButtons(void); +}; + +class CMusicPlayerWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CMusicPlayerWnd::CMusicPlayerWnd(class CXWnd *); +EQLIB_OBJECT void CMusicPlayerWnd::Activate(void); +EQLIB_OBJECT void CMusicPlayerWnd::AutoStart(void); +// virtual +EQLIB_OBJECT CMusicPlayerWnd::~CMusicPlayerWnd(void); +EQLIB_OBJECT int CMusicPlayerWnd::Draw(void)const; +EQLIB_OBJECT int CMusicPlayerWnd::OnProcessFrame(void); +EQLIB_OBJECT int CMusicPlayerWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CMusicPlayerWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CMusicPlayerWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CMusicPlayerWnd::Deactivate(void); +EQLIB_OBJECT void CMusicPlayerWnd::LoadIniInfo(void); +EQLIB_OBJECT void CMusicPlayerWnd::StoreIniInfo(void); +// protected +EQLIB_OBJECT void CMusicPlayerWnd::Update(void); +EQLIB_OBJECT void CMusicPlayerWnd::UpdateButtons(void); +// private +EQLIB_OBJECT void CMusicPlayerWnd::Init(void); +}; + +class CMutexLock +{ +public: +EQLIB_OBJECT CMutexLock::~CMutexLock(void); +}; + +class CMutexLockCounted +{ +public: +EQLIB_OBJECT CMutexLockCounted::~CMutexLockCounted(void); +}; + +class CMutexSync +{ +public: +// private +EQLIB_OBJECT static int CMutexSync::isValid; +}; + +class CMutexSyncCounted +{ +public: +EQLIB_OBJECT CMutexSyncCounted::~CMutexSyncCounted(void); +EQLIB_OBJECT CMutexSyncCounted::CMutexSyncCounted(void); +}; + +class CNoteWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CNoteWnd::CNoteWnd(class CXWnd *); +EQLIB_OBJECT bool CNoteWnd::CheckNote(class EQ_Note *); +EQLIB_OBJECT void CNoteWnd::Activate(void); +EQLIB_OBJECT void CNoteWnd::SetNote(char *); +// virtual +EQLIB_OBJECT CNoteWnd::~CNoteWnd(void); +EQLIB_OBJECT int CNoteWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int CNoteWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CNoteWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CNoteWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CNoteWnd::Deactivate(void); +// private +EQLIB_OBJECT void CNoteWnd::Init(void); +}; + +class ConversationJournal +{ +public: +EQLIB_OBJECT ConversationJournal::~ConversationJournal(void); +EQLIB_OBJECT ConversationJournal::ConversationJournal(void); +EQLIB_OBJECT class JournalNPC * ConversationJournal::FindNPCByNameZone(char *,int); +EQLIB_OBJECT class JournalNPC * ConversationJournal::GetNPC(int); +EQLIB_OBJECT int ConversationJournal::AddEntry(char *,int,long,float,float,float,char *,int); +EQLIB_OBJECT int ConversationJournal::DeleteNPC(char *,int); +EQLIB_OBJECT int ConversationJournal::Load(char *); +EQLIB_OBJECT int ConversationJournal::Save(char *); +EQLIB_OBJECT struct JournalCategory * * ConversationJournal::GetCategoryList(void); +EQLIB_OBJECT struct JournalCategory * ConversationJournal::AddCategory(char *,char *,int); +EQLIB_OBJECT struct JournalCategory * ConversationJournal::AddCategory(int); +EQLIB_OBJECT struct JournalCategory * ConversationJournal::GetCategory(char *); +EQLIB_OBJECT struct JournalCategory * ConversationJournal::GetCategory(int); +EQLIB_OBJECT void ConversationJournal::Clean(void); +EQLIB_OBJECT void ConversationJournal::DeleteCategory(int); +// protected +EQLIB_OBJECT int ConversationJournal::FindFreeID(void); +// private +EQLIB_OBJECT class JournalNPC * ConversationJournal::AddNPC(char *,int); +EQLIB_OBJECT class JournalNPC * ConversationJournal::ReadNPC(struct _iobuf *); +EQLIB_OBJECT void ConversationJournal::AllocateCatArray(void); +EQLIB_OBJECT void ConversationJournal::AllocateNPCArray(void); +EQLIB_OBJECT void ConversationJournal::ReadCategory(struct _iobuf *); +}; + +class COptionsWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT COptionsWnd::COptionsWnd(class CXWnd *); +//EQLIB_OBJECT COptionsWnd::KeyboardAssignmentData::~KeyboardAssignmentData(void); +//EQLIB_OBJECT COptionsWnd::KeyboardAssignmentData::KeyboardAssignmentData(void); +EQLIB_OBJECT void COptionsWnd::Activate(void); +EQLIB_OBJECT void COptionsWnd::RefreshCurrentKeyboardAssignmentList(void); +EQLIB_OBJECT void COptionsWnd::ResetKeysToDefault(void); +EQLIB_OBJECT void COptionsWnd::RestoreDefaultColors(void); +// virtual +EQLIB_OBJECT COptionsWnd::~COptionsWnd(void); +EQLIB_OBJECT int COptionsWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int COptionsWnd::OnProcessFrame(void); +EQLIB_OBJECT int COptionsWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * COptionsWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * COptionsWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void COptionsWnd::Deactivate(void); +// private +EQLIB_OBJECT int COptionsWnd::ChatPageOnProcessFrame(void); +EQLIB_OBJECT int COptionsWnd::ChatPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int COptionsWnd::ColorPageOnProcessFrame(void); +EQLIB_OBJECT int COptionsWnd::ColorPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int COptionsWnd::DisplayPageOnProcessFrame(void); +EQLIB_OBJECT int COptionsWnd::DisplayPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int COptionsWnd::GeneralPageOnProcessFrame(void); +EQLIB_OBJECT int COptionsWnd::GeneralPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int COptionsWnd::KeyboardPageDeactivate(void); +EQLIB_OBJECT int COptionsWnd::KeyboardPageHandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int COptionsWnd::KeyboardPageOnProcessFrame(void); +EQLIB_OBJECT int COptionsWnd::KeyboardPageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int COptionsWnd::MousePageOnProcessFrame(void); +EQLIB_OBJECT int COptionsWnd::MousePageWndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int COptionsWnd::RedirectDeactivateTo(class CPageWnd *); +EQLIB_OBJECT int COptionsWnd::RedirectHandleKeyboardMsgTo(class CPageWnd *,unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int COptionsWnd::RedirectOnProcessFrameTo(class CPageWnd *); +EQLIB_OBJECT int COptionsWnd::RedirectWndNotificationTo(class CPageWnd *,class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT void COptionsWnd::AddKeyboardAssignment(int,int,int); +EQLIB_OBJECT void COptionsWnd::InitKeyboardAssignments(void); +EQLIB_OBJECT void COptionsWnd::InitKeyboardPage(void); +EQLIB_OBJECT void COptionsWnd::KeyboardPageCancelKeypressAssignment(void); +EQLIB_OBJECT void COptionsWnd::SaveColors(int,int,int,int); +EQLIB_OBJECT void COptionsWnd::SetBagOptions(int,int); +EQLIB_OBJECT void COptionsWnd::SyncChatPage(void); +EQLIB_OBJECT void COptionsWnd::SyncColorPage(void); +EQLIB_OBJECT void COptionsWnd::SyncDisplayPage(void); +EQLIB_OBJECT void COptionsWnd::SyncGeneralPage(void); +EQLIB_OBJECT void COptionsWnd::SyncMousePage(void); +}; + +class CPageTemplate +{ +public: +EQLIB_OBJECT CPageTemplate::CPageTemplate(class CParamPage *); +// virtual +EQLIB_OBJECT CPageTemplate::~CPageTemplate(void); +//EQLIB_OBJECT void * CPageTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CPageTemplate::`vector deleting destructor'(unsigned int); +}; + +class CPageWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CPageWnd::CPageWnd(class CXWnd *,unsigned __int32,class CXRect,class CXStr,class CPageTemplate *); +EQLIB_OBJECT class CXStr CPageWnd::GetTabText(void)const; +// virtual +EQLIB_OBJECT CPageWnd::~CPageWnd(void); +//EQLIB_OBJECT void * CPageWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CPageWnd::`vector deleting destructor'(unsigned int); +}; + +class CParam +{ +public: +EQLIB_OBJECT class CParam & CParam::operator=(class CParam const &); +// virtual +EQLIB_OBJECT CParam::~CParam(void); +//EQLIB_OBJECT void * CParam::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParam::`vector deleting destructor'(unsigned int); +}; + +class CParamButton +{ +public: +EQLIB_OBJECT CParamButton::CParamButton(void); +EQLIB_OBJECT class CParamButton & CParamButton::operator=(class CParamButton const &); +// virtual +EQLIB_OBJECT CParamButton::~CParamButton(void); +EQLIB_OBJECT bool CParamButton::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamButton::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamButton::GetStreamSize(void); +//EQLIB_OBJECT void * CParamButton::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamButton::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamButton::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamButton::WriteToStream(class CMemoryStream &); +}; + +class CParamButtonDrawTemplate +{ +public: +EQLIB_OBJECT CParamButtonDrawTemplate::CParamButtonDrawTemplate(void); +EQLIB_OBJECT class CParamButtonDrawTemplate & CParamButtonDrawTemplate::operator=(class CParamButtonDrawTemplate const &); +// virtual +EQLIB_OBJECT CParamButtonDrawTemplate::~CParamButtonDrawTemplate(void); +EQLIB_OBJECT bool CParamButtonDrawTemplate::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamButtonDrawTemplate::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamButtonDrawTemplate::GetStreamSize(void); +//EQLIB_OBJECT void * CParamButtonDrawTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamButtonDrawTemplate::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamButtonDrawTemplate::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamButtonDrawTemplate::WriteToStream(class CMemoryStream &); +}; + +class CParamClass +{ +public: +EQLIB_OBJECT CParamClass::CParamClass(void); +EQLIB_OBJECT class CParamClass & CParamClass::operator=(class CParamClass const &); +// virtual +EQLIB_OBJECT CParamClass::~CParamClass(void); +EQLIB_OBJECT bool CParamClass::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamClass::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamClass::GetStreamSize(void); +//EQLIB_OBJECT void * CParamClass::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamClass::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamClass::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamClass::WriteToStream(class CMemoryStream &); +}; + +class CParamCombobox +{ +public: +EQLIB_OBJECT CParamCombobox::CParamCombobox(void); +EQLIB_OBJECT class CParamCombobox & CParamCombobox::operator=(class CParamCombobox const &); +// virtual +EQLIB_OBJECT CParamCombobox::~CParamCombobox(void); +EQLIB_OBJECT bool CParamCombobox::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamCombobox::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamCombobox::GetStreamSize(void); +//EQLIB_OBJECT void * CParamCombobox::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamCombobox::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamCombobox::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamCombobox::WriteToStream(class CMemoryStream &); +}; + +class CParamControl +{ +public: +EQLIB_OBJECT CParamControl::CParamControl(void); +EQLIB_OBJECT class CParamControl & CParamControl::operator=(class CParamControl const &); +// virtual +EQLIB_OBJECT CParamControl::~CParamControl(void); +EQLIB_OBJECT bool CParamControl::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamControl::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamControl::GetStreamSize(void); +//EQLIB_OBJECT void * CParamControl::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamControl::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamControl::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamControl::WriteToStream(class CMemoryStream &); +}; + +class CParamEditbox +{ +public: +EQLIB_OBJECT CParamEditbox::CParamEditbox(void); +EQLIB_OBJECT class CParamEditbox & CParamEditbox::operator=(class CParamEditbox const &); +// virtual +EQLIB_OBJECT CParamEditbox::~CParamEditbox(void); +EQLIB_OBJECT bool CParamEditbox::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamEditbox::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamEditbox::GetStreamSize(void); +//EQLIB_OBJECT void * CParamEditbox::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamEditbox::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamEditbox::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamEditbox::WriteToStream(class CMemoryStream &); +}; + +class CParamFrame +{ +public: +EQLIB_OBJECT CParamFrame::CParamFrame(void); +// virtual +EQLIB_OBJECT CParamFrame::~CParamFrame(void); +EQLIB_OBJECT bool CParamFrame::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamFrame::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamFrame::GetStreamSize(void); +//EQLIB_OBJECT void * CParamFrame::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamFrame::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamFrame::WriteToStream(class CMemoryStream &); +}; + +class CParamFrameTemplate +{ +public: +EQLIB_OBJECT CParamFrameTemplate::CParamFrameTemplate(void); +EQLIB_OBJECT class CParamFrameTemplate & CParamFrameTemplate::operator=(class CParamFrameTemplate const &); +// virtual +EQLIB_OBJECT CParamFrameTemplate::~CParamFrameTemplate(void); +EQLIB_OBJECT bool CParamFrameTemplate::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamFrameTemplate::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamFrameTemplate::GetStreamSize(void); +//EQLIB_OBJECT void * CParamFrameTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamFrameTemplate::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamFrameTemplate::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamFrameTemplate::WriteToStream(class CMemoryStream &); +}; + +class CParamGauge +{ +public: +EQLIB_OBJECT CParamGauge::CParamGauge(void); +EQLIB_OBJECT class CParamGauge & CParamGauge::operator=(class CParamGauge const &); +// virtual +EQLIB_OBJECT CParamGauge::~CParamGauge(void); +EQLIB_OBJECT bool CParamGauge::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamGauge::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamGauge::GetStreamSize(void); +//EQLIB_OBJECT void * CParamGauge::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamGauge::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamGauge::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamGauge::WriteToStream(class CMemoryStream &); +}; + +class CParamGaugeDrawTemplate +{ +public: +EQLIB_OBJECT CParamGaugeDrawTemplate::CParamGaugeDrawTemplate(void); +EQLIB_OBJECT class CParamGaugeDrawTemplate & CParamGaugeDrawTemplate::operator=(class CParamGaugeDrawTemplate const &); +// virtual +EQLIB_OBJECT CParamGaugeDrawTemplate::~CParamGaugeDrawTemplate(void); +EQLIB_OBJECT bool CParamGaugeDrawTemplate::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamGaugeDrawTemplate::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamGaugeDrawTemplate::GetStreamSize(void); +//EQLIB_OBJECT void * CParamGaugeDrawTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamGaugeDrawTemplate::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamGaugeDrawTemplate::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamGaugeDrawTemplate::WriteToStream(class CMemoryStream &); +}; + +class CParamInvSlot +{ +public: +EQLIB_OBJECT CParamInvSlot::CParamInvSlot(void); +EQLIB_OBJECT class CParamInvSlot & CParamInvSlot::operator=(class CParamInvSlot const &); +// virtual +EQLIB_OBJECT CParamInvSlot::~CParamInvSlot(void); +EQLIB_OBJECT bool CParamInvSlot::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamInvSlot::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamInvSlot::GetStreamSize(void); +//EQLIB_OBJECT void * CParamInvSlot::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamInvSlot::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamInvSlot::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamInvSlot::WriteToStream(class CMemoryStream &); +}; + +class CParamLabel +{ +public: +EQLIB_OBJECT CParamLabel::CParamLabel(void); +EQLIB_OBJECT class CParamLabel & CParamLabel::operator=(class CParamLabel const &); +// virtual +EQLIB_OBJECT CParamLabel::~CParamLabel(void); +EQLIB_OBJECT bool CParamLabel::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamLabel::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamLabel::GetStreamSize(void); +//EQLIB_OBJECT void * CParamLabel::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamLabel::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamLabel::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamLabel::WriteToStream(class CMemoryStream &); +}; + +class CParamListbox +{ +public: +EQLIB_OBJECT CParamListbox::CParamListbox(void); +EQLIB_OBJECT class CParamListbox & CParamListbox::operator=(class CParamListbox const &); +// virtual +EQLIB_OBJECT CParamListbox::~CParamListbox(void); +EQLIB_OBJECT bool CParamListbox::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamListbox::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamListbox::GetStreamSize(void); +//EQLIB_OBJECT void * CParamListbox::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamListbox::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamListbox::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamListbox::WriteToStream(class CMemoryStream &); +}; + +class CParamListboxColumn +{ +public: +EQLIB_OBJECT CParamListboxColumn::CParamListboxColumn(void); +EQLIB_OBJECT class CParamListboxColumn & CParamListboxColumn::operator=(class CParamListboxColumn const &); +// virtual +EQLIB_OBJECT CParamListboxColumn::~CParamListboxColumn(void); +EQLIB_OBJECT bool CParamListboxColumn::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamListboxColumn::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamListboxColumn::GetStreamSize(void); +//EQLIB_OBJECT void * CParamListboxColumn::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamListboxColumn::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamListboxColumn::WriteToStream(class CMemoryStream &); +}; + +class CParamPage +{ +public: +EQLIB_OBJECT CParamPage::CParamPage(void); +EQLIB_OBJECT class CParamPage & CParamPage::operator=(class CParamPage const &); +// virtual +EQLIB_OBJECT CParamPage::~CParamPage(void); +EQLIB_OBJECT bool CParamPage::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamPage::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamPage::GetStreamSize(void); +//EQLIB_OBJECT void * CParamPage::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamPage::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamPage::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamPage::WriteToStream(class CMemoryStream &); +}; + +class CParamPoint +{ +public: +EQLIB_OBJECT CParamPoint::CParamPoint(void); +EQLIB_OBJECT class CParamPoint & CParamPoint::operator=(class CParamPoint const &); +// virtual +EQLIB_OBJECT CParamPoint::~CParamPoint(void); +EQLIB_OBJECT bool CParamPoint::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamPoint::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamPoint::GetStreamSize(void); +//EQLIB_OBJECT void * CParamPoint::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamPoint::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamPoint::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamPoint::WriteToStream(class CMemoryStream &); +}; + +class CParamRGB +{ +public: +EQLIB_OBJECT CParamRGB::CParamRGB(void); +EQLIB_OBJECT class CParamRGB & CParamRGB::operator=(class CParamRGB const &); +// virtual +EQLIB_OBJECT CParamRGB::~CParamRGB(void); +EQLIB_OBJECT bool CParamRGB::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamRGB::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamRGB::GetStreamSize(void); +//EQLIB_OBJECT void * CParamRGB::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamRGB::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamRGB::WriteToStream(class CMemoryStream &); +}; + +class CParamScreen +{ +public: +EQLIB_OBJECT CParamScreen::CParamScreen(void); +EQLIB_OBJECT class CParamScreen & CParamScreen::operator=(class CParamScreen const &); +// virtual +EQLIB_OBJECT CParamScreen::~CParamScreen(void); +EQLIB_OBJECT bool CParamScreen::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamScreen::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamScreen::GetStreamSize(void); +//EQLIB_OBJECT void * CParamScreen::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamScreen::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamScreen::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamScreen::WriteToStream(class CMemoryStream &); +}; + +class CParamScreenPiece +{ +public: +EQLIB_OBJECT CParamScreenPiece::CParamScreenPiece(void); +EQLIB_OBJECT class CParamScreenPiece & CParamScreenPiece::operator=(class CParamScreenPiece const &); +// virtual +EQLIB_OBJECT CParamScreenPiece::~CParamScreenPiece(void); +EQLIB_OBJECT bool CParamScreenPiece::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamScreenPiece::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamScreenPiece::GetStreamSize(void); +//EQLIB_OBJECT void * CParamScreenPiece::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamScreenPiece::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamScreenPiece::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamScreenPiece::WriteToStream(class CMemoryStream &); +}; + +class CParamScrollbarDrawTemplate +{ +public: +EQLIB_OBJECT CParamScrollbarDrawTemplate::CParamScrollbarDrawTemplate(void); +EQLIB_OBJECT class CParamScrollbarDrawTemplate & CParamScrollbarDrawTemplate::operator=(class CParamScrollbarDrawTemplate const &); +// virtual +EQLIB_OBJECT CParamScrollbarDrawTemplate::~CParamScrollbarDrawTemplate(void); +EQLIB_OBJECT bool CParamScrollbarDrawTemplate::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamScrollbarDrawTemplate::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamScrollbarDrawTemplate::GetStreamSize(void); +//EQLIB_OBJECT void * CParamScrollbarDrawTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamScrollbarDrawTemplate::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamScrollbarDrawTemplate::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamScrollbarDrawTemplate::WriteToStream(class CMemoryStream &); +}; + +class CParamSize +{ +public: +EQLIB_OBJECT CParamSize::CParamSize(void); +EQLIB_OBJECT class CParamSize & CParamSize::operator=(class CParamSize const &); +// virtual +EQLIB_OBJECT CParamSize::~CParamSize(void); +EQLIB_OBJECT bool CParamSize::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamSize::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamSize::GetStreamSize(void); +//EQLIB_OBJECT void * CParamSize::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamSize::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamSize::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamSize::WriteToStream(class CMemoryStream &); +}; + +class CParamSlider +{ +public: +EQLIB_OBJECT CParamSlider::CParamSlider(void); +EQLIB_OBJECT class CParamSlider & CParamSlider::operator=(class CParamSlider const &); +// virtual +EQLIB_OBJECT CParamSlider::~CParamSlider(void); +EQLIB_OBJECT bool CParamSlider::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamSlider::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamSlider::GetStreamSize(void); +//EQLIB_OBJECT void * CParamSlider::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamSlider::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamSlider::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamSlider::WriteToStream(class CMemoryStream &); +}; + +class CParamSliderDrawTemplate +{ +public: +EQLIB_OBJECT CParamSliderDrawTemplate::CParamSliderDrawTemplate(void); +EQLIB_OBJECT class CParamSliderDrawTemplate & CParamSliderDrawTemplate::operator=(class CParamSliderDrawTemplate const &); +// virtual +EQLIB_OBJECT CParamSliderDrawTemplate::~CParamSliderDrawTemplate(void); +EQLIB_OBJECT bool CParamSliderDrawTemplate::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamSliderDrawTemplate::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamSliderDrawTemplate::GetStreamSize(void); +//EQLIB_OBJECT void * CParamSliderDrawTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamSliderDrawTemplate::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamSliderDrawTemplate::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamSliderDrawTemplate::WriteToStream(class CMemoryStream &); +}; + +class CParamSpellGem +{ +public: +EQLIB_OBJECT CParamSpellGem::CParamSpellGem(void); +EQLIB_OBJECT class CParamSpellGem & CParamSpellGem::operator=(class CParamSpellGem const &); +// virtual +EQLIB_OBJECT CParamSpellGem::~CParamSpellGem(void); +EQLIB_OBJECT bool CParamSpellGem::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamSpellGem::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamSpellGem::GetStreamSize(void); +//EQLIB_OBJECT void * CParamSpellGem::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamSpellGem::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamSpellGem::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamSpellGem::WriteToStream(class CMemoryStream &); +}; + +class CParamSpellGemDrawTemplate +{ +public: +EQLIB_OBJECT CParamSpellGemDrawTemplate::CParamSpellGemDrawTemplate(void); +EQLIB_OBJECT class CParamSpellGemDrawTemplate & CParamSpellGemDrawTemplate::operator=(class CParamSpellGemDrawTemplate const &); +// virtual +EQLIB_OBJECT CParamSpellGemDrawTemplate::~CParamSpellGemDrawTemplate(void); +EQLIB_OBJECT bool CParamSpellGemDrawTemplate::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamSpellGemDrawTemplate::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamSpellGemDrawTemplate::GetStreamSize(void); +//EQLIB_OBJECT void * CParamSpellGemDrawTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamSpellGemDrawTemplate::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamSpellGemDrawTemplate::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamSpellGemDrawTemplate::WriteToStream(class CMemoryStream &); +}; + +class CParamStaticAnimation +{ +public: +EQLIB_OBJECT CParamStaticAnimation::CParamStaticAnimation(void); +EQLIB_OBJECT class CParamStaticAnimation & CParamStaticAnimation::operator=(class CParamStaticAnimation const &); +// virtual +EQLIB_OBJECT CParamStaticAnimation::~CParamStaticAnimation(void); +EQLIB_OBJECT bool CParamStaticAnimation::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamStaticAnimation::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamStaticAnimation::GetStreamSize(void); +//EQLIB_OBJECT void * CParamStaticAnimation::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamStaticAnimation::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamStaticAnimation::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamStaticAnimation::WriteToStream(class CMemoryStream &); +}; + +class CParamStaticFrame +{ +public: +EQLIB_OBJECT CParamStaticFrame::CParamStaticFrame(void); +EQLIB_OBJECT class CParamStaticFrame & CParamStaticFrame::operator=(class CParamStaticFrame const &); +// virtual +EQLIB_OBJECT CParamStaticFrame::~CParamStaticFrame(void); +EQLIB_OBJECT bool CParamStaticFrame::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamStaticFrame::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamStaticFrame::GetStreamSize(void); +//EQLIB_OBJECT void * CParamStaticFrame::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamStaticFrame::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamStaticFrame::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamStaticFrame::WriteToStream(class CMemoryStream &); +}; + +class CParamStaticHeader +{ +public: +EQLIB_OBJECT CParamStaticHeader::CParamStaticHeader(void); +EQLIB_OBJECT class CParamStaticHeader & CParamStaticHeader::operator=(class CParamStaticHeader const &); +// virtual +EQLIB_OBJECT CParamStaticHeader::~CParamStaticHeader(void); +EQLIB_OBJECT bool CParamStaticHeader::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamStaticHeader::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamStaticHeader::GetStreamSize(void); +//EQLIB_OBJECT void * CParamStaticHeader::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamStaticHeader::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamStaticHeader::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamStaticHeader::WriteToStream(class CMemoryStream &); +}; + +class CParamStaticScreenPiece +{ +public: +EQLIB_OBJECT CParamStaticScreenPiece::CParamStaticScreenPiece(void); +// virtual +EQLIB_OBJECT CParamStaticScreenPiece::~CParamStaticScreenPiece(void); +EQLIB_OBJECT bool CParamStaticScreenPiece::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamStaticScreenPiece::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamStaticScreenPiece::GetStreamSize(void); +//EQLIB_OBJECT void * CParamStaticScreenPiece::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamStaticScreenPiece::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamStaticScreenPiece::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamStaticScreenPiece::WriteToStream(class CMemoryStream &); +}; + +class CParamStaticText +{ +public: +EQLIB_OBJECT CParamStaticText::CParamStaticText(void); +EQLIB_OBJECT class CParamStaticText & CParamStaticText::operator=(class CParamStaticText const &); +// virtual +EQLIB_OBJECT CParamStaticText::~CParamStaticText(void); +EQLIB_OBJECT bool CParamStaticText::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamStaticText::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamStaticText::GetStreamSize(void); +//EQLIB_OBJECT void * CParamStaticText::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamStaticText::`vector deleting destructor'(unsigned int); +#define SafeYLoc 0 +EQLIB_OBJECT void CParamStaticText::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamStaticText::WriteToStream(class CMemoryStream &); +}; + +class CParamSTMLbox +{ +public: +EQLIB_OBJECT CParamSTMLbox::CParamSTMLbox(void); +// virtual +EQLIB_OBJECT CParamSTMLbox::~CParamSTMLbox(void); +EQLIB_OBJECT bool CParamSTMLbox::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamSTMLbox::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamSTMLbox::GetStreamSize(void); +//EQLIB_OBJECT void * CParamSTMLbox::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamSTMLbox::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamSTMLbox::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamSTMLbox::WriteToStream(class CMemoryStream &); +}; + +class CParamSuiteDefaults +{ +public: +EQLIB_OBJECT CParamSuiteDefaults::CParamSuiteDefaults(void); +EQLIB_OBJECT class CParamSuiteDefaults & CParamSuiteDefaults::operator=(class CParamSuiteDefaults const &); +// virtual +EQLIB_OBJECT CParamSuiteDefaults::~CParamSuiteDefaults(void); +EQLIB_OBJECT bool CParamSuiteDefaults::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamSuiteDefaults::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamSuiteDefaults::GetStreamSize(void); +//EQLIB_OBJECT void * CParamSuiteDefaults::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamSuiteDefaults::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamSuiteDefaults::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamSuiteDefaults::WriteToStream(class CMemoryStream &); +}; + +class CParamTabBox +{ +public: +EQLIB_OBJECT CParamTabBox::CParamTabBox(void); +EQLIB_OBJECT class CParamTabBox & CParamTabBox::operator=(class CParamTabBox const &); +// virtual +EQLIB_OBJECT CParamTabBox::~CParamTabBox(void); +EQLIB_OBJECT bool CParamTabBox::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamTabBox::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamTabBox::GetStreamSize(void); +//EQLIB_OBJECT void * CParamTabBox::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamTabBox::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamTabBox::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamTabBox::WriteToStream(class CMemoryStream &); +}; + +class CParamTextureInfo +{ +public: +EQLIB_OBJECT CParamTextureInfo::CParamTextureInfo(void); +// virtual +EQLIB_OBJECT CParamTextureInfo::~CParamTextureInfo(void); +EQLIB_OBJECT bool CParamTextureInfo::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamTextureInfo::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamTextureInfo::GetStreamSize(void); +//EQLIB_OBJECT void * CParamTextureInfo::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamTextureInfo::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamTextureInfo::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamTextureInfo::WriteToStream(class CMemoryStream &); +}; + +class CParamUi2DAnimation +{ +public: +EQLIB_OBJECT CParamUi2DAnimation::CParamUi2DAnimation(void); +// virtual +EQLIB_OBJECT CParamUi2DAnimation::~CParamUi2DAnimation(void); +EQLIB_OBJECT bool CParamUi2DAnimation::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamUi2DAnimation::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamUi2DAnimation::GetStreamSize(void); +//EQLIB_OBJECT void * CParamUi2DAnimation::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamUi2DAnimation::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamUi2DAnimation::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamUi2DAnimation::WriteToStream(class CMemoryStream &); +}; + +class CParamWindowDrawTemplate +{ +public: +EQLIB_OBJECT CParamWindowDrawTemplate::CParamWindowDrawTemplate(void); +// virtual +EQLIB_OBJECT CParamWindowDrawTemplate::~CParamWindowDrawTemplate(void); +EQLIB_OBJECT bool CParamWindowDrawTemplate::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CParamWindowDrawTemplate::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CParamWindowDrawTemplate::GetStreamSize(void); +//EQLIB_OBJECT void * CParamWindowDrawTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CParamWindowDrawTemplate::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CParamWindowDrawTemplate::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CParamWindowDrawTemplate::WriteToStream(class CMemoryStream &); +}; + +class CParseTokensXML +{ +public: +EQLIB_OBJECT CParseTokensXML::~CParseTokensXML(void); +//EQLIB_OBJECT bool CParseTokensXML::Accept(enum ETokTypeXML); +#define HackPackHelp 0 +EQLIB_OBJECT bool CParseTokensXML::StartFileBased(class CXStr); +EQLIB_OBJECT class CXStr CParseTokensXML::GetCurFile(void); +EQLIB_OBJECT void __cdecl CParseTokensXML::SetError(char const *,...); +}; + +class CParseTokXML +{ +public: +EQLIB_OBJECT CParseTokXML::~CParseTokXML(void); +//EQLIB_OBJECT enum ETokTypeXML CParseTokXML::NextToken(void); +//EQLIB_OBJECT void * CParseTokXML::`scalar deleting destructor'(unsigned int); +// private +EQLIB_OBJECT bool CParseTokXML::GetEntityRef(char &); +}; + +class CPetInfoWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CPetInfoWnd::CPetInfoWnd(class CXWnd *); +EQLIB_OBJECT class CButtonWnd * CPetInfoWnd::GetButton(int); +EQLIB_OBJECT void CPetInfoWnd::Activate(void); +EQLIB_OBJECT void CPetInfoWnd::SetShowOnSummon(bool); +EQLIB_OBJECT void CPetInfoWnd::Update(void); +// virtual +EQLIB_OBJECT CPetInfoWnd::~CPetInfoWnd(void); +EQLIB_OBJECT int CPetInfoWnd::OnProcessFrame(void); +EQLIB_OBJECT int CPetInfoWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CPetInfoWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CPetInfoWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CPetInfoWnd::Deactivate(void); +// private +EQLIB_OBJECT void CPetInfoWnd::Init(void); +}; + +class CPetitionQWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CPetitionQWnd::CPetitionQWnd(class CXWnd *); +EQLIB_OBJECT char * CPetitionQWnd::GetCurrentPetitionersName(void); +EQLIB_OBJECT void CPetitionQWnd::Activate(void); +EQLIB_OBJECT void CPetitionQWnd::AddGMText(void); +EQLIB_OBJECT void CPetitionQWnd::CheckedOut(struct petitionQtype const *,int); +EQLIB_OBJECT void CPetitionQWnd::ClearCurrentPet(void); +EQLIB_OBJECT void CPetitionQWnd::FillFields(void); +EQLIB_OBJECT void CPetitionQWnd::LogPetitionText(void); +EQLIB_OBJECT void CPetitionQWnd::SetButtonsForPetition(bool,bool); +EQLIB_OBJECT void CPetitionQWnd::SetPriorityDisplay(void); +EQLIB_OBJECT void CPetitionQWnd::UndoCheckout(void); +EQLIB_OBJECT void CPetitionQWnd::UpdatePetitions(void); +// virtual +EQLIB_OBJECT CPetitionQWnd::~CPetitionQWnd(void); +EQLIB_OBJECT int CPetitionQWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CPetitionQWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CPetitionQWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CPetitionQWnd::Deactivate(void); +}; + +class CPlayerNotesWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CPlayerNotesWnd::CPlayerNotesWnd(class CXWnd *); +EQLIB_OBJECT void CPlayerNotesWnd::Activate(void); +EQLIB_OBJECT void CPlayerNotesWnd::AppendText(char *); +EQLIB_OBJECT void CPlayerNotesWnd::SaveNotes(void); +// virtual +EQLIB_OBJECT CPlayerNotesWnd::~CPlayerNotesWnd(void); +EQLIB_OBJECT int CPlayerNotesWnd::Draw(void)const; +EQLIB_OBJECT int CPlayerNotesWnd::OnProcessFrame(void); +EQLIB_OBJECT int CPlayerNotesWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CPlayerNotesWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CPlayerNotesWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CPlayerNotesWnd::Deactivate(void); +// private +EQLIB_OBJECT void CPlayerNotesWnd::Init(void); +}; + +class CPlayerWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CPlayerWnd::CPlayerWnd(class CXWnd *); +EQLIB_OBJECT void CPlayerWnd::Activate(void); +EQLIB_OBJECT void CPlayerWnd::CreateLocalMenu(void); +EQLIB_OBJECT void CPlayerWnd::UpdateContextMenu(void); +// virtual +EQLIB_OBJECT CPlayerWnd::~CPlayerWnd(void); +EQLIB_OBJECT int CPlayerWnd::Draw(void)const; +EQLIB_OBJECT int CPlayerWnd::OnProcessFrame(void); +EQLIB_OBJECT int CPlayerWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CPlayerWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CPlayerWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CPlayerWnd::Deactivate(void); +EQLIB_OBJECT void CPlayerWnd::LoadIniInfo(void); +EQLIB_OBJECT void CPlayerWnd::StoreIniInfo(void); +// private +EQLIB_OBJECT void CPlayerWnd::Init(void); +}; + +class CPotionBeltWnd : public CSidlScreenWnd +{ +public: +// virtual +EQLIB_OBJECT int CPotionBeltWnd::DrawTooltip(class CXWnd const *)const; +}; +class CQuantityWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CQuantityWnd::CQuantityWnd(class CXWnd *); +EQLIB_OBJECT void CQuantityWnd::Activate(class CXWnd *,int,int,int,int,bool); +// virtual +EQLIB_OBJECT CQuantityWnd::~CQuantityWnd(void); +EQLIB_OBJECT int CQuantityWnd::Draw(void)const; +EQLIB_OBJECT int CQuantityWnd::OnProcessFrame(void); +EQLIB_OBJECT int CQuantityWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CQuantityWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CQuantityWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CQuantityWnd::Deactivate(void); +// private +//EQLIB_OBJECT void CQuantityWnd::Accept; +EQLIB_OBJECT void CQuantityWnd::CheckMaxEditWnd(void); +EQLIB_OBJECT void CQuantityWnd::UpdateEditWndFromSlider(void); +EQLIB_OBJECT void CQuantityWnd::UpdateSliderFromEditWnd(void); +}; + +class CRadioGroup +{ +public: +EQLIB_OBJECT CRadioGroup::CRadioGroup(class CXStr); +EQLIB_OBJECT class CXStr CRadioGroup::GetName(void)const; +// virtual +EQLIB_OBJECT CRadioGroup::~CRadioGroup(void); +//EQLIB_OBJECT void * CRadioGroup::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CRadioGroup::`vector deleting destructor'(unsigned int); +}; + +class CRaid +{ +public: +EQLIB_OBJECT CRaid::~CRaid(void); +EQLIB_OBJECT CRaid::CRaid(void); +EQLIB_OBJECT bool CRaid::IsInRaid(void); +EQLIB_OBJECT bool CRaid::IsInvited(void); +EQLIB_OBJECT bool CRaid::IsRaidGroupLeader(void); +EQLIB_OBJECT bool CRaid::IsRaidLeader(void); +EQLIB_OBJECT bool CRaid::IsRaidMember(char *); +EQLIB_OBJECT int CRaid::GetLootType(void); +EQLIB_OBJECT int CRaid::GetNumRaidMembers(void); +EQLIB_OBJECT struct RaidMember * CRaid::GetRaidMemberAt(int); +EQLIB_OBJECT void CRaid::AddRaidLooter(void); +EQLIB_OBJECT void CRaid::ClearInvitedState(void); +EQLIB_OBJECT void CRaid::CreateInviteRaid(void); +EQLIB_OBJECT void CRaid::HandleC2SRaidMessage(char *); +EQLIB_OBJECT void CRaid::HandleCreateInviteRaid(struct CSRaidMessage *); +EQLIB_OBJECT void CRaid::HandleS2CRaidMessage(char *); +EQLIB_OBJECT void CRaid::RemoveRaidLooter(void); +EQLIB_OBJECT void CRaid::RemoveRaidMember(void); +EQLIB_OBJECT void CRaid::ResetRaid(void); +EQLIB_OBJECT void CRaid::ResetWindow(void); +EQLIB_OBJECT void CRaid::SendInviteResponse(bool); +EQLIB_OBJECT void CRaid::SendLeadershipChange(char *); +EQLIB_OBJECT void CRaid::SendRaidChat(char *); +EQLIB_OBJECT void CRaid::SetLootType(char *); +EQLIB_OBJECT void CRaid::SetRaidLeader(char *); +EQLIB_OBJECT void CRaid::SetTargetRaidPlayer(char *); +EQLIB_OBJECT void CRaid::UpdateClassColor(int,unsigned long); +EQLIB_OBJECT void CRaid::UpdateOptionsWindow(void); +// private +EQLIB_OBJECT bool CRaid::IsRaidLooter(char *); +EQLIB_OBJECT int CRaid::FindOpenIndex(void); +EQLIB_OBJECT int CRaid::FindPlayerIndex(char *); +EQLIB_OBJECT int CRaid::FindRaidGroupLeader(int); +EQLIB_OBJECT void CRaid::AddRaidMember(struct RaidAddMember *); +EQLIB_OBJECT void CRaid::ChangeLeadership(char *); +EQLIB_OBJECT void CRaid::DeleteRaidMember(struct SCRaidMessage *); +EQLIB_OBJECT void CRaid::DetermineRaidChanges(char *); +EQLIB_OBJECT void CRaid::HandleAddLooter(char *); +EQLIB_OBJECT void CRaid::HandlePositionChange(struct SCRaidMessage *); +EQLIB_OBJECT void CRaid::HandleRemoveLooter(char *); +EQLIB_OBJECT void CRaid::HandleSetLootType(int); +EQLIB_OBJECT void CRaid::InitializeRaid(char *); +EQLIB_OBJECT void CRaid::RaidCreated(struct CreateRaidMessage *); +EQLIB_OBJECT void CRaid::RaidGroupLeaderChange(struct SCRaidMessage *); +EQLIB_OBJECT void CRaid::RenameMember(struct RenameRaidMember *); +EQLIB_OBJECT void CRaid::SendRaidMsg(int,char *,char *,int); +EQLIB_OBJECT void CRaid::SetLootTypeResponse(struct SCRaidMessage *); +EQLIB_OBJECT void CRaid::UpdateLevelAverage(void); +}; + +class CRaidOptionsWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CRaidOptionsWnd::CRaidOptionsWnd(class CXWnd *); +EQLIB_OBJECT void CRaidOptionsWnd::Activate(void); +EQLIB_OBJECT void CRaidOptionsWnd::AddLooterToList(char *); +EQLIB_OBJECT void CRaidOptionsWnd::ClearLooterList(void); +EQLIB_OBJECT void CRaidOptionsWnd::UpdateComponents(void); +// virtual +EQLIB_OBJECT CRaidOptionsWnd::~CRaidOptionsWnd(void); +EQLIB_OBJECT int CRaidOptionsWnd::OnProcessFrame(void); +EQLIB_OBJECT int CRaidOptionsWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CRaidOptionsWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CRaidOptionsWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CRaidOptionsWnd::Deactivate(void); +// private +EQLIB_OBJECT void CRaidOptionsWnd::Init(void); +EQLIB_OBJECT void CRaidOptionsWnd::InitializeClassColors(void); +}; + +class CRaidWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CRaidWnd::CRaidWnd(class CXWnd *); +EQLIB_OBJECT void CRaidWnd::Activate(void); +EQLIB_OBJECT void CRaidWnd::AddPlayertoList(char *,char *,char *,char *,int,int,bool); +EQLIB_OBJECT void CRaidWnd::ChangePosition(char *,int,int,int,bool); +EQLIB_OBJECT void CRaidWnd::ChangeRaidGroupLeader(char *,int,char *); +EQLIB_OBJECT void CRaidWnd::ClearPlayerList(void); +EQLIB_OBJECT void CRaidWnd::RemovePlayerFromList(char *,int); +EQLIB_OBJECT void CRaidWnd::SetClassColor(int,unsigned long); +EQLIB_OBJECT void CRaidWnd::SetPlayerClassColor(char *,int,int); +EQLIB_OBJECT void CRaidWnd::SetPlayerClassColor(int,int,int); +EQLIB_OBJECT void CRaidWnd::SetRaidCount(int); +EQLIB_OBJECT void CRaidWnd::SetRaidMemberRank(char *,char *,int); +EQLIB_OBJECT void CRaidWnd::SetRaidTarget(char *,int,char *,int); +EQLIB_OBJECT void CRaidWnd::UpdateButtons(void); +EQLIB_OBJECT void CRaidWnd::UpdateLevelAverage(int); +EQLIB_OBJECT void CRaidWnd::UpdateMemberName(char *,char *,int); +// virtual +EQLIB_OBJECT CRaidWnd::~CRaidWnd(void); +EQLIB_OBJECT int CRaidWnd::OnProcessFrame(void); +EQLIB_OBJECT int CRaidWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CRaidWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CRaidWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CRaidWnd::Deactivate(void); +// private +EQLIB_OBJECT int CRaidWnd::FindIndexNotInGroupList(char *); +EQLIB_OBJECT int CRaidWnd::FindOpenIndexInGroup(int); +EQLIB_OBJECT int CRaidWnd::FindPlayerIndexInGroup(char *,int); +EQLIB_OBJECT void CRaidWnd::AddSeparator(void); +EQLIB_OBJECT void CRaidWnd::Init(void); +EQLIB_OBJECT void CRaidWnd::InitializeClassColors(void); +EQLIB_OBJECT void CRaidWnd::ResortRaidGroupList(int,int); +}; + +class CRC32Generator +{ +public: +EQLIB_OBJECT unsigned int CRC32Generator::generateCRC32(unsigned char const *,unsigned int)const; +EQLIB_OBJECT unsigned int CRC32Generator::updateCRC32(unsigned int,unsigned char const *,unsigned int)const; +// private +EQLIB_OBJECT static unsigned int * CRC32Generator::_crcTable; +}; + +class CResolutionHandler +{ +public: +EQLIB_OBJECT static bool __cdecl CResolutionHandler::IsFullscreenAvailable(void); +EQLIB_OBJECT static int __cdecl CResolutionHandler::GetDesktopBitsPerPixel(void); +EQLIB_OBJECT static int __cdecl CResolutionHandler::GetDesktopHeight(void); +EQLIB_OBJECT static int __cdecl CResolutionHandler::GetDesktopRefreshRate(void); +EQLIB_OBJECT static int __cdecl CResolutionHandler::GetDesktopWidth(void); +EQLIB_OBJECT static int __cdecl CResolutionHandler::GetHeight(void); +EQLIB_OBJECT static int __cdecl CResolutionHandler::GetWidth(void); +EQLIB_OBJECT static int __cdecl CResolutionHandler::Init(void); +EQLIB_OBJECT static void __cdecl CResolutionHandler::ChangeToResolution(int,int,int,int,int); +EQLIB_OBJECT static void __cdecl CResolutionHandler::SaveSettings(void); +EQLIB_OBJECT static void __cdecl CResolutionHandler::Shutdown(void); +EQLIB_OBJECT static void __cdecl CResolutionHandler::ToggleScreenMode(void); +EQLIB_OBJECT static void __cdecl CResolutionHandler::UpdateWindowPosition(void); +// private +EQLIB_OBJECT static bool CResolutionHandler::ms_isFullscreen; +EQLIB_OBJECT static int CResolutionHandler::ms_fullscreenBitsPerPixel; +EQLIB_OBJECT static int CResolutionHandler::ms_fullscreenRefreshRate; +EQLIB_OBJECT static int CResolutionHandler::ms_height; +EQLIB_OBJECT static int CResolutionHandler::ms_width; +EQLIB_OBJECT static int CResolutionHandler::ms_windowedOffsetX; +EQLIB_OBJECT static int CResolutionHandler::ms_windowedOffsetY; +}; + +class CScreenPieceTemplate +{ +public: +EQLIB_OBJECT CScreenPieceTemplate::CScreenPieceTemplate(class CParamScreenPiece *); +EQLIB_OBJECT bool CScreenPieceTemplate::IsType(unsigned __int32)const; +EQLIB_OBJECT class CXStr CScreenPieceTemplate::GetName(void)const; +// virtual +EQLIB_OBJECT CScreenPieceTemplate::~CScreenPieceTemplate(void); +//EQLIB_OBJECT void * CScreenPieceTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CScreenPieceTemplate::`vector deleting destructor'(unsigned int); +}; + +class CScreenTemplate +{ +public: +EQLIB_OBJECT CScreenTemplate::CScreenTemplate(class CParamScreen *); +// virtual +EQLIB_OBJECT CScreenTemplate::~CScreenTemplate(void); +//EQLIB_OBJECT void * CScreenTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CScreenTemplate::`vector deleting destructor'(unsigned int); +}; + +class CScrollbarTemplate +{ +public: +EQLIB_OBJECT CScrollbarTemplate::~CScrollbarTemplate(void); +EQLIB_OBJECT CScrollbarTemplate::CScrollbarTemplate(class CScrollbarTemplate const &); +EQLIB_OBJECT CScrollbarTemplate::CScrollbarTemplate(void); +EQLIB_OBJECT class CScrollbarTemplate & CScrollbarTemplate::operator=(class CScrollbarTemplate const &); +}; + +class CSelectorWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CSelectorWnd::CSelectorWnd(class CXWnd *); +EQLIB_OBJECT void CSelectorWnd::Activate(void); +EQLIB_OBJECT void CSelectorWnd::KeyMapUpdated(void); +// virtual +EQLIB_OBJECT CSelectorWnd::~CSelectorWnd(void); +EQLIB_OBJECT int CSelectorWnd::OnProcessFrame(void); +EQLIB_OBJECT int CSelectorWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CSelectorWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSelectorWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CSelectorWnd::Deactivate(void); +}; + +class CSidlManager +{ +public: +EQLIB_OBJECT CSidlManager::CSidlManager(void); +EQLIB_OBJECT class CButtonDrawTemplate * CSidlManager::FindButtonDrawTemplate(unsigned __int32)const; +EQLIB_OBJECT class CButtonDrawTemplate CSidlManager::GetButtonDrawTemplateFromParamButtonDrawTemplate(class CParamButtonDrawTemplate const &)const; +EQLIB_OBJECT class CGaugeDrawTemplate CSidlManager::GetGaugeDrawTemplateFromParamGaugeDrawTemplate(class CParamGaugeDrawTemplate const &)const; +EQLIB_OBJECT class CScreenPieceTemplate * CSidlManager::CreateScreenPieceTemplateFromParamScreenPiece(class CParamScreenPiece const *)const; +EQLIB_OBJECT class CScreenPieceTemplate * CSidlManager::FindScreenPieceTemplate(class CXStr *)const; +EQLIB_OBJECT class CScreenPieceTemplate * CSidlManager::FindScreenPieceTemplate(char *); +EQLIB_OBJECT class CScreenPieceTemplate * CSidlManager::FindScreenPieceTemplate(unsigned __int32)const; +EQLIB_OBJECT class CScrollbarTemplate CSidlManager::GetScrollbarTemplateFromParamScrollbarTemplate(class CParamScrollbarDrawTemplate const &)const; +EQLIB_OBJECT class CSliderDrawTemplate * CSidlManager::FindSliderDrawTemplate(class CXStr)const; +EQLIB_OBJECT class CSliderDrawTemplate * CSidlManager::FindSliderDrawTemplate(unsigned __int32)const; +EQLIB_OBJECT class CSliderDrawTemplate CSidlManager::GetSliderDrawTemplateFromParamSliderDrawTemplate(class CParamSliderDrawTemplate const &)const; +EQLIB_OBJECT class CSpellGemDrawTemplate CSidlManager::GetSpellGemDrawTemplateFromParamSpellGemDrawTemplate(class CParamSpellGemDrawTemplate const &)const; +EQLIB_OBJECT class CTAFrameDraw * CSidlManager::FindFrameDraw(unsigned __int32)const; +EQLIB_OBJECT class CTAFrameDraw CSidlManager::CreateTAFrameDrawFromSidlFrame(class CParamFrameTemplate const *)const; +EQLIB_OBJECT class CTextureAnimation * CSidlManager::FindAnimation(class CXStr)const; +EQLIB_OBJECT class CTextureAnimation * CSidlManager::FindAnimation(unsigned __int32)const; +EQLIB_OBJECT class CTextureAnimation CSidlManager::CreateTextureAnimationFromSidlAnimation(class CParamUi2DAnimation const *)const; +EQLIB_OBJECT class CXStr CSidlManager::GetParsingErrorMsg(void)const; +EQLIB_OBJECT class CXWnd * CSidlManager::CreateXWndFromTemplate(class CXWnd *,class CControlTemplate *); +EQLIB_OBJECT class CXWndDrawTemplate * CSidlManager::FindDrawTemplate(class CXStr)const; +EQLIB_OBJECT class CXWndDrawTemplate * CSidlManager::FindDrawTemplate(unsigned __int32)const; +EQLIB_OBJECT class CXWndDrawTemplate CSidlManager::CreateDrawTemplateFromParamWindowDrawTemplate(class CParamWindowDrawTemplate const *)const; +//EQLIB_OBJECT enum EStaticScreenPieceClasses CSidlManager::GetScreenPieceEnum(class CScreenPieceTemplate *)const; +EQLIB_OBJECT static class CXPoint __cdecl CSidlManager::GetPointFromParamPoint(class CParamPoint const &); +EQLIB_OBJECT static class CXRect __cdecl CSidlManager::GetRectFromParamPointSize(class CParamPoint const &,class CParamSize const &); +EQLIB_OBJECT static class CXSize __cdecl CSidlManager::GetSizeFromParamSize(class CParamSize const &); +EQLIB_OBJECT static class CXStr __cdecl CSidlManager::TranslateString(class CXStr); +EQLIB_OBJECT static unsigned long __cdecl CSidlManager::GetD3DCOLOR(class CParamRGB const &); +EQLIB_OBJECT class CUITextureInfo * CSidlManager::FindTexture(class CXStr)const; +EQLIB_OBJECT class CUITextureInfo * CSidlManager::FindTexture(unsigned __int32)const; +EQLIB_OBJECT void CSidlManager::AddAnimationInOrder(class CTextureAnimation *); +EQLIB_OBJECT void CSidlManager::AddDrawTemplateInOrder(class CXWndDrawTemplate *); +EQLIB_OBJECT void CSidlManager::AddScreenPieceTemplateInOrder(class CScreenPieceTemplate *); +EQLIB_OBJECT void CSidlManager::AddTAFrameDrawInOrder(class CTAFrameDraw *); +EQLIB_OBJECT void CSidlManager::DeleteContents(void); +EQLIB_OBJECT void CSidlManager::LoadSidl(class CXStr,class CXStr,class CXStr); +// virtual +EQLIB_OBJECT CSidlManager::~CSidlManager(void); +//EQLIB_OBJECT void * CSidlManager::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSidlManager::`vector deleting destructor'(unsigned int); +}; + +class CSkillsSelectWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CSkillsSelectWnd::CSkillsSelectWnd(class CXWnd *); +EQLIB_OBJECT void CSkillsSelectWnd::Refresh(void); +EQLIB_OBJECT void CSkillsSelectWnd::SetTypesToDisplay(int); +// virtual +EQLIB_OBJECT CSkillsSelectWnd::~CSkillsSelectWnd(void); +EQLIB_OBJECT bool CSkillsSelectWnd::IsActive(void); +EQLIB_OBJECT int CSkillsSelectWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CSkillsSelectWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSkillsSelectWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CSkillsSelectWnd::Activate(void); +EQLIB_OBJECT void CSkillsSelectWnd::Deactivate(void); +// private +EQLIB_OBJECT void CSkillsSelectWnd::UpdateAll(void); +EQLIB_OBJECT void CSkillsSelectWnd::UpdateSkill(int); +}; + +class CSkillsWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CSkillsWnd::CSkillsWnd(class CXWnd *); +EQLIB_OBJECT void CSkillsWnd::Activate(void); +EQLIB_OBJECT void CSkillsWnd::SkillImproveOccurred(int); +// virtual +EQLIB_OBJECT CSkillsWnd::~CSkillsWnd(void); +EQLIB_OBJECT int CSkillsWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CSkillsWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSkillsWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CSkillsWnd::Deactivate(void); +// protected +EQLIB_OBJECT void CSkillsWnd::UpdateAll(void); +EQLIB_OBJECT void CSkillsWnd::UpdateSkill(int); +}; + +class CSliderDrawTemplate +{ +public: +EQLIB_OBJECT CSliderDrawTemplate::~CSliderDrawTemplate(void); +}; + +class CSliderTemplate +{ +public: +EQLIB_OBJECT CSliderTemplate::CSliderTemplate(class CParamSlider *); +// virtual +EQLIB_OBJECT CSliderTemplate::~CSliderTemplate(void); +//EQLIB_OBJECT void * CSliderTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSliderTemplate::`vector deleting destructor'(unsigned int); +}; + +class CSliderWnd: public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CSliderWnd::CSliderWnd(class CXWnd *,unsigned __int32,class CXRect,class CSliderTemplate *); +EQLIB_OBJECT class CXRect CSliderWnd::GetEndCapLeftRect(void)const; +EQLIB_OBJECT class CXRect CSliderWnd::GetEndCapRightRect(void)const; +EQLIB_OBJECT class CXRect CSliderWnd::GetMiddleRangeRect(void)const; +EQLIB_OBJECT class CXRect CSliderWnd::GetThumbRect(void)const; +EQLIB_OBJECT int CSliderWnd::GetValue(void)const; +EQLIB_OBJECT void CSliderWnd::SetNumTicks(int); +EQLIB_OBJECT void CSliderWnd::SetValue(int); +// virtual +EQLIB_OBJECT CSliderWnd::~CSliderWnd(void); +EQLIB_OBJECT int CSliderWnd::Draw(void)const; +EQLIB_OBJECT int CSliderWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int CSliderWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSliderWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSliderWnd::HandleLButtonUpAfterHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSliderWnd::HandleMouseMove(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSliderWnd::OnProcessFrame(void); +//EQLIB_OBJECT void * CSliderWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSliderWnd::`vector deleting destructor'(unsigned int); +// private +EQLIB_OBJECT int CSliderWnd::DrawEndCapLeft(void)const; +EQLIB_OBJECT int CSliderWnd::DrawEndCapRight(void)const; +EQLIB_OBJECT int CSliderWnd::DrawMiddleRange(void)const; +EQLIB_OBJECT int CSliderWnd::DrawThumb(void)const; +EQLIB_OBJECT void CSliderWnd::SetThumbToOffset(int); +EQLIB_OBJECT void CSliderWnd::UpdateMiddleRange(void); +EQLIB_OBJECT void CSliderWnd::UpdateThumb(void); +}; + +class CSocialEditWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CSocialEditWnd::CSocialEditWnd(class CXWnd *); +EQLIB_OBJECT unsigned long CSocialEditWnd::GetSocialTextColor(int); +EQLIB_OBJECT void CSocialEditWnd::Activate(int); +// virtual +EQLIB_OBJECT CSocialEditWnd::~CSocialEditWnd(void); +EQLIB_OBJECT int CSocialEditWnd::Draw(void)const; +EQLIB_OBJECT int CSocialEditWnd::OnProcessFrame(void); +EQLIB_OBJECT int CSocialEditWnd::OnSetFocus(class CXWnd *); +EQLIB_OBJECT int CSocialEditWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CSocialEditWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSocialEditWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CSocialEditWnd::Deactivate(void); +// private +EQLIB_OBJECT void CSocialEditWnd::ClickedAccept(void); +EQLIB_OBJECT void CSocialEditWnd::ClickedClear(void); +EQLIB_OBJECT void CSocialEditWnd::ClickedTextColorButton(int); +EQLIB_OBJECT void CSocialEditWnd::Init(void); +EQLIB_OBJECT void CSocialEditWnd::UpdateControlsFromSocial(void); +}; + +class CSoulmarkWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CSoulmarkWnd::CSoulmarkWnd(class CXWnd *); +EQLIB_OBJECT void CSoulmarkWnd::Activate(char *,char *); +EQLIB_OBJECT void CSoulmarkWnd::Activate(void); +EQLIB_OBJECT void CSoulmarkWnd::Clear(void); +EQLIB_OBJECT void CSoulmarkWnd::FillFields(void); +EQLIB_OBJECT void CSoulmarkWnd::Inquire(char *); +EQLIB_OBJECT void CSoulmarkWnd::Praise(char *); +EQLIB_OBJECT void CSoulmarkWnd::SaveMarks(void); +EQLIB_OBJECT void CSoulmarkWnd::UpdateList(void); +EQLIB_OBJECT void CSoulmarkWnd::UpdateSoulmarks(struct soulMarkMsg *); +EQLIB_OBJECT void CSoulmarkWnd::Warn(char *); +// virtual +EQLIB_OBJECT CSoulmarkWnd::~CSoulmarkWnd(void); +EQLIB_OBJECT int CSoulmarkWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CSoulmarkWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSoulmarkWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CSoulmarkWnd::Deactivate(void); +// protected +EQLIB_OBJECT void CSoulmarkWnd::AddMark(int,char *,char *,char *); +EQLIB_OBJECT void CSoulmarkWnd::Inquire(char *,char *); +}; + +class CSpellBookWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CSpellBookWnd::CSpellBookWnd(class CXWnd *); +EQLIB_OBJECT bool CSpellBookWnd::StartSpellMemorization(int,int,bool); +EQLIB_OBJECT int CSpellBookWnd::GetSpellMemTicksLeft(void); +EQLIB_OBJECT int CSpellBookWnd::GetSpellScribeTicksLeft(void); +EQLIB_OBJECT static int __cdecl CSpellBookWnd::GetBookSlot(int); +EQLIB_OBJECT void CSpellBookWnd::Activate(void); +EQLIB_OBJECT void CSpellBookWnd::AutoMemSpell(int,int); +EQLIB_OBJECT void CSpellBookWnd::DeleteSpellFromBook(int,int); +EQLIB_OBJECT void CSpellBookWnd::FinishMemorizing(int,int); +EQLIB_OBJECT void CSpellBookWnd::FinishScribing(int,int); +EQLIB_OBJECT void CSpellBookWnd::MemorizeSet(int *,int); +EQLIB_OBJECT void CSpellBookWnd::RequestSpellDeletion(int); +EQLIB_OBJECT void CSpellBookWnd::SwapSpellBookSlots(int,int); +EQLIB_OBJECT void CSpellBookWnd::TurnToPage(int); +// virtual +EQLIB_OBJECT CSpellBookWnd::~CSpellBookWnd(void); +EQLIB_OBJECT int CSpellBookWnd::Draw(void)const; +EQLIB_OBJECT int CSpellBookWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int CSpellBookWnd::OnProcessFrame(void); +EQLIB_OBJECT int CSpellBookWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CSpellBookWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSpellBookWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CSpellBookWnd::Deactivate(void); +// private +EQLIB_OBJECT bool CSpellBookWnd::CanStartMemming(int); +EQLIB_OBJECT void CSpellBookWnd::ContinueSetMem(void); +EQLIB_OBJECT void CSpellBookWnd::DelayedSpellMem(int,int,int); +EQLIB_OBJECT void CSpellBookWnd::DisplaySpellInfo(int); +EQLIB_OBJECT void CSpellBookWnd::EndSetMem(void); +EQLIB_OBJECT void CSpellBookWnd::GetSpellDeletionConfirmation(int); +EQLIB_OBJECT void CSpellBookWnd::HandleLeftClickOnSpell(int); +EQLIB_OBJECT void CSpellBookWnd::HandleRightClickOnSpell(int); +EQLIB_OBJECT void CSpellBookWnd::HandleSpellInfoDisplay(class CXWnd *); +EQLIB_OBJECT void CSpellBookWnd::Init(void); +EQLIB_OBJECT void CSpellBookWnd::StartSpellMemorizationDrag(int,class CButtonWnd *); +EQLIB_OBJECT void CSpellBookWnd::StartSpellScribe(int); +EQLIB_OBJECT void CSpellBookWnd::StopSpellBookAction(void); +EQLIB_OBJECT void CSpellBookWnd::UpdateSpellBookDisplay(void); +}; + +class CSpellGemDrawTemplate +{ +public: +EQLIB_OBJECT CSpellGemDrawTemplate::~CSpellGemDrawTemplate(void); +}; + +class CSpellGemTemplate +{ +public: +EQLIB_OBJECT CSpellGemTemplate::CSpellGemTemplate(class CParamSpellGem *); +// virtual +EQLIB_OBJECT CSpellGemTemplate::~CSpellGemTemplate(void); +//EQLIB_OBJECT void * CSpellGemTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSpellGemTemplate::`vector deleting destructor'(unsigned int); +}; + +class CSpellGemWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CSpellGemWnd::CSpellGemWnd(class CXWnd *,unsigned __int32,class CXRect,class CTextureAnimation *,class CTextureAnimation *,class CTextureAnimation *,int,int,unsigned long); +EQLIB_OBJECT void CSpellGemWnd::SetCheck(bool); +EQLIB_OBJECT void CSpellGemWnd::SetGemTintStage(int); +EQLIB_OBJECT void CSpellGemWnd::SetSpellGemTint(unsigned long); +EQLIB_OBJECT void CSpellGemWnd::SetSpellIconIndex(int); +// virtual +EQLIB_OBJECT CSpellGemWnd::~CSpellGemWnd(void); +EQLIB_OBJECT int CSpellGemWnd::Draw(void)const; +EQLIB_OBJECT int CSpellGemWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSpellGemWnd::HandleLButtonHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSpellGemWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSpellGemWnd::HandleLButtonUpAfterHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSpellGemWnd::HandleRButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSpellGemWnd::HandleRButtonHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSpellGemWnd::HandleRButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSpellGemWnd::HandleRButtonUpAfterHeld(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CSpellGemWnd::OnProcessFrame(void); +//EQLIB_OBJECT void * CSpellGemWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSpellGemWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CSpellGemWnd::SetAttributesFromSidl(class CParamScreenPiece *); +// protected +EQLIB_OBJECT void CSpellGemWnd::Init(void); +}; + +class CStaticAnimationTemplate +{ +public: +EQLIB_OBJECT CStaticAnimationTemplate::CStaticAnimationTemplate(class CParamStaticAnimation *); +// virtual +EQLIB_OBJECT CStaticAnimationTemplate::~CStaticAnimationTemplate(void); +//EQLIB_OBJECT void * CStaticAnimationTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CStaticAnimationTemplate::`vector deleting destructor'(unsigned int); +}; + +class CStaticFrameTemplate +{ +public: +EQLIB_OBJECT CStaticFrameTemplate::CStaticFrameTemplate(class CParamStaticFrame *); +// virtual +EQLIB_OBJECT CStaticFrameTemplate::~CStaticFrameTemplate(void); +//EQLIB_OBJECT void * CStaticFrameTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CStaticFrameTemplate::`vector deleting destructor'(unsigned int); +}; + +class CStaticHeaderTemplate +{ +public: +EQLIB_OBJECT CStaticHeaderTemplate::CStaticHeaderTemplate(class CParamStaticHeader *); +// virtual +EQLIB_OBJECT CStaticHeaderTemplate::~CStaticHeaderTemplate(void); +//EQLIB_OBJECT void * CStaticHeaderTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CStaticHeaderTemplate::`vector deleting destructor'(unsigned int); +}; + +class CStaticScreenPieceTemplate +{ +public: +EQLIB_OBJECT CStaticScreenPieceTemplate::CStaticScreenPieceTemplate(class CParamStaticScreenPiece *); +// virtual +EQLIB_OBJECT CStaticScreenPieceTemplate::~CStaticScreenPieceTemplate(void); +//EQLIB_OBJECT void * CStaticScreenPieceTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CStaticScreenPieceTemplate::`vector deleting destructor'(unsigned int); +}; + +class CStaticTextTemplate +{ +public: +EQLIB_OBJECT CStaticTextTemplate::CStaticTextTemplate(class CParamStaticText *); +EQLIB_OBJECT class CXStr CStaticTextTemplate::SetText(class CXStr); +// virtual +EQLIB_OBJECT CStaticTextTemplate::~CStaticTextTemplate(void); +//EQLIB_OBJECT void * CStaticTextTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CStaticTextTemplate::`vector deleting destructor'(unsigned int); +}; + +class CSTMLboxTemplate +{ +public: +EQLIB_OBJECT CSTMLboxTemplate::CSTMLboxTemplate(class CParamSTMLbox *); +// virtual +EQLIB_OBJECT CSTMLboxTemplate::~CSTMLboxTemplate(void); +//EQLIB_OBJECT void * CSTMLboxTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CSTMLboxTemplate::`vector deleting destructor'(unsigned int); +}; + +class CStmlReport +{ +public: +EQLIB_OBJECT class CXStr CStmlReport::GetReport(void)const; +EQLIB_OBJECT static class CStmlReport * __cdecl CStmlReport::CreateReport(class CXStr); +// private +EQLIB_OBJECT static unsigned __int32 CStmlReport::m_uLastId; +}; + +class CStmlWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CStmlWnd::CStmlWnd(class CXWnd *,unsigned __int32,class CXRect); +EQLIB_OBJECT bool CStmlWnd::CanGoBackward(void); +EQLIB_OBJECT class CXSize CStmlWnd::AppendSTML(class CXStr); // lax 11-15-2003 +EQLIB_OBJECT class CXStr CStmlWnd::GetSTMLText(void)const; +EQLIB_OBJECT class CXStr CStmlWnd::GetVisibleText(class CXStr&,class CXRect)const; +EQLIB_OBJECT static class CXStr __cdecl CStmlWnd::MakeStmlColorTag(unsigned long); +EQLIB_OBJECT static class CXStr __cdecl CStmlWnd::MakeWndNotificationTag(unsigned __int32,class CXStr&,class CXStr&); +EQLIB_OBJECT void CStmlWnd::ActivateLink(class SLinkInfo); +EQLIB_OBJECT void CStmlWnd::ForceParseNow(void); +EQLIB_OBJECT void CStmlWnd::GoToBackHistoryLink(void); +//EQLIB_OBJECT void CStmlWnd::LoadPage(class CXStr,enum ESTMLTargetValue,bool); +EQLIB_OBJECT void CStmlWnd::SetSTMLText(class CXStr,bool,class SLinkInfo *); +EQLIB_OBJECT void CStmlWnd::SetSTMLTextWithoutHistory(class CXStr); +// virtual +EQLIB_OBJECT CStmlWnd::~CStmlWnd(void); +EQLIB_OBJECT bool CStmlWnd::IsPointTransparent(class CXPoint)const; +EQLIB_OBJECT class CTextureAnimation * CStmlWnd::GetCursorToDisplay(void)const; +EQLIB_OBJECT int CStmlWnd::Draw(void)const; +EQLIB_OBJECT int CStmlWnd::HandleKeyboardMsg(unsigned __int32,unsigned __int32,bool); +EQLIB_OBJECT int CStmlWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CStmlWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CStmlWnd::HandleMouseMove(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CStmlWnd::OnHScroll(EScrollCode,int); +EQLIB_OBJECT int CStmlWnd::OnMove(class CXRect); +EQLIB_OBJECT int CStmlWnd::OnProcessFrame(void); +EQLIB_OBJECT int CStmlWnd::OnResize(int,int); +EQLIB_OBJECT int CStmlWnd::OnVScroll(EScrollCode,int); +//EQLIB_OBJECT void * CStmlWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CStmlWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CStmlWnd::SetWindowTextA(class CXStr); +// protected +EQLIB_OBJECT bool CStmlWnd::IsLinkActive(class SLinkInfo)const; +EQLIB_OBJECT bool CStmlWnd::ParseAmpersand(class CXStr,char *)const; +EQLIB_OBJECT static bool __cdecl CStmlWnd::CanBreakAtCharacter(unsigned short); +EQLIB_OBJECT static bool __cdecl CStmlWnd::IsCharacterNotASpaceAndNotNULL(unsigned short); +EQLIB_OBJECT static bool __cdecl CStmlWnd::IsCharacterNotEquals(unsigned short); +EQLIB_OBJECT static bool __cdecl CStmlWnd::IsCharacterNotQuotes(unsigned short); +EQLIB_OBJECT unsigned short CStmlWnd::FastForwardPastQuotesAndGetNextTagPiece(class CXStr&,class CXStr *,int *,bool); +EQLIB_OBJECT unsigned short CStmlWnd::FastForwardPastSpaces(class CXStr&,int *); +EQLIB_OBJECT unsigned short CStmlWnd::FastForwardPastSpacesAndQuotes(class CXStr&,int *); +EQLIB_OBJECT unsigned short CStmlWnd::FastForwardToEndOfTag(class CXStr&,class CXStr *,int *,char); +EQLIB_OBJECT unsigned short CStmlWnd::GetNextChar(int *,class CXStr&); +EQLIB_OBJECT unsigned short CStmlWnd::GetNextTagPiece(class CXStr&,class CXStr *,int *,bool (__cdecl*)(unsigned short),bool); +EQLIB_OBJECT unsigned short CStmlWnd::GetThisChar(int,class CXStr&); +EQLIB_OBJECT void CStmlWnd::ActivateLinkFile(class SLinkInfo); +EQLIB_OBJECT void CStmlWnd::ActivateLinkMessageId(class SLinkInfo); +EQLIB_OBJECT void CStmlWnd::ActivateLinkReport(class SLinkInfo,bool); +EQLIB_OBJECT void CStmlWnd::ActivateLinkWndNotify(class SLinkInfo); +EQLIB_OBJECT void CStmlWnd::AddLinkToHistory(class SLinkInfo,class CXStr); +EQLIB_OBJECT void CStmlWnd::AddTextPieceToLine(class SParseVariables *); +EQLIB_OBJECT void CStmlWnd::CalculateHSBRange(int); +EQLIB_OBJECT void CStmlWnd::CalculateVSBRange(int); +EQLIB_OBJECT void CStmlWnd::CompleteParse(void); +EQLIB_OBJECT void CStmlWnd::InitializeTempVariables(class SParseVariables *,class CXRect); +EQLIB_OBJECT void CStmlWnd::InitializeTextLine(class SParseVariables *,int); +EQLIB_OBJECT void CStmlWnd::InitializeWindowVariables(void); +//EQLIB_OBJECT void CStmlWnd::ParseLinkTarget(class CXStr,enum ESTMLTargetValue *)const; +EQLIB_OBJECT void CStmlWnd::ParseSTMLHead(class CXStr&); +EQLIB_OBJECT void CStmlWnd::ParseSTMLTable(class CXStr&,int *,class CXStr,class SParseVariables *); +EQLIB_OBJECT void CStmlWnd::ParseSTMLTableAttributes(class CXStr&,class STable *); +//EQLIB_OBJECT void CStmlWnd::ParseTagAlign(class CXStr,enum ESTMLAlign *)const; +EQLIB_OBJECT void CStmlWnd::ParseTagColor(class CXStr&,unsigned long *)const; +EQLIB_OBJECT void CStmlWnd::ParseTagFace(class CXStr&,class CTextureFont const * *)const; +EQLIB_OBJECT void CStmlWnd::ResetTempVariablesForNewLine(class SParseVariables *); +EQLIB_OBJECT void CStmlWnd::StripFirstSTMLLines(int); +EQLIB_OBJECT void CStmlWnd::UpdateHistoryString(__int32,class CXStr&); +}; + +class CStoryWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CStoryWnd::CStoryWnd(class CXWnd *); +EQLIB_OBJECT bool CStoryWnd::HasNew(void); +EQLIB_OBJECT bool CStoryWnd::ShowAuto(void); +EQLIB_OBJECT void CStoryWnd::Activate(void); +EQLIB_OBJECT void CStoryWnd::SaveIni(void); +// virtual +EQLIB_OBJECT CStoryWnd::~CStoryWnd(void); +EQLIB_OBJECT int CStoryWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CStoryWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CStoryWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CStoryWnd::Deactivate(void); +EQLIB_OBJECT void CStoryWnd::LoadIniInfo(void); +// protected +EQLIB_OBJECT void CStoryWnd::SelectIndex(int); +EQLIB_OBJECT void CStoryWnd::SelectOldestNew(void); +// private +EQLIB_OBJECT void CStoryWnd::Init(void); +}; + +class CTabBoxTemplate +{ +public: +EQLIB_OBJECT CTabBoxTemplate::CTabBoxTemplate(class CParamTabBox *); +// virtual +EQLIB_OBJECT CTabBoxTemplate::~CTabBoxTemplate(void); +//EQLIB_OBJECT void * CTabBoxTemplate::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTabBoxTemplate::`vector deleting destructor'(unsigned int); +}; + +class CTabWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CTabWnd::CTabWnd(class CXWnd *,unsigned __int32,class CXRect,class CTabBoxTemplate *); +EQLIB_OBJECT class CPageWnd * CTabWnd::GetCurrentPage(void)const; +EQLIB_OBJECT class CXRect CTabWnd::GetPageClientRect(void)const; +EQLIB_OBJECT class CXRect CTabWnd::GetPageInnerRect(void)const; +EQLIB_OBJECT class CXRect CTabWnd::GetTabInnerRect(int)const; +EQLIB_OBJECT class CXRect CTabWnd::GetTabRect(int)const; +EQLIB_OBJECT int CTabWnd::GetCurrentTabIndex(void)const; +EQLIB_OBJECT int CTabWnd::GetNumTabs(void)const; +EQLIB_OBJECT void CTabWnd::InsertPage(class CPageWnd *,int); +EQLIB_OBJECT void CTabWnd::SetPage(class CPageWnd *,bool); +EQLIB_OBJECT void CTabWnd::SetPage(int,bool); +EQLIB_OBJECT void CTabWnd::SetPageRect(class CXRect); +EQLIB_OBJECT void CTabWnd::UpdatePage(void); +// virtual +EQLIB_OBJECT CTabWnd::~CTabWnd(void); +EQLIB_OBJECT int CTabWnd::Draw(void)const; +EQLIB_OBJECT int CTabWnd::DrawTooltip(class CXWnd const *); +EQLIB_OBJECT int CTabWnd::HandleLButtonDown(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CTabWnd::HandleLButtonUp(class CXPoint,unsigned __int32); +EQLIB_OBJECT int CTabWnd::OnResize(int,int); +EQLIB_OBJECT int CTabWnd::OnShow(void); +//EQLIB_OBJECT void * CTabWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTabWnd::`vector deleting destructor'(unsigned int); +// private +EQLIB_OBJECT bool CTabWnd::IndexInBounds(int)const; +EQLIB_OBJECT class CPageWnd * CTabWnd::GetPageFromTabIndex(int)const; +EQLIB_OBJECT class CPageWnd * CTabWnd::GetPageFromTabPoint(class CXPoint)const; +EQLIB_OBJECT int CTabWnd::DrawCurrentPage(void)const; +EQLIB_OBJECT int CTabWnd::DrawTab(int)const; +}; + +class CTAFrameDraw +{ +public: +EQLIB_OBJECT CTAFrameDraw::~CTAFrameDraw(void); +EQLIB_OBJECT CTAFrameDraw::CTAFrameDraw(class CTAFrameDraw const &); +EQLIB_OBJECT CTAFrameDraw::CTAFrameDraw(class CXStr); +EQLIB_OBJECT bool CTAFrameDraw::IsHorizontal(void)const; +EQLIB_OBJECT bool CTAFrameDraw::IsVertical(void)const; +EQLIB_OBJECT class CTAFrameDraw & CTAFrameDraw::operator=(class CTAFrameDraw const &); +EQLIB_OBJECT class CTextureAnimation * CTAFrameDraw::GetAnimation(int)const; +EQLIB_OBJECT class CXRect CTAFrameDraw::GetHitTestRect(class CXRect,int)const; +EQLIB_OBJECT class CXRect CTAFrameDraw::GetInnerRect(class CXRect)const; +EQLIB_OBJECT class CXRect CTAFrameDraw::GetPieceRect(class CXRect,int)const; +EQLIB_OBJECT class CXSize CTAFrameDraw::GetFrameSize(void)const; +EQLIB_OBJECT class CXStr CTAFrameDraw::GetName(void)const; +EQLIB_OBJECT int CTAFrameDraw::Draw(class CXRect,class CXRect)const; +EQLIB_OBJECT int CTAFrameDraw::Draw(class CXRect,class CXRect,int)const; +EQLIB_OBJECT int CTAFrameDraw::GetExtent(void)const; +EQLIB_OBJECT int CTAFrameDraw::GetMinLength(void)const; +EQLIB_OBJECT void CTAFrameDraw::Set(class CTextureAnimation * * const); +}; + +class CTargetWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CTargetWnd::CTargetWnd(class CXWnd *); +EQLIB_OBJECT void CTargetWnd::Activate(void); +// virtual +EQLIB_OBJECT CTargetWnd::~CTargetWnd(void); +EQLIB_OBJECT int CTargetWnd::OnProcessFrame(void); +//EQLIB_OBJECT void * CTargetWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTargetWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CTargetWnd::Deactivate(void); +// private +EQLIB_OBJECT void CTargetWnd::Init(void); +}; + +class CTextEntryWnd : public CEditBaseWnd +{ +public: +EQLIB_OBJECT CTextEntryWnd::CTextEntryWnd(class CXWnd *); +EQLIB_OBJECT class CXStr CTextEntryWnd::GetEntryText(void); +EQLIB_OBJECT void CTextEntryWnd::Activate(class CXWnd *,int,char *,int,int,char *); +EQLIB_OBJECT void CTextEntryWnd::Callback(bool); +// virtual +EQLIB_OBJECT CTextEntryWnd::~CTextEntryWnd(void); +EQLIB_OBJECT int CTextEntryWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CTextEntryWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTextEntryWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CTextEntryWnd::Deactivate(void); +// private +EQLIB_OBJECT void CTextEntryWnd::UpdateButtons(void); + +/*0x148*/// DWORD Unknown0x148; +/*0x14C*/// DWORD Unknown0x14c; +/*0x150*/// PCXSTR Data; +/*0x154*/// DWORD Unknown0x154; +/*0x158*/// CSidlScreenWnd *Entry; +/*0x15c*/// CSidlScreenWnd *Prompt; +/*0x160*/// CSidlScreenWnd *OK; +/*0x164*/// CSidlScreenWnd *Cancel; +}; + +class CTextureAnimation +{ +public: +EQLIB_OBJECT CTextureAnimation::CTextureAnimation(class CXStr); +EQLIB_OBJECT CTextureAnimation::CTextureAnimation(void); +EQLIB_OBJECT class CTextureAnimation & CTextureAnimation::operator=(class CTextureAnimation const &); +EQLIB_OBJECT class CXPoint CTextureAnimation::GetHotspot(void)const; +EQLIB_OBJECT class CXStr CTextureAnimation::GetName(void)const; +EQLIB_OBJECT int CTextureAnimation::AddBlankFrame(unsigned __int32,class CXPoint); +EQLIB_OBJECT int CTextureAnimation::AddFrame(class CUITexturePiece,unsigned __int32,class CXPoint); +EQLIB_OBJECT int CTextureAnimation::AddFrame(class CUITextureInfo const *,class CXRect,unsigned __int32,class CXPoint); +EQLIB_OBJECT int CTextureAnimation::Draw(class CXPoint,class CXRect,unsigned long,unsigned long)const; +EQLIB_OBJECT int CTextureAnimation::Draw(class CXRect,class CXRect,unsigned long,unsigned long)const; +EQLIB_OBJECT int CTextureAnimation::GetCurFrame(void)const; +EQLIB_OBJECT int CTextureAnimation::Preload(void); +EQLIB_OBJECT void CTextureAnimation::Reset(void); +EQLIB_OBJECT void CTextureAnimation::SetCurCell(int); +EQLIB_OBJECT void CTextureAnimation::SetCurFrame(int); +// virtual +EQLIB_OBJECT CTextureAnimation::~CTextureAnimation(void); +//EQLIB_OBJECT void * CTextureAnimation::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTextureAnimation::`vector deleting destructor'(unsigned int); +// protected +EQLIB_OBJECT static unsigned __int32 CTextureAnimation::sm_uMaxId; +}; + +class CTextureFont +{ +public: +EQLIB_OBJECT class CXStr CTextureFont::GetName(void)const; +EQLIB_OBJECT int CTextureFont::DrawWrappedText(class CXStr,class CXRect,class CXRect,unsigned long,unsigned short,int)const; +EQLIB_OBJECT int CTextureFont::DrawWrappedText(class CXStr *,int,int,int,class CXRect *,unsigned long,unsigned short,int)const; +EQLIB_OBJECT int CTextureFont::GetHeight(void)const; +EQLIB_OBJECT int CTextureFont::GetKerning(unsigned short,unsigned short)const; +EQLIB_OBJECT int CTextureFont::GetTextExtent(class CXStr)const; +EQLIB_OBJECT int CTextureFont::GetWidth(unsigned short)const; +// virtual +EQLIB_OBJECT CTextureFont::~CTextureFont(void); +//EQLIB_OBJECT void * CTextureFont::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTextureFont::`vector deleting destructor'(unsigned int); +void *Unknown0x0; +DWORD Size; +}; + +class CTimeLeftWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CTimeLeftWnd::CTimeLeftWnd(long); +EQLIB_OBJECT void CTimeLeftWnd::Activate(void); +// virtual +EQLIB_OBJECT CTimeLeftWnd::~CTimeLeftWnd(void); +EQLIB_OBJECT int CTimeLeftWnd::Draw(void)const; +EQLIB_OBJECT int CTimeLeftWnd::OnProcessFrame(void); +//EQLIB_OBJECT void * CTimeLeftWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTimeLeftWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CTimeLeftWnd::Deactivate(void); +}; + +class CTipWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CTipWnd::CTipWnd(class CXWnd *,int); +EQLIB_OBJECT bool CTipWnd::Activate(int,bool); +EQLIB_OBJECT void CTipWnd::InitializeTipSettings(void); +EQLIB_OBJECT void CTipWnd::UpdateButtons(void); +// virtual +EQLIB_OBJECT CTipWnd::~CTipWnd(void); +EQLIB_OBJECT int CTipWnd::OnProcessFrame(void); +EQLIB_OBJECT int CTipWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CTipWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTipWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CTipWnd::Deactivate(void); +// protected +EQLIB_OBJECT bool CTipWnd::IsRecentTOTD(int); +EQLIB_OBJECT int CTipWnd::SelectRandomTip(void); +EQLIB_OBJECT void CTipWnd::AddContextTip(int); +EQLIB_OBJECT void CTipWnd::LoadINISettings(void); +EQLIB_OBJECT void CTipWnd::SetTOTD(int); +EQLIB_OBJECT void CTipWnd::ShowHistoryTip(int); +// private +EQLIB_OBJECT void CTipWnd::CleanDayTips(void); +EQLIB_OBJECT void CTipWnd::LoadDayTips(void); +}; + +class CTokenXML +{ +public: +EQLIB_OBJECT CTokenXML::~CTokenXML(void); +}; + +class CTrackingWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CTrackingWnd::CTrackingWnd(class CXWnd *); +EQLIB_OBJECT void CTrackingWnd::Activate(void); +EQLIB_OBJECT void CTrackingWnd::DoTrackFilter(bool); +EQLIB_OBJECT void CTrackingWnd::DoTrackSort(bool); +EQLIB_OBJECT void CTrackingWnd::RemovePlayerFromTracking(class EQPlayer *); +EQLIB_OBJECT void CTrackingWnd::SetTrackingList(struct TrackingHit *,int); +// virtual +EQLIB_OBJECT CTrackingWnd::~CTrackingWnd(void); +EQLIB_OBJECT int CTrackingWnd::Draw(void)const; +EQLIB_OBJECT int CTrackingWnd::OnProcessFrame(void); +EQLIB_OBJECT int CTrackingWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CTrackingWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTrackingWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CTrackingWnd::Deactivate(void); +// private +EQLIB_OBJECT int CTrackingWnd::GetListIdByData(unsigned int); +EQLIB_OBJECT unsigned long CTrackingWnd::GetTrackColor(int); +EQLIB_OBJECT void CTrackingWnd::GenerateTrackingList(void); +EQLIB_OBJECT void CTrackingWnd::Init(void); +EQLIB_OBJECT void CTrackingWnd::NotifyServerOfTrackingTarget(int); +EQLIB_OBJECT void CTrackingWnd::RemoveFromListWndByData(unsigned int); +EQLIB_OBJECT void CTrackingWnd::RemovePlayerFromTracking(int); +EQLIB_OBJECT void CTrackingWnd::UpdateTrackingControls(void); +EQLIB_OBJECT void CTrackingWnd::UpdateTrackingList(bool); +}; + +class CTradeWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CTradeWnd::CTradeWnd(class CXWnd *); +EQLIB_OBJECT bool CTradeWnd::IsMyTradeSlot(int,bool *); +EQLIB_OBJECT void CTradeWnd::Activate(class EQPlayer *,bool); +EQLIB_OBJECT void CTradeWnd::AddContainerToHisTradeArray(class EQ_Container *); +EQLIB_OBJECT void CTradeWnd::AddEquipmentToHisTradeArray(class EQ_Equipment *); +EQLIB_OBJECT void CTradeWnd::AddNoteToHisTradeArray(class EQ_Note *); +EQLIB_OBJECT void CTradeWnd::ClickedCancelButton(void); +EQLIB_OBJECT void CTradeWnd::ClickedMoneyButton(int); +EQLIB_OBJECT void CTradeWnd::ClickedTradeButton(void); +EQLIB_OBJECT void CTradeWnd::CompleteTrade(void); +EQLIB_OBJECT void CTradeWnd::DeleteItemFromHisTradeArray(int); +EQLIB_OBJECT void CTradeWnd::DropItemIntoTrade(void); +EQLIB_OBJECT void CTradeWnd::SetHisMoney(int,long); +EQLIB_OBJECT void CTradeWnd::SetHisReadyTrade(bool); +EQLIB_OBJECT void CTradeWnd::SetMyReadyTrade(bool); +EQLIB_OBJECT void CTradeWnd::TradeItemChanged(int,int); +// virtual +EQLIB_OBJECT CTradeWnd::~CTradeWnd(void); +EQLIB_OBJECT int CTradeWnd::OnProcessFrame(void); +EQLIB_OBJECT int CTradeWnd::PostDraw(void)const; +EQLIB_OBJECT int CTradeWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CTradeWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTradeWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CTradeWnd::Deactivate(void); +// private +EQLIB_OBJECT void CTradeWnd::Init(void); +EQLIB_OBJECT void CTradeWnd::UpdateTradeDisplay(void); +}; + +class CTrainWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CTrainWnd::CTrainWnd(class CXWnd *); +EQLIB_OBJECT void CTrainWnd::SetGMData(int *,unsigned char *,float); +EQLIB_OBJECT void CTrainWnd::SkillChanged(int); +// virtual +EQLIB_OBJECT CTrainWnd::~CTrainWnd(void); +EQLIB_OBJECT int CTrainWnd::OnProcessFrame(void); +EQLIB_OBJECT int CTrainWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CTrainWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CTrainWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CTrainWnd::Deactivate(void); +// protected +EQLIB_OBJECT char * CTrainWnd::SkillName(int); +EQLIB_OBJECT int CTrainWnd::SkillValue(int); +EQLIB_OBJECT void CTrainWnd::Activate(void); +EQLIB_OBJECT void CTrainWnd::SortNames(int); +EQLIB_OBJECT void CTrainWnd::SortSkill(int); +EQLIB_OBJECT void CTrainWnd::SwapSkill(int,int); +EQLIB_OBJECT void CTrainWnd::Train(void); +EQLIB_OBJECT void CTrainWnd::UpdateAll(bool); +EQLIB_OBJECT void CTrainWnd::UpdateRight(void); +EQLIB_OBJECT void CTrainWnd::UpdateSkill(int); +}; + +class CUITextureInfo +{ +public: +EQLIB_OBJECT CUITextureInfo::~CUITextureInfo(void); +EQLIB_OBJECT CUITextureInfo::CUITextureInfo(class CXStr,class CXSize); +EQLIB_OBJECT CUITextureInfo::CUITextureInfo(class CXStr,int); +EQLIB_OBJECT CUITextureInfo::CUITextureInfo(class CUITextureInfo const &); +EQLIB_OBJECT CUITextureInfo::CUITextureInfo(unsigned __int32,int); +EQLIB_OBJECT CUITextureInfo::CUITextureInfo(void); +EQLIB_OBJECT class CXStr CUITextureInfo::GetName(void)const; +EQLIB_OBJECT int CUITextureInfo::Draw(class CXRect,class CXRect,class CXRect,unsigned long *,unsigned long *)const; +EQLIB_OBJECT int CUITextureInfo::Draw(class CXRect,class CXRect,class CXRect,unsigned long,unsigned long)const; +EQLIB_OBJECT int CUITextureInfo::Preload(void); +EQLIB_OBJECT int CUITextureInfo::Tile(class CXRect,unsigned long *,unsigned long *)const; +EQLIB_OBJECT int CUITextureInfo::Tile(class CXRect,unsigned long,unsigned long)const; +EQLIB_OBJECT class CUITextureInfo & CUITextureInfo::operator=(class CUITextureInfo const &); +}; + +class CUITexturePiece +{ +public: +EQLIB_OBJECT CUITexturePiece::~CUITexturePiece(void); +EQLIB_OBJECT CUITexturePiece::CUITexturePiece(class CUITexturePiece const &); +EQLIB_OBJECT CUITexturePiece::CUITexturePiece(class CUITextureInfo,class CXRect); +EQLIB_OBJECT CUITexturePiece::CUITexturePiece(void); +EQLIB_OBJECT class CUITexturePiece & CUITexturePiece::operator=(class CUITexturePiece const &); +EQLIB_OBJECT int CUITexturePiece::Draw(class CXRect,class CXRect,class CXRect,unsigned long,unsigned long)const; +EQLIB_OBJECT int CUITexturePiece::Draw(class CXRect,class CXRect,unsigned long,unsigned long)const; +}; + +class CVector3 +{ +public: +EQLIB_OBJECT float CVector3::GetLength(void)const; +EQLIB_OBJECT float CVector3::NormalizeAndReturnLength(void); +EQLIB_OBJECT void CVector3::Normalize(void); +}; + +class CVideoModesWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CVideoModesWnd::CVideoModesWnd(class CXWnd *); +EQLIB_OBJECT void CVideoModesWnd::Activate(void); +EQLIB_OBJECT void CVideoModesWnd::RestoreOldMode(void); +EQLIB_OBJECT void CVideoModesWnd::Update(void); +// virtual +EQLIB_OBJECT CVideoModesWnd::~CVideoModesWnd(void); +EQLIB_OBJECT int CVideoModesWnd::Draw(void)const; +EQLIB_OBJECT int CVideoModesWnd::OnProcessFrame(void); +EQLIB_OBJECT int CVideoModesWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +//EQLIB_OBJECT void * CVideoModesWnd::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CVideoModesWnd::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CVideoModesWnd::Deactivate(void); +// private +EQLIB_OBJECT void CVideoModesWnd::Init(void); +EQLIB_OBJECT void CVideoModesWnd::UpdateSelection(unsigned int); +}; + +class CXFileXML +{ +public: +EQLIB_OBJECT CXFileXML::~CXFileXML(void); +EQLIB_OBJECT bool CXFileXML::Load(char *); +}; + +class CXMLData +{ +public: +EQLIB_OBJECT CXMLData::CXMLData(void); +EQLIB_OBJECT class CXMLData & CXMLData::operator=(class CXMLData const &); +// virtual +EQLIB_OBJECT CXMLData::~CXMLData(void); +EQLIB_OBJECT bool CXMLData::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT bool CXMLData::WriteToXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT int CXMLData::GetStreamSize(void); +//EQLIB_OBJECT void * CXMLData::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CXMLData::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CXMLData::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CXMLData::WriteToStream(class CMemoryStream &); +// data members +/*0x00*/ PVOID pvfTable; +/*0x04*/ DWORD Unknown0x04;// always 8 +/*0x08*/ enum UIType Type; +/*0x0C*/ DWORD Unknown0x0C;// no idea yet, some number but not unique +/*0x10*/ DWORD Unknown0x10;// always -1 +/*0x14*/ CXStr TypeName;// "Screen" (control type) +/*0x18*/ CXStr Name;// "ChatWindow" control name (used only for Screen) +/*0x1C*/ DWORD Unknown0x1C;// always null +/*0x20*/ CXStr ScreenID;// ScreenID (used only within Screen) +}; + +class CXMLDataClass +{ +public: +EQLIB_OBJECT CXMLDataClass::~CXMLDataClass(void); +EQLIB_OBJECT CXMLDataClass::CXMLDataClass(void); +EQLIB_OBJECT int CXMLDataClass::GetNumLeaf(void); +EQLIB_OBJECT int CXMLDataClass::GetStreamSize(void); +//EQLIB_OBJECT void * CXMLDataClass::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CXMLDataClass::ReadFromStream(class CMemoryStream &,class CXMLDataManager &); +EQLIB_OBJECT void CXMLDataClass::WriteToStream(class CMemoryStream &); +}; + +class CXMLDataManager +{ +public: +EQLIB_OBJECT CXMLDataManager::CXMLDataManager(void); +EQLIB_OBJECT bool CXMLDataManager::IsDerivedFrom(int,int); +EQLIB_OBJECT bool CXMLDataManager::ReadFromXMLSOM(class CXMLSOMDocument &); +EQLIB_OBJECT class CXMLData * CXMLDataManager::GetXMLData(class CXStr,class CXStr); +EQLIB_OBJECT class CXMLData * CXMLDataManager::GetXMLData(int,int); +EQLIB_OBJECT int CXMLDataManager::GetClassIdx(class CXStr); +EQLIB_OBJECT int CXMLDataManager::GetItemIdx(int,class CXStr); +EQLIB_OBJECT int CXMLDataManager::GetNumClass(void); +EQLIB_OBJECT int CXMLDataManager::GetNumItem(int); +// virtual +EQLIB_OBJECT CXMLDataManager::~CXMLDataManager(void); +EQLIB_OBJECT bool CXMLDataManager::DataValidate(void); +EQLIB_OBJECT bool CXMLDataManager::ReadValidate(class CMemoryStream &); +EQLIB_OBJECT bool CXMLDataManager::WriteValidate(class CMemoryStream &); +EQLIB_OBJECT int CXMLDataManager::GetStreamSize(void); +//EQLIB_OBJECT void * CXMLDataManager::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CXMLDataManager::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void CXMLDataManager::IndexAll(void); +EQLIB_OBJECT void CXMLDataManager::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CXMLDataManager::Set(class CXMLDataManager &); +EQLIB_OBJECT void CXMLDataManager::WriteToStream(class CMemoryStream &); +// protected +EQLIB_OBJECT void CXMLDataManager::AddToSuperType(class CXStr,class CXMLDataPtr); +EQLIB_OBJECT void CXMLDataManager::SetEnumHash(void); +}; + +class CXMLDataPtr +{ +public: +EQLIB_OBJECT CXMLDataPtr::CXMLDataPtr(void); +EQLIB_OBJECT class CXMLDataPtr & CXMLDataPtr::operator=(class CXMLDataPtr const &); +EQLIB_OBJECT void CXMLDataPtr::SetNewPtr(class CXMLData *); +// virtual +EQLIB_OBJECT CXMLDataPtr::~CXMLDataPtr(void); +//EQLIB_OBJECT void * CXMLDataPtr::`vector deleting destructor'(unsigned int); +// protected +EQLIB_OBJECT class CXMLData * CXMLDataPtr::AllocPtr(class CXMLDataPtr &,int,class CXMLData const *); +EQLIB_OBJECT void CXMLDataPtr::Free(void); +}; + +class CXMLEnumInfo +{ +public: +EQLIB_OBJECT CXMLEnumInfo::~CXMLEnumInfo(void); +EQLIB_OBJECT CXMLEnumInfo::CXMLEnumInfo(void); +EQLIB_OBJECT int CXMLEnumInfo::GetStreamSize(void); +EQLIB_OBJECT void CXMLEnumInfo::ReadFromStream(class CMemoryStream &); +EQLIB_OBJECT void CXMLEnumInfo::WriteToStream(class CMemoryStream &); +}; + +class CXMLParamManager +{ +public: +// virtual +EQLIB_OBJECT CXMLParamManager::~CXMLParamManager(void); +EQLIB_OBJECT bool CXMLParamManager::XMLDataCopy(class CXMLData *,class CXMLData *); +EQLIB_OBJECT class CXMLData * CXMLParamManager::AllocPtr(class CXMLDataPtr &,int,class CXMLData const *); +//EQLIB_OBJECT void * CXMLParamManager::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CXMLParamManager::`vector deleting destructor'(unsigned int); +}; + +class CXMLSOMAttribute +{ +public: +EQLIB_OBJECT CXMLSOMAttribute::~CXMLSOMAttribute(void); +EQLIB_OBJECT CXMLSOMAttribute::CXMLSOMAttribute(void); +EQLIB_OBJECT class CXMLSOMAttribute & CXMLSOMAttribute::operator=(class CXMLSOMAttribute const &); +//EQLIB_OBJECT void * CXMLSOMAttribute::`vector deleting destructor'(unsigned int); +}; + +class CXMLSOMAttributeType +{ +public: +EQLIB_OBJECT CXMLSOMAttributeType::~CXMLSOMAttributeType(void); +EQLIB_OBJECT CXMLSOMAttributeType::CXMLSOMAttributeType(void); +EQLIB_OBJECT class CXMLSOMAttributeType & CXMLSOMAttributeType::operator=(class CXMLSOMAttributeType const &); +//EQLIB_OBJECT void * CXMLSOMAttributeType::`vector deleting destructor'(unsigned int); +}; + +class CXMLSOMCursor +{ +public: +EQLIB_OBJECT CXMLSOMCursor::~CXMLSOMCursor(void); +EQLIB_OBJECT CXMLSOMCursor::CXMLSOMCursor(void); +EQLIB_OBJECT class CXMLSOMCursor & CXMLSOMCursor::operator=(class CXMLSOMCursor const &); +//EQLIB_OBJECT void * CXMLSOMCursor::`vector deleting destructor'(unsigned int); +}; + +class CXMLSOMCursorSave +{ +public: +EQLIB_OBJECT CXMLSOMCursorSave::~CXMLSOMCursorSave(void); +}; + +class CXMLSOMCursorSaveFast +{ +public: +EQLIB_OBJECT CXMLSOMCursorSaveFast::~CXMLSOMCursorSaveFast(void); +}; + +class CXMLSOMCursorTraverseChildren +{ +public: +EQLIB_OBJECT CXMLSOMCursorTraverseChildren::~CXMLSOMCursorTraverseChildren(void); +EQLIB_OBJECT class CXMLSOMCursor & CXMLSOMCursorTraverseChildren::Cursor(void); +}; + +class CXMLSOMDocument +{ +public: +EQLIB_OBJECT bool CXMLSOMDocument::FieldParseItemOfClass(class CXStr,class CXStr,unsigned __int32 &); +EQLIB_OBJECT bool CXMLSOMDocument::GetValueObjectId(class CXStr,class CXStr,unsigned __int32 &); +EQLIB_OBJECT bool CXMLSOMDocument::SetValueObjectId(class CXStr,class CXStr,unsigned __int32); +// virtual +EQLIB_OBJECT CXMLSOMDocument::~CXMLSOMDocument(void); +//EQLIB_OBJECT void * CXMLSOMDocument::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CXMLSOMDocument::`vector deleting destructor'(unsigned int); +}; + +class CXMLSOMDocumentBase +{ +public: +EQLIB_OBJECT bool CXMLSOMDocumentBase::CursorFieldFind(class CXStr); +EQLIB_OBJECT bool CXMLSOMDocumentBase::CursorFind(class CXStr); +EQLIB_OBJECT bool CXMLSOMDocumentBase::CursorNextInOrder(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::CursorNextSibling(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::CursorPop(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::CursorPush(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::FieldParseClassItem(class CXStr,class CXStr &,class CXStr &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::FieldParseItemOfClass(class CXStr,class CXStr,__int32 &,__int32 &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::GetAttrValueInt(class CXStr,__int32 &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::GetAttrValueStr(class CXStr,class CXStr &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::GetValue(class CXStr,__int32 &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::GetValue(class CXStr,bool &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::GetValue(class CXStr,class CXStr &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::SetValue(class CXStr,__int32); +EQLIB_OBJECT bool CXMLSOMDocumentBase::SetValue(class CXStr,bool); +EQLIB_OBJECT bool CXMLSOMDocumentBase::SetValue(class CXStr,class CXStr); +EQLIB_OBJECT bool CXMLSOMDocumentBase::ValidateData(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::ValidateSchema(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::XMLMerge(class CXMLSOMDocumentBase &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::XMLRead(class CXStr*,class CXStr*,class CXStr*); +EQLIB_OBJECT class CXMLSOMCursor & CXMLSOMDocumentBase::Cursor(void); +EQLIB_OBJECT class CXMLSOMCursor & CXMLSOMDocumentBase::CursorParent(void); +EQLIB_OBJECT class CXStr CXMLSOMDocumentBase::GetAttrValueStr(class CXStr); +EQLIB_OBJECT class CXStr CXMLSOMDocumentBase::GetErrorMsg(void)const; +EQLIB_OBJECT int CXMLSOMDocumentBase::XMLReadNoValidate(class CXStr,class CXStr,class CXStr); +EQLIB_OBJECT void CXMLSOMDocumentBase::CursorInit(void); +EQLIB_OBJECT void CXMLSOMDocumentBase::CursorNewChild(void); +EQLIB_OBJECT void CXMLSOMDocumentBase::CursorNewSibling(void); +EQLIB_OBJECT void CXMLSOMDocumentBase::CursorSetPtr(class CXMLSOMNodePtr); +EQLIB_OBJECT void CXMLSOMDocumentBase::Init(void); +EQLIB_OBJECT void CXMLSOMDocumentBase::SetErrorMsg(class CXStr); +EQLIB_OBJECT void CXMLSOMDocumentBase::SetErrorMsgAtCursor(class CXStr); +EQLIB_OBJECT void CXMLSOMDocumentBase::SetErrorMsgAtLine(class CXStr,int,class CXStr); +// virtual +EQLIB_OBJECT CXMLSOMDocumentBase::~CXMLSOMDocumentBase(void); +//EQLIB_OBJECT void * CXMLSOMDocumentBase::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CXMLSOMDocumentBase::`vector deleting destructor'(unsigned int); +// protected +EQLIB_OBJECT bool CXMLSOMDocumentBase::ValidateDataElements(class CXMLSOMElementType &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::ValidateSchemaCategories(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::ValidateSchemaDefinition(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::ValidateSchemaElementType(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::ValidateSchemaSimpleType(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::ValidateSchemaSimpleTypeNode(class CXMLSOMSimpleType &); +EQLIB_OBJECT bool CXMLSOMDocumentBase::ValidateSchemaTypeRefs(void); +EQLIB_OBJECT bool CXMLSOMDocumentBase::XMLProcessComposite(class CXStr,class CXStr); +}; + +class CXMLSOMElement +{ +public: +EQLIB_OBJECT CXMLSOMElement::~CXMLSOMElement(void); +EQLIB_OBJECT CXMLSOMElement::CXMLSOMElement(void); +EQLIB_OBJECT class CXMLSOMElement & CXMLSOMElement::operator=(class CXMLSOMElement const &); +//EQLIB_OBJECT void * CXMLSOMElement::`vector deleting destructor'(unsigned int); +}; + +class CXMLSOMElementType +{ +public: +EQLIB_OBJECT CXMLSOMElementType::~CXMLSOMElementType(void); +EQLIB_OBJECT CXMLSOMElementType::CXMLSOMElementType(void); +EQLIB_OBJECT int CXMLSOMElementType::GetItemIdx(class CXStr); +//EQLIB_OBJECT void * CXMLSOMElementType::`vector deleting destructor'(unsigned int); +}; + +class CXMLSOMNode +{ +public: +EQLIB_OBJECT static void * __cdecl CXMLSOMNode::operator new(unsigned int); +EQLIB_OBJECT static void __cdecl CXMLSOMNode::FreeAllAllocs(void); +EQLIB_OBJECT static void __cdecl CXMLSOMNode::operator delete(void *); +// protected +EQLIB_OBJECT static char * * CXMLSOMNode::pAllAlloc; +EQLIB_OBJECT static class CMutexSync CXMLSOMNode::mutexAccess; +EQLIB_OBJECT static class CXMLSOMNode * CXMLSOMNode::pFreeHead; +// private +EQLIB_OBJECT CXMLSOMNode::~CXMLSOMNode(void); +EQLIB_OBJECT CXMLSOMNode::CXMLSOMNode(void); +//EQLIB_OBJECT void * CXMLSOMNode::`scalar deleting destructor'(unsigned int); +}; + +class CXMLSOMNodePtr +{ +public: +EQLIB_OBJECT CXMLSOMNodePtr::~CXMLSOMNodePtr(void); +EQLIB_OBJECT CXMLSOMNodePtr::CXMLSOMNodePtr(void); +EQLIB_OBJECT class CXMLSOMNode * CXMLSOMNodePtr::operator->(void)const; +EQLIB_OBJECT class CXMLSOMNodePtr & CXMLSOMNodePtr::operator=(class CXMLSOMNodePtr const &); +//EQLIB_OBJECT void * CXMLSOMNodePtr::`vector deleting destructor'(unsigned int); +// protected +EQLIB_OBJECT void CXMLSOMNodePtr::Assure(void)const; +}; + +class CXMLSOMParser +{ +public: +EQLIB_OBJECT CXMLSOMParser::~CXMLSOMParser(void); +EQLIB_OBJECT bool CXMLSOMParser::ParseFile(class CXStr); +// protected +EQLIB_OBJECT bool CXMLSOMParser::ParseDocument(void); +EQLIB_OBJECT bool CXMLSOMParser::ParseEndTag(class CXStr); +EQLIB_OBJECT bool CXMLSOMParser::ParseNameSpaceToken(class CXStr &); +EQLIB_OBJECT bool CXMLSOMParser::ParseNode(void); +EQLIB_OBJECT bool CXMLSOMParser::ParseNodeList(void); +EQLIB_OBJECT bool CXMLSOMParser::ParseProcess(void); +EQLIB_OBJECT bool CXMLSOMParser::ParseStartTag(bool &); +}; + +class CXMLSOMSchema +{ +public: +EQLIB_OBJECT CXMLSOMSchema::~CXMLSOMSchema(void); +EQLIB_OBJECT CXMLSOMSchema::CXMLSOMSchema(void); +EQLIB_OBJECT bool CXMLSOMSchema::AddItem(class CXStr,class CXStr); +EQLIB_OBJECT bool CXMLSOMSchema::FindElementType(class CXStr); +EQLIB_OBJECT bool CXMLSOMSchema::FindItem(class CXStr,class CXStr); +EQLIB_OBJECT bool CXMLSOMSchema::FindSimpleType(class CXStr); +EQLIB_OBJECT bool CXMLSOMSchema::IsDerivedFrom(class CXStr,class CXStr); +EQLIB_OBJECT int CXMLSOMSchema::GetElementTypeIdx(class CXStr); +}; + +class CXMLSOMSimpleType +{ +public: +EQLIB_OBJECT CXMLSOMSimpleType::~CXMLSOMSimpleType(void); +EQLIB_OBJECT CXMLSOMSimpleType::CXMLSOMSimpleType(void); +//EQLIB_OBJECT void * CXMLSOMSimpleType::`vector deleting destructor'(unsigned int); +}; + +class CXPoint +{ +public: +EQLIB_OBJECT class CXPoint CXPoint::operator=(class CXPoint); +DWORD A,B; +}; + +class CXRect +{ +public: +EQLIB_OBJECT CXRect::CXRect(int nA,int nB,int nC,int nD) +{ + A=nA; + B=nB; + C=nC; + D=nD; +} +EQLIB_OBJECT CXRect::CXRect(void) +{ +} +EQLIB_OBJECT class CXPoint CXRect::CenterPoint(void)const; +EQLIB_OBJECT class CXRect & CXRect::operator=(class CXRect const &); +EQLIB_OBJECT class CXRect CXRect::operator&(class CXRect)const; +EQLIB_OBJECT class CXRect CXRect::operator|(class CXRect)const; +EQLIB_OBJECT int CXRect::Width(void)const; +EQLIB_OBJECT void CXRect::Move(class CXPoint); +EQLIB_OBJECT void CXRect::Normalize(void); +DWORD A,B,C,D; +}; + + +class CXStrSingleton +{ +public: +EQLIB_OBJECT static int CXStrSingleton::active; +}; + +class CXWndDrawTemplate +{ +public: +EQLIB_OBJECT CXWndDrawTemplate::~CXWndDrawTemplate(void); +EQLIB_OBJECT CXWndDrawTemplate::CXWndDrawTemplate(class CXWndDrawTemplate const &); +EQLIB_OBJECT CXWndDrawTemplate::CXWndDrawTemplate(void); +EQLIB_OBJECT class CXWndDrawTemplate & CXWndDrawTemplate::operator=(class CXWndDrawTemplate const &); +}; + +class CXWndManager +{ +public: +EQLIB_OBJECT CXWndManager::CXWndManager(class CSidlManager *); +EQLIB_OBJECT bool CXWndManager::IsAllValid(void); +EQLIB_OBJECT bool CXWndManager::IsWindowActive(class CXWnd const *)const; +EQLIB_OBJECT bool CXWndManager::IsWindowMovingOrSizing(class CXWnd *)const; +EQLIB_OBJECT bool CXWndManager::IsWindowPieceDown(class CXWnd const *,int)const; +EQLIB_OBJECT bool CXWndManager::OkayToSendMouseMessage(class CXWnd *)const; +EQLIB_OBJECT class CTextureAnimation const * CXWndManager::GetCursorToDisplay(void)const; +EQLIB_OBJECT class CTextureFont * CXWndManager::GetFont(class CXStr); +EQLIB_OBJECT class CTextureFont * CXWndManager::GetFont(int)const; +EQLIB_OBJECT class CXWnd * CXWndManager::FindWnd(class CXPoint,int *)const; +EQLIB_OBJECT class CXWnd * CXWndManager::GetFirstChildWnd(class CXWnd const *)const; +EQLIB_OBJECT class CXWnd * CXWndManager::GetFocusWnd(void)const; +EQLIB_OBJECT class CXWnd * CXWndManager::GetNextSib(class CXWnd const *)const; +EQLIB_OBJECT class CXWnd * CXWndManager::SetFocusWnd(class CXWnd *); +EQLIB_OBJECT int CXWndManager::ActivateWnd(class CXWnd *); +EQLIB_OBJECT int CXWndManager::AddFont(class CTextureFont *); +EQLIB_OBJECT int CXWndManager::AddWnd(class CXWnd *); +EQLIB_OBJECT int CXWndManager::DrawCursor(void)const; +EQLIB_OBJECT int CXWndManager::DrawWindows(void)const; +EQLIB_OBJECT int CXWndManager::HandleKeyboardMsg(unsigned __int32,bool); +EQLIB_OBJECT int CXWndManager::HandleLButtonDown(class CXPoint); +EQLIB_OBJECT int CXWndManager::HandleLButtonHeld(class CXPoint); +EQLIB_OBJECT int CXWndManager::HandleLButtonUp(class CXPoint); +EQLIB_OBJECT int CXWndManager::HandleLButtonUpAfterHeld(class CXPoint); +EQLIB_OBJECT int CXWndManager::HandleMouseMove(class CXPoint); +EQLIB_OBJECT int CXWndManager::HandleRButtonDown(class CXPoint); +EQLIB_OBJECT int CXWndManager::HandleRButtonHeld(class CXPoint); +EQLIB_OBJECT int CXWndManager::HandleRButtonUp(class CXPoint); +EQLIB_OBJECT int CXWndManager::HandleRButtonUpAfterHeld(class CXPoint); +EQLIB_OBJECT int CXWndManager::HandleWheelMove(int); +EQLIB_OBJECT int CXWndManager::NotifyAllWindows(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT int CXWndManager::OnWindowCloseBox(class CXWnd *); +EQLIB_OBJECT int CXWndManager::OnWindowMinimizeBox(class CXWnd *); +EQLIB_OBJECT int CXWndManager::OnWindowTileBox(class CXWnd *); +EQLIB_OBJECT int CXWndManager::ProcessFrame(void); +EQLIB_OBJECT int CXWndManager::RemoveWnd(class CXWnd *); +EQLIB_OBJECT static class CTextureAnimation CXWndManager::sm_curDefault; +EQLIB_OBJECT static class CTextureAnimation CXWndManager::sm_curDrag; +EQLIB_OBJECT static class CTextureAnimation CXWndManager::sm_curResizeEW; +EQLIB_OBJECT static class CTextureAnimation CXWndManager::sm_curResizeNESW; +EQLIB_OBJECT static class CTextureAnimation CXWndManager::sm_curResizeNS; +EQLIB_OBJECT static class CTextureAnimation CXWndManager::sm_curResizeNWSE; +EQLIB_OBJECT unsigned __int32 CXWndManager::GetDisplayWidth(void)const; +EQLIB_OBJECT unsigned __int32 CXWndManager::GetGlobalFadeDuration(void)const; +EQLIB_OBJECT unsigned __int32 CXWndManager::GetKeyboardFlags(void)const; +EQLIB_OBJECT unsigned char CXWndManager::GetGlobalAlpha(void)const; +EQLIB_OBJECT unsigned char CXWndManager::GetGlobalFadeToAlpha(void)const; +EQLIB_OBJECT unsigned long CXWndManager::GetGlobalFadeDelay(void)const; +EQLIB_OBJECT void CXWndManager::BringWndToTop(class CXWnd *,bool); +EQLIB_OBJECT void CXWndManager::CheckInvalidateLastFoundWnd(void); +EQLIB_OBJECT void CXWndManager::CleanupWindows(void); +EQLIB_OBJECT void CXWndManager::DestroyAllWindows(void); +EQLIB_OBJECT void CXWndManager::FlushKeyboardFlags(void); +EQLIB_OBJECT void CXWndManager::OnWindowShown(class CXWnd *,bool); +EQLIB_OBJECT void CXWndManager::SetGlobalAlpha(unsigned char); +EQLIB_OBJECT void CXWndManager::SetGlobalFadeDelay(unsigned long); +EQLIB_OBJECT void CXWndManager::SetGlobalFadeDuration(unsigned __int32); +EQLIB_OBJECT void CXWndManager::SetGlobalFadeToAlpha(unsigned char); +EQLIB_OBJECT void CXWndManager::SetSystemFont(class CTextureFont *); +EQLIB_OBJECT void CXWndManager::UpdateChildAndSiblingInfo(void); +// virtual +EQLIB_OBJECT CXWndManager::~CXWndManager(void); +//EQLIB_OBJECT void * CXWndManager::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * CXWndManager::`vector deleting destructor'(unsigned int); +}; + +class EmitterManager +{ +public: +EQLIB_OBJECT EmitterManager::~EmitterManager(void); +EQLIB_OBJECT EmitterManager::EmitterManager(class SoundManager *); +EQLIB_OBJECT float EmitterManager::GetEffectsLevel(void); +EQLIB_OBJECT float EmitterManager::GetVolumeLevel(void); +EQLIB_OBJECT void EmitterManager::Add(class SoundEmitter *); +EQLIB_OBJECT void EmitterManager::GetListenerLocation(float *,float *,float *,float *); +EQLIB_OBJECT void EmitterManager::GiveTime(void); +EQLIB_OBJECT void EmitterManager::Remove(class SoundEmitter *); +EQLIB_OBJECT void EmitterManager::SetEffectsLevel(float); +EQLIB_OBJECT void EmitterManager::SetVolumeLevel(float); +}; + +class engineInterface +{ +public: +EQLIB_OBJECT static class engineInterface * __cdecl engineInterface::get(void); +EQLIB_OBJECT unsigned long * engineInterface::ChangeDag(struct T3D_tagWORLD *,struct T3D_DAG *,char *); +// private +EQLIB_OBJECT engineInterface::engineInterface(void); +EQLIB_OBJECT static class engineInterface * engineInterface::mSelf; +}; + +class EQ_Affect +{ +public: +EQLIB_OBJECT void EQ_Affect::Reset(void); +}; + +class EQ_AltAbility +{ +public: +EQLIB_OBJECT EQ_AltAbility::EQ_AltAbility(int); +}; + +class EQ_Character1 +{ +public: +EQLIB_OBJECT int EQ_Character1::Cur_HP(int,unsigned char y=1); +EQLIB_OBJECT int EQ_Character1::Max_Endurance(int y=1); // lax 4-25-2004 +EQLIB_OBJECT int EQ_Character1::Max_HP(int,int y=1); +EQLIB_OBJECT int EQ_Character1::Max_Mana(int y=1); +EQLIB_OBJECT int const EQ_Character1::GetAACastingTimeModifier(class EQ_Spell const *); +EQLIB_OBJECT int const EQ_Character1::GetFocusCastingTimeModifier(class EQ_Spell const *,class EQ_Equipment * *,int); +EQLIB_OBJECT unsigned char EQ_Character1::CastSpell(unsigned char,int,class EQ_Item * *,int,int slot,int,int,int,int,bool,int y=1); +EQLIB_OBJECT void EQ_Character1::SetEffectId(unsigned char,unsigned int); +EQLIB_OBJECT void EQ_Character1::StopSpellCast(unsigned char); +EQLIB_OBJECT void EQ_Character1::StopSpellCast(unsigned char,int); +EQLIB_OBJECT void EQ_Character1::StunMe(unsigned int,unsigned int,unsigned int); +EQLIB_OBJECT void EQ_Character1::UnStunMe(void); +EQLIB_OBJECT void EQ_Character1::UseSkill(unsigned char,class EQPlayer *); +EQLIB_OBJECT int const EQ_Character1::GetFocusRangeModifier(class EQ_Spell const *,class EQ_Equipment * *); +EQLIB_OBJECT int EQ_Character1::IsExpansionFlag(int); +EQLIB_OBJECT int EQ_Character1::TotalEffect(int,bool,int,bool,bool); +}; + +class EQ_Character +{ +public: +EQLIB_OBJECT EQ_Character::~EQ_Character(void); +EQLIB_OBJECT EQ_Character::EQ_Character(void); +EQLIB_OBJECT bool EQ_Character::DoesSpellMatchFocusFilters(class EQ_Spell const *,class EQ_Spell const *); +EQLIB_OBJECT bool EQ_Character::IsSpellTooPowerfull(class EQ_Spell *,class EQ_Character *); +EQLIB_OBJECT bool EQ_Character::IsStackBlocked(class EQ_Spell const *); +EQLIB_OBJECT bool EQ_Character::IsValidAffect(int); +EQLIB_OBJECT char * EQ_Character::Class(int); +EQLIB_OBJECT char * EQ_Character::KunarkClass(int,int,int,bool); +EQLIB_OBJECT char * EQ_Character::Race(int); +EQLIB_OBJECT class EQ_Affect & EQ_Character::GetEffect(int); +EQLIB_OBJECT class EQ_Affect * EQ_Character::FindAffectSlot(int,class EQPlayer *,int *,int); +EQLIB_OBJECT class EQ_Affect * EQ_Character::GetPCSpellAffect(unsigned char,int *); +EQLIB_OBJECT class EQ_Equipment * EQ_Character::GetFocusItem(class EQ_Spell const *,int); +EQLIB_OBJECT class EQ_Spell * EQ_Character::GetFocusEffect(class EQ_Spell const *,int); +EQLIB_OBJECT class EQPlayer * EQ_Character::FindClosest(int,int,int,int,int); +EQLIB_OBJECT class EQPlayer * EQ_Character::GetMyPetPlayer(void); +EQLIB_OBJECT float EQ_Character::encum_factor(void); +EQLIB_OBJECT int EQ_Character::ac(bool); +EQLIB_OBJECT int EQ_Character::Agi(void); +EQLIB_OBJECT int EQ_Character::AntiTwinkAdj(class EQ_Equipment *,int,int); +EQLIB_OBJECT int EQ_Character::ApplyDamage(int,struct _EQMissileHitinfo *,bool,class HateListEntry *,bool); +EQLIB_OBJECT int EQ_Character::ApplyFatigue(int); +EQLIB_OBJECT int EQ_Character::AutoEat(unsigned char); +EQLIB_OBJECT int EQ_Character::BaneDamage(class EQ_Equipment *); +EQLIB_OBJECT int EQ_Character::BardCastBard(class EQ_Spell const *,int)const; +EQLIB_OBJECT int EQ_Character::basesave_cold(void); +EQLIB_OBJECT int EQ_Character::basesave_disease(void); +EQLIB_OBJECT int EQ_Character::basesave_fire(void); +EQLIB_OBJECT int EQ_Character::basesave_magic(void); +EQLIB_OBJECT int EQ_Character::basesave_poison(void); +EQLIB_OBJECT int EQ_Character::CalcAffectChange(class EQ_Spell *,unsigned char,unsigned char,class EQ_Affect *); +EQLIB_OBJECT int EQ_Character::CalculateBardSongMod(int); +EQLIB_OBJECT int EQ_Character::CanUseItem(class EQ_Item *); +EQLIB_OBJECT int EQ_Character::CapStat(int,int); +EQLIB_OBJECT int EQ_Character::Cha(void); +EQLIB_OBJECT int EQ_Character::CheckFoodAndWater(void); +EQLIB_OBJECT int EQ_Character::compute_defense(void); +EQLIB_OBJECT int EQ_Character::compute_tohit(unsigned char); +EQLIB_OBJECT int EQ_Character::cur_encumbrance(void); +EQLIB_OBJECT int EQ_Character::Cur_Mana(void); +EQLIB_OBJECT int EQ_Character::defense_agility_bonus(void); +EQLIB_OBJECT int EQ_Character::Dex(void); +EQLIB_OBJECT int EQ_Character::ElementResistDmg(class EQ_Equipment *,int); +EQLIB_OBJECT int EQ_Character::eqspa_change_form(class EQ_Spell *,int,int,class EQ_Affect *); +EQLIB_OBJECT int EQ_Character::eqspa_hp(unsigned int,class EQ_Affect *,int,class EQ_Spell *); +EQLIB_OBJECT int EQ_Character::GetBardInstrumentMod(int); +EQLIB_OBJECT int EQ_Character::GetClassACBonus(int); +EQLIB_OBJECT int EQ_Character::GetFirstEffectSlot(bool); +EQLIB_OBJECT int EQ_Character::GetHPFromStamina(int); +EQLIB_OBJECT int EQ_Character::GetIndexSkillMinDamageMod(int); +EQLIB_OBJECT int EQ_Character::GetLastEffectSlot(bool); +EQLIB_OBJECT int EQ_Character::GetOpenEffectSlot(bool,int); +EQLIB_OBJECT int EQ_Character::HasInnateSkill(unsigned char,int); +EQLIB_OBJECT int EQ_Character::HasSkill(unsigned char); +EQLIB_OBJECT int EQ_Character::HasSpell(int); +EQLIB_OBJECT int EQ_Character::IHaveSkill(unsigned char); +EQLIB_OBJECT int EQ_Character::InSpecialBindSpot(class EQPlayer *); +EQLIB_OBJECT int EQ_Character::Int(void); +EQLIB_OBJECT int EQ_Character::IsMage(void); +EQLIB_OBJECT int EQ_Character::IsSpecialBazaarSpot(class EQPlayer *); +EQLIB_OBJECT int EQ_Character::IsSpellcaster(void); +EQLIB_OBJECT int EQ_Character::ItemSpellAffects(int); +EQLIB_OBJECT int EQ_Character::max_encumbrance(void); +EQLIB_OBJECT int EQ_Character::NoBashMe(int); +EQLIB_OBJECT int EQ_Character::NoMezMe(int,class EQPlayer *,class EQ_Spell *); +EQLIB_OBJECT int EQ_Character::offense(unsigned char); +EQLIB_OBJECT int EQ_Character::ProcessAffects(void); +EQLIB_OBJECT int EQ_Character::save_bash(int); +EQLIB_OBJECT int EQ_Character::save_cold(void); +EQLIB_OBJECT int EQ_Character::save_disease(void); +EQLIB_OBJECT int EQ_Character::save_fire(void); +EQLIB_OBJECT int EQ_Character::save_magic(void); +EQLIB_OBJECT int EQ_Character::save_poison(void); +EQLIB_OBJECT int EQ_Character::SetLocalVar(char *,int); +EQLIB_OBJECT int EQ_Character::Skill(int); +EQLIB_OBJECT int EQ_Character::SpellDuration(class EQ_Spell const *,unsigned char,unsigned char); +EQLIB_OBJECT int EQ_Character::Sta(void); +EQLIB_OBJECT int EQ_Character::Str(void); +EQLIB_OBJECT int EQ_Character::TakeFallDamage(float); +EQLIB_OBJECT int EQ_Character::TotalSpellAffects(unsigned char,bool,int *); +EQLIB_OBJECT int EQ_Character::Wis(void); +EQLIB_OBJECT int const EQ_Character::GetFocusConserveRegChance(class EQ_Spell const *,class EQ_Equipment * *); +EQLIB_OBJECT long EQ_Character::TotalOnPerson(void); +EQLIB_OBJECT static int __cdecl EQ_Character::normal_to_special(int); +EQLIB_OBJECT unsigned char EQ_Character::BarbarianCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::BaseAttr(int,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::CanDoubleAttack(class EQPlayer *,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::CanIBreathe(void); +EQLIB_OBJECT unsigned char EQ_Character::CanISeeInvis(void); +EQLIB_OBJECT unsigned char EQ_Character::CanMedOnHorse(void); +EQLIB_OBJECT unsigned char EQ_Character::CanSecondaryAttack(class EQPlayer *); +EQLIB_OBJECT unsigned char EQ_Character::CanWorship(int,int,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::CastingRequirementsMet(int); +EQLIB_OBJECT unsigned char EQ_Character::CheckClass(int,int); +EQLIB_OBJECT unsigned char EQ_Character::CityCanStart(int,int,int,int); +EQLIB_OBJECT unsigned char EQ_Character::ClassMin(int,int,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::DarkElfCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::DwarfCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::ElfCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::EruditeCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::ExpendItemCharge(int,int); +EQLIB_OBJECT unsigned char EQ_Character::FindItemByClass(int,int *,int *); +EQLIB_OBJECT unsigned char EQ_Character::FindItemByRecord(int,int *,int *); +EQLIB_OBJECT unsigned char EQ_Character::FindItemQty(int,int); +EQLIB_OBJECT unsigned char EQ_Character::FroglockCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::GetMaxEffects(void)const; +EQLIB_OBJECT unsigned char EQ_Character::GetSkillBaseDamage(unsigned char,class EQPlayer *); +EQLIB_OBJECT unsigned char EQ_Character::GnomeCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::HalfElfCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::HalflingCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::HighElfCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::HumanCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::IksarCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::IsSpellAffectingPC(int); +EQLIB_OBJECT unsigned char EQ_Character::LaunchSpell(unsigned char,int,class EQ_Item * *); +EQLIB_OBJECT unsigned char EQ_Character::OgreCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::SpellFizzled(unsigned char,class EQ_Spell *); +EQLIB_OBJECT unsigned char EQ_Character::TrollCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned char EQ_Character::VahShirCanWorship(unsigned char,unsigned char); +EQLIB_OBJECT unsigned int EQ_Character::GetEffectId(int); +EQLIB_OBJECT void EQ_Character::CalcFoodDrinkBonus(int); +EQLIB_OBJECT void EQ_Character::DoFishingEvent(void); +EQLIB_OBJECT void EQ_Character::DoIntimidationEvent(void); +EQLIB_OBJECT void EQ_Character::DoLight(unsigned char); +EQLIB_OBJECT void EQ_Character::DoMeditation(void); +EQLIB_OBJECT void EQ_Character::DoPassageOfTime(void); +EQLIB_OBJECT void EQ_Character::EQ_CharacterResetAllMembers(void); +EQLIB_OBJECT void EQ_Character::EQSPA_Feign_Death(int); +EQLIB_OBJECT void EQ_Character::eqspa_levitation(void); +EQLIB_OBJECT void EQ_Character::eqspa_locate_corpse(void); +EQLIB_OBJECT void EQ_Character::eqspa_movement_rate(int); +EQLIB_OBJECT void EQ_Character::HandleSpecialPCAffects(int); +EQLIB_OBJECT void EQ_Character::HitBySpell(struct _EQMissileHitinfo *); +EQLIB_OBJECT void EQ_Character::IAmDead(struct _EQMissileHitinfo *,int); +EQLIB_OBJECT void EQ_Character::InitInnates(unsigned int,unsigned int); +EQLIB_OBJECT void EQ_Character::InitMyLanguages(void); +EQLIB_OBJECT void EQ_Character::InitSkills(unsigned char,unsigned int); +EQLIB_OBJECT void EQ_Character::ItemSold(long); +EQLIB_OBJECT void EQ_Character::MakeMeVisible(int); +EQLIB_OBJECT void EQ_Character::ModifyCurHP(int,class EQPlayer *); +EQLIB_OBJECT void EQ_Character::NotifyPCAffectChange(int,int); +EQLIB_OBJECT void EQ_Character::ProcessAllStats(void); +EQLIB_OBJECT void EQ_Character::ProcessEnvironment(void); +EQLIB_OBJECT void EQ_Character::ProcessHungerandThirst(unsigned int); +EQLIB_OBJECT void EQ_Character::RemovePCAffect(class EQ_Affect *); +EQLIB_OBJECT void EQ_Character::RemovePCAffectex(class EQ_Affect *,int); +EQLIB_OBJECT void EQ_Character::ResetCur_HP(int); +EQLIB_OBJECT void EQ_Character::UpdateMyVisibleStatus(void); +EQLIB_OBJECT bool EQ_Character::DoCombatAbility(int spellID, int dummy=1); +EQLIB_OBJECT unsigned long EQ_Character::GetConLevel(class EQPlayer *); +// private +EQLIB_OBJECT int EQ_Character::GetCachEQSPA(int); +EQLIB_OBJECT void EQ_Character::ReCachItemEffects(void); +EQLIB_OBJECT void EQ_Character::ReCachSpellEffects(void); +}; + +class EQ_CharacterData +{ +public: +EQLIB_OBJECT void EQ_CharacterData::EQ_CharacterDataResetAllMembers(void); +}; + +class EQ_Container +{ +public: +EQLIB_OBJECT EQ_Container::~EQ_Container(void); +EQLIB_OBJECT EQ_Container::EQ_Container(void); +EQLIB_OBJECT unsigned char EQ_Container::Close(void); +EQLIB_OBJECT unsigned char EQ_Container::IsOpen(void); +EQLIB_OBJECT unsigned char EQ_Container::Open(void); +}; + +class EQ_Equipment +{ +public: +EQLIB_OBJECT EQ_Equipment::EQ_Equipment(void); +EQLIB_OBJECT int EQ_Equipment::IsInstrument(void); +EQLIB_OBJECT int EQ_Equipment::IsWeapon(void); +EQLIB_OBJECT void EQ_Equipment::SendTextRequestMsg(void); +}; + +class EQ_Item +{ +public: +EQLIB_OBJECT bool EQ_Item::IsSpecialNoDrop(void); +EQLIB_OBJECT char * EQ_Item::ValueSBuy(float,long); +EQLIB_OBJECT char * EQ_Item::ValueSRent(void); +EQLIB_OBJECT char * EQ_Item::ValueSSell(float,long); +EQLIB_OBJECT int EQ_Item::Copper(void); +EQLIB_OBJECT int EQ_Item::Gold(void); +EQLIB_OBJECT int EQ_Item::Platinum(void); +EQLIB_OBJECT int EQ_Item::Silver(void); +EQLIB_OBJECT long EQ_Item::ValueSellMerchant(float,long); +EQLIB_OBJECT bool EQ_Item::IsStackable(void); // Valerian 12-20-2004 + +EQLIB_OBJECT char * EQ_Item::CreateItemTagString(char *, int); // Lax 11-14-2003 +EQLIB_OBJECT int EQ_Item::CanDrop(bool,int,int mq2_dummy=0, int mq2_dummy2=1); +ITEMINFO Data; +}; + +class EQ_LoadingS +{ +public: +EQLIB_OBJECT EQ_LoadingS::~EQ_LoadingS(void); +EQLIB_OBJECT EQ_LoadingS::EQ_LoadingS(void); +EQLIB_OBJECT void EQ_LoadingS::draw(void); +EQLIB_OBJECT void EQ_LoadingS::DrawBackground(struct T3D_XYZ *); +EQLIB_OBJECT void EQ_LoadingS::SetProgressBar(int,char const *); +EQLIB_OBJECT void EQ_LoadingS::WriteTextHD(char *,int,int,int); +// virtual +EQLIB_OBJECT void EQ_LoadingS::Activate(void); +EQLIB_OBJECT void EQ_LoadingS::Deactivate(void); +EQLIB_OBJECT void EQ_LoadingS::DefineImages(void); +}; + +class EQ_Note +{ +public: +EQLIB_OBJECT EQ_Note::~EQ_Note(void); +EQLIB_OBJECT EQ_Note::EQ_Note(void); +EQLIB_OBJECT void EQ_Note::SendTextRequestMsg(void); +}; + +class EQ_PC +{ +public: +EQLIB_OBJECT EQ_PC::~EQ_PC(void); +EQLIB_OBJECT EQ_PC::EQ_PC(class EQ_PC *); +EQLIB_OBJECT int EQ_PC::BitchCanTrain(int,int,int); +EQLIB_OBJECT int EQ_PC::CheckDupLoreItems(void); +EQLIB_OBJECT int EQ_PC::checkLang(int); +EQLIB_OBJECT int EQ_PC::CostToTrain(int,float,int); +EQLIB_OBJECT int EQ_PC::DelLoreItemDup(int,int,int,class EQ_Item *); +EQLIB_OBJECT int EQ_PC::GetAltAbilityIndex(int); +EQLIB_OBJECT int EQ_PC::GetArmorType(int); +EQLIB_OBJECT int EQ_PC::GetCombatAbility(int); +EQLIB_OBJECT int EQ_PC::HandleMoney(long); +EQLIB_OBJECT int EQ_PC::IsAGroupMember(char *); +EQLIB_OBJECT int EQ_PC::MaxAirSupply(void); +EQLIB_OBJECT int EQ_PC::numInParty(void); +EQLIB_OBJECT static class EQ_PC * EQ_PC::top; +EQLIB_OBJECT unsigned char EQ_PC::AtSkillLimit(int); +EQLIB_OBJECT unsigned char EQ_PC::RemoveMyAffect(int); +EQLIB_OBJECT unsigned long EQ_PC::GetArmorTint(int); +EQLIB_OBJECT unsigned long EQ_PC::GetBodyTint(int); +EQLIB_OBJECT void EQ_PC::CheckForGroupChanges(void); +EQLIB_OBJECT void EQ_PC::CheckForLanguageImprovement(unsigned char,unsigned char); +EQLIB_OBJECT void EQ_PC::CheckSkillImprove(int,float); +EQLIB_OBJECT void EQ_PC::ClearSharedVault(void); +EQLIB_OBJECT void EQ_PC::DestroyHeldItemOrMoney(void); +EQLIB_OBJECT void EQ_PC::DetermineQuestExpGained(int); +EQLIB_OBJECT void EQ_PC::EmptyPossessionSlots(void); +EQLIB_OBJECT void EQ_PC::InitializeNewPCVariables(int); +EQLIB_OBJECT void EQ_PC::InitPlayerStart(unsigned int,unsigned char,int); +EQLIB_OBJECT void EQ_PC::PrepareForRepop(int); +EQLIB_OBJECT void EQ_PC::ProcessAirSupply(void); +EQLIB_OBJECT void EQ_PC::ProcessFatigue(void); +EQLIB_OBJECT void EQ_PC::RefitNewbieEQ(void); +EQLIB_OBJECT void EQ_PC::RefreshMe(int); +EQLIB_OBJECT void EQ_PC::SetAltAbilityIndex(int,int); +EQLIB_OBJECT void EQ_PC::SetArmorTint(int,unsigned long); +EQLIB_OBJECT void EQ_PC::SetArmorType(int,int); +EQLIB_OBJECT void EQ_PC::SetFatigue(int); +EQLIB_OBJECT void EQ_PC::UnpackMyNetPC(char *,int); +EQLIB_OBJECT unsigned long EQ_PC::GetCombatAbilityTimer(int); +EQLIB_OBJECT unsigned long EQ_PC::GetItemTimerValue(class EQ_Item *); +EQLIB_OBJECT unsigned long EQ_PC::HasLoreItem(class EQ_Item *); +}; + +class EQ_Skill +{ +public: +EQLIB_OBJECT EQ_Skill::~EQ_Skill(void); +EQLIB_OBJECT EQ_Skill::EQ_Skill(int); +}; + +class EQ_Spell +{ +public: +EQLIB_OBJECT EQ_Spell::~EQ_Spell(void); +EQLIB_OBJECT EQ_Spell::EQ_Spell(char *); +EQLIB_OBJECT bool EQ_Spell::IsStackableDot(void)const; +EQLIB_OBJECT int EQ_Spell::IsPermIllusionSpell(void)const; +EQLIB_OBJECT int EQ_Spell::SpellUsesDragonBreathEffect(void); +EQLIB_OBJECT static bool __cdecl EQ_Spell::IsSPAIgnoredByStacking(int); +EQLIB_OBJECT unsigned char EQ_Spell::SpellAffects(int)const; +SPELL Data; +}; + +class EQAnimation +{ +public: +EQLIB_OBJECT EQAnimation::~EQAnimation(void); +EQLIB_OBJECT EQAnimation::EQAnimation(void); +}; + +class EQEffect +{ +public: +EQLIB_OBJECT EQEffect::~EQEffect(void); +EQLIB_OBJECT EQEffect::EQEffect(class EQEffect *,char *,int,struct _EQLOC *,class EQPlayer *,class EQMissile *,struct _EQRGB *,float,int,int,float,float); +EQLIB_OBJECT static class EQEffect * EQEffect::top; +}; + +class EqEmitterData +{ +public: +EQLIB_OBJECT EqEmitterData::EqEmitterData(void); +EQLIB_OBJECT void EqEmitterData::SetLoadString(char *); +}; + +class EQHSprite +{ +public: +EQLIB_OBJECT EQHSprite::~EQHSprite(void); +EQLIB_OBJECT EQHSprite::EQHSprite(char *,struct T3D_tagACTORINSTANCE *,class EQPlayer *); +EQLIB_OBJECT bool EQHSprite::GetAnimationTrackPtr(char *,char *,int,int,unsigned char,int); +EQLIB_OBJECT class EQHSprite * EQHSprite::get_object(char *); +EQLIB_OBJECT static class EQHSprite * EQHSprite::top; +}; + +class EQItemList +{ +public: +EQLIB_OBJECT EQItemList::~EQItemList(void); +EQLIB_OBJECT EQItemList::EQItemList(void); +EQLIB_OBJECT class EQItemList * EQItemList::get_item(long); +EQLIB_OBJECT class EQItemList * EQItemList::is_item_actor(struct T3D_tagACTORINSTANCE *); +EQLIB_OBJECT static class EQItemList * EQItemList::top; +}; + +class EQMissile +{ +public: +EQLIB_OBJECT EQMissile::~EQMissile(void); +EQLIB_OBJECT EQMissile::EQMissile(class EQ_Equipment *,class EQPlayer *,class EQMissile *,char *,unsigned char,unsigned int); +EQLIB_OBJECT class EQMissile * EQMissile::is_missile_actor(struct T3D_tagACTORINSTANCE *); +EQLIB_OBJECT static class EQMissile * EQMissile::top; +EQLIB_OBJECT void EQMissile::CleanUpMyEffects(void); +EQLIB_OBJECT void EQMissile::HitActor(struct T3D_tagACTORINSTANCE *,bool); +EQLIB_OBJECT void EQMissile::LeaveTrail(void); +EQLIB_OBJECT void EQMissile::MissileAI(void); +EQLIB_OBJECT void EQMissile::ProcessMissile(void); +}; + +class EqMobileEmitter +{ +public: +EQLIB_OBJECT EqMobileEmitter::~EqMobileEmitter(void); +EQLIB_OBJECT EqMobileEmitter::EqMobileEmitter(class EqSoundManager *); +EQLIB_OBJECT void EqMobileEmitter::Move(float,float,float); +EQLIB_OBJECT void EqMobileEmitter::SetNpcHeight(float); +EQLIB_OBJECT void EqMobileEmitter::SetWave(int,char *); +}; + +class EQMoneyList +{ +public: +EQLIB_OBJECT EQMoneyList::~EQMoneyList(void); +EQLIB_OBJECT EQMoneyList::EQMoneyList(void); +EQLIB_OBJECT class EQMoneyList * EQMoneyList::get_money(long); +EQLIB_OBJECT static class EQMoneyList * EQMoneyList::top; +}; + +class EQNewPlayerAnimation +{ +public: +EQLIB_OBJECT static void __cdecl EQNewPlayerAnimation::InitAnimationData(void); +}; + +class EQObject +{ +public: +EQLIB_OBJECT EQObject::~EQObject(void); +EQLIB_OBJECT EQObject::EQObject(class EQObject *,class EQPlayer *,char *,char *); +EQLIB_OBJECT static class EQObject * EQObject::top; +}; + +class EQOldPlayerAnimation +{ +public: +EQLIB_OBJECT EQOldPlayerAnimation::EQOldPlayerAnimation(class EQPlayer *); +EQLIB_OBJECT static void __cdecl EQOldPlayerAnimation::InitAnimationData(void); +// virtual +EQLIB_OBJECT bool EQOldPlayerAnimation::RequestAnimation(unsigned short,bool,bool,float,unsigned char); +EQLIB_OBJECT bool EQOldPlayerAnimation::RequestAnimation(unsigned short,bool,bool,float,unsigned char,unsigned char); +EQLIB_OBJECT int EQOldPlayerAnimation::GetAnimNum(int,int,int,float *,unsigned char); +EQLIB_OBJECT void EQOldPlayerAnimation::InitAnimationTracks(class EQHSprite *,struct T3D_tagACTORINSTANCE *); +EQLIB_OBJECT void EQOldPlayerAnimation::PlayAnimationSound(int); +EQLIB_OBJECT void EQOldPlayerAnimation::ProcessAnimation(bool,bool); +// private +EQLIB_OBJECT bool EQOldPlayerAnimation::AnimationIsAggressive(int); +EQLIB_OBJECT bool EQOldPlayerAnimation::InterruptCurrentAnimation(int,unsigned char); +EQLIB_OBJECT bool EQOldPlayerAnimation::IsIdleAnimation(int); +EQLIB_OBJECT bool EQOldPlayerAnimation::IsSocialAnimation(int); +EQLIB_OBJECT bool EQOldPlayerAnimation::IsStandAnimation(int); +EQLIB_OBJECT static bool * EQOldPlayerAnimation::mAnimAllowsSeparateLower; +EQLIB_OBJECT static bool * EQOldPlayerAnimation::mAnimAllowsSeparateUpper; +EQLIB_OBJECT static bool * EQOldPlayerAnimation::mAnimInterruptable; +EQLIB_OBJECT static char (* EQOldPlayerAnimation::mAnimationPrefix)[20]; +EQLIB_OBJECT virtual bool EQOldPlayerAnimation::GetAlternateAnimTag(char *,char *,bool); +EQLIB_OBJECT void EQOldPlayerAnimation::ChangeAttachmentAnimationTrackSpeeds(bool,float); +EQLIB_OBJECT void EQOldPlayerAnimation::PlayAttachmentAnimationTracks(int,int,bool,bool,float,bool,unsigned char); +}; + +class EQPlayer +{ +public: +EQLIB_OBJECT EQPlayer::~EQPlayer(void); +EQLIB_OBJECT EQPlayer::EQPlayer(class EQPlayer *,unsigned char,unsigned int,unsigned char,char *); +EQLIB_OBJECT bool EQPlayer::AllowedToAttack(class EQPlayer *,int); +EQLIB_OBJECT bool EQPlayer::CanChangeForm(int,unsigned char); +EQLIB_OBJECT bool EQPlayer::CanIFitHere(float,float,float); +EQLIB_OBJECT bool EQPlayer::CanIHit(class EQPlayer *,float); +EQLIB_OBJECT bool EQPlayer::GetBoneCoords(struct T3D_DAG *,struct _EQLOC *); +EQLIB_OBJECT bool EQPlayer::IsAMount(void); +EQLIB_OBJECT bool EQPlayer::IsFlyer(void); +EQLIB_OBJECT bool EQPlayer::IsInvisible(class EQPlayer *); +EQLIB_OBJECT bool EQPlayer::IsInvited(void); +EQLIB_OBJECT bool EQPlayer::IsRoleplaying(void); +EQLIB_OBJECT bool EQPlayer::IsUntexturedHorse(void); +EQLIB_OBJECT bool EQPlayer::IWasHit(struct _EQMissileHitinfo *); +EQLIB_OBJECT bool EQPlayer::MyFeetAreOnGround(void); +EQLIB_OBJECT bool EQPlayer::SetNameSpriteTint(void); +EQLIB_OBJECT bool EQPlayer::UpdatePlayerActor(void); +EQLIB_OBJECT bool const EQPlayer::HasInvalidRiderTexture(void)const; +EQLIB_OBJECT float EQPlayer::GetDefaultHeight(int,unsigned char); +EQLIB_OBJECT float EQPlayer::GetPlayerFloorHeight(float,float,float,unsigned char); +EQLIB_OBJECT int EQPlayer::AimAtTarget(class EQPlayer *,class EQMissile *); +EQLIB_OBJECT int EQPlayer::AttachPlayerToPlayerBone(class EQPlayer *,struct T3D_DAG *); +EQLIB_OBJECT int EQPlayer::CanBeBald(void); +EQLIB_OBJECT int EQPlayer::CheckForJump(void); +EQLIB_OBJECT int EQPlayer::DoAttack(unsigned char,unsigned char,class EQPlayer *); +EQLIB_OBJECT int EQPlayer::GetAlternateTrackNumber(int,unsigned char *); +EQLIB_OBJECT int EQPlayer::GetArmorType(int); +EQLIB_OBJECT int EQPlayer::GetAttachedHelmITNum(int,int *); +EQLIB_OBJECT int EQPlayer::GetGuild(void)const; +EQLIB_OBJECT int EQPlayer::GetRaceSexITOffset(void); +EQLIB_OBJECT int EQPlayer::IsValidTeleport(float,float,float,float,float); +EQLIB_OBJECT int EQPlayer::LegalPlayerRace(int); +EQLIB_OBJECT int EQPlayer::Levitating(void); +EQLIB_OBJECT int EQPlayer::MountableRace(void); +EQLIB_OBJECT int EQPlayer::MovePlayer(void); +EQLIB_OBJECT int EQPlayer::NotOnSameDeity(class EQPlayer *,class EQ_Spell *); +EQLIB_OBJECT int EQPlayer::ReplaceSpecialCloakMaterials(void); +EQLIB_OBJECT int EQPlayer::SetEyeMaterial(unsigned char,int); +EQLIB_OBJECT int EQPlayer::SetFHEB(unsigned char,unsigned char); +EQLIB_OBJECT int EQPlayer::SetFHEB_Color(unsigned char,unsigned char); +EQLIB_OBJECT int EQPlayer::SetHairOrBeard(int); +EQLIB_OBJECT int EQPlayer::SetNameSpriteState(bool); +EQLIB_OBJECT int EQPlayer::SetPlayerPitchType(void); +EQLIB_OBJECT int EQPlayer::SwapBody(int,int); +EQLIB_OBJECT int EQPlayer::SwapFace(int,int); +EQLIB_OBJECT int EQPlayer::SwapHead(int,int,unsigned long,int); +EQLIB_OBJECT int EQPlayer::SwapMaterial(int,int,int,int,unsigned char); +EQLIB_OBJECT int EQPlayer::SwapNPCMaterials(void); +EQLIB_OBJECT static class EQPlayer * __cdecl EQPlayer::GetClosestPlayerFromPartialName(char *,class EQPlayer *); +EQLIB_OBJECT static class EQPlayer * __cdecl EQPlayer::GetPlayerFromPartialName(char *); +EQLIB_OBJECT static class EQPlayer * __cdecl EQPlayer::IsPlayerActor(struct T3D_tagACTORINSTANCE *); +EQLIB_OBJECT static class EQPlayer * __cdecl EQPlayer::GetPlayerFromName(char const *); +EQLIB_OBJECT static void __cdecl EQPlayer::ComputeSpecialHeights(int,float *,float *,float *,float *,bool); +EQLIB_OBJECT static void __cdecl EQPlayer::GetPCActorTag(char *,unsigned int,unsigned char); +EQLIB_OBJECT static void __cdecl EQPlayer::TackOnNeuterChar(char *,unsigned int); +EQLIB_OBJECT static void __cdecl EQPlayer::UpdateAllPlayersVisibility(void); +EQLIB_OBJECT struct T3D_DAG * EQPlayer::GetBonePointerByITS(int,int); +EQLIB_OBJECT struct T3D_POINTLIGHT * EQPlayer::CreateUserLight(struct T3D_LIGHTDEFINITION *,int); +EQLIB_OBJECT unsigned char EQPlayer::DoTeleport(char *,int); +EQLIB_OBJECT unsigned char EQPlayer::DoTeleportB(int,float,float,float,float,char*,int); +EQLIB_OBJECT unsigned char EQPlayer::GetBaseFaceNbr(int,unsigned char *); +EQLIB_OBJECT unsigned char EQPlayer::GetNearestActorTag(char *,void *); +EQLIB_OBJECT unsigned char EQPlayer::HandleAmmo(void); +EQLIB_OBJECT unsigned char EQPlayer::HasAttachedBeard(void); +EQLIB_OBJECT unsigned char EQPlayer::HasAttachedHair(void); +EQLIB_OBJECT unsigned char EQPlayer::SkillUsed(unsigned char); +EQLIB_OBJECT unsigned char EQPlayer::UpdateItemSlot(unsigned char,char *,int); +EQLIB_OBJECT unsigned int EQPlayer::CalcAnimLength(int); +EQLIB_OBJECT unsigned int EQPlayer::ModifyAttackSpeed(unsigned int,int); +EQLIB_OBJECT unsigned long EQPlayer::GetArmorTint(int); +EQLIB_OBJECT void EQPlayer::BodyEnvironmentChange(unsigned char); +EQLIB_OBJECT void EQPlayer::ChangeHeight(float); +EQLIB_OBJECT void EQPlayer::ChangeLight(void); +EQLIB_OBJECT void EQPlayer::ChangeNoGravity(int); +EQLIB_OBJECT void EQPlayer::ChangePosition(unsigned char); +EQLIB_OBJECT void EQPlayer::CheckForUnderFloor(void); +EQLIB_OBJECT void EQPlayer::CleanUpMyEffects(void); +EQLIB_OBJECT void EQPlayer::CleanUpTarget(void); +EQLIB_OBJECT void EQPlayer::CleanUpVehicle(void); +EQLIB_OBJECT void EQPlayer::DeleteMyMissiles(void); +EQLIB_OBJECT void EQPlayer::Dismount(void); +EQLIB_OBJECT void EQPlayer::DisplayWeaponsAndArmor(void); +EQLIB_OBJECT void EQPlayer::do_change_form(struct chngForm *); +EQLIB_OBJECT void EQPlayer::DoCamAi(void); +EQLIB_OBJECT void EQPlayer::DoClassRandomAnimation(void); +EQLIB_OBJECT void EQPlayer::DoFloorCheck(void); +EQLIB_OBJECT void EQPlayer::DoItemSlot(int); +EQLIB_OBJECT void EQPlayer::DoSwimJump(unsigned char); +EQLIB_OBJECT void EQPlayer::FacePlayer(class EQPlayer *); +EQLIB_OBJECT void EQPlayer::FeetEnvironmentChange(unsigned char); +EQLIB_OBJECT void EQPlayer::FollowPlayerAI(void); +EQLIB_OBJECT void EQPlayer::ForceInvisible(bool); +EQLIB_OBJECT void EQPlayer::GetActorTag(char *); +EQLIB_OBJECT void EQPlayer::GetAllowedHairColorIndexRange(int,int *,int *); +EQLIB_OBJECT void EQPlayer::GetConscious(void); +EQLIB_OBJECT void EQPlayer::HandleMaterialEx(int,unsigned int,unsigned int,unsigned long,int); +EQLIB_OBJECT void EQPlayer::HandoverControlToZoneserver(void); +EQLIB_OBJECT void EQPlayer::HeadEnvironmentChange(unsigned char); +EQLIB_OBJECT void EQPlayer::HideOrShowAttachedHair(void); +EQLIB_OBJECT void EQPlayer::IDied(struct _EQPlayerDeath *); +EQLIB_OBJECT void EQPlayer::IHaveFallen(float); +EQLIB_OBJECT void EQPlayer::InitSneakMod(void); +EQLIB_OBJECT void EQPlayer::KnockedOut(void); +EQLIB_OBJECT void EQPlayer::MakeRiderMountUp(void); +EQLIB_OBJECT void EQPlayer::MountEQPlayer(class EQPlayer *); +EQLIB_OBJECT void EQPlayer::PlaySoundA(int); +EQLIB_OBJECT void EQPlayer::PositionOnFloor(void); +EQLIB_OBJECT void EQPlayer::PushAlongHeading(float); +EQLIB_OBJECT void EQPlayer::PutPlayerOnFloor(void); +EQLIB_OBJECT void EQPlayer::ResetVariables(void); +EQLIB_OBJECT void EQPlayer::SetAccel(float,int); +EQLIB_OBJECT void EQPlayer::SetAfk(int); +EQLIB_OBJECT void EQPlayer::SetAndReserveID(unsigned int); +EQLIB_OBJECT void EQPlayer::SetAnimVariation(void); +EQLIB_OBJECT void EQPlayer::SetArmorTint(int,unsigned long); +EQLIB_OBJECT void EQPlayer::SetArmorType(int,int); +EQLIB_OBJECT void EQPlayer::SetCurrentLoopSound(int); +EQLIB_OBJECT void EQPlayer::SetDefaultFacialFeaturesByFace(int,unsigned char,unsigned char); +EQLIB_OBJECT void EQPlayer::SetDefaultITAttachments(int); +EQLIB_OBJECT void EQPlayer::SetHeights(void); +EQLIB_OBJECT void EQPlayer::SetInvited(bool); +EQLIB_OBJECT void EQPlayer::SetPlayerConstantAmbient(struct T3D_RGB *); +EQLIB_OBJECT void EQPlayer::SetRace(int); +EQLIB_OBJECT void EQPlayer::SetSounds(void); +EQLIB_OBJECT void EQPlayer::SetToRandomRace(void); +EQLIB_OBJECT void EQPlayer::TouchingSwitch(void); +EQLIB_OBJECT void EQPlayer::TriggerSpellEffect(struct _EQMissileHitinfo *); +EQLIB_OBJECT void EQPlayer::TurnOffAutoFollow(void); +EQLIB_OBJECT void EQPlayer::UpdateAppearance(void); +EQLIB_OBJECT void EQPlayer::UpdateBonePointers(void); +EQLIB_OBJECT void EQPlayer::UpdateNameSprite(void); +EQLIB_OBJECT void EQPlayer::UpdatePlayerVisibility(void); +EQLIB_OBJECT bool EQPlayer::IsBodyType(unsigned int,int,int); +// private +EQLIB_OBJECT int EQPlayer::IdUsed(unsigned int); +EQLIB_OBJECT static class EQPlayer * EQPlayer::mTop; +EQLIB_OBJECT struct S3D_STRINGSPRITE * EQPlayer::ChangeBoneStringSprite(struct T3D_DAG *,char *); +EQLIB_OBJECT unsigned char EQPlayer::GetAlternateAnimVariation(int,unsigned char); +EQLIB_OBJECT unsigned int EQPlayer::GetUnusedID(void); +EQLIB_OBJECT void EQPlayer::FindDefaultEyeMaterialIndexes(void); +EQLIB_OBJECT void EQPlayer::InitializeIDArray(void); +SPAWNINFO Data; +}; + + +class EQPlayerManager +{ +public: +EQLIB_OBJECT class EQPlayer *EQPlayerManager::GetSpawnByID(int); +EQLIB_OBJECT class EQPlayer *EQPlayerManager::GetSpawnByName(char *); +SPAWNMANAGER Data; +}; + +class EQPMInfo +{ +public: +EQLIB_OBJECT EQPMInfo::~EQPMInfo(void); +EQLIB_OBJECT EQPMInfo::EQPMInfo(char *); +EQLIB_OBJECT void EQPMInfo::SetApplyGravity(bool); +}; + +class EqSoundManager +{ +public: +EQLIB_OBJECT EqSoundManager::~EqSoundManager(void); +//EQLIB_OBJECT EqSoundManager::EqSoundManager(bool,bool,enum SpeakerType); +EQLIB_OBJECT bool EqSoundManager::EmitterLoad(char *); +EQLIB_OBJECT bool EqSoundManager::WaveIsPlaying(int); +EQLIB_OBJECT class SoundAsset * EqSoundManager::WaveGet(int); +//EQLIB_OBJECT enum EnvironmentType EqSoundManager::GetListenerEnvironment(void); +EQLIB_OBJECT void EqSoundManager::EmitterAdd(class EqEmitterData *); +EQLIB_OBJECT void EqSoundManager::EmitterSetIndoors(bool); +EQLIB_OBJECT void EqSoundManager::EmitterSetNight(bool); +EQLIB_OBJECT void EqSoundManager::EmitterSetRaining(bool); +EQLIB_OBJECT void EqSoundManager::EmitterSetUserDisabled(bool); +EQLIB_OBJECT void EqSoundManager::EmitterSetWind(bool); +EQLIB_OBJECT void EqSoundManager::GiveTime(void); +EQLIB_OBJECT void EqSoundManager::SetCurrentZone(char *); +EQLIB_OBJECT void EqSoundManager::SetEffectsLevel(float); +//EQLIB_OBJECT void EqSoundManager::SetListenerEnvironment(enum EnvironmentType); +EQLIB_OBJECT void EqSoundManager::SetListenerEnvironmentHigh(void); +EQLIB_OBJECT void EqSoundManager::SetListenerEnvironmentLow(void); +EQLIB_OBJECT void EqSoundManager::SetListenerEnvironmentOutside(void); +EQLIB_OBJECT void EqSoundManager::SetListenerLocation(float,float,float,float); +EQLIB_OBJECT void EqSoundManager::SetMixAhead(int); +EQLIB_OBJECT void EqSoundManager::SetMusicSelection(int,bool); +EQLIB_OBJECT void EqSoundManager::SetMusicVolume(float); +EQLIB_OBJECT void EqSoundManager::SetWaveVolume(float); +EQLIB_OBJECT void EqSoundManager::WaveLoad(char *,int,bool); +EQLIB_OBJECT void EqSoundManager::WavePlay(int,class SoundControl *); +EQLIB_OBJECT void EqSoundManager::WaveStop(int); +// private +EQLIB_OBJECT class SoundAsset * EqSoundManager::GetAsset(char *); +EQLIB_OBJECT class SoundAsset * EqSoundManager::OldMp3GetSelection(int); +EQLIB_OBJECT class SoundEmitter * EqSoundManager::CreateOldEmitter(int,float,float,float,int,int,int,float,int,int,int); +EQLIB_OBJECT int EqSoundManager::GetMusicId(void); +EQLIB_OBJECT void EqSoundManager::LoadGlobalEmitters(void); +EQLIB_OBJECT void EqSoundManager::LoadGlobalMusic(void); +EQLIB_OBJECT void EqSoundManager::LoadGlobalWaves(void); +EQLIB_OBJECT void EqSoundManager::LoadListOfWaveFiles(char * *,int); +EQLIB_OBJECT void EqSoundManager::LoadOldEmitters(void); +EQLIB_OBJECT void EqSoundManager::OldMp3ClearSelections(void); +EQLIB_OBJECT void EqSoundManager::OldMp3Init(void); +EQLIB_OBJECT void EqSoundManager::OldMp3Terminate(void); +EQLIB_OBJECT void EqSoundManager::ReleaseZoneSpecificEmitters(void); +EQLIB_OBJECT void EqSoundManager::ReleaseZoneSpecificMidi(void); +EQLIB_OBJECT void EqSoundManager::ReleaseZoneSpecificWaves(void); +EQLIB_OBJECT void EqSoundManager::UpdateEmitterStates(void); +}; + +class EQSwitch +{ +public: +EQLIB_OBJECT EQSwitch::~EQSwitch(void); +EQLIB_OBJECT EQSwitch::EQSwitch(char *,bool); +EQLIB_OBJECT EQSwitch::EQSwitch(struct _EQClientSwitch *); +EQLIB_OBJECT EQSwitch::EQSwitch(struct OldDiskSwitch *,bool); +EQLIB_OBJECT float EQSwitch::GetCustomMoveDistance(void); +EQLIB_OBJECT float EQSwitch::TopSpeed(float *); +EQLIB_OBJECT int EQSwitch::GetSwitchDamage(void); +EQLIB_OBJECT unsigned char EQSwitch::SwitchIsNotUsable(int); +EQLIB_OBJECT unsigned char EQSwitch::SwitchWasOpened(int,int,class EQPlayer *,bool *); +EQLIB_OBJECT unsigned char EQSwitch::SwitchWasOpenedActual(int,int,class EQPlayer *,bool *); +EQLIB_OBJECT unsigned int EQSwitch::RepopFrequency(void); +EQLIB_OBJECT void EQSwitch::ChangeState(unsigned char,class EQPlayer *,bool); +EQLIB_OBJECT void EQSwitch::LoadSwitchSounds(int); +EQLIB_OBJECT void EQSwitch::PostInit(void); +EQLIB_OBJECT void EQSwitch::PreInit(void); +EQLIB_OBJECT void EQSwitch::RepopSwitch(void); +EQLIB_OBJECT void EQSwitch::ResetSwitchState(unsigned char); +EQLIB_OBJECT void EQSwitch::UseSwitch(unsigned int,int,int); +}; + +class EqSwitchManager +{ +public: +EQLIB_OBJECT EqSwitchManager::~EqSwitchManager(void); +EQLIB_OBJECT EqSwitchManager::EqSwitchManager(void); +EQLIB_OBJECT class EQSwitch * EqSwitchManager::GetSwitch(int); +EQLIB_OBJECT class EQSwitch * EqSwitchManager::GetSwitchByActor(struct T3D_tagACTORINSTANCE *); +EQLIB_OBJECT class EQSwitch * EqSwitchManager::GetSwitchById(int,bool); +EQLIB_OBJECT int EqSwitchManager::GetCount(void); +EQLIB_OBJECT void EqSwitchManager::AddSwitch(class EQSwitch *); +EQLIB_OBJECT void EqSwitchManager::DeleteAll(void); +EQLIB_OBJECT void EqSwitchManager::Load(char *,bool); +// protected +EQLIB_OBJECT void EqSwitchManager::LoadOld(char *,bool); +}; + +class EQUtil +{ +public: +EQLIB_OBJECT static char * __cdecl EQUtil::FormatCharName(char *,char *,int); +}; + +class EQWorldData +{ +public: +EQLIB_OBJECT EQWorldData::EQWorldData(void); +EQLIB_OBJECT bool EQWorldData::GetGeometryNameFromIndex(EQZoneIndex,char *)const; +EQLIB_OBJECT bool EQWorldData::IsFlagSet(EQZoneIndex,unsigned long)const; +EQLIB_OBJECT bool EQWorldData::IsNewbieZone(EQZoneIndex)const; +EQLIB_OBJECT bool EQWorldData::IsNoAirZone(EQZoneIndex)const; +EQLIB_OBJECT bool EQWorldData::IsNoBindZone(EQZoneIndex)const; +EQLIB_OBJECT bool const EQWorldData::AddZone(enum EQExpansion,EQZoneIndex,char const *,char const *,int,unsigned long,int,int); +//EQLIB_OBJECT enum EQExpansion const EQWorldData::ExpansionZone(EQZoneIndex)const; +EQLIB_OBJECT DWORD EQWorldData::GetIndexFromZoneName(char const *); // EQZoneIndex +EQLIB_OBJECT int EQWorldData::GetMinLevel(EQZoneIndex)const; +EQLIB_OBJECT void EQWorldData::AdvanceTime(unsigned int); +EQLIB_OBJECT void EQWorldData::CurrentGameTime(char *); +EQLIB_OBJECT void EQWorldData::GetFullZoneName(EQZoneIndex,char *); +// virtual +EQLIB_OBJECT EQWorldData::~EQWorldData(void); +//EQLIB_OBJECT void * EQWorldData::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * EQWorldData::`vector deleting destructor'(unsigned int); +}; + +class EQZoneInfo +{ +public: +EQLIB_OBJECT EQZoneInfo::EQZoneInfo(enum EQExpansion,EQZoneIndex,char const *,char const *,int,unsigned long,int,int); +// virtual +EQLIB_OBJECT EQZoneInfo::~EQZoneInfo(void); +//EQLIB_OBJECT void * EQZoneInfo::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * EQZoneInfo::`vector deleting destructor'(unsigned int); +}; + +class FilePath +{ +public: +EQLIB_OBJECT FilePath::~FilePath(void); +EQLIB_OBJECT FilePath::FilePath(char const *); +EQLIB_OBJECT FilePath::FilePath(class SharedString const &); +EQLIB_OBJECT FilePath::FilePath(void); +}; + +class flex_unit +{ +public: +EQLIB_OBJECT flex_unit::~flex_unit(void); +EQLIB_OBJECT flex_unit::flex_unit(void); +EQLIB_OBJECT unsigned int flex_unit::get(unsigned int)const; +EQLIB_OBJECT void flex_unit::clear(void); +EQLIB_OBJECT void flex_unit::fast_mul(class flex_unit &,class flex_unit &,unsigned int); +EQLIB_OBJECT void flex_unit::reserve(unsigned int); +EQLIB_OBJECT void flex_unit::set(unsigned int,unsigned int); +}; + +class GrammarRulesClass +{ +public: +EQLIB_OBJECT GrammarRulesClass::GrammarRulesClass(void); +EQLIB_OBJECT char * GrammarRulesClass::Resolve(int,int,char *,char *); +// virtual +EQLIB_OBJECT GrammarRulesClass::~GrammarRulesClass(void); +//EQLIB_OBJECT void * GrammarRulesClass::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * GrammarRulesClass::`vector deleting destructor'(unsigned int); +// private +EQLIB_OBJECT char * GrammarRulesClass::Parse(char *); +EQLIB_OBJECT void GrammarRulesClass::RuleDe1(char *,char *); +EQLIB_OBJECT void GrammarRulesClass::RuleEn1(char *,char *); +EQLIB_OBJECT void GrammarRulesClass::RuleEn2(char *,char *); +EQLIB_OBJECT void GrammarRulesClass::RuleEn3(char *,char *,char *,char *); +EQLIB_OBJECT void GrammarRulesClass::RuleEn4(char *,char *,char *,char *); +EQLIB_OBJECT void GrammarRulesClass::RuleFr1(char *,char *,char *,char *); +EQLIB_OBJECT void GrammarRulesClass::RuleKo1(char *,char *,char *,char *); +}; + +class GuildMember +{ +public: +EQLIB_OBJECT GuildMember::GuildMember(void); +}; + +class JournalNPC +{ +public: +EQLIB_OBJECT JournalNPC::~JournalNPC(void); +EQLIB_OBJECT JournalNPC::JournalNPC(void); +EQLIB_OBJECT int JournalNPC::AddEntry(long,float,float,float,char *,int); +EQLIB_OBJECT int JournalNPC::AddEntry(long,float,float,float,int,int); +EQLIB_OBJECT int JournalNPC::DeleteEntryByHash(int); +EQLIB_OBJECT int JournalNPC::DeleteEntryByIndex(int); +EQLIB_OBJECT int JournalNPC::FindThisText(char *,bool,int); +EQLIB_OBJECT int JournalNPC::ReadEntry(struct _iobuf *); +EQLIB_OBJECT static char * __cdecl JournalNPC::GetText(int); +EQLIB_OBJECT struct JournalEntry * JournalNPC::FindEntryByCategory(int,int); +EQLIB_OBJECT struct JournalEntry * JournalNPC::FindEntryByHash(int); +EQLIB_OBJECT struct JournalEntry * JournalNPC::GetEntry(int); +EQLIB_OBJECT void JournalNPC::ConvertCategory(int,int); +// private +EQLIB_OBJECT void JournalNPC::AllocateArray(void); +EQLIB_OBJECT void JournalNPC::CleanEntries(void); +EQLIB_OBJECT void JournalNPC::ComputeLatestTime(void); +}; + +class KeyCombo +{ +public: +EQLIB_OBJECT KeyCombo::KeyCombo(int); +inline EQLIB_OBJECT KeyCombo::KeyCombo(unsigned char keycode,bool alt,bool ctrl,bool shift) +{ + Data[3]= keycode; + Data[0]=alt; + Data[1]=ctrl; + Data[2]=shift; +} +EQLIB_OBJECT KeyCombo::KeyCombo(unsigned int,unsigned int,bool,bool,bool); +inline EQLIB_OBJECT KeyCombo::KeyCombo(void) +{ + *(unsigned long*)&Data[0]=0; +} +inline void EQLIB_OBJECT KeyCombo::Clear(void) +{ + *(unsigned long*)&Data[0]=0; +} +EQLIB_OBJECT int KeyCombo::operator int(void)const; +EQLIB_OBJECT bool KeyCombo::GetPrintableLetter(unsigned short *)const; +inline EQLIB_OBJECT bool KeyCombo::UsesAlt(void)const +{ + return (Data[0]!=0); +} +inline EQLIB_OBJECT bool KeyCombo::UsesCtrl(void)const +{ + return (Data[1]!=0); +} +inline EQLIB_OBJECT bool KeyCombo::UsesShift(void)const +{ + return (Data[2]!=0); +} +EQLIB_OBJECT class CXStr KeyCombo::GetTextDescription(void)const; +EQLIB_OBJECT class KeyCombo const & KeyCombo::operator=(int); +inline EQLIB_OBJECT int KeyCombo::operator==(class KeyCombo const &Combo) +{ + return ((*(unsigned long*)&Data)==(*(unsigned long*)&Combo.Data)); +} +inline EQLIB_OBJECT unsigned int KeyCombo::GetKey(void)const +{ + return Data[3]; +} +// private +EQLIB_OBJECT bool KeyCombo::GetPrintableLetterFromScanCode(unsigned char,bool,bool,unsigned short *)const; +EQLIB_OBJECT bool KeyCombo::GetPrintableLetterFromVirtualKey(unsigned int,unsigned int,bool,bool,unsigned short *)const; +EQLIB_OBJECT bool KeyCombo::GetScanCodeFromVirtualKey(unsigned int,unsigned int,unsigned char *)const; +EQLIB_OBJECT bool KeyCombo::GetVirtualKeyFromScanCode(unsigned char,int *)const; + unsigned char Data[4]; +}; + +class KeypressHandler +{ +public: +EQLIB_OBJECT KeypressHandler::~KeypressHandler(void); +EQLIB_OBJECT KeypressHandler::KeypressHandler(void); +EQLIB_OBJECT bool KeypressHandler::AttachAltKeyToEqCommand(class KeyCombo const &,unsigned int); +EQLIB_OBJECT bool KeypressHandler::AttachKeyToEqCommand(class KeyCombo const &,unsigned int); +EQLIB_OBJECT bool KeypressHandler::HandleKeyDown(class KeyCombo const &); +EQLIB_OBJECT bool KeypressHandler::HandleKeyUp(class KeyCombo const &); +EQLIB_OBJECT class KeyCombo const & KeypressHandler::GetAltKeyAttachedToEqCommand(unsigned int)const; +EQLIB_OBJECT class KeyCombo const & KeypressHandler::GetKeyAttachedToEqCommand(unsigned int)const; +EQLIB_OBJECT void KeypressHandler::ResetKeysToEqDefaults(void); +// private +EQLIB_OBJECT bool KeypressHandler::IsReservedKey(class KeyCombo const &)const; +EQLIB_OBJECT bool KeypressHandler::LoadAndConvertOldKeymappingFormat(unsigned int,int,class KeyCombo *); +EQLIB_OBJECT bool KeypressHandler::LoadKeymapping(unsigned int,int,class KeyCombo *); +EQLIB_OBJECT bool KeypressHandler::MapKeyToEqCommand(class KeyCombo const &,int,unsigned int); +EQLIB_OBJECT class CXStr KeypressHandler::GetEqCommandSaveName(unsigned int,int)const; +EQLIB_OBJECT void KeypressHandler::ClearCommandStateArray(void); +EQLIB_OBJECT void KeypressHandler::LoadAndSetKeymappings(void); +EQLIB_OBJECT void KeypressHandler::SaveKeymapping(unsigned int,class KeyCombo const &,int); +/*0x000*/ class KeyCombo NormalKey[nEQMappableCommands]; +/*0x2 4*/ class KeyCombo AltKey[nEQMappableCommands]; +/*0x5C8*/ char CommandState[nEQMappableCommands]; +}; + +class LogicalPacket +{ +public: +EQLIB_OBJECT LogicalPacket::LogicalPacket(void); +// virtual +EQLIB_OBJECT bool LogicalPacket::IsInternalPacket(void)const; +EQLIB_OBJECT int LogicalPacket::GetRefCount(void)const; +EQLIB_OBJECT void LogicalPacket::AddRef(void)const; +EQLIB_OBJECT void LogicalPacket::Release(void)const; +// protected +EQLIB_OBJECT virtual LogicalPacket::~LogicalPacket(void); +//EQLIB_OBJECT virtual void * LogicalPacket::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * LogicalPacket::`vector deleting destructor'(unsigned int); +}; + +class MapViewMap +{ +public: +EQLIB_OBJECT MapViewMap::~MapViewMap(void); +EQLIB_OBJECT MapViewMap::MapViewMap(void); +EQLIB_OBJECT bool MapViewMap::DrawClippedLine(struct T3D_XYZ *,struct T3D_RGB,class CXRect); +EQLIB_OBJECT bool MapViewMap::IsLayerVisible(int); +EQLIB_OBJECT bool MapViewMap::LoadEx(char *,int); +EQLIB_OBJECT bool MapViewMap::PointInMapViewArea(class CXPoint,class CXRect); +EQLIB_OBJECT int MapViewMap::GetMaxZ(void); +EQLIB_OBJECT int MapViewMap::GetMinZ(void); +EQLIB_OBJECT unsigned long MapViewMap::GetCurrentColor(void); +EQLIB_OBJECT unsigned long MapViewMap::GetMarkedLineColor(void); +EQLIB_OBJECT void MapViewMap::AddLabel(float,float,float,unsigned long,int,char *); +EQLIB_OBJECT void MapViewMap::AddPoint(float,float,float); +EQLIB_OBJECT void MapViewMap::CalcLabelRenderOffsets(class CXRect); +EQLIB_OBJECT void MapViewMap::Clear(void); +EQLIB_OBJECT void MapViewMap::ClearActiveLayer(void); +EQLIB_OBJECT void MapViewMap::Draw(class CXRect); +EQLIB_OBJECT void MapViewMap::EndLine(float,float,float); +EQLIB_OBJECT void MapViewMap::JoinLinesAtIntersect(bool); +EQLIB_OBJECT void MapViewMap::Load(char *); +EQLIB_OBJECT void MapViewMap::MoveLabel(struct _mapviewlabel *,float,float,float); +EQLIB_OBJECT void MapViewMap::PreCalcRenderValues(void); +EQLIB_OBJECT void MapViewMap::RecalcLabelExtents(struct _mapviewlabel *); +EQLIB_OBJECT void MapViewMap::RemoveLabel(struct _mapviewlabel *); +EQLIB_OBJECT void MapViewMap::RemoveLabel(void); +EQLIB_OBJECT void MapViewMap::RemoveLine(struct _mapviewline *); +EQLIB_OBJECT void MapViewMap::RemoveLine(void); +EQLIB_OBJECT void MapViewMap::Save(char *); +EQLIB_OBJECT void MapViewMap::SaveEx(char *,int); +EQLIB_OBJECT void MapViewMap::SetCurrentColor(unsigned long); +EQLIB_OBJECT void MapViewMap::SetMarkedLine(struct _mapviewline *); +EQLIB_OBJECT void MapViewMap::SetMarkedLineColor(unsigned long); +EQLIB_OBJECT void MapViewMap::SetZoneExtents(int,int,int,int); +EQLIB_OBJECT void MapViewMap::SetZoom(float); +EQLIB_OBJECT void MapViewMap::StartLine(float,float,float); +EQLIB_OBJECT void MapViewMap::TransformPoint(struct T3D_XYZ *); +}; + +class MemoryPoolManager +{ +public: +EQLIB_OBJECT MemoryPoolManager::~MemoryPoolManager(void); +EQLIB_OBJECT MemoryPoolManager::MemoryPoolManager(void); +EQLIB_OBJECT void * MemoryPoolManager::Alloc(int); +EQLIB_OBJECT void MemoryPoolManager::Free(void *); +}; + +class MidiInstance +{ +public: +EQLIB_OBJECT MidiInstance::MidiInstance(class SoundManager *); +// virtual +EQLIB_OBJECT bool MidiInstance::GiveTime(void); +EQLIB_OBJECT enum InstanceType MidiInstance::GetType(void); +EQLIB_OBJECT void MidiInstance::AdjustVolume(float,int); +EQLIB_OBJECT void MidiInstance::GuaranteeStopped(void); +EQLIB_OBJECT void MidiInstance::Move(float,float,float); +EQLIB_OBJECT void MidiInstance::Play(class SoundControl *); +// protected +EQLIB_OBJECT virtual MidiInstance::~MidiInstance(void); +//EQLIB_OBJECT virtual void * MidiInstance::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * MidiInstance::`vector deleting destructor'(unsigned int); +}; + +class monty +{ +public: +EQLIB_OBJECT monty::~monty(void); +EQLIB_OBJECT monty::monty(class vlong const &); +EQLIB_OBJECT class vlong monty::exp(class vlong const &,class vlong const &); +// private +EQLIB_OBJECT void monty::mul(class vlong &,class vlong const &); +}; + +class Mp3Manager +{ +public: +EQLIB_OBJECT Mp3Manager::~Mp3Manager(void); +//EQLIB_OBJECT Mp3Manager::Entry::~Entry(void); +//EQLIB_OBJECT Mp3Manager::Entry::Entry(char *,char *,int,int); +EQLIB_OBJECT Mp3Manager::Mp3Manager(class SoundManager *,class MusicManager *); +EQLIB_OBJECT char * Mp3Manager::GetName(int); +//EQLIB_OBJECT enum Mp3Manager::SortOrder Mp3Manager::GetSort(void); +//EQLIB_OBJECT enum StreamingStatus Mp3Manager::Status(void); +EQLIB_OBJECT float Mp3Manager::GetVolumeLevel(void); +EQLIB_OBJECT int Mp3Manager::Add(char *); +EQLIB_OBJECT int Mp3Manager::Count(void); +EQLIB_OBJECT int Mp3Manager::GetPosition(void); +EQLIB_OBJECT int Mp3Manager::GetSongLength(void); +EQLIB_OBJECT int Mp3Manager::GetSongPosition(void); +EQLIB_OBJECT void Mp3Manager::Back(void); +EQLIB_OBJECT void Mp3Manager::Delete(int); +EQLIB_OBJECT void Mp3Manager::DeleteAll(void); +EQLIB_OBJECT void Mp3Manager::GiveTime(void); +EQLIB_OBJECT void Mp3Manager::Next(void); +EQLIB_OBJECT void Mp3Manager::Pause(void); +EQLIB_OBJECT void Mp3Manager::Play(void); +EQLIB_OBJECT void Mp3Manager::SaveList(char *); +EQLIB_OBJECT void Mp3Manager::SetPosition(int); +EQLIB_OBJECT void Mp3Manager::SetSongPosition(int); +EQLIB_OBJECT void Mp3Manager::SetVolumeLevel(float); +//EQLIB_OBJECT void Mp3Manager::Sort(enum Mp3Manager::SortOrder); +EQLIB_OBJECT void Mp3Manager::Stop(void); +// private +EQLIB_OBJECT int Mp3Manager::InternalAdd(char *,char *,int); +}; + +class MusicManager +{ +public: +EQLIB_OBJECT MusicManager::~MusicManager(void); +//EQLIB_OBJECT MusicManager::MusicEntry::~MusicEntry(void); +//EQLIB_OBJECT MusicManager::MusicEntry::MusicEntry(int,class SoundAsset *,int,float,int,int,int,int,int,int); +EQLIB_OBJECT MusicManager::MusicManager(void); +EQLIB_OBJECT void MusicManager::Clear(class SoundAsset *); +EQLIB_OBJECT void MusicManager::Clear(int); +EQLIB_OBJECT void MusicManager::Enable(bool); +EQLIB_OBJECT void MusicManager::GiveTime(void); +//EQLIB_OBJECT void MusicManager::MusicEntry::AdjustVolume(float); +//EQLIB_OBJECT void MusicManager::MusicEntry::FadeIn(float); +//EQLIB_OBJECT void MusicManager::MusicEntry::FadeOut(bool); +EQLIB_OBJECT void MusicManager::Play(int); +EQLIB_OBJECT void MusicManager::Set(int,class SoundAsset *,int,float,int,int,int,int,int,int); +EQLIB_OBJECT void MusicManager::SetVolumeLevel(float); +EQLIB_OBJECT void MusicManager::Stop(int); +}; + +class PacketPacker +{ +public: +EQLIB_OBJECT void PacketPacker::Disassociate(void); +EQLIB_OBJECT void PacketPacker::Flush(void); +EQLIB_OBJECT void PacketPacker::SendPacket(unsigned __int32,void *,int,bool); +EQLIB_OBJECT void PacketPacker::SendStatUpdate(struct _statUpdate *,bool); +// private +//EQLIB_OBJECT void PacketPacker::AddPacketToBuffer(struct PacketPacker::PacketBuffer *,unsigned __int32,void *,int); +//EQLIB_OBJECT void PacketPacker::FlushBuffer(struct PacketPacker::PacketBuffer *); +EQLIB_OBJECT void PacketPacker::FlushPositions(void); +EQLIB_OBJECT void PacketPacker::ScheduleUs(void); +}; + +class PacketPackerManager +{ +public: +EQLIB_OBJECT static bool __cdecl PacketPackerManager::UnpackGetFirst(struct PacketPackerState *,unsigned __int32,unsigned char *,int); +EQLIB_OBJECT static bool __cdecl PacketPackerManager::UnpackGetNext(struct PacketPackerState *); +EQLIB_OBJECT static void __cdecl PacketPackerManager::Initialize(void); +EQLIB_OBJECT void PacketPackerManager::RemovePacker(class PacketPacker *); +EQLIB_OBJECT void PacketPackerManager::SetPriority(class PacketPacker *,__int64); +// private +EQLIB_OBJECT static int * PacketPackerManager::sKnownSize; +}; + +class PackFile +{ +public: +EQLIB_OBJECT PackFile::~PackFile(void); +EQLIB_OBJECT int PackFile::length(void)const; +EQLIB_OBJECT int PackFile::read(void * const,int); +EQLIB_OBJECT void PackFile::close(void); +}; + +class PackFS +{ +public: +EQLIB_OBJECT PackFS::PackFS(void); +EQLIB_OBJECT bool PackFS::addFileSystem(class FilePath); +EQLIB_OBJECT bool PackFS::openFile(class FilePath,class PackFile *)const; +EQLIB_OBJECT void PackFS::removeFileSystem(class FilePath); +}; + +class PooledLogicalPacket +{ +public: +EQLIB_OBJECT PooledLogicalPacket::PooledLogicalPacket(class UdpManager *,int); +// virtual +EQLIB_OBJECT int PooledLogicalPacket::GetDataLen(void)const; +EQLIB_OBJECT void * PooledLogicalPacket::GetDataPtr(void); +EQLIB_OBJECT void PooledLogicalPacket::AddRef(void)const; +EQLIB_OBJECT void PooledLogicalPacket::Release(void)const; +EQLIB_OBJECT void PooledLogicalPacket::SetDataLen(int); +EQLIB_OBJECT void const * PooledLogicalPacket::GetDataPtr(void)const; +// protected +EQLIB_OBJECT virtual PooledLogicalPacket::~PooledLogicalPacket(void); +//EQLIB_OBJECT virtual void * PooledLogicalPacket::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * PooledLogicalPacket::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void PooledLogicalPacket::SetData(void const *,int,void const *,int); +}; + +class public_key +{ +public: +EQLIB_OBJECT public_key::~public_key(void); +EQLIB_OBJECT public_key::public_key(void); +EQLIB_OBJECT class vlong public_key::encrypt(class vlong &); +}; + +class SAmpersandEntry +{ +public: +EQLIB_OBJECT SAmpersandEntry::~SAmpersandEntry(void); +EQLIB_OBJECT SAmpersandEntry::SAmpersandEntry(class CXStr,char); +}; + +class SFormattedText +{ +public: +EQLIB_OBJECT SFormattedText::~SFormattedText(void); +EQLIB_OBJECT SFormattedText::SFormattedText(void); +//EQLIB_OBJECT void * SFormattedText::`vector deleting destructor'(unsigned int); +}; + +class ShareBase +{ +public: +EQLIB_OBJECT void ShareBase::removeRef(void); +// virtual +EQLIB_OBJECT ShareBase::~ShareBase(void); +}; + +class SharedString +{ +public: +EQLIB_OBJECT SharedString::~SharedString(void); +EQLIB_OBJECT SharedString::SharedString(char const *); +EQLIB_OBJECT class SharedString & SharedString::operator=(class SharedString const &); +// protected +EQLIB_OBJECT void SharedString::_updateTag(void)const; +}; + +class SHistoryElement +{ +public: +EQLIB_OBJECT SHistoryElement::~SHistoryElement(void); +EQLIB_OBJECT SHistoryElement::SHistoryElement(void); +//EQLIB_OBJECT void * SHistoryElement::`vector deleting destructor'(unsigned int); +}; + +class SimpleLogicalPacket +{ +public: +EQLIB_OBJECT SimpleLogicalPacket::SimpleLogicalPacket(void const *,int); +// virtual +EQLIB_OBJECT int SimpleLogicalPacket::GetDataLen(void)const; +EQLIB_OBJECT void * SimpleLogicalPacket::GetDataPtr(void); +EQLIB_OBJECT void SimpleLogicalPacket::SetDataLen(int); +EQLIB_OBJECT void const * SimpleLogicalPacket::GetDataPtr(void)const; +// protected +EQLIB_OBJECT virtual SimpleLogicalPacket::~SimpleLogicalPacket(void); +//EQLIB_OBJECT virtual void * SimpleLogicalPacket::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * SimpleLogicalPacket::`vector deleting destructor'(unsigned int); +}; + +class SLinkInfo +{ +public: +EQLIB_OBJECT SLinkInfo::~SLinkInfo(void); +EQLIB_OBJECT SLinkInfo::SLinkInfo(class SLinkInfo const &); +EQLIB_OBJECT SLinkInfo::SLinkInfo(void); +EQLIB_OBJECT class SLinkInfo & SLinkInfo::operator=(class SLinkInfo const &); +}; + +class SListWndCell +{ +public: +EQLIB_OBJECT SListWndCell::~SListWndCell(void); +EQLIB_OBJECT SListWndCell::SListWndCell(void); +EQLIB_OBJECT class SListWndCell & SListWndCell::operator=(class SListWndCell const &); +//EQLIB_OBJECT void * SListWndCell::`vector deleting destructor'(unsigned int); +}; + +class SListWndCellEditUpdate +{ +public: +EQLIB_OBJECT SListWndCellEditUpdate::~SListWndCellEditUpdate(void); +}; + +class SListWndColumn +{ +public: +EQLIB_OBJECT SListWndColumn::~SListWndColumn(void); +EQLIB_OBJECT SListWndColumn::SListWndColumn(class CXStr,int,class CTextureAnimation *,unsigned __int32,unsigned __int32,class CTextureAnimation *,class CTextureAnimation *); +//EQLIB_OBJECT void SListWndColumn::`default constructor closure'(void); +}; + +class SListWndLine +{ +public: +EQLIB_OBJECT SListWndLine::~SListWndLine(void); +EQLIB_OBJECT SListWndLine::SListWndLine(void); +EQLIB_OBJECT class SListWndLine & SListWndLine::operator=(class SListWndLine const &); +}; + +class SListWndSortInfo +{ +public: +EQLIB_OBJECT SListWndSortInfo::~SListWndSortInfo(void); +}; + +class SoundAsset +{ +public: +EQLIB_OBJECT SoundAsset::SoundAsset(class SoundManager *,char *,char *,int); +EQLIB_OBJECT bool SoundAsset::IsPlaying(void); +EQLIB_OBJECT char * SoundAsset::GetName(void); +EQLIB_OBJECT class SoundInstance * SoundAsset::Play(class SoundControl *); +//EQLIB_OBJECT enum AssetType SoundAsset::GetType(void); +EQLIB_OBJECT void SoundAsset::AdjustVolume(float,int); +EQLIB_OBJECT void SoundAsset::GiveTime(void); +EQLIB_OBJECT void SoundAsset::Stop(void); +// protected +EQLIB_OBJECT virtual SoundAsset::~SoundAsset(void); +//EQLIB_OBJECT virtual void * SoundAsset::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * SoundAsset::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void SoundAsset::YourManagerDeleted(void); +}; + +class SoundControl +{ +public: +EQLIB_OBJECT SoundControl::SoundControl(void); +}; + +class SoundEmitter +{ +public: +EQLIB_OBJECT SoundEmitter::SoundEmitter(class EmitterManager *,class MusicManager *,int); +EQLIB_OBJECT SoundEmitter::SoundEmitter(class EmitterManager *,class SoundAsset *,int); +EQLIB_OBJECT void SoundEmitter::Enable(bool); +EQLIB_OBJECT void SoundEmitter::GiveTime(void); +EQLIB_OBJECT void SoundEmitter::Move(float,float,float); +EQLIB_OBJECT void SoundEmitter::SetAsset(class SoundAsset *); +// protected +EQLIB_OBJECT virtual SoundEmitter::~SoundEmitter(void); +//EQLIB_OBJECT virtual void * SoundEmitter::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * SoundEmitter::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void SoundEmitter::Init(void); +EQLIB_OBJECT void SoundEmitter::ReleaseLoopingSound(void); +EQLIB_OBJECT void SoundEmitter::ResetTimer(void); +}; + +class SoundInstance +{ +public: +EQLIB_OBJECT SoundInstance::SoundInstance(class SoundManager *); +// virtual +EQLIB_OBJECT void SoundInstance::SetPoolNumber(int); +EQLIB_OBJECT void SoundInstance::SetSoundAsset(class SoundAsset *); +// protected +EQLIB_OBJECT virtual SoundInstance::~SoundInstance(void); +//EQLIB_OBJECT virtual void * SoundInstance::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * SoundInstance::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void SoundInstance::YourManagerDeleted(void); +}; + +class SoundManager +{ +public: +EQLIB_OBJECT SoundManager::~SoundManager(void); +//EQLIB_OBJECT SoundManager::SoundManager(int,int,bool,int,int,bool,enum SpeakerType); +EQLIB_OBJECT class SoundAsset * SoundManager::AssetGet(char *); +//EQLIB_OBJECT class SoundInstance * SoundManager::BorrowInstance(enum InstanceType,int); +//EQLIB_OBJECT enum EnvironmentType SoundManager::GetListenerEnvironment(void); +//EQLIB_OBJECT enum StreamingStatus SoundManager::StreamingStatus(void); +EQLIB_OBJECT float SoundManager::StreamingGetVolumeLevel(void); +EQLIB_OBJECT int SoundManager::StreamingGetSongLength(void); +EQLIB_OBJECT int SoundManager::StreamingGetSongPosition(void); +//EQLIB_OBJECT void SoundManager::AddPool(enum InstanceType,int,int); +EQLIB_OBJECT void SoundManager::GetListenerLocation(float *,float *,float *,float *); +EQLIB_OBJECT void SoundManager::GiveTime(void); +EQLIB_OBJECT void SoundManager::ReturnInstance(class SoundInstance *); +//EQLIB_OBJECT void SoundManager::SetListenerEnvironment(enum EnvironmentType); +EQLIB_OBJECT void SoundManager::SetListenerLocation(float,float,float,float); +EQLIB_OBJECT void SoundManager::SetMixAhead(int); +EQLIB_OBJECT void SoundManager::StreamingPause(void); +EQLIB_OBJECT void SoundManager::StreamingPlay(char *); +EQLIB_OBJECT void SoundManager::StreamingSetSongPosition(int); +EQLIB_OBJECT void SoundManager::StreamingSetVolumeLevel(float); +EQLIB_OBJECT void SoundManager::StreamingStop(void); +// protected +EQLIB_OBJECT void SoundManager::AssetAdd(class SoundAsset *); +EQLIB_OBJECT void SoundManager::AssetGiveTime(void); +EQLIB_OBJECT void SoundManager::AssetRemove(class SoundAsset *); +}; + +class SoundObject +{ +public: +EQLIB_OBJECT SoundObject::SoundObject(void); +EQLIB_OBJECT void SoundObject::AddRef(void); +EQLIB_OBJECT void SoundObject::Release(void); +// protected +EQLIB_OBJECT virtual SoundObject::~SoundObject(void); +//EQLIB_OBJECT virtual void * SoundObject::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * SoundObject::`vector deleting destructor'(unsigned int); +}; + +class SParseVariables +{ +public: +EQLIB_OBJECT SParseVariables::~SParseVariables(void); +}; + +class SpellManager +{ +public: +EQLIB_OBJECT SpellManager::~SpellManager(void); +EQLIB_OBJECT SpellManager::SpellManager(char *); +SPELLMGR Data; +}; + +class STable +{ +public: +EQLIB_OBJECT STable::~STable(void); +EQLIB_OBJECT STable::STable(void); +EQLIB_OBJECT class STable & STable::operator=(class STable const &); +//EQLIB_OBJECT void * STable::`vector deleting destructor'(unsigned int); +}; + +class STableCell +{ +public: +EQLIB_OBJECT STableCell::~STableCell(void); +EQLIB_OBJECT STableCell::STableCell(void); +}; + +class STempTable +{ +public: +EQLIB_OBJECT STempTable::~STempTable(void); +}; + +class STempTableCell +{ +public: +EQLIB_OBJECT STempTableCell::~STempTableCell(void); +EQLIB_OBJECT STempTableCell::STempTableCell(void); +}; + +class STempTableRow +{ +public: +EQLIB_OBJECT STempTableRow::~STempTableRow(void); +EQLIB_OBJECT STempTableRow::STempTableRow(void); +}; + +class STextLine +{ +public: +EQLIB_OBJECT STextLine::~STextLine(void); +EQLIB_OBJECT STextLine::STextLine(void); +EQLIB_OBJECT class STextLine & STextLine::operator=(class STextLine const &); +//EQLIB_OBJECT void * STextLine::`vector deleting destructor'(unsigned int); +}; + +class STextureAnimationFrame +{ +public: +EQLIB_OBJECT STextureAnimationFrame::~STextureAnimationFrame(void); +EQLIB_OBJECT STextureAnimationFrame::STextureAnimationFrame(class CUITexturePiece,unsigned __int32,class CXPoint); +EQLIB_OBJECT STextureAnimationFrame::STextureAnimationFrame(void); +EQLIB_OBJECT class STextureAnimationFrame & STextureAnimationFrame::operator=(class STextureAnimationFrame const &); +//EQLIB_OBJECT void * STextureAnimationFrame::`vector deleting destructor'(unsigned int); +}; + +class StringItem +{ +public: +EQLIB_OBJECT StringItem::~StringItem(void); +EQLIB_OBJECT StringItem::StringItem(void); +EQLIB_OBJECT int StringItem::load(struct _iobuf *,int); +}; + +class StringTable +{ +public: +EQLIB_OBJECT StringTable::~StringTable(void); +EQLIB_OBJECT StringTable::StringTable(void); +EQLIB_OBJECT char * StringTable::getString(unsigned long,bool *); +EQLIB_OBJECT int StringTable::load(char const *,int); +EQLIB_OBJECT void StringTable::addItem(class StringItem *); +// private +EQLIB_OBJECT class StringItem * StringTable::findItem(unsigned long,int,int); +EQLIB_OBJECT void StringTable::checkAlloc(void); +}; + +class TextFileReader +{ +public: +EQLIB_OBJECT TextFileReader::~TextFileReader(void); +EQLIB_OBJECT TextFileReader::TextFileReader(char *,char); +EQLIB_OBJECT bool TextFileReader::IsOpen(void); +EQLIB_OBJECT int TextFileReader::GetNextField(char *,int); +EQLIB_OBJECT int TextFileReader::ReadLine(void); +EQLIB_OBJECT void TextFileReader::GetLine(char *,int); +}; + +class type_info +{ +public: +// virtual +EQLIB_OBJECT type_info::~type_info(void); +//EQLIB_OBJECT void * type_info::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT void * type_info::`vector deleting destructor'(unsigned int); +}; + +class UdpConnection +{ +public: +//EQLIB_OBJECT bool UdpConnection::Send(enum UdpChannel,void const *,int); +EQLIB_OBJECT int UdpConnection::ConnectionAge(void)const; +EQLIB_OBJECT int UdpConnection::LastReceive(void)const; +EQLIB_OBJECT int UdpConnection::TotalPendingBytes(void)const; +EQLIB_OBJECT void UdpConnection::FlushMultiBuffer(void); +//EQLIB_OBJECT void UdpConnection::GetChannelStatus(enum UdpChannel,struct UdpConnection::ChannelStatus *)const; +EQLIB_OBJECT void UdpConnection::PingStatReset(void); +EQLIB_OBJECT void UdpConnection::Release(void); +EQLIB_OBJECT void UdpConnection::SetSilentDisconnect(bool); +// protected +EQLIB_OBJECT UdpConnection::UdpConnection(class UdpManager *,class UdpIpAddress,int,int); +//EQLIB_OBJECT UdpConnection::UdpConnection(class UdpManager *,class UdpManager::PacketHistoryEntry const *); +EQLIB_OBJECT void UdpConnection::GiveTime(void); +EQLIB_OBJECT void UdpConnection::PortUnreachable(void); +//EQLIB_OBJECT void UdpConnection::ProcessRawPacket(class UdpManager::PacketHistoryEntry const *); +// private +EQLIB_OBJECT UdpConnection::~UdpConnection(void); +//EQLIB_OBJECT bool UdpConnection::InternalSend(enum UdpChannel,unsigned char const *,int,unsigned char const *,int); +EQLIB_OBJECT bool UdpConnection::IsNonEncryptPacket(unsigned char const *)const; +EQLIB_OBJECT int UdpConnection::DecryptNone(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::DecryptUserSupplied(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::DecryptUserSupplied2(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::DecryptXor(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::DecryptXorBuffer(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::EncryptNone(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::EncryptUserSupplied(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::EncryptUserSupplied2(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::EncryptXor(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::EncryptXorBuffer(unsigned char *,unsigned char const *,int); +EQLIB_OBJECT int UdpConnection::ExpireReceiveBin(void); +EQLIB_OBJECT int UdpConnection::ExpireSendBin(void); +EQLIB_OBJECT unsigned char * UdpConnection::BufferedSend(unsigned char const *,int,unsigned char const *,int,bool); +//EQLIB_OBJECT void UdpConnection::CallbackCorruptPacket(unsigned char const *,int,enum UdpCorruptionReason); +EQLIB_OBJECT void UdpConnection::CallbackRoutePacket(unsigned char const *,int); +EQLIB_OBJECT void UdpConnection::Init(class UdpManager *,class UdpIpAddress,int); +//EQLIB_OBJECT void UdpConnection::InternalDisconnect(int,enum UdpConnection::DisconnectReason); +EQLIB_OBJECT void UdpConnection::InternalGiveTime(void); +EQLIB_OBJECT void UdpConnection::PhysicalSend(unsigned char const *,int,bool); +EQLIB_OBJECT void UdpConnection::ProcessCookedPacket(unsigned char const *,int); +EQLIB_OBJECT void UdpConnection::RawSend(unsigned char const *,int); +EQLIB_OBJECT void UdpConnection::ScheduleTimeNow(void); +//EQLIB_OBJECT void UdpConnection::SendTerminatePacket(int,enum UdpConnection::DisconnectReason); +EQLIB_OBJECT void UdpConnection::SetupEncryptModel(void); +}; + +class UdpConnectionHandler +{ +public: +// virtual +EQLIB_OBJECT void UdpConnectionHandler::OnConnectComplete(class UdpConnection *); +EQLIB_OBJECT void UdpConnectionHandler::OnCrcReject(class UdpConnection *,unsigned char const *,int); +//EQLIB_OBJECT void UdpConnectionHandler::OnPacketCorrupt(class UdpConnection *,unsigned char const *,int,enum UdpCorruptionReason); +EQLIB_OBJECT void UdpConnectionHandler::OnTerminated(class UdpConnection *); +}; + +class UdpIpAddress +{ +public: +EQLIB_OBJECT UdpIpAddress::UdpIpAddress(unsigned int); +}; + +class UdpManager +{ +public: +//EQLIB_OBJECT UdpManager::PacketHistoryEntry::~PacketHistoryEntry(void); +//EQLIB_OBJECT UdpManager::PacketHistoryEntry::PacketHistoryEntry(int); +//EQLIB_OBJECT UdpManager::Params::Params(void); +//EQLIB_OBJECT UdpManager::SimulateQueueEntry::~SimulateQueueEntry(void); +//EQLIB_OBJECT UdpManager::SimulateQueueEntry::SimulateQueueEntry(unsigned char const *,int,class UdpIpAddress,int); +//EQLIB_OBJECT UdpManager::UdpManager(struct UdpManager::Params const *); +EQLIB_OBJECT bool UdpManager::GiveTime(int,bool); +EQLIB_OBJECT class LogicalPacket * UdpManager::CreatePacket(void const *,int,void const *,int); +EQLIB_OBJECT class UdpConnection * UdpManager::EstablishConnection(char const *,int,int); +EQLIB_OBJECT void UdpManager::Release(void); +EQLIB_OBJECT void UdpManager::ResetStats(void); +// protected +EQLIB_OBJECT class UdpConnection * UdpManager::AddressGetConnection(class UdpIpAddress,int)const; +EQLIB_OBJECT class UdpConnection * UdpManager::ConnectCodeGetConnection(int)const; +//EQLIB_OBJECT class UdpManager::PacketHistoryEntry * UdpManager::ActualReceive(void); +EQLIB_OBJECT class WrappedLogicalPacket * UdpManager::WrappedBorrow(class LogicalPacket const *); +EQLIB_OBJECT void UdpManager::ActualSend(unsigned char const *,int,class UdpIpAddress,int); +EQLIB_OBJECT void UdpManager::ActualSendHelper(unsigned char const *,int,class UdpIpAddress,int); +EQLIB_OBJECT void UdpManager::AddConnection(class UdpConnection *); +EQLIB_OBJECT void UdpManager::CloseSocket(void); +EQLIB_OBJECT void UdpManager::CreateAndBindSocket(int); +EQLIB_OBJECT void UdpManager::KeepUntilDisconnected(class UdpConnection *); +EQLIB_OBJECT void UdpManager::PoolCreated(class PooledLogicalPacket *); +EQLIB_OBJECT void UdpManager::PoolDestroyed(class PooledLogicalPacket *); +EQLIB_OBJECT void UdpManager::PoolReturn(class PooledLogicalPacket *); +EQLIB_OBJECT void UdpManager::ProcessDisconnectPending(void); +EQLIB_OBJECT void UdpManager::ProcessIcmpErrors(void); +//EQLIB_OBJECT void UdpManager::ProcessRawPacket(class UdpManager::PacketHistoryEntry const *); +EQLIB_OBJECT void UdpManager::RemoveConnection(class UdpConnection *); +EQLIB_OBJECT void UdpManager::SendPortAlive(class UdpIpAddress,int); +EQLIB_OBJECT void UdpManager::WrappedCreated(class WrappedLogicalPacket *); +EQLIB_OBJECT void UdpManager::WrappedDestroyed(class WrappedLogicalPacket *); +EQLIB_OBJECT void UdpManager::WrappedReturn(class WrappedLogicalPacket *); +// private +EQLIB_OBJECT UdpManager::~UdpManager(void); +}; + +class UdpMisc +{ +public: +EQLIB_OBJECT static __int64 __cdecl UdpMisc::Clock(void); +EQLIB_OBJECT static __int64 __cdecl UdpMisc::GetValue64(void const *); +EQLIB_OBJECT static class LogicalPacket * __cdecl UdpMisc::CreateQuickLogicalPacket(void const *,int,void const *,int); +EQLIB_OBJECT static int __cdecl UdpMisc::Crc32(void const *,int,int); +EQLIB_OBJECT static int __cdecl UdpMisc::PutValue24(void *,unsigned int); +EQLIB_OBJECT static int __cdecl UdpMisc::PutValue32(void *,unsigned int); +EQLIB_OBJECT static int __cdecl UdpMisc::PutValue64(void *,__int64); +EQLIB_OBJECT static int __cdecl UdpMisc::Random(int *); +EQLIB_OBJECT static int __cdecl UdpMisc::SyncStampShortDeltaTime(unsigned short,unsigned short); +EQLIB_OBJECT static unsigned int __cdecl UdpMisc::GetValue24(void const *); +EQLIB_OBJECT static unsigned int __cdecl UdpMisc::GetValue32(void const *); +EQLIB_OBJECT static unsigned int __cdecl UdpMisc::GetVariableValue(void const *,unsigned int *); +EQLIB_OBJECT static unsigned int __cdecl UdpMisc::PutVariableValue(void *,unsigned int); +}; + +class UdpReliableChannel +{ +public: +//EQLIB_OBJECT UdpReliableChannel::IncomingQueueEntry::~IncomingQueueEntry(void); +//EQLIB_OBJECT UdpReliableChannel::IncomingQueueEntry::IncomingQueueEntry(void); +//EQLIB_OBJECT UdpReliableChannel::PhysicalPacket::~PhysicalPacket(void); +//EQLIB_OBJECT UdpReliableChannel::PhysicalPacket::PhysicalPacket(void); +//EQLIB_OBJECT void * UdpReliableChannel::IncomingQueueEntry::`vector deleting destructor'(unsigned int); +//EQLIB_OBJECT void * UdpReliableChannel::PhysicalPacket::`vector deleting destructor'(unsigned int); +// protected +EQLIB_OBJECT __int64 UdpReliableChannel::GetReliableIncomingId(int)const; +EQLIB_OBJECT UdpReliableChannel::~UdpReliableChannel(void); +//EQLIB_OBJECT UdpReliableChannel::UdpReliableChannel(int,class UdpConnection *,struct UdpManager::ReliableConfig *); +EQLIB_OBJECT bool UdpReliableChannel::PullDown(int); +EQLIB_OBJECT int UdpReliableChannel::GiveTime(void); +EQLIB_OBJECT void UdpReliableChannel::Ack(__int64); +EQLIB_OBJECT void UdpReliableChannel::AckAllPacket(unsigned char const *,int); +EQLIB_OBJECT void UdpReliableChannel::AckPacket(unsigned char const *,int); +EQLIB_OBJECT void UdpReliableChannel::FlushCoalesce(void); +//EQLIB_OBJECT void UdpReliableChannel::GetChannelStatus(struct UdpConnection::ChannelStatus *)const; +//EQLIB_OBJECT void UdpReliableChannel::ProcessPacket(enum UdpReliableChannel::ReliablePacketMode,unsigned char const *,int); +EQLIB_OBJECT void UdpReliableChannel::QueueLogicalPacket(class LogicalPacket const *); +EQLIB_OBJECT void UdpReliableChannel::ReliablePacket(unsigned char const *,int); +EQLIB_OBJECT void UdpReliableChannel::Send(unsigned char const *,int,unsigned char const *,int); +EQLIB_OBJECT void UdpReliableChannel::SendCoalesce(unsigned char const *,int,unsigned char const *,int); +}; + +class vlong +{ +public: +EQLIB_OBJECT vlong::~vlong(void); +EQLIB_OBJECT vlong::vlong(class vlong const &); +EQLIB_OBJECT vlong::vlong(unsigned __int64); +EQLIB_OBJECT class vlong & vlong::operator+=(class vlong const &); +EQLIB_OBJECT class vlong & vlong::operator-=(class vlong const &); +EQLIB_OBJECT class vlong & vlong::operator=(class vlong); +// private +EQLIB_OBJECT int vlong::cf(class vlong)const; +EQLIB_OBJECT void vlong::docopy(void); +}; + +class vlong_value +{ +public: +EQLIB_OBJECT vlong_value::~vlong_value(void); +EQLIB_OBJECT vlong_value::vlong_value(void); +EQLIB_OBJECT int vlong_value::cf(class vlong_value &)const; +EQLIB_OBJECT int vlong_value::is_zero(void)const; +EQLIB_OBJECT int vlong_value::test(unsigned int)const; +EQLIB_OBJECT unsigned int vlong_value::bits(void)const; +EQLIB_OBJECT void vlong_value::add(class vlong_value &); +EQLIB_OBJECT void vlong_value::copy(class vlong_value &); +EQLIB_OBJECT void vlong_value::divide(class vlong_value &,class vlong_value &,class vlong_value &); +EQLIB_OBJECT void vlong_value::init(unsigned int); +EQLIB_OBJECT void vlong_value::init2(unsigned int,unsigned int); +EQLIB_OBJECT void vlong_value::mul(class vlong_value &,class vlong_value &); +EQLIB_OBJECT void vlong_value::shl(void); +EQLIB_OBJECT void vlong_value::shr(unsigned int); +EQLIB_OBJECT void vlong_value::shr(void); +EQLIB_OBJECT void vlong_value::subtract(class vlong_value &); +}; + +class Wave3dInstance +{ +public: +EQLIB_OBJECT Wave3dInstance::Wave3dInstance(class SoundManager *); +// virtual +EQLIB_OBJECT bool Wave3dInstance::GiveTime(void); +EQLIB_OBJECT enum InstanceType Wave3dInstance::GetType(void); +EQLIB_OBJECT void Wave3dInstance::AdjustVolume(float,int); +EQLIB_OBJECT void Wave3dInstance::GuaranteeStopped(void); +EQLIB_OBJECT void Wave3dInstance::Move(float,float,float); +EQLIB_OBJECT void Wave3dInstance::Play(class SoundControl *); +// protected +EQLIB_OBJECT virtual Wave3dInstance::~Wave3dInstance(void); +//EQLIB_OBJECT virtual void * Wave3dInstance::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * Wave3dInstance::`vector deleting destructor'(unsigned int); +}; + +class WaveInstance +{ +public: +EQLIB_OBJECT WaveInstance::WaveInstance(class SoundManager *); +// virtual +EQLIB_OBJECT bool WaveInstance::GiveTime(void); +//EQLIB_OBJECT enum InstanceType WaveInstance::GetType(void); +EQLIB_OBJECT void WaveInstance::AdjustVolume(float,int); +EQLIB_OBJECT void WaveInstance::GuaranteeStopped(void); +EQLIB_OBJECT void WaveInstance::Move(float,float,float); +EQLIB_OBJECT void WaveInstance::Play(class SoundControl *); +// protected +EQLIB_OBJECT virtual WaveInstance::~WaveInstance(void); +//EQLIB_OBJECT virtual void * WaveInstance::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * WaveInstance::`vector deleting destructor'(unsigned int); +}; + +class WrappedLogicalPacket +{ +public: +EQLIB_OBJECT WrappedLogicalPacket::WrappedLogicalPacket(class UdpManager *); +// virtual +EQLIB_OBJECT int WrappedLogicalPacket::GetDataLen(void)const; +EQLIB_OBJECT void * WrappedLogicalPacket::GetDataPtr(void); +EQLIB_OBJECT void WrappedLogicalPacket::AddRef(void)const; +EQLIB_OBJECT void WrappedLogicalPacket::Release(void)const; +EQLIB_OBJECT void WrappedLogicalPacket::SetDataLen(int); +EQLIB_OBJECT void const * WrappedLogicalPacket::GetDataPtr(void)const; +// protected +EQLIB_OBJECT virtual WrappedLogicalPacket::~WrappedLogicalPacket(void); +//EQLIB_OBJECT virtual void * WrappedLogicalPacket::`scalar deleting destructor'(unsigned int); +//EQLIB_OBJECT virtual void * WrappedLogicalPacket::`vector deleting destructor'(unsigned int); +EQLIB_OBJECT void WrappedLogicalPacket::SetLogicalPacket(class LogicalPacket const *); +}; + +class ZlibUtil +{ +public: +EQLIB_OBJECT static int __cdecl ZlibUtil::Compress(char const *,int,char *,int,int); +EQLIB_OBJECT static int __cdecl ZlibUtil::Decompress(char const *,int,char *,int); +// private +EQLIB_OBJECT static class MemoryPoolManager ZlibUtil::sMemoryPoolManager; +EQLIB_OBJECT static int __cdecl ZlibUtil::zcompress(unsigned char *,unsigned long *,unsigned char const *,unsigned long,int); +EQLIB_OBJECT static int __cdecl ZlibUtil::zuncompress(unsigned char *,unsigned long *,unsigned char const *,unsigned long); +EQLIB_OBJECT static void * __cdecl ZlibUtil::zcalloc(void *,unsigned int,unsigned int); +EQLIB_OBJECT static void __cdecl ZlibUtil::zfree(void *,void *); +}; + +class ZoneNPCLoadTextManager +{ +public: +EQLIB_OBJECT ZoneNPCLoadTextManager::~ZoneNPCLoadTextManager(void); +EQLIB_OBJECT ZoneNPCLoadTextManager::ZoneNPCLoadTextManager(char *); +EQLIB_OBJECT char * ZoneNPCLoadTextManager::GetNPCCode(int); +EQLIB_OBJECT char * ZoneNPCLoadTextManager::GetS3DName(int); +EQLIB_OBJECT void ZoneNPCLoadTextManager::LoadText(char *); +}; + +class CTextOverlay +{ +public: +EQLIB_OBJECT void CTextOverlay::DisplayText(char *,int,int,int,int,int,int); +}; + +class CMyInventory +{ +public: +EQLIB_OBJECT struct _CONTENTS* CMyInventory::GetSlot(int); +}; + +class CDBStr +{ +public: +// GetString(index, subindex, &success) +EQLIB_OBJECT char *CDBStr::GetString(int, int, int*); +}; + +class CCombatAbilityWnd : public CSidlScreenWnd +{ +public: +EQLIB_OBJECT CCombatAbilityWnd::CCombatAbilityWnd(class CXWnd *); +EQLIB_OBJECT void CCombatAbilityWnd::Activate(int); +EQLIB_OBJECT void CCombatAbilityWnd::Deactivate(void); +EQLIB_OBJECT int CCombatAbilityWnd::OnProcessFrame(void); +EQLIB_OBJECT int CCombatAbilityWnd::WndNotification(class CXWnd *,unsigned __int32,void *); +EQLIB_OBJECT CCombatAbilityWnd::~CCombatAbilityWnd(void); +}; + +class EQMisc +{ +public: +EQLIB_OBJECT int EQMisc::GetActiveFavorCost(void); +}; + +class CSkillMgr +{ +public: +EQLIB_OBJECT unsigned long CSkillMgr::GetStrNumber(int); +EQLIB_OBJECT unsigned long CSkillMgr::GetSkillCap(class EQ_Character *,int,int,int,bool,bool,bool); +EQLIB_OBJECT unsigned long CSkillMgr::SkillAvailableAtLevel(int,int); +EQLIB_OBJECT bool CSkillMgr::IsActivatableSkill(int); +EQLIB_OBJECT unsigned long CSkillMgr::GetBaseDamage(int); +EQLIB_OBJECT unsigned long CSkillMgr::GetReuseTime(int); +EQLIB_OBJECT bool CSkillMgr::IsAvailable(int); +}; + +class CChatService +{ +public: +EQLIB_OBJECT int CChatService::GetNumberOfFriends(void); +EQLIB_OBJECT char * CChatService::GetFriendName(int); +}; + +class PlayerPointManager +{ +public: +EQLIB_OBJECT unsigned long PlayerPointManager::GetAltCurrency(unsigned long,unsigned long b=1); +}; + +}; + +class CharacterZoneClient +{ +public: + bool HasSkill(int); +}; + +class PcZoneClient +{ +public: + int GetPcSkillLimit(int); +}; + +using namespace EQClasses; diff --git a/client_files/native_autoloot/eq-core-dll/src/EQData.h b/client_files/native_autoloot/eq-core-dll/src/EQData.h new file mode 100644 index 0000000000..a01256a3bc --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/EQData.h @@ -0,0 +1,2209 @@ +#pragma once +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ +namespace EQData +{ + +// *************************************************************************** +// Defines +// *************************************************************************** + +enum PlayerClass +{ + Unknown= 0, + Warrior= 1, + Cleric= 2, + Paladin= 3, + Ranger= 4, + Shadowknight= 5, + Druid= 6, + Monk= 7, + Bard= 8, + Rogue= 9, + Shaman= 10, + Necromancer= 11, + Wizard= 12, + Mage= 13, + Enchanter= 14, + Beastlord= 15, + Berserker= 16, + TotalClasses= 16, +}; +// class 20 through 35 are the NPC GMs (same class order as above) +// class 41 Merchant +// class 60 LDoN Recruiter +// class 61 LDoN Merchant +// class 63 Tribute Master +// class 67 DoN Merchant (Norrath's Keepers) +// class 68 DoN Merchant (Dark Reign) + +typedef struct _ClassInfo +{ + bool CanCast; + bool PureCaster; + bool PetClass; + bool DruidType; + bool NecroType; + bool ClericType; + bool ShamanType; + char RaidColorOrder; + PCHAR Name; + PCHAR ShortName; +} CLASSINFO, *PCLASSINFO; + +static _ClassInfo ClassInfo[]= +{ + {0,0,0,0,0,0,0,0,"",""}, //unk + {0,0,0,0,0,0,0,13,"Warrior","war"}, //war + {1,1,0,0,0,1,0,2,"Cleric","clr"}, //clr + {1,0,0,0,0,1,0,8,"Paladin","pal"}, //pal + {1,0,0,1,0,0,0,9,"Ranger","rng"}, //rng + {1,0,0,0,1,0,0,11,"Shadowknight","shd"}, //shd + {1,1,0,1,0,0,0,3,"Druid","dru"}, //dru + {0,0,0,0,0,0,0,6,"Monk","mnk"}, //mnk + {1,0,0,0,0,0,0,0,"Bard","brd"}, //brd + {0,0,0,0,0,0,0,10,"Rogue","rog"}, //rog + {1,1,1,0,0,0,1,12,"Shaman","shm"}, //shm + {1,1,1,0,1,0,0,7,"Necromancer","nec"}, //nec + {1,1,0,0,0,0,0,14,"Wizard","wiz"}, //wiz + {1,1,1,0,0,0,0,5,"Mage","mag"}, //mag + {1,1,0,0,0,0,0,4,"Enchanter","enc"}, //enc + {1,0,1,0,0,0,1,1,"Beastlord","bst"}, //bst + {0,0,0,0,0,0,0,15,"Berserker","ber"}, //ber +}; + +enum GroupAbilityLevels { + G_MarkNPC= 0, //0-3 + G_NPCHealth= 1, //0-1 + G_DelegateMA= 3, //0-1 + G_DelegateMarkNPC= 4, //0-1 + G_InspectBuffs= 6, //0-2 + G_SpellAwareness= 8, //0-1 + G_OffenseEnhancement= 9, //0-5 + G_ManaEnhancement= 10, //0-3 + G_HealthEnhancement= 11, //0-3 + G_HealthRegen= 12, //0-3 + G_FindPathtoPC= 13, //0-1 + G_HealthofTargetsTarget= 14, //0-1 +}; + +enum RaidAbilityLevels { + R_MarkNPC= 0, //0-3 + R_NPCHealth= 1, //0-1 + R_DelegateMA= 3, //0-3 + R_DelegateMarkNPC= 4, //0-4 + R_SpellAwareness= 7, //0-1 + R_OffenseEnhancement= 8, //0-5 + R_ManaEnhancement= 9, //0-3 + R_HealthEnhancement= 10, //0-3 + R_HealthRegen= 11, //0-3 + R_FindPathtoPC= 12, //0-1 + R_HealthofTargetsTarget= 13, //0-1 +}; + +#define BI_TARGETABLE 1 +#define BI_TRIGGER 2 +#define BI_TRAP 4 +#define BI_TIMER 8 + +typedef struct _BodyInfo +{ + PCHAR Name; + DWORD Flags; +} BODYINFO, *PBODYINFO; + +#define SPAWN_PLAYER 0 +#define SPAWN_NPC 1 +#define SPAWN_CORPSE 2 +//#define SPAWN_ANY 3 +//#define SPAWN_PET 4 + +#define ITEM_NORMAL1 0x0031 +#define ITEM_NORMAL2 0x0036 +#define ITEM_NORMAL3 0x315f +#define ITEM_NORMAL4 0x3336 +#define ITEM_NORMAL5 0x0032 +#define ITEM_NORMAL6 0x0033 +#define ITEM_NORMAL7 0x0034 +#define ITEM_NORMAL8 0x0039 +#define ITEM_CONTAINER 0x7900 +#define ITEM_CONTAINER_PLAIN 0x7953 +#define ITEM_BOOK 0x7379 + +#define ITEMITEMTYPE_FOOD 0x0e +#define ITEMITEMTYPE_WATER 0x0f +#define ITEMITEMTYPE_ALCOHOL 0x26 +#define ITEMITEMTYPE_POISON 0x2a +#define ITEMITEMTYPE_AUGUMENT 0x36 + +#define ITEMEFFECTTYPE_COMBAT 0x00 +#define ITEMEFFECTTYPE_INVENTORY1 0x01 // Bards need to stop sing to cast +#define ITEMEFFECTTYPE_WORN 0x02 +#define ITEMEFFECTTYPE_INVENTORY2 0x03 +#define ITEMEFFECTTYPE_MUSTEQUIP 0x04 // Bards need to stop sing to cast +#define ITEMEFFECTTYPE_INVENTORY3 0x05 + +#define SKILLMINDAMAGEMOD_BASH 0x00 +#define SKILLMINDAMAGEMOD_BACKSTAB 0x01 +#define SKILLMINDAMAGEMOD_DRAGONPUNCH 0x02 +#define SKILLMINDAMAGEMOD_EAGLESTRIKE 0x03 +#define SKILLMINDAMAGEMOD_FLYINGKICK 0x04 +#define SKILLMINDAMAGEMOD_KICK 0x05 +#define SKILLMINDAMAGEMOD_ROUNDKICK 0x06 +#define SKILLMINDAMAGEMOD_TIGERCLAW 0x07 +#define SKILLMINDAMAGEMOD_FRENZY 0x08 + +#define COLOR_DEFAULT 0x00 +#define COLOR_DARKGREY 0x01 +#define COLOR_DARKGREEN 0x02 +#define COLOR_DARKBLUE 0x03 +#define COLOR_PURPLE 0x05 +#define COLOR_LIGHTGREY 0x06 + +#define CONCOLOR_GREY 0x06 +#define CONCOLOR_GREEN 0x02 +#define CONCOLOR_LIGHTBLUE 0x12 +#define CONCOLOR_BLUE 0x04 +#define CONCOLOR_BLACK 0x14 +#define CONCOLOR_WHITE 0x0a +#define CONCOLOR_YELLOW 0x0f +#define CONCOLOR_RED 0x0d + +#define USERCOLOR_SAY 0xFF + 1 // 1 - Say +#define USERCOLOR_TELL 0xFF + 2 // 2 - Tell +#define USERCOLOR_GROUP 0xFF + 3 // 3 - Group +#define USERCOLOR_GUILD 0xFF + 4 // 4 - Guild +#define USERCOLOR_OOC 0xFF + 5 // 5 - OOC +#define USERCOLOR_AUCTION 0xFF + 6 // 6 - Auction +#define USERCOLOR_SHOUT 0xFF + 7 // 7 - Shout +#define USERCOLOR_EMOTE 0xFF + 8 // 8 - Emote +#define USERCOLOR_SPELLS 0xFF + 9 // 9 - Spells (meming, scribing, casting, etc.) +#define USERCOLOR_YOU_HIT_OTHER 0xFF + 10 // 10 - You hit other +#define USERCOLOR_OTHER_HIT_YOU 0xFF + 11 // 11 - Other hits you +#define USERCOLOR_YOU_MISS_OTHER 0xFF + 12 // 12 - You miss other +#define USERCOLOR_OTHER_MISS_YOU 0xFF + 13 // 13 - Other misses you +#define USERCOLOR_DUELS 0xFF + 14 // 14 - Some broadcasts (duels) +#define USERCOLOR_SKILLS 0xFF + 15 // 15 - Skills (ups, non-combat use, etc.) +#define USERCOLOR_DISCIPLINES 0xFF + 16 // 16 - Disciplines or special abilities +#define USERCOLOR_UNUSED001 0xFF + 17 // 17 - Unused at this time +#define USERCOLOR_DEFAULT 0xFF + 18 // 18 - Default text and stuff you type +#define USERCOLOR_UNUSED002 0xFF + 19 // 19 - Unused at this time +#define USERCOLOR_MERCHANT_OFFER 0xFF + 20 // 20 - Merchant Offer Price +#define USERCOLOR_MERCHANT_EXCHANGE 0xFF + 21 // 21 - Merchant Buy/Sell +#define USERCOLOR_YOUR_DEATH 0xFF + 22 // 22 - Your death message +#define USERCOLOR_OTHER_DEATH 0xFF + 23 // 23 - Others death message +#define USERCOLOR_OTHER_HIT_OTHER 0xFF + 24 // 24 - Other damage other +#define USERCOLOR_OTHER_MISS_OTHER 0xFF + 25 // 25 - Other miss other +#define USERCOLOR_WHO 0xFF + 26 // 26 - /who command +#define USERCOLOR_YELL 0xFF + 27 // 27 - yell for help +#define USERCOLOR_NON_MELEE 0xFF + 28 // 28 - Hit for non-melee +#define USERCOLOR_SPELL_WORN_OFF 0xFF + 29 // 29 - Spell worn off +#define USERCOLOR_MONEY_SPLIT 0xFF + 30 // 30 - Money splits +#define USERCOLOR_LOOT 0xFF + 31 // 31 - Loot message +#define USERCOLOR_RANDOM 0xFF + 32 // 32 - Dice Roll (/random) +#define USERCOLOR_OTHERS_SPELLS 0xFF + 33 // 33 - Others spells +#define USERCOLOR_SPELL_FAILURE 0xFF + 34 // 34 - Spell Failures (resists, fizzles, missing component, bad target, etc.) +#define USERCOLOR_CHAT_CHANNEL 0xFF + 35 // 35 - Chat Channel Messages +#define USERCOLOR_CHAT_1 0xFF + 36 // 36 - Chat Channel 1 +#define USERCOLOR_CHAT_2 0xFF + 37 // 37 - Chat Channel 2 +#define USERCOLOR_CHAT_3 0xFF + 38 // 38 - Chat Channel 3 +#define USERCOLOR_CHAT_4 0xFF + 39 // 39 - Chat Channel 4 +#define USERCOLOR_CHAT_5 0xFF + 40 // 40 - Chat Channel 5 +#define USERCOLOR_CHAT_6 0xFF + 41 // 41 - Chat Channel 6 +#define USERCOLOR_CHAT_7 0xFF + 42 // 42 - Chat Channel 7 +#define USERCOLOR_CHAT_8 0xFF + 43 // 43 - Chat Channel 8 +#define USERCOLOR_CHAT_9 0xFF + 44 // 44 - Chat Channel 9 +#define USERCOLOR_CHAT_10 0xFF + 45 // 45 - Chat Channel 10 +#define USERCOLOR_MELEE_CRIT 0xFF + 46 // 46 - Melee Crits +#define USERCOLOR_SPELL_CRIT 0xFF + 47 // 47 - Spell Crits +#define USERCOLOR_TOO_FAR_AWAY 0xFF + 48 // 48 - Too far away (melee) +#define USERCOLOR_NPC_RAMPAGE 0xFF + 49 // 49 - NPC Rampage +#define USERCOLOR_NPC_FLURRY 0xFF + 50 // 50 - NPC Furry +#define USERCOLOR_NPC_ENRAGE 0xFF + 51 // 51 - NPC Enrage +#define USERCOLOR_ECHO_SAY 0xFF + 52 // 52 - say echo +#define USERCOLOR_ECHO_TELL 0xFF + 53 // 53 - tell echo +#define USERCOLOR_ECHO_GROUP 0xFF + 54 // 54 - group echo +#define USERCOLOR_ECHO_GUILD 0xFF + 55 // 55 - guild echo +#define USERCOLOR_ECHO_OOC 0xFF + 56 // 56 - group echo +#define USERCOLOR_ECHO_AUCTION 0xFF + 57 // 57 - auction echo +#define USERCOLOR_ECHO_SHOUT 0xFF + 58 // 58 - shout echo +#define USERCOLOR_ECHO_EMOTE 0xFF + 59 // 59 - emote echo +#define USERCOLOR_ECHO_CHAT_1 0xFF + 60 // 60 - chat 1 echo +#define USERCOLOR_ECHO_CHAT_2 0xFF + 61 // 61 - chat 2 echo +#define USERCOLOR_ECHO_CHAT_3 0xFF + 62 // 62 - chat 3 echo +#define USERCOLOR_ECHO_CHAT_4 0xFF + 63 // 63 - chat 4 echo +#define USERCOLOR_ECHO_CHAT_5 0xFF + 64 // 64 - chat 5 echo +#define USERCOLOR_ECHO_CHAT_6 0xFF + 65 // 65 - chat 6 echo +#define USERCOLOR_ECHO_CHAT_7 0xFF + 66 // 66 - chat 7 echo +#define USERCOLOR_ECHO_CHAT_8 0xFF + 67 // 67 - chat 8 echo +#define USERCOLOR_ECHO_CHAT_9 0xFF + 68 // 68 - chat 9 echo +#define USERCOLOR_ECHO_CHAT_10 0xFF + 69 // 69 - chat 10 echo +#define USERCOLOR_RESERVED 0xFF + 70 // 70 - "unused at this time" +#define USERCOLOR_LINK 0xFF + 71 // 71 - item links +#define USERCOLOR_RAID 0xFF + 72 // 72 - raid +#define USERCOLOR_PET 0xFF + 73 // 73 - my pet +#define USERCOLOR_DAMAGESHIELD 0xFF + 74 // 74 - damage shields +#define USERCOLOR_LEADER 0xFF + 75 // 75 - LAA-related messages +#define USERCOLOR_PETRAMPFLURRY 0xFF + 76 // 76 - pet rampage/flurry +#define USERCOLOR_PETCRITS 0xFF + 77 // 77 - pet's critical hits +#define USERCOLOR_FOCUS 0xFF + 78 // 78 - focus item activation +#define USERCOLOR_XP 0xFF + 79 // 79 - xp gain/loss +#define USERCOLOR_SYSTEM 0xFF + 80 // 80 - system broadcasts etc +#define USERCOLOR_PET_SPELLS 0xFF + 81 // 81 - pet spells +#define USERCOLOR_PET_RESPONSES 0xFF + 82 // 82 - pet responses +#define USERCOLOR_ITEM_SPEECH 0xFF + 83 // 83 - item speech +#define USERCOLOR_STRIKETHROUGH 0xFF + 84 // 84 - strikethrough messages +#define USERCOLOR_STUN 0XFF + 85 // 85 - stun messages +#define USERCOLOR_RESERVED2 0xFF + 86 // 86 - "unused at this time" (or unknown!?) +#define USERCOLOR_FELLOWSHIP 0xFF + 87 // 87 - fellowship messages +#define USERCOLOR_NPC_SPEECH 0xFF + 88 // 88 - npc dialogue +#define USERCOLOR_NPC_SPEECH_TO_YOU 0xFF + 89 // 89 - npc dialogue to you +#define USERCOLOR_GUILD_MSG 0xFF + 90 // 90 - guild messages + +#define DEITY_Bertoxxulous 201 +#define DEITY_BrellSerilis 202 +#define DEITY_CazicThule 203 +#define DEITY_ErollisiMarr 204 +#define DEITY_Bristlebane 205 +#define DEITY_Innoruuk 206 +#define DEITY_Karana 207 +#define DEITY_MithanielMarr 208 +#define DEITY_Prexus 209 +#define DEITY_Quellious 210 +#define DEITY_RallosZek 211 +#define DEITY_RodcetNife 212 +#define DEITY_SolusekRo 213 +#define DEITY_TheTribunal 214 +#define DEITY_Tunare 215 +#define DEITY_Veeshan 216 + +#define ITEMTYPE_NORMAL 0 +#define ITEMTYPE_PACK 1 +#define ITEMTYPE_BOOK 2 + +#define COMP_NONE 0 +#define COMP_EQ 1 +#define COMP_NE 2 +#define COMP_GT 3 +#define COMP_LT 4 +#define COMP_GE 5 +#define COMP_LE 6 +#define COMP_CONT 7 +#define COMP_NOTCONT 8 +#define COMP_BITAND 9 +#define COMP_BITOR 10 + +#define COMP_TYPE_STRING 0 +#define COMP_TYPE_NUMERIC 1 +#define COMP_TYPE_BIT 2 + +#define CMD_MQ 1 +#define CMD_EQ 2 + +#define LASTFIND_NOTFOUND 96 +#define LASTFIND_PRIMARY 97 + +#define EVENT_CHAT 0 +#define EVENT_TIMER 1 +#define EVENT_CUSTOM 2 +#define EVENT_EVAL 3 +#define EVENT_EXEC 4 +#define EVENT_PULSE 5 +#define EVENT_SHUTDOWN 6 +#define EVENT_BREAK 7 +#define NUM_EVENTS 8 + +#define CHAT_SAY 1 +#define CHAT_TELL 2 +#define CHAT_OOC 4 +#define CHAT_SHOUT 8 +#define CHAT_AUC 16 +#define CHAT_GUILD 32 +#define CHAT_GROUP 64 +#define CHAT_CHAT 128 +#define CHATEVENT(x) (gEventChat & x) + +#define FILTERSKILL_ALL 0 +#define FILTERSKILL_INCREASE 1 +#define FILTERSKILL_NONE 2 + +#define FILTERMACRO_ALL 0 +#define FILTERMACRO_ENHANCED 1 +#define FILTERMACRO_NONE 2 +#define FILTERMACRO_MACROENDED 3 + + +#define MAX_STRING 2048 +#define MAX_VARNAME 64 + +// Defines for CXWnd WindowStyle +#define CWS_VSCROLL 0x1 +#define CWS_HSCROLL 0x2 +#define CWS_TITLE 0x4 +#define CWS_CLOSE 0x8 +#define CWS_TILEBOX 0x10 +#define CWS_MINIMIZE 0x20 +#define CWS_BORDER 0x40 +//#define CWS_UNKNOWN 0x80 +//#define CWS_UNKNOWN 0x100 +#define CWS_RESIZEALL 0x200 +#define CWS_TRANSPARENT 0x400 +//#define CWS_UNKNOWN 0x800 +#define CWS_NOMOVE 0x8000 +#define CWS_QMARK 0x10000 +#define CWS_MAXIMIZE 0x40000 +#define ToggleBit(field,bit) field^=bit; +#define BitOn(field,bit) field|=bit; +#define BitOff(field,bit) field&=~bit; +// End CXWnd WindowStyle Defines + +#define ALTCURRENCY_DOUBLOONS 0xa +#define ALTCURRENCY_ORUX 0xb +#define ALTCURRENCY_PHOSPHENES 0xc +#define ALTCURRENCY_PHOSPHITES 0xd +#define ALTCURRENCY_FAYCITES 0xe +#define ALTCURRENCY_CHRONOBINES 0xf + +enum MOUSE_DATA_TYPES { + MD_Unknown = -1, + MD_Button0Click=0, + MD_Button1Click, + MD_Button0, + MD_Button1 +}; + +#define nEQMappableCommands 0x1f4 + +#define MAX_PC_LEVEL 100 +#define MAX_NPC_LEVEL 110 +#define NUM_SPELL_GEMS 12 +#define NUM_SPELL_SETS 10 +#define NUM_BUFF_SLOTS 0x61 +#define NUM_LONG_BUFFS 42 +#define NUM_SHORT_BUFFS 20 + +#define EQ_EXPANSION(x) (1 << (x - 1)) +#define EXPANSION_RoK EQ_EXPANSION(1) +#define EXPANSION_SoV EQ_EXPANSION(2) +#define EXPANSION_SoL EQ_EXPANSION(3) +#define EXPANSION_PoP EQ_EXPANSION(4) +#define EXPANSION_LoY EQ_EXPANSION(5) +#define EXPANSION_LDoN EQ_EXPANSION(6) +#define EXPANSION_GoD EQ_EXPANSION(7) +#define EXPANSION_OoW EQ_EXPANSION(8) +#define EXPANSION_DoN EQ_EXPANSION(9) +#define EXPANSION_DoD EQ_EXPANSION(10) +#define EXPANSION_PoR EQ_EXPANSION(11) +#define EXPANSION_TSS EQ_EXPANSION(12) +#define EXPANSION_TBS EQ_EXPANSION(13) +#define EXPANSION_SoF EQ_EXPANSION(14) +#define EXPANSION_SoD EQ_EXPANSION(15) +#define EXPANSION_UFT EQ_EXPANSION(16) +#define EXPANSION_HoT EQ_EXPANSION(17) +#define EXPANSION_VoA EQ_EXPANSION(18) +#define EXPANSION_RoF EQ_EXPANSION(19) +#define NUM_EXPANSIONS 19 +// *************************************************************************** +// Structures +// *************************************************************************** + +typedef struct _MOUSESPOOF { + MOUSE_DATA_TYPES mdType; + DWORD dwData; + struct _MOUSESPOOF *pNext; +} MOUSESPOOF, *PMOUSESPOOF; + +typedef struct _MOUSECLICK { + BYTE Confirm[8]; // DO NOT WRITE TO THIS BYTE + BYTE Click[8]; // Left = 0, Right = 1, etc +} MOUSECLICK, *PMOUSECLICK; + +typedef struct _UILOCATION { + DWORD x; + DWORD y; + DWORD w; + DWORD h; + CHAR error[MAX_STRING]; +} UILOCATION, *PUILOCATION; + +//5-15-2003 eqmule +typedef struct _CXSTR { +/*0x00*/ DWORD Font; // maybe, dont know. 04 = Window 01 = button +/*0x04*/ DWORD MaxLength; +/*0x08*/ DWORD Length; +/*0x0c*/ BOOL Encoding; // 0: ASCII, 1:Unicode +/*0x10*/ PCRITICAL_SECTION pLock; +/*0x14*/ CHAR Text[1]; // Stub, can be anywhere from Length to MaxLength (which is how much is malloc'd to this CXStr) +} CXSTR, *PCXSTR; + +#define ITEM_NAME_LEN 0x40 +#define LORE_NAME_LEN 0x70 + +// size is 0x64 02-16-2007 +typedef struct _ITEMSPELLS { +/*0x00*/ DWORD SpellID; +/*0x04*/ BYTE RequiredLevel; +/*0x05*/ BYTE EffectType; +/*0x06*/ BYTE Unknown[0x2]; +/*0x08*/ DWORD Unknown0x08; +/*0x0c*/ DWORD MaxCharges; +/*0x10*/ DWORD CastTime; +/*0x14*/ DWORD TimerID; +/*0x18*/ DWORD RecastType; +/*0x1c*/ DWORD ProcRate; +/*0x20*/ BYTE Unknown0x20[0x44]; +/*0x64*/ +} ITEMSPELLS, *PITEMSPELLS; + +// actual size: 0x634 20130116 - ieatacid +typedef struct _ITEMINFO { +/*0x000*/ CHAR Name[ITEM_NAME_LEN]; +/*0x040*/ CHAR LoreName[LORE_NAME_LEN]; +/*0x0b0*/ CHAR IDFile[0x20]; +/*0x0d0*/ BYTE Unknown0xd0[0x1c]; +/*0x0ec*/ DWORD ItemNumber; +/*0x0f0*/ DWORD EquipSlots; +/*0x0f4*/ DWORD Cost; +/*0x0f8*/ DWORD IconNumber; +/*0x0fc*/ BYTE Unknown0xfc[0xc]; +/*0x108*/ DWORD Weight; +/*0x10c*/ BYTE NoRent; // 0=temp, 1=default +/*0x10d*/ BYTE NoDrop; // 0=no drop, 1=can drop +/*0x10e*/ BYTE Attuneable; +/*0x10f*/ BYTE Unknown0x10f[0xa]; +/*0x119*/ BYTE Size; +/*0x11a*/ BYTE Type; +/*0x11b*/ BYTE TradeSkills; +/*0x11c*/ DWORD Lore; +/*0x120*/ BYTE Artifact; +/*0x121*/ BYTE Summoned; +/*0x122*/ CHAR SvCold; +/*0x123*/ CHAR SvFire; +/*0x124*/ CHAR SvMagic; +/*0x125*/ CHAR SvDisease; +/*0x126*/ CHAR SvPoison; +/*0x127*/ CHAR SvCorruption; +/*0x128*/ CHAR STR; +/*0x129*/ CHAR STA; +/*0x12a*/ CHAR AGI; +/*0x12b*/ CHAR DEX; +/*0x12c*/ CHAR CHA; +/*0x12d*/ CHAR INT; +/*0x12e*/ CHAR WIS; +/*0x12f*/ BYTE Unknown0x12f; +/*0x130*/ DWORD HP; +/*0x134*/ DWORD Mana; +/*0x138*/ DWORD AC; +/*0x13c*/ DWORD RequiredLevel; +/*0x140*/ DWORD RecommendedLevel; +/*0x144*/ BYTE RecommendedSkill; +/*0x145*/ BYTE Unknown0x145[0x3]; +/*0x148*/ DWORD SkillModType; +/*0x14c*/ DWORD SkillModValue; +/*0x150*/ DWORD Unknown0x150; +/*0x154*/ DWORD Unknown0x154; +/*0x158*/ DWORD BaneDMGRace; +/*0x15c*/ DWORD BaneDMGBodyType; +/*0x160*/ BYTE BaneDMGBodyTypeValue; +/*0x161*/ BYTE BaneDMGRaceValue; +/*0x162*/ BYTE Unknown0x162[0x6]; +/*0x168*/ DWORD InstrumentType; +/*0x16c*/ DWORD InstrumentMod; +/*0x170*/ DWORD Classes; +/*0x174*/ DWORD Races; +/*0x178*/ DWORD Diety; +/*0x17c*/ BYTE Unknown0x17c[0x4]; +/*0x180*/ BYTE Magic; +/*0x181*/ BYTE Light; +/*0x182*/ BYTE Delay; +/*0x183*/ BYTE DmgBonusType; +/*0x184*/ BYTE DmgBonusVal; +/*0x185*/ BYTE Range; +/*0x186*/ BYTE Unknown0x186[0x2]; +/*0x188*/ DWORD Damage; +/*0x18c*/ DWORD BackstabDamage; +/*0x190*/ DWORD DamageShieldMitigation; +/*0x194*/ DWORD HeroicSTR; +/*0x198*/ DWORD HeroicINT; +/*0x19c*/ DWORD HeroicWIS; +/*0x1a0*/ DWORD HeroicAGI; +/*0x1a4*/ DWORD HeroicDEX; +/*0x1a8*/ DWORD HeroicSTA; +/*0x1ac*/ DWORD HeroicCHA; +/*0x1b0*/ DWORD HeroicSvMagic; +/*0x1b4*/ DWORD HeroicSvFire; +/*0x1b8*/ DWORD HeroicSvCold; +/*0x1bc*/ DWORD HeroicSvDisease; +/*0x1c0*/ DWORD HeroicSvPoison; +/*0x1c4*/ DWORD HeroicSvCorruption; +/*0x1c8*/ DWORD HealAmount; +/*0x1cc*/ DWORD SpellDamage; +/*0x1d0*/ DWORD Unknown0x1d0; +/*0x1d4*/ BYTE ItemType; +/*0x1d5*/ BYTE Unknown0x1d5[0x3]; +/*0x1d8*/ BYTE Material; +/*0x1d9*/ BYTE Unknown0x1d9[0x13]; +/*0x1ec*/ DWORD AugSlot1; +/*0x1f0*/ DWORD AugSlot1_Unknown; +/*0x1f4*/ DWORD AugSlot2; +/*0x1f8*/ DWORD AugSlot2_Unknown; +/*0x1fc*/ DWORD AugSlot3; +/*0x200*/ DWORD AugSlot3_Unknown; +/*0x204*/ DWORD AugSlot4; +/*0x208*/ DWORD AugSlot4_Unknown; +/*0x20c*/ DWORD AugSlot5; +/*0x210*/ DWORD AugSlot5_Unknown; +/*0x214*/ DWORD AugSlot6; +/*0x218*/ DWORD AugSlot6_Unknown; +/*0x21c*/ DWORD AugType; +/*0x220*/ DWORD AugRestrictions; +/*0x224*/ DWORD Unknown0x224; +/*0x228*/ DWORD SolventNeeded; //ID# of Solvent (Augs only) +/*0x22c*/ DWORD LDTheme; +/*0x230*/ DWORD LDCost; +/*0x234*/ DWORD LDType; +/*0x238*/ DWORD Unknown0x238; +/*0x23c*/ BYTE Unknown0x23c[0x4]; +/*0x240*/ DWORD FactionModType[0x4]; +/*0x250*/ DWORD FactionModValue[0x4]; +/*0x260*/ BYTE CharmFile[0x20]; +/*0x280*/ BYTE Unknown0x280[0x4]; +/*0x284*/ struct _ITEMSPELLS Clicky; +/*0x2e8*/ struct _ITEMSPELLS Proc; +/*0x34c*/ struct _ITEMSPELLS Worn; +/*0x3b0*/ struct _ITEMSPELLS Focus; +/*0x414*/ struct _ITEMSPELLS Scroll; +/*0x478*/ struct _ITEMSPELLS itemSpellUnknown; +/*0x4dc*/ BYTE Unknown0x4dc[0x14]; +/*0x4f0*/ DWORD CombatEffects; +/*0x4f4*/ DWORD Shielding; +/*0x4f8*/ DWORD StunResist; +/*0x4fc*/ DWORD DoTShielding; +/*0x500*/ DWORD StrikeThrough; +/*0x504*/ DWORD DmgBonusSkill; // SkillMinDamageMod; +/*0x508*/ DWORD DmgBonusValue; // MinDamageMod; +/*0x50c*/ DWORD SpellShield; +/*0x510*/ DWORD Avoidance; +/*0x514*/ DWORD Accuracy; +/*0x518*/ DWORD CharmFileID; +/*0x51c*/ DWORD CastTime; +/*0x520*/ BYTE Combine; +/*0x521*/ BYTE Slots; +/*0x522*/ BYTE SizeCapacity; +/*0x523*/ BYTE WeightReduction; +/*0x524*/ BYTE BookType; // 0=note, !0=book +/*0x525*/ BYTE BookLang; +/*0x526*/ CHAR BookFile[0x1e]; +/*0x544*/ DWORD Favor; // Tribute Value +/*0x548*/ DWORD GuildFavor; +/*0x54c*/ DWORD Unknown0x54c; +/*0x550*/ DWORD Endurance; +/*0x554*/ DWORD Attack; +/*0x558*/ DWORD HPRegen; +/*0x55c*/ DWORD ManaRegen; +/*0x560*/ DWORD EnduranceRegen; +/*0x564*/ DWORD Haste; +/*0x568*/ DWORD DamShield; +/*0x56c*/ BYTE Unknown0x56c[0x8]; +/*0x574*/ BYTE NoPet; +/*0x575*/ BYTE Unknown0x575[0xb]; +/*0x580*/ DWORD StackSize; +/*0x584*/ BYTE Unknown0x584[0x4]; +/*0x588*/ DWORD MaxPower; +/*0x58c*/ DWORD Purity; +/*0x590*/ BYTE Unknown0x590[0x4]; +/*0x594*/ DWORD Unknown0x594; +/*0x598*/ BYTE QuestItem; +/*0x599*/ BYTE Unknown0x599[0x7]; +/*0x5a0*/ DWORD Clairvoyance; +/*0x5a4*/ BYTE Unknown0x5a4[0x90]; +/*0x634*/ +} ITEMINFO, *PITEMINFO; + +typedef struct _CONTENTSARRAY { + struct _CONTENTS *Contents[0x14]; // 20 bag-slot max - addresses to whats inside the bag if its a bag; augs if an item +} CONTENTSARRAY, *PCONTENTSARRAY; + +// actual size 0x150 20130514 - eqmule +typedef struct _CONTENTS { +/*0x000*/ void *vtable; +/*0x004*/ DWORD ItemType; // ? 1 = normal, 2 = pack ? +/*0x008*/ void *punknown; +/*0x00c*/ BYTE Unknown0x0c[0x8]; +/*0x014*/ DWORD Open; +/*0x018*/ BYTE Unknown0x18[0x8]; +/*0x020*/ DOUBLE EvolvingExpPct; +/*0x028*/ DWORD Price; +/*0x02c*/ DWORD EvolvingMaxLevel; +/*0x030*/ BYTE Unknown0x30[0x14]; +/*0x044*/ DWORD Charges; +/*0x048*/ BYTE Unknown0x48[0x40]; +/*0x088*/ DWORD MerchantSlot; // slot id on a merchant +/*0x08c*/ BYTE Unknown0x8c[0x8]; +/*0x094*/ DWORD Unknown1; +/*0x098*/ DWORD StackCount; +/*0x09c*/ struct _ITEMINFO *Item1; +/*0x0a0*/ DWORD NumOfSlots1; +/*0x0a4*/ BYTE Unknown0xa4[0x4]; +/*0x0a8*/ struct _CONTENTSARRAY *pContentsArray; +/*0x0ac*/ DWORD NumOfSlots2; +/*0x0b0*/ DWORD NumOfSlots3; +/*0x0b4*/ BYTE Unknown0xb4[0x2]; +/*0x0b6*/ WORD ItemSlot; //invslot/which bag its in +/*0x0b8*/ WORD ItemSlot2; //bagslot if in bag, if on cursr this is FFFF +/*0x0ba*/ BYTE Unknown0xba[0x4a]; +/*0x104*/ DWORD MerchantQuantity; +/*0x108*/ DWORD EvolvingCurrentLevel; +/*0x10c*/ BYTE IsEvolvingItem; +/*0x10d*/ BYTE Unknown0x10d[0x3]; +/*0x110*/ DWORD Power; +/*0x114*/ BYTE Unknown0x114[0x1e]; +/*0x132*/ BYTE EvolvingExpOn; +/*0x133*/ BYTE Unknown0x133[0x11]; +/*0x144*/ struct _ITEMINFO *Item2; +/*0x148*/ BYTE Unknown0x148[0x8]; +/*0x150*/ +} CONTENTS, *PCONTENTS; + +// Size 0x58 20110810 - dkaa +typedef struct _SPELLBUFF { +/*0x00*/ BYTE Unknown0x0; +/*0x01*/ BYTE Level; +/*0x02*/ CHAR Modifier; // bard song modifier, divide by 10 to get 2.8 etc +/*0x03*/ CHAR DamageShield; // maybe.. I've noticed this is -1 on a lot of ds's. +/*0x04*/ FLOAT Unknown0x4; +/*0x08*/ LONG SpellID; // -1 or 0 for no spell.. +/*0x0c*/ DWORD Duration; +/*0x10*/ BYTE Unknown0x10[0x48]; +/*0x58*/ +} SPELLBUFF, *PSPELLBUFF; + +// 20101012 - ieatacid +typedef struct _INVENTORY { +/*0x00*/ struct _CONTENTS* Charm; +/*0x04*/ struct _CONTENTS* LeftEar; +/*0x08*/ struct _CONTENTS* Head; +/*0x0c*/ struct _CONTENTS* Face; +/*0x10*/ struct _CONTENTS* RightEar; +/*0x14*/ struct _CONTENTS* Neck; +/*0x18*/ struct _CONTENTS* Shoulders; +/*0x1c*/ struct _CONTENTS* Arms; +/*0x20*/ struct _CONTENTS* Back; +/*0x24*/ struct _CONTENTS* LeftWrist; +/*0x28*/ struct _CONTENTS* RightWrist; +/*0x2c*/ struct _CONTENTS* Range; +/*0x30*/ struct _CONTENTS* Hands; +/*0x34*/ struct _CONTENTS* Primary; +/*0x38*/ struct _CONTENTS* Secondary; +/*0x3c*/ struct _CONTENTS* LeftFinger; +/*0x40*/ struct _CONTENTS* RightFinger; +/*0x44*/ struct _CONTENTS* Chest; +/*0x48*/ struct _CONTENTS* Legs; +/*0x4c*/ struct _CONTENTS* Feet; +/*0x50*/ struct _CONTENTS* Waist; +/*0x54*/ struct _CONTENTS* PowerSource; +/*0x58*/ struct _CONTENTS* Ammo; +/*0x5c*/ struct _CONTENTS* Pack[0xa]; +/*0x84*/ struct _CONTENTS* Cursor; +} INVENTORY, *PINVENTORY; + +#define NUM_ALT_ABILITIES_ARRAY 0x1F7 +#define NUM_ALT_ABILITIES 0xC34F + +//these two will merge when i get a chance +#define AA_CHAR_MAX 0xF5 +#define AA_CHAR_MAX_REAL 0x12C + +typedef struct _AALIST { +/*0x0*/ DWORD AAIndex; +/*0x4*/ DWORD PointsSpent; +/*0x8*/ DWORD ChargeSpent; // charges spent in the last 10 min? +} AALIST, *PAALIST; + +#define NUM_INV_SLOTS 0x21 +#define NUM_BANK_SLOTS 0x18 +#define NUM_SHAREDBANK_SLOTS 0x02 +#define NUM_BOOK_SLOTS 0x2d0 +#define NUM_COMBAT_ABILITIES 0x12c +#define BAG_SLOT_START 23 +#define ExactLocation 0 + +typedef struct _LEADERABILITIES { +/*0x00*/ DWORD MarkNPC; +/*0x04*/ DWORD NPCHealth; +/*0x08*/ DWORD Unknown0x8; +/*0x0c*/ DWORD DelegateMA; +/*0x10*/ DWORD DelegateMarkNPC; +/*0x14*/ DWORD Unknown0x14; +/*0x18*/ DWORD InspectBuffs; +/*0x1c*/ DWORD Unknown0x1c; +/*0x20*/ DWORD SpellAwareness; +/*0x24*/ DWORD OffenseEnhancement; +/*0x28*/ DWORD ManaEnhancement; +/*0x2c*/ DWORD HealthEnhancement; +/*0x30*/ DWORD HealthRegen; +/*0x34*/ DWORD FindPathPC; +/*0x38*/ DWORD HoTT; +/*0x3c*/ +} LEADERABILITIES, *PLEADERABILITIES; + +typedef struct _EQC_INFO { +/* 0x0000 */ DWORD minus4; +/* 0x0004 */ DWORD stuff_offset; +} EQC_INFO, *PEQC_INFO; + +typedef struct _CI_INFO { +/* 0x0000 */ DWORD minus8; +/* 0x0004 */ DWORD stuff_offset; +/* 0x0008 */ DWORD Unknown0x8; // 2000 +/* 0x000c */ DWORD Unknown0xc; // 2500 +/* 0x0010 */ DWORD Unknown0x10; // 3000 +/* 0x0014 */ DWORD Unknown0x14; // 4000 +/* 0x0018 */ DWORD Unknown0x18; // 10000 +} CI_INFO, *PCI_INFO; + +typedef struct _CI2_INFO { +/* 0x0000 */ DWORD Unknown0x0; +/* 0x0004 */ struct _CHARINFO2* pCharInfo2; +/* 0x0008 */ struct _CHARINFO2* pCharInfo3; +/* 0x000c */ BYTE Unknown0xc[0x14]; +/* 0x0010 */ void *Unknown0x10[0x10]; +/* 0x0060 */ +} CI2_INFO, *PCI2_INFO; + +typedef struct _GROUPMEMBER { +/*0x00*/ void *vftable; +/*0x04*/ struct _CXSTR *pName; +/*0x08*/ BYTE Mercenary; +/*0x09*/ BYTE Unknown0x8[0x3]; +/*0x0c*/ struct _CXSTR *pOwner; // name of mercenary's owner +/*0x10*/ DWORD Level; +/*0x14*/ BYTE Unknown0x14[0x2]; +/*0x16*/ BYTE MainTank; +/*0x17*/ BYTE MainAssist; +/*0x18*/ BYTE Puller; +/*0x19*/ BYTE Unknown0x19[0x3]; +/*0x1c*/ DWORD Roles; // (Roles & 1) = MainTank, 2 = MainAssist, 4 = Puller +/*0x20*/ BYTE Unknown0x20[0x8]; +/*0x28*/ struct _SPAWNINFO *pSpawn; +/*0x2c*/ +} GROUPMEMBER, *PGROUPMEMBER; + +typedef struct _GROUPINFO { +/*0x00*/ void *vftable; +/*0x04*/ struct _GROUPMEMBER *pMember[0x6]; +/*0x1c*/ struct _GROUPMEMBER *pLeader; +/*0x20*/ +} GROUPINFO, *PGROUPINFO; + +typedef struct _BANKARRAY { +/*0x00*/ struct _CONTENTS* Bank[NUM_BANK_SLOTS]; +/*0x68*/ +} BANKARRAY, *PBANKARRAY; + +typedef struct _SHAREDBANKARRAY { +/*0x00*/ struct _CONTENTS* SharedBank[NUM_SHAREDBANK_SLOTS]; +/*0x68*/ +} SHAREDBANKARRAY, *PSHAREDBANKARRAY; + +// actual size: 0x5804 20130417 - ieatacid +typedef struct _CHARINFO { +/*0x0000*/ void *vtable1; +/*0x0004*/ void *punknown; +/*0x0008*/ struct _CI_INFO* charinfo_info; +/*0x000c*/ BYTE Unknown0xc[0x1d94]; +/*0x1da0*/ struct _LEADERABILITIES MyAbilities; //points spent in each ability (size 0x3c) +/*0x1ddc*/ BYTE Unknown0x1ddc[0xc4]; +/*0x1ea0*/ DWORD Unknown0x1ea0; // # of bank slots? +/*0x1ea4*/ DWORD Unknown0x1ea4; +/*0x1ea8*/ struct _BANKARRAY *pBankArray; +/*0x1eac*/ DWORD Unknown0x1eac; // # of bank slots? +/*0x1eb0*/ BYTE Unknown0x1eb0[0x28]; +/*0x1ed8*/ DWORD Unknown0x1ed8; // # of bank slots? +/*0x1edc*/ DWORD Unknown0x1edc; +/*0x1ee0*/ struct _SHAREDBANKARRAY *pSharedBankArray; +/*0x1ee4*/ DWORD Unknown0x1ee4; // # of bank slots? +/*0x1ee8*/ BYTE Unknown0x1ee8[0x164]; +/*0x204c*/ DWORD GuildID; +/*0x2050*/ BYTE Unknown0x2050[0x2c]; +/*0x207c*/ DWORD AAExp; +/*0x2080*/ BYTE Unknown0x2080; +/*0x2081*/ BYTE PercentEXPtoAA; +/*0x2082*/ BYTE Unknown0x2082[0x42]; +/*0x20c4*/ DWORD TributeTimer; +/*0x20c8*/ DWORD BenefitTimer; +/*0x20cc*/ DWORD Unknown0x20cc; +/*0x20d0*/ DWORD CareerFavor; +/*0x20d4*/ DWORD Unknown0x20d4; +/*0x20d8*/ DWORD CurrFavor; +/*0x20dc*/ BYTE Unknown0x20dc[0xc]; +/*0x20e8*/ DOUBLE GroupLeadershipExp; +/*0x20f0*/ DOUBLE RaidLeadershipExp; +/*0x20f8*/ DWORD GroupLeadershipPoints; +/*0x20fc*/ DWORD RaidLeadershipPoints; +/*0x2100*/ BYTE Unknown0x2100[0x194]; +/*0x2294*/ DWORD RadiantCrystals; +/*0x2298*/ DWORD Unknown0x2298; +/*0x229c*/ DWORD EbonCrystals; +/*0x22a0*/ BYTE Unknown0x22a0[0x670]; +/*0x2910*/ DWORD Exp; +/*0x2914*/ BYTE Unknown0x2914[0x64]; +/*0x2978*/ void *PlayerPointManager; +/*0x297c*/ BYTE Unknown0x297c[0x44c]; +/*0x2dc8*/ void *vtable2; +/*0x2dcc*/ struct _EQC_INFO* eqc_info; +/*0x2dd0*/ struct _SPAWNINFO* pSpawn; +/*0x2dd4*/ DWORD Unknown0x2dd4; +/*0x2dd8*/ DWORD Unknown0x2dd8; +/*0x2ddc*/ DWORD CurrWeight; +/*0x2de0*/ BYTE Unknown0x2de0[0xc]; +/*0x2dec*/ DWORD HPBonus; +/*0x2df0*/ DWORD ManaBonus; +/*0x2df4*/ DWORD EnduranceBonus; +/*0x2df8*/ DWORD CombatEffectsCap;//CombatEffectsBonus +/*0x2dfc*/ DWORD ShieldingCap;//ShieldingBonus +/*0x2e00*/ DWORD SpellShieldCap;//SpellShieldBonus +/*0x2e04*/ DWORD AvoidanceCap;//AvoidanceBonus +/*0x2e08*/ DWORD AccuracyCap;//AccuracyBonus +/*0x2e0c*/ DWORD StunResistCap;//StunResistBonus +/*0x2e10*/ DWORD StrikeThroughCap;//StrikeThroughBonus +/*0x2e14*/ DWORD Unknown0x2e14[0x9]; +/*0x2e38*/ DWORD SkillMinDamageModBonus[0x9]; +/*0x2e5c*/ BYTE Unknown0x2e5c[0x4]; +/*0x2e60*/ DWORD DoTShieldCap;//DoTShieldBonus +/*0x2e64*/ DWORD DamageShieldMitigationCap;//DamageShieldMitigationBonus +/*0x2e68*/ DWORD CombatEffectsBonus; +/*0x2e6c*/ DWORD SpellShieldBonus; +/*0x2e70*/ DWORD ShieldingBonus; +/*0x2e74*/ DWORD DamageShieldBonus; +/*0x2e78*/ DWORD DoTShieldBonus; +/*0x2e7c*/ DWORD DamageShieldMitigationBonus; +/*0x2e80*/ DWORD AvoidanceBonus; +/*0x2e84*/ DWORD AccuracyBonus; +/*0x2e88*/ DWORD StunResistBonus; +/*0x2e8c*/ DWORD StrikeThroughBonus; +/*0x2e90*/ DWORD HeroicSTRBonus; +/*0x2e94*/ DWORD HeroicINTBonus; +/*0x2e98*/ DWORD HeroicWISBonus; +/*0x2e9c*/ DWORD HeroicAGIBonus; +/*0x2ea0*/ DWORD HeroicDEXBonus; +/*0x2ea4*/ DWORD HeroicSTABonus; +/*0x2ea8*/ DWORD HeroicCHABonus; +/*0x2eac*/ DWORD HeroicSvMagicBonus; +/*0x2eb0*/ DWORD HeroicSvFireBonus; +/*0x2eb4*/ DWORD HeroicSvColdBonus; +/*0x2eb8*/ DWORD HeroicSvDiseaseBonus; +/*0x2ebc*/ DWORD HeroicSvPoisonBonus; +/*0x2ec0*/ DWORD HeroicSvCorruptionBonus; +/*0x2ec4*/ DWORD HealAmountBonus; +/*0x2ec8*/ DWORD SpellDamageBonus; +/*0x2ecc*/ DWORD Unknown0x2ecc[0x2]; +/*0x2ed4*/ DWORD ClairvoyanceBonus; +/*0x2ed8*/ DWORD AttackBonus; +/*0x2edc*/ DWORD HPRegenBonus; +/*0x2ee0*/ DWORD ManaRegenBonus; +/*0x2ee4*/ DWORD EnduranceRegenBonus; +/*0x2ee8*/ DWORD DamageShieldCap; +/*0x2eec*/ DWORD AttackSpeed; +/*0x2ef0*/ BYTE Unknown0x2ef0[0x2c8]; +/*0x31b8*/ struct _XTARGETMGR *pXTargetMgr; +/*0x31bc*/ DWORD InCombat; +/*0x31c0*/ DWORD Downtime; +/*0x31c4*/ DWORD DowntimeStamp; +/*0x31c8*/ BYTE Unknown0x31c8[0x4]; +/*0x31cc*/ struct _GROUPINFO *pGroupInfo; +/*0x31d0*/ BYTE Unknown0x31d0[0x1c]; +/*0x31ec*/ void *pUnknown2; +/*0x31f0*/ struct _CI2_INFO* pCI2; +/*0x31f4*/ DWORD Unknown0x31f4; +/*0x31f8*/ BYTE languages[0x20]; +/*0x3218*/ BYTE Unknown0x3218[0x10]; +/*0x3228*/ CHAR Name[0x40]; +/*0x3268*/ CHAR Lastname[0x20]; +/*0x3288*/ BYTE Unknown0x3288[0x60]; +/*0x32e8*/ BYTE Stunned; +/*0x32e9*/ BYTE Unknown0x32e9[0x3]; +/*0x32ec*/ WORD zoneId; +/*0x32ee*/ WORD instance; +/*0x32f0*/ DWORD standstate; +/*0x32f4*/ BYTE Unknown0x32f4[0x4]; +/*0x32f8*/ struct _LEADERABILITIES ActiveAbilities; //ability levels of the leader of your group (size 0x3c) +/*0x3334*/ BYTE Unknown0x3334[0x314]; +/*0x3648*/ DWORD ExpansionFlags; +/*0x364c*/ BYTE Unknown0x364c[0x20]; +/*0x366c*/ DWORD BankSharedPlat; +/*0x3670*/ DWORD BankSharedGold; +/*0x3674*/ DWORD BankSharedSilver; +/*0x3678*/ DWORD BankSharedCopper; +/*0x367c*/ DWORD BankPlat; +/*0x3680*/ DWORD BankGold; +/*0x3684*/ DWORD BankSilver; +/*0x3688*/ DWORD BankCopper; +/*0x368c*/ DWORD STR; +/*0x3690*/ DWORD STA; +/*0x3694*/ DWORD CHA; +/*0x3698*/ DWORD DEX; +/*0x369c*/ DWORD INT; +/*0x36a0*/ DWORD AGI; +/*0x36a4*/ DWORD WIS; +/*0x36a8*/ DWORD SavePoison; +/*0x36ac*/ DWORD SaveMagic; +/*0x36b0*/ DWORD SaveDisease; +/*0x36b4*/ DWORD SaveCorruption; +/*0x36b8*/ DWORD SaveFire; +/*0x36bc*/ DWORD SaveCold; +/*0x36c0*/ BYTE Unknown0x36c0[0x2144]; +/*0x5804*/ +} CHARINFO, *PCHARINFO; + +typedef struct _INVENTORYARRAY { +union { +/*0x00*/ struct _INVENTORY Inventory; +/*0x00*/ struct _CONTENTS* InventoryArray[NUM_INV_SLOTS]; +}; +} INVENTORYARRAY, *PINVENTORYARRAY; + +// actual size: 0x9950 20130116 - ieatacid +typedef struct _CHARINFO2 { +/*0x0000*/ BYTE Unknown0x0[0x18]; +/*0x0018*/ DWORD Unknown0x18; // # of inventory slots? +/*0x001c*/ DWORD Unknown0x1c; +/*0x0020*/ struct _INVENTORYARRAY *pInventoryArray; +/*0x0024*/ DWORD Unknown0x24; // # of inventory slots? +/*0x0024*/ DWORD Unknown0x28; // # of inventory slots? +/*0x0028*/ BYTE Unknown0x2c[0x94]; +/*0x00c0*/ struct _SPELLBUFF Buff[NUM_LONG_BUFFS]; +/*0x0f30*/ struct _SPELLBUFF ShortBuff[0x37]; +/*0x2218*/ DWORD Unknown0x2218[NUM_BUFF_SLOTS]; // effect IDs +/*0x239c*/ DWORD Unknown0x239c[NUM_BUFF_SLOTS]; +/*0x2520*/ DWORD SpellBook[NUM_BOOK_SLOTS]; +/*0x3060*/ DWORD MemorizedSpells[0x10]; +/*0x30a0*/ DWORD Skill[0x64]; +/*0x3230*/ DWORD InnateSkill[0x19]; +/*0x3294*/ DWORD Unknown0x3294[0x36]; +/*0x336c*/ DWORD Gender; +/*0x3370*/ DWORD Race; +/*0x3374*/ DWORD Class; +/*0x3378*/ BYTE Unknown0x3378[0x10]; +/*0x3388*/ DWORD Level; +/*0x338c*/ DWORD Mana; +/*0x3390*/ DWORD Endurance; +/*0x3394*/ DWORD BaseHP; +/*0x3398*/ DWORD BaseSTR; +/*0x339c*/ DWORD BaseSTA; +/*0x33a0*/ DWORD BaseCHA; +/*0x33a4*/ DWORD BaseDEX; +/*0x33a8*/ DWORD BaseINT; +/*0x33ac*/ DWORD BaseAGI; +/*0x33b0*/ DWORD BaseWIS; +/*0x33b4*/ DWORD Unknown0x33b4; +/*0x33b8*/ DWORD Plat; +/*0x33bc*/ DWORD Gold; +/*0x33c0*/ DWORD Silver; +/*0x33c4*/ DWORD Copper; +/*0x33c8*/ DWORD CursorPlat; +/*0x33cc*/ DWORD CursorGold; +/*0x33d0*/ DWORD CursorSilver; +/*0x33d4*/ DWORD CursorCopper; +/*0x33d8*/ BYTE Unknown0x33d8[0x28]; +/*0x3400*/ DWORD thirstlevel; +/*0x3404*/ DWORD hungerlevel; +/*0x3408*/ DWORD Unknown0x3408; +/*0x340c*/ DWORD Shrouded; +/*0x3410*/ BYTE Unknown0x3410[0x78]; +/*0x3488*/ DWORD ZoneBoundID; +/*0x348c*/ FLOAT ZoneBoundY; +/*0x3490*/ FLOAT ZoneBoundX; +/*0x3494*/ FLOAT ZoneBoundZ; +/*0x3498*/ FLOAT ZoneBoundHeading; +/*0x349c*/ BYTE Unknown0x349c[0x50]; +/*0x34ec*/ DWORD ArmorType[0x16]; +/*0x3544*/ BYTE Unknown0x3544[0x160]; +/*0x36a4*/ AALIST AAList[AA_CHAR_MAX_REAL]; +/*0x44b4*/ DWORD BodyColor[0x9]; +/*0x44d8*/ BYTE Unknown0x44d8[0x2000]; +/*0x64d8*/ DWORD CombatAbilities[NUM_COMBAT_ABILITIES]; +/*0x6988*/ BYTE Unknown0x6988[0x34]; +/*0x69bc*/ DWORD CombatAbilityTimes[0x14]; +/*0x6a0c*/ BYTE Unknown0x6a0c[0x1ed8]; +/*0x88e4*/ DWORD Deity; +/*0x88e8*/ BYTE Unknown0x88e8[0x4]; +/*0x88ec*/ DWORD Drunkenness; +/*0x88f0*/ BYTE Unknown0x88f0[0x10]; +/*0x8900*/ DWORD AAPoints; +/*0x8904*/ BYTE Unknown0x8904[0x100c]; +/*0x9910*/ DWORD AAPointsSpent; +/*0x9914*/ BYTE Unknown0x9914[0x3c]; +/*0x9950*/ +} CHARINFO2, *PCHARINFO2; + +typedef struct _MODELINFONAME { +/*0x00*/ DWORD Unknown0000; +/*0x04*/ DWORD Unknown0004; +/*0x08*/ PCHAR Name; +/*0x0c*/ +} MODELINFONAME, *PMODELINFONAME; + +typedef struct _MODELINFO_GENERIC { +/*0x00*/ DWORD Type; +/*0x04*/ DWORD Unknown0x04; +/*0x08*/ DWORD Unknown0x08; +/*0x0c*/ DWORD Unknown0x0c; +/*0x10*/ DWORD Unknown0x10; +/*0x14*/ +} MODELINFO_GENERIC, *PMODELINFO_GENERIC; + +typedef struct _MODELINFO_48 { +/*0x00*/ struct _MODELINFO_GENERIC Header; +/*0x14*/ FLOAT Float1; +/*0x18*/ FLOAT Float2; +/*0x1c*/ FLOAT Float3; +/*0x20*/ struct _MODELINFONAME *pModelName; +/*0x24*/ +} MODELINFO_48, *PMODELINFO_48; + +typedef struct _MODELINFO_51 { +/*0x00*/ struct _MODELINFO_GENERIC Header; +/*0x14*/ struct _MODELINFONAME *pFontName; +/*0x18*/ PCHAR LabelText; +/*0x1c*/ +} MODELINFO_51, *PMODELINFO_51; + +// 10/09/2003 build plazmic +// 12/24/2003 verified Amadeus +typedef struct _MODELINFO { +/*0x00*/ DWORD Unknown; +/*0x04*/ PCHAR NameDAG; +/*0x08*/ struct _MODELINFO_GENERIC *pModelInfo; +/*0x0c*/ struct _MODELINFO *pNextInChain; +/*0x10*/ PVOID pUnknown; +/*0x14*/ struct _MODELINFONAME *pTrack1; +/*0x18*/ struct _MODELINFONAME *pTrack2; + //moredata +} MODELINFO, *PMODELINFO; + +// 4/30/2003 build eqmule +typedef struct _CAMERAINFO { +/*0x00*/ DWORD Unknown0x00; +/*0x04*/ DWORD Unknown0x04; +/*0x08*/ BYTE Unknown0x08[0x8]; +/*0x10*/ FLOAT Y; +/*0x14*/ FLOAT X; +/*0x18*/ FLOAT Z; +/*0x1c*/ FLOAT LightRadius; +/*0x20*/ +} CAMERAINFO, *PCAMERAINFO; + + +#define MODEL_LABEL 0 +#define MODEL_LABELINFO 1 +#define MODEL_NULL2 2 +#define MODEL_HELD_R 3 +#define MODEL_HELD_L 4 +#define MODEL_SHIELD 5 +#define MODEL_NULL6 6 + +/* +//Work in progress... +#define MODEL_HEAD 0x00 +#define MODEL_HEAD_POINT 0x01 +#define MODEL_NULL_1 0x02 +#define MODEL_HELD_R 0x03 +#define MODEL_HELD_L 0x04 +#define MODEL_SHIELD 0x05 +#define MODEL_NULL_2 0x06 +#define MODEL_TUNIC 0x07 +#define MODEL_HAIR 0x08 +#define MODEL_BEARD 0x09 +#define MODEL_CHEST 0x0a +#define MODEL_GLOVES 0x0b +#define MODEL_GLOVES2 0b0c +*/ + +typedef struct _ARGBCOLOR { + union { + struct { + BYTE B; + BYTE G; + BYTE R; + BYTE A; + }; + DWORD ARGB; + }; +} ARGBCOLOR, *PARGBCOLOR; + +// actual size: 0x14 05-14-2013 - eqmule +typedef struct _ARMOR { +/*0x00*/ DWORD ID; //idfile on Lucy +/*0x04*/ DWORD Unknown0x04; +/*0x08*/ DWORD Unknown0x08; +/*0x0c*/ DWORD Unknown0x0c; +/*0x10*/ DWORD Unknown0x10; +/*0x14*/ +} ARMOR, *PARMOR; + +// 10-22-2003 Lax +typedef struct _EQUIPMENT { + union { + struct// EQUIPARRAY + { + struct _ARMOR Item[9]; + };// Array; + struct //EQUIPUNIQUE + { + struct _ARMOR Head; + struct _ARMOR Chest; + struct _ARMOR Arms; + struct _ARMOR Wrists; + struct _ARMOR Hands; + struct _ARMOR Legs; + struct _ARMOR Feet; + struct _ARMOR Primary; + struct _ARMOR Offhand; + };// Unique; + }; +} EQUIPMENT, *PEQUIPMENT; + +// 10-14-07 - ieatacid +typedef struct _FELLOWSHIPMEMBER { +/*0x00*/ DWORD Unknown0x0; +/*0x04*/ CHAR Name[0x40]; +/*0x44*/ WORD ZoneID; +/*0x46*/ WORD InstanceID; +/*0x48*/ DWORD Level; +/*0x4c*/ DWORD Class; +/*0x50*/ DWORD LastOn; // FastTime() timestamp +/*0x54*/ +} FELLOWSHIPMEMBER, *PFELLOWSHIPMEMBER; + +// 20121128 - ieatacid 0x9e4 +typedef struct _FELLOWSHIPINFO { +/*0x000*/ DWORD Unknown0x0; // always 1? +/*0x004*/ DWORD FellowshipID; +/*0x008*/ CHAR Leader[0x40]; +/*0x048*/ CHAR MotD[0x400]; +/*0x448*/ DWORD Members; +/*0x44c*/ struct _FELLOWSHIPMEMBER FellowshipMember[0xc]; +/*0x83c*/ DWORD Unknown0x83c; // timestamp for something +/*0x840*/ BYTE Unknown0x840[0x1a4]; +/*0x9e4*/ +} FELLOWSHIPINFO, *PFELLOWSHIPINFO; + +// offsets are relative to their position in _LAUNCHSPELLDATA +typedef struct _ITEMLOCATION { +/*0x0c*/ DWORD a; +/*0x10*/ DWORD InvSlot; +/*0x14*/ DWORD BagSlot; +/*0x18*/ DWORD d; +/*0x1c*/ +} ITEMLOCATION, *PITEMLOCATION; + +typedef struct _LAUNCHSPELLDATA { +/*0x00*/ DWORD SpellETA; //Calculated TimeStamp when current spell being cast will land. 0 while not casting. +/*0x04*/ DWORD SpellID; // -1 = not casting a spell +/*0x08*/ BYTE SpellSlot; // 0xFF if not casting, otherwise it's the spell gem number (0 - 8) +/*0x09*/ BYTE Padding0x9[0x3]; +/*0x0c*/ struct _ITEMLOCATION ItemLocation; +/*0x1c*/ DWORD ItemID; +/*0x20*/ FLOAT CastingY; +/*0x24*/ FLOAT CastingX; +/*0x28*/ BYTE Unknown0x28[0x4]; +/*0x2c*/ DWORD TargetID; +/*0x30*/ BYTE Unknown0x30[0x14]; +/*0x44*/ DWORD Unknown0x44; +/*0x48*/ DWORD Unknown0x48; +/*0x4c*/ DWORD Unknown0x4c; +/*0x50*/ +} LAUNCHSPELLDATA, *PLAUNCHSPELLDATA; + +// actual size: 0x1efc 05-14-2013 - eqmule +typedef struct _SPAWNINFO { +/*0x0000*/ void *vtable; +/*0x0004*/ struct _SPAWNINFO *pPrev; +/*0x0008*/ struct _SPAWNINFO *pNext; +/*0x000c*/ BYTE Unknown0xc[0xc]; +/*0x0018*/ FLOAT SpeedMultiplier; +/*0x001c*/ BYTE Unknown0x1c[0x14]; +/*0x0030*/ DWORD TimeStamp; +/*0x0034*/ BYTE Unknown0x34[0x4]; +/*0x0038*/ CHAR Lastname[0x20]; +/*0x0058*/ BYTE Unknown0x58[0xc]; +/*0x0064*/ FLOAT Y; +/*0x0068*/ FLOAT X; +/*0x006c*/ FLOAT Z; +/*0x0070*/ FLOAT SpeedY; +/*0x0074*/ FLOAT SpeedX; +/*0x0078*/ FLOAT SpeedZ; +/*0x007c*/ FLOAT SpeedRun; +/*0x0080*/ FLOAT Heading; +/*0x0084*/ BYTE Unknown0x84[0x8]; +/*0x008c*/ FLOAT SpeedHeading; +/*0x0090*/ FLOAT CameraAngle; +/*0x0094*/ BYTE UnderWater; +/*0x0095*/ BYTE Unknown0x95[0xc]; +/*0x00a1*/ BYTE FeetWet; +/*0x00a2*/ BYTE Unknown0xa2[0x2]; +/*0x00a4*/ CHAR Name[0x40]; // ie priest_of_discord00 +/*0x00e4*/ CHAR DisplayedName[0x40]; // ie Priest of Discord +/*0x0124*/ BYTE Unknown0x124; +/*0x0125*/ BYTE Type; +/*0x0126*/ BYTE Unknown0x126[0x2]; +/*0x0128*/ DWORD **BodyType; +/*0x012c*/ BYTE Unknown0x12c[0xc]; +/*0x0138*/ FLOAT AvatarHeight; // height of avatar from ground when standing +/*0x013c*/ FLOAT UnknownHeight; +/*0x0140*/ FLOAT AvatarHeight2; // height of avatar from ground when crouched/sitting +/*0x0144*/ FLOAT Unknown0x144; // height of avatar from ground when standing +/*0x0148*/ DWORD SpawnID; +/*0x014c*/ BYTE Unknown0x14c[0x4]; +/*0x0150*/ DWORD IsABoat; // 1 = a type of boat +/*0x0154*/ struct _SPAWNINFO *Mount; // NULL if no mount present +/*0x0158*/ struct _SPAWNINFO *Rider; // _SPAWNINFO of mount's rider +/*0x015c*/ BYTE Unknown0x15c[0x44]; +/*0x01a0*/ DWORD EnduranceCurrent; +/*0x01a4*/ BYTE Unknown0x1a4[0x64]; +/*0x0208*/ BYTE Mercenary; +/*0x0209*/ BYTE Unknown0x209[0x7]; +/*0x0210*/ WORD Zone; +/*0x0212*/ WORD Instance; +/*0x0214*/ BYTE Light; +/*0x0215*/ BYTE Unknown0x215[0x33]; +/*0x0248*/ DWORD GuildStatus; +/*0x024c*/ DWORD LastTick; +/*0x0250*/ BYTE Level; +/*0x0251*/ BYTE Unknown0x251[0xb]; +/*0x025c*/ BYTE GM; +/*0x025d*/ BYTE Unknown0x25d[0x3]; +/*0x0260*/ DWORD FishingETA; +/*0x0264*/ BYTE Sneak; +/*0x0265*/ BYTE Unknown0x265[0x4f]; +/*0x02b4*/ DWORD PetID; +/*0x02b8*/ DWORD Anon;//found in EQPlayer__SetNameSpriteTint_x +/*0x02bc*/ DWORD RespawnTimer; // TimeStamp of when RespawnWnd will close - 0 when you're alive +/*0x02c0*/ BYTE Unknown0x2c0[0x4]; +/*0x02c4*/ DWORD AARank; +/*0x02c8*/ BYTE Unknown0x2c8[0x14]; +/*0x02dc*/ DWORD HPMax; +/*0x02e0*/ BYTE Unknown0x2e0[0x4]; +/*0x02e4*/ LONG HPCurrent; +/*0x02e8*/ BYTE Unknown0x2e8[0x30]; +/*0x0318*/ DWORD InnateETA; //Calculated TimeStamp when innate skill will be ready (LoH, HT, Bash) +/*0x031c*/ FLOAT GetMeleeRangeVar1; // used by GetMeleeRange +/*0x0320*/ DWORD Trader;//found in CEverQuest__RightClickedOnPlayer_x +/*0x0324*/ BYTE Unknown0x324[0x10]; +/*0x0334*/ BYTE Holding; +/*0x0335*/ BYTE Unknown0x335[0x3]; +/*0x0338*/ BYTE HideMode; +/*0x0339*/ BYTE Unknown0x339[0x10]; +/*0x0349*/ BYTE PvPFlag; +/*0x034a*/ BYTE Unknown0x34a[0x2]; +/*0x034c*/ DWORD GuildID; +/*0x0350*/ FLOAT RunSpeed;//0.70 on runspeed 5... +/*0x0354*/ DWORD ManaMax; +/*0x0358*/ BYTE Unknown0x358[0x4]; +/*0x035c*/ BYTE StandState; +/*0x035d*/ BYTE Unknown0x35d[0x2f]; +/*0x038c*/ DWORD MasterID; +/*0x0390*/ BYTE Unknown0x390[0x30]; +/*0x03c0*/ DWORD AFK; +/*0x03c4*/ DWORD EnduranceMax; +/*0x03c8*/ BYTE Unknown0x3c8[0x8]; +/*0x03d0*/ BYTE Linkdead; +/*0x03d1*/ BYTE Unknown0x3d1[0x3]; +/*0x03d4*/ DWORD Buyer; +/*0x03d8*/ BYTE Unknown0x3d8[0x5]; +/*0x03dd*/ CHAR Title[0x20]; +/*0x03fd*/ BYTE FishingEvent; +/*0x03fe*/ CHAR Suffix[0x20]; +/*0x041e*/ BYTE Unknown0x41e[0x22]; +/*0x0440*/ BYTE LFG; +/*0x0441*/ BYTE Unknown0x441[0x3]; +/*0x0444*/ struct _LAUNCHSPELLDATA CastingData; // size: 0x50 +/*0x0494*/ DWORD ManaCurrent; +/*0x0498*/ BYTE Unknown0x498[0x80]; +/*0x0518*/ DWORD Deity; +/*0x051c*/ BYTE Unknown0x51c[0x924]; +/*0x0e40*/ struct _SPAWNINFO *WhoFollowing; // NULL if autofollow off +/*0x0e44*/ int GroupAssistNPC[0x1]; +/*0x0e48*/ int RaidAssistNPC[0x3]; +/*0x0e54*/ int GroupMarkNPC[0x3]; +/*0x0e60*/ int RaidMarkNPC[0x3]; +/*0x0e6c*/ int TargetOfTarget; +/*0x0e70*/ BYTE Unknown0xe70[0x34]; +/*0x0ea4*/ void *pActorClient; // start of ActorClient struct +/*0x0ea8*/ BYTE InNonPCRaceIllusion; +/*0x0ea9*/ BYTE Unknown0xe9d[0x3]; +/*0x0eac*/ BYTE FaceStyle; +/*0x0ead*/ BYTE HairColor; +/*0x0eae*/ BYTE FacialHairColor; +/*0x0eaf*/ BYTE EyeColor1; +/*0x0eb0*/ BYTE EyeColor2; +/*0x0eb1*/ BYTE HairStyle; +/*0x0eb2*/ BYTE FacialHair; +/*0x0eb3*/ BYTE Unknown0xea7; +/*0x0eb4*/ DWORD Race; +/*0x0eb8*/ BYTE Class; +/*0x0eb9*/ BYTE Gender; +/*0x0eba*/ CHAR ActorDef[0x40]; +/*0x0efa*/ BYTE Unknown0xeee[0x2]; +/*0x0efc*/ ARGBCOLOR ArmorColor[0x9]; +/*0x0f20*/ BYTE Unknown0xf20[0x4]; +/*0x0f24*/ DWORD Heritage; //drakkin only face setting +/*0x0f28*/ DWORD Tattoo; //drakkin only face setting +/*0x0f2c*/ DWORD Details; //drakkin only face setting +/*0x0f30*/ struct _EQUIPMENT Equipment; // size 0xb4 +/*0x0fe4*/ BYTE Unknown0xfe4[0x38]; +/*0x101c*/ VOID *pcactorex; // ActorInterface* +/*0x1020*/ BYTE Unknown0x1020[0x4]; +/*0x1024*/ VOID *FaceRelatedActorStruct; +/*0x1028*/ BYTE Unknown0x1028[0x34]; +/*0x105c*/ FLOAT GetMeleeRangeVar2; // used by GetMeleeRange +/*0x1060*/ BYTE Unknown0x1060[0x64]; +/*0x10c4*/ DWORD Animation; +/*0x10c8*/ BYTE Unknown0x10c8[0x104]; +/*0x11cc*/ FLOAT WalkSpeed; +/*0x11d0*/ DWORD HideCorpse; +/*0x11d4*/ BYTE Unknown0x11d4[0x40]; +/*0x1214*/ BYTE InvitedToGroup; +/*0x1215*/ BYTE Unknown0x1215[0x3]; +/*0x1218*/ DWORD GroupMemberTargeted; // 0xFFFFFFFF if no target, else 1 through 5 +/*0x121c*/ BYTE Unknown0x1210[0x180]; +/*0x139c*/ struct _FELLOWSHIPINFO Fellowship; // size 0x9e4 +/*0x1d80*/ FLOAT CampfireY; +/*0x1d84*/ FLOAT CampfireX; +/*0x1d88*/ FLOAT CampfireZ; +/*0x1d8c*/ WORD CampfireZoneID; // zone ID where campfire is +/*0x1d8e*/ WORD InstanceID; +/*0x1d90*/ DWORD CampfireTimestamp; // CampfireTimestamp-FastTime()=time left on campfire +/*0x1d94*/ DWORD Unknown0x1d88; +/*0x1d98*/ DWORD Unknown0x1d8c; // campfire type? +/*0x1d9c*/ DWORD Campfire; // do we have a campfire up? +/*0x1da0*/ BYTE Unknown0x1da0[0x110]; +/*0x1eb0*/ void *vtable2; +/*0x1eb4*/ DWORD Unknown0x1ea8; +/*0x1eb8*/ struct _SPAWNINFO *pSpawn; +/*0x1ebc*/ DWORD Levitate; +/*0x1ec0*/ BYTE Unknown0x1ec0[0x3c]; +/*0x1efc*/ +} SPAWNINFO, *PSPAWNINFO; + +#define STANDSTATE_STAND 0x64 +#define STANDSTATE_CASTING 0x66 +#define STANDSTATE_BIND 0x69 +#define STANDSTATE_SIT 0x6E +#define STANDSTATE_DUCK 0x6F +#define STANDSTATE_FEIGN 0x73 +#define STANDSTATE_DEAD 0x78 + +#define MONITOR_SPAWN_X 1 +#define MONITOR_SPAWN_Y 2 +#define MONITOR_SPAWN_Z 4 +#define MONITOR_SPAWN_HEADING 8 +#define MONITOR_SPAWN_SPEEDRUN 16 +#define MONITOR_SPAWN_HPCURRENT 32 + +typedef struct _SPAWNMONITORINFO { + WORD SpawnID; + FLOAT Y; + FLOAT X; + FLOAT Z; + FLOAT Heading; + FLOAT SpeedRun; + DWORD HPCurrent; + DWORD MonitorMask; +} SPAWNMONITORINFO, *PSPAWNMONITORINFO; + +typedef struct _HASHENTRY { + SPAWNINFO *spawn; + DWORD key; // same as SpawnID for spawns + struct _HASHENTRY *next; +} HASHENTRY, *PHASHENTRY; + +typedef struct _HASHTABLE { + struct _HASHENTRY **table; + int size; +} HASHTABLE, *PHASHTABLE; + +typedef struct _SPAWNMANAGER { +/*0x000*/ void *vftable; +/*0x004*/ DWORD random; // rand()%20000 +/*0x008*/ struct _SPAWNINFO *FirstSpawn; +/*0x00c*/ struct _SPAWNINFO *LastSpawn; +/*0x010*/ DWORD unknown10; +/*0x014*/ struct _HASHTABLE *SPHash; +} SPAWNMANAGER, *PSPAWNMANAGER; + + +#if 0 + +void *gethashedentry(struct _HASHTABLE *table, DWORD key) +{ + PHASHENTRY p = NULL; + p = table->array[key%table->size]; + + while(p) { + if (p->key == key) return p; + p = p->next; + } + return NULL; +} + +#endif + +// this is actually ActorInterface +// actual size: 0x120 3-3-2009 +typedef struct _EQSWITCH { +/*0x00*/ DWORD Unknown0x0[0x2]; +/*0x08*/ float UnknownData0x08; +/*0x0c*/ float UnknownData0x0c; +/*0x10*/ float Unknown0x10[0x2]; +/*0x18*/ float UnknownData0x18; +/*0x1c*/ float Unknown0x1c; +/*0x20*/ float UnknownData0x20; +/*0x24*/ float Unknown0x24; +/*0x28*/ FLOAT Y; +/*0x2c*/ FLOAT X; +/*0x30*/ FLOAT Z; +/*0x34*/ BYTE Unknown0x34[0x50]; //A lot of data here. +/*0x84*/ float yAdjustment1; +/*0x88*/ float xAdjustment1; +/*0x8c*/ float zAdjustment1; +/*0x90*/ float headingAdjustment1; +/*0x94*/ float yAdjustment2; +/*0x98*/ float xAdjustment2; +/*0x9c*/ float zAdjustment2; +/*0xa0*/ float headingAdjustment2; +/*0xa4*/ float yAdjustment3; +/*0xa8*/ float xAdjustment3; +/*0xac*/ float zAdjustment3; +/*0xb0*/ float headingAdjustment3; +/*0xb4*/ FLOAT Y2; +/*0xb8*/ FLOAT X2; +/*0xbc*/ FLOAT Z2; +/*0xc0*/ DWORD Unknown0xa4; +/*0xc4*/ FLOAT Heading; +/*0xc8*/ BYTE Unknown0xc8[0x18]; +/*0xe0*/ float HeightAdjustment; +/*0xe4*/ // more data +} EQSWITCH, *PEQSWITCH; + +// actual size 0xdc 2-9-2009 +typedef struct _DOOR { +/*0x00*/ void *vtable; +/*0x04*/ BYTE Unknown0x4; // always 5 +/*0x05*/ BYTE ID; +/*0x06*/ CHAR Name[0x20]; +/*0x26*/ BYTE Type; +/*0x27*/ BYTE State; // 0 = closed, 1 = open, 2 = opening, 3 = closing +/*0x28*/ FLOAT DefaultY; +/*0x2c*/ FLOAT DefaultX; +/*0x30*/ FLOAT DefaultZ; +/*0x34*/ FLOAT DefaultHeading; +/*0x38*/ FLOAT DefaultDoorAngle; +/*0x3c*/ FLOAT TopSpeed1; +/*0x40*/ FLOAT TopSpeed2; +/*0x44*/ FLOAT Y; +/*0x48*/ FLOAT X; +/*0x4c*/ FLOAT Z; +/*0x50*/ FLOAT Heading; +/*0x54*/ FLOAT DoorAngle; +/*0x58*/ BYTE Unknown0x58[0x18]; +/*0x70*/ int Unknown0x70; // always 0xFFFFFFFF +/*0x74*/ WORD Unknown0x74; // actor scale factor? +/*0x76*/ BYTE Unknown0x76[0x2]; +/*0x78*/ DWORD ZonePoint; +/*0x7c*/ BYTE Unknown0x7c[0x5]; +/*0x81*/ BYTE Unknown0x81; +/*0x82*/ BYTE Unknown0x82[0x22]; +/*0xa4*/ PEQSWITCH pSwitch; // (CActorInterface*) +/*0xa8*/ void *pUnknown0xa8; // (CParticleCloudInterface*) +/*0xac*/ DWORD TimeStamp; +/*0xb0*/ BYTE Unknown0xb0[0x2c]; +/*0xdc*/ +} DOOR, *PDOOR; + +// 7-21-2003 Stargazer +typedef struct _DOORTABLE { +/*0x000*/ DWORD NumEntries; +/*0x004*/ PDOOR pDoor[0x0FF]; +/*0x400*/ +} DOORTABLE, *PDOORTABLE; + +// actual size 0x80 20101012 - ieatacid +typedef struct _GROUNDITEM { +/*0x00*/ struct _GROUNDITEM *pPrev; +/*0x04*/ struct _GROUNDITEM *pNext; +/*0x08*/ DWORD ID; +/*0x0c*/ DWORD DropID; +/*0x10*/ DWORD Unknown0x10; +/*0x14*/ DWORD Unknown0x14; +/*0x18*/ PEQSWITCH pSwitch; // (class EQSwitch *) +/*0x1c*/ CHAR Name[0x20]; +/*0x3c*/ BYTE Unknown0x3c[0x24]; +/*0x60*/ FLOAT Heading; +/*0x64*/ BYTE Unknown0x64[0xc]; +/*0x70*/ FLOAT Y; +/*0x74*/ FLOAT X; +/*0x78*/ FLOAT Z; +/*0x7c*/ BYTE Unknown0x7c[0x4]; +/*0x80*/ +} GROUNDITEM, *PGROUNDITEM; + +#define MAX_ZONES 0x3e8 +extern PCHAR szZoneExpansionName[]; //defined in LibEQ_Utilities.cpp + +typedef struct _ZONELIST { +/*0x000*/ DWORD Header; +/*0x004*/ DWORD Unknown0x4; //pointer to something? +/*0x008*/ DWORD Expansion; // szZoneExpansionName[] +/*0x00c*/ WORD Id; +/*0x00e*/ WORD Instance; +/*0x010*/ CHAR ShortName[0x81]; +/*0x091*/ CHAR LongName[0x103]; +/*0x194*/ DWORD Unknown0x194; +/*0x198*/ DWORD Flags; // (Flags & 0x100000) = HasMinLevel, 0x4000 no air, 0x2 newbie zone, 0x20 no bind, 0x400000 something, 0x80000000 guild hall +/*0x19c*/ DWORD Unknown0x19c; +/*0x1a0*/ DWORD Id2; // This is Id+2242 +/*0x1a4*/ DWORD PoPValue; // This has something to do with PoP zones. +/*0x1a8*/ DWORD MinLevel; // Minimum level to access +/*0x1ac*/ WORD Unknown0x1ac; +/*0x1ae*/ BYTE Unknown0x1ae[0x6]; +/*0x1b4*/ DWORD Unknown0x1b4; +/*0x1b8*/ DWORD Unknown0x1b8; +/*0x1bc*/ DWORD Unknown0x1bc; +/*0x1c0 next zone in list*/ +} ZONELIST, *PZONELIST; + +typedef struct _WORLDDATA { +/*0x000*/ PVOID lpvTable; +/*0x004*/ BYTE Hour; +/*0x005*/ BYTE Minute; +/*0x006*/ BYTE Day; +/*0x007*/ BYTE Month; +/*0x008*/ DWORD Year; +/*0x00C*/ BYTE Unknown0x00c[0x14]; +/*0x020*/ PZONELIST ZoneArray[MAX_ZONES]; +} WORLDDATA, *PWORLDDATA; + +typedef struct _ZONEINFO { +/*0x000*/ CHAR CharacterName[0x40]; +/*0x040*/ CHAR ShortName[0x20]; +/*0x060*/ CHAR Unknown0x060[0x60]; +/*0x0c0*/ CHAR LongName[0x80]; +/*0x140*/ CHAR Unknown0x140[0x96]; // <-- this isnt part of zone name, see CEverQuest__CEverQuest +/*0x1d6*/ BYTE ZoneType; // (usually FF) +/*0x1d7*/ ARGBCOLOR FogRed; +/*0x1db*/ ARGBCOLOR FogGreen; +/*0x1df*/ ARGBCOLOR FogBlue; +/*0x1e3*/ BYTE Unknown0x1e3; +/*0x1e4*/ BYTE Unknown0x1e4[0x10]; +/*0x1f4*/ BYTE Unknown0x1f4[0x10]; +/*0x204*/ FLOAT ZoneGravity; +/*0x208*/ BYTE Unknown0x208; +/*0x209*/ BYTE Unknown0x209[0x3]; +/*0x20c*/ BYTE Unknown0x20c[0x2e]; +/*0x23a*/ BYTE SkyType; +/*0x23b*/ BYTE Unknown0x23b[0xd]; +/*0x248*/ FLOAT ZoneExpModifier; //This has been nerfed ..now reads 1.0 for all zones +/*0x24c*/ FLOAT Unknown0x24c[0x3]; +/*0x258*/ BYTE Unknown0x258[0x4]; +/*0x25c*/ FLOAT Ceiling; +/*0x260*/ FLOAT Floor; +/*0x264*/ FLOAT MinClip; +/*0x268*/ FLOAT MaxClip; +/*0x26c*/ BYTE Unknown0x26c[0x18]; +/*0x284*/ BYTE Unknown0x284[0x20]; +/*0x2a4*/ +} ZONEINFO, *PZONEINFO; + +#define TOTAL_SPELL_COUNT 0xAFC9 // # of spells allocated in memory (06/27/2012) +#define TOTAL_ACTUAL_SPELLS 0x1964 // # of ACTUAL spells in game (9/14/2004) - wrong and unused + +// size: 0x9496C 20120316 +typedef struct _SPELLMGR { +BYTE unknown[0x2C180]; +struct _SPELL* Spells[TOTAL_SPELL_COUNT]; +} SPELLMGR, *PSPELLMGR; + +// actual size: 0x4ed 20120316 - ieatacid +typedef struct _SPELL { +/*0x000*/ FLOAT Range; +/*0x004*/ FLOAT AERange; +/*0x008*/ FLOAT PushBack; +/*0x00c*/ BYTE Unknown0xc[0x4]; +/*0x010*/ DWORD CastTime; +/*0x014*/ DWORD FizzleTime; +/*0x018*/ DWORD RecastTime; +/*0x01c*/ DWORD DurationType; //DurationFormula on Lucy +/*0x020*/ DWORD DurationValue1; +/*0x024*/ BYTE Unknown0x24[0x4]; +/*0x028*/ DWORD Mana; +/*0x02c*/ LONG Base[0x0c]; //Base1-Base12 +/*0x05c*/ LONG Base2[0x0c]; //Mostly unused, setting name to Base2 from Lucy for now +/*0x08c*/ LONG Max[0xc]; //Max1-Max12 +/*0x0bc*/ DWORD ReagentId[0x4]; //ReagentId1-ReagentId4d +/*0x0cc*/ DWORD ReagentCount[0x4]; //ReagentCount1-ReagentCount4 +/*0x0dc*/ BYTE Unknown0xdc[0x10]; +/*0x0ec*/ DWORD Calc[0x0c]; //Calc1-Calc12 +/*0x11c*/ DWORD Attrib[0xc]; //Attrib1-Attrib12 +/*0x14c*/ DWORD BookIcon; +/*0x150*/ BYTE Unknown0x150[0x4]; +/*0x154*/ DWORD DescriptionNumber; +/*0x158*/ DWORD ResistAdj; +/*0x15c*/ BYTE Unknown0x15c[0x4]; +/*0x160*/ DWORD spaindex; +/*0x164*/ DWORD SpellAnim; +/*0x168*/ DWORD SpellIcon; +/*0x16c*/ BYTE Unknown0x16c[0x8]; +/*0x174*/ DWORD ID; +/*0x178*/ DWORD Autocast; //SpellID of spell to instacast on caster when current spell lands on target +/*0x17c*/ DWORD Unknown144; //Unknown144 from lucy +/*0x180*/ DWORD Unknown145; //Unknown145 from lucy +/*0x184*/ BYTE Unknown0x184[0x10]; +/*0x194*/ DWORD EnduranceCost; //CA Endurance Cost +/*0x198*/ DWORD CARecastTimerID; //ID of combat timer, i think. +/*0x19c*/ BYTE Unknown0x19c[0x18]; +/*0x1b4*/ DWORD PvPResistBase; +/*0x1b8*/ BYTE Unknown0x1b8[0x4]; +/*0x1bc*/ DWORD PvPResistCap; +/*0x1c0*/ BYTE Unknown0x1c0[0x4]; +/*0x1c4*/ DWORD Unknown183; //Unknown183 from Lucy +/*0x1c8*/ BYTE Unknown0x1c8[0x6f]; +/*0x237*/ BYTE DurationWindow; //0=Long, 1=Short +/*0x238*/ BYTE Unknown0x238[0x2]; +/*0x23a*/ BYTE Deletable; +/*0x23b*/ BYTE Unknown0x23b[0x6]; +/*0x241*/ BYTE CanMGB; +/*0x242*/ BYTE Unknown0x242[0x5]; +/*0x247*/ BYTE Level[0x10]; //per class. +/*0x257*/ BYTE Unknown0x257[0x13]; +/*0x26a*/ BYTE LightType; +/*0x26b*/ BYTE SpellType; //0=detrimental, 1=Beneficial, 2=Beneficial, Group Only +/*0x26c*/ BYTE Unknown0x26c; +/*0x26d*/ BYTE Resist; //0=un 1=mr 2=fr 3=cr 4=pr 5=dr 6=chromatic 7=prismatic 8=physical(skills,etc) 9=corruption +/*0x26e*/ BYTE TargetType; //03=Group v1, 04=PB AE, 05=Single, 06=Self, 08=Targeted AE, 0e=Pet, 28=AE PC v2, 29=Group v2 +/*0x26f*/ BYTE FizzleAdj; +/*0x270*/ BYTE Skill; +/*0x271*/ BYTE Location; //01=Outdoors, 02=dungeons, ff=Any +/*0x272*/ BYTE Environment; +/*0x273*/ BYTE TimeOfDay; // 0=any, 1=day only, 2=night only +/*0x274*/ BYTE CastingAnim; +/*0x275*/ BYTE Unknown0x275; +/*0x276*/ BYTE TargetAnim; +/*0x277*/ BYTE Unknown0x277[0x3]; +/*0x27a*/ CHAR Name[0x40]; +/*0x2ba*/ CHAR Target[0x20]; +/*0x2da*/ CHAR Extra[0x20]; //This is 'Extra' from Lucy (portal shortnames etc) +/*0x2fa*/ CHAR Unknown0x2fa[0x60]; +/*0x35a*/ CHAR Unknown0x35a[0x60]; +/*0x3ba*/ CHAR CastOnYou[0x60]; +/*0x41a*/ CHAR CastOnAnother[0x60]; +/*0x47a*/ CHAR WearOff[0x60]; +/*0x4da*/ BYTE Unknown0x4da[0x4]; +/*0x4de*/ BYTE Uninterruptable; //00=Interruptable, 01=Uninterruptable +/*0x4df*/ BYTE Unknown0x4df[0xe]; +/*0x4ed*/ +} SPELL, *PSPELL; + +// actual size: 0x148 10-25-2006 ieatacid +typedef struct _SKILL { +/*0x000*/ PVOID pUnknown0x0; //_SKILL *pNext? +/*0x004*/ PVOID pUnknown0x4; +/*0x008*/ DWORD nName; +/*0x00c*/ DWORD ReuseTimer; +/*0x010*/ DWORD Unknown0x10; +/*0x014*/ CHAR AltTimer; //compare to 2 all over.. alternate timer? +/*0x015*/ BYTE Unknown0x15[0x3]; +/*0x018*/ DWORD Unknown0x18; +/*0x01c*/ DWORD Unknown0x1c; +/*0x020*/ bool Activated; +/*0x021*/ CHAR Unknown0x21; +/*0x022*/ BYTE Unknown0x22[0x2]; +/*0x024*/ DWORD MinLevel[0x24]; +/*0x0b4*/ DWORD Available[0x24]; //FF=not available for that class +/*0x144*/ DWORD Unknown0x144; +/*0x148*/ +} SKILL, *PSKILL; + +#define NUM_SKILLS 99 +typedef struct _SKILLMGR { +/*0x000*/ struct _SKILL *pSkill[NUM_SKILLS]; +/*0x004*/ //more data +} SKILLMGR, *PSKILLMGR; + +//actual size 0x3a8 11-15-11 ieatacid +typedef struct _GUILDMEMBER { +/*0x000*/ struct _GUILDMEMBER *pNext; +/*0x004*/ BYTE Online; +/*0x005*/ BYTE Unknown0x5[0x3]; +/*0x008*/ WORD ZoneID; +/*0x00a*/ WORD Instance; +/*0x00c*/ BYTE Unknown0xc[0x5]; +/*0x011*/ CHAR Name[0x40]; +/*0x054*/ DWORD Level; +/*0x058*/ DWORD Flags; //1=banker, 2=alt +/*0x05c*/ DWORD Class; +/*0x060*/ DWORD Rank; //0=member 1=officer 2=leader + +// not updated +#if 0 +/*0x060*/ DWORD LastSeen; //last seen timestamp +/*0x064*/ CHAR PublicNote[0x100];//0x1a0 +/*0x164*/ CHAR PersonalNote[0x100]; +/*0x264*/ DWORD TributeStatus; +/*0x268*/ DWORD TributeDonations; +/*0x26c*/ DWORD LastDonation;//timestamp +/*0x270*/ DWORD Unknown0x270; +/*0x274*/ +#endif +} GUILDMEMBER, *PGUILDMEMBER; + +typedef struct _GUILDDATA +{ +/*0x00*/ char Name[0x40]; +/*0x04*/ DWORD ID; +/*0x08*/ +} GUILDDATA, *PGUILDDATA; + +typedef struct _GUILD +{ +/*0x00*/ struct _GUILDDATA *pGuildData; +/*0x04*/ DWORD ID; +/*0x08*/ _GUILD *pNext; +/*0x0c*/ BYTE Unknown0xc[0xc]; +/*0x18*/ +} GUILD, *PGUILD; + +// 11-15-11 - ieatacid +typedef struct _GUILDS { +/*0x0000*/ PVOID pOneEntryVTable; +/*0x0004*/ BYTE Unknown0x4[0x4]; +/*0x0008*/ DWORD GuildMemberCount; +/*0x000c*/ struct _GUILDMEMBER *pMember; +/*0x0010*/ BYTE Unknown0x10[0x69]; +/*0x0079*/ CHAR GuildMotD[0x200]; +/*0x0279*/ CHAR GuildLeader[0x40]; +/*0x02b9*/ BYTE Unknown0x2b9[0x3]; +/*0x02bc*/ DWORD GuildTribute; +/*0x02c0*/ BYTE Unknown0x2c0[0x8dc6]; +/*0x9086*/ CHAR GuildUrl[0x200]; +/*0x9286*/ CHAR GuildChannelName[0x80]; +/*0x9306*/ BYTE Unknown0x9306[0x1e]; +/*0x9324*/ struct _GUILD **GuildList; +/*0x9328*/ DWORD HashValue; +/* more data */ +} GUILDS, *PGUILDS; + +typedef struct _INTERACTGROUNDITEM { + DWORD DropID; + DWORD SpawnID; +} INTERACTGROUNDITEM, *PINTERACTGROUNDITEM; + +typedef struct _SPELLFAVORITE { +/*0x000*/ DWORD SpellId[NUM_SPELL_GEMS]; +/*0x030*/ CHAR Name[0x19]; +/*0x049*/ BYTE inuse; +/*0x04a*/ BYTE Byte_0x4a; +/*0x04b*/ BYTE Byte_0x4b; +/*0x04c*/ +} SPELLFAVORITE, *PSPELLFAVORITE; + +typedef struct _CMDLIST { + DWORD LocalizedStringID; + PCHAR szName; + PCHAR szLocalized; + VOID (__cdecl *fAddress)(PSPAWNINFO, PCHAR); + DWORD Restriction; + DWORD Category; + DWORD Unknown; +} CMDLIST, *PCMDLIST; + +typedef struct _EQSOCIAL { +/*0x0000*/ CHAR Name[0x10]; +/*0x0010*/ CHAR Line[0x5][0x100]; +/*0x0510*/ BYTE Color; +} EQSOCIAL, *PEQSOCIAL; + +typedef struct _EQFRIENDSLIST { +/*0x0000*/ CHAR Name[0x64][0x40]; +/*0x1900*/ +} EQFRIENDSLIST, *PEQFRIENDSLIST; + +// Size 0xa4 11/15/2011 ieatacid in msg_send_alt_data +typedef struct _ALTABILITY { +/*0x00*/ DWORD Index; +/*0x04*/ DWORD Flags; //? +/*0x08*/ DWORD nShortName; +/*0x0c*/ DWORD nShorterName; +/*0x10*/ DWORD nName; // now a database number +/*0x14*/ DWORD nDesc; // now a database number +/*0x18*/ DWORD MinLevel; +/*0x1c*/ DWORD Cost; //Initial Cost or cost the last time you bought a level of it +/*0x20*/ DWORD ID; // /alt activate id +/*0x24*/ DWORD AARankRequired; +/*0x28*/ DWORD Unknown0x28; +/*0x2c*/ DWORD *RequiresAbility; +/*0x30*/ DWORD Unknown0x30[3]; +/*0x3c*/ DWORD *RequiresAbilityPoints; +/*0x40*/ DWORD Unknown0x40[2]; +/*0x48*/ DWORD Type; +/*0x4c*/ LONG SpellID; // -1 for no Spell +/*0x50*/ DWORD Unknown0x50; +/*0x54*/ BYTE Unknown0x54[0x10]; +/*0x64*/ DWORD ReuseTimer; // in seconds +/*0x68*/ DWORD Classes; // Classes/2 is the actual value we want. +/*0x6c*/ DWORD MaxRank; //If you have not spent points in this +union { //If you have not spent points in this +/*0x70*/ DWORD PointsSpent; //ability, then its PointsToBeSpent (or +/*0x70*/ DWORD PointsToBeSpent; //'Cost', in other words). +}; +/*0x74*/ BYTE Unknown0x74[0x30]; +/*0xa4*/ +} ALTABILITY, *PALTABILITY; +#define zWarp 0 + +typedef struct _ALTABILITIESLISTMGR { +/*0x00*/ struct _ALTABILITY* Ability; +/*0x04*/ DWORD Index; +} ALTABILITIESLISTMGR, *PALTABILITIESLISTMGR; + +//NUM_ALT_ABILITIES is now defined before CHARINFO definition in this same header file. +typedef struct _ALTABILITIESLIST { +/*0x00*/ struct _ALTABILITIESLISTMGR* Abilities[NUM_ALT_ABILITIES_ARRAY]; +} ALTABILITIESLIST, *PALTABILITIESLIST; + +typedef struct _NEWALTADVMGR { +/*0x00*/ struct _ALTABILITIESLIST* AltAbilityList; +/*0x04*/ DWORD NumAltAbilities; // NUM_ALT_ABILITIES +/*0x08*/ DWORD Unknown0x08; // data here +/*0x0c*/ DWORD Unknown0x0c; // data here +/*0x10*/ BYTE Unknown0x10[0x8]; +} NEWALTADVMGR, *PNEWALTADVMGR; + +typedef struct _ALTADVMGR { +/*0x00*/ struct _NEWALTADVMGR* AltAbilities; +} ALTADVMGR, *PALTADVMGR; + +// size 0x94 (3-19-2009) +typedef struct _EQRAIDMEMBER { +/*0x000*/ CHAR Name[0x40]; +/*0x040*/ CHAR RaidNote[0x40]; +/*0x080*/ BYTE nLevel; +/*0x081*/ BYTE nClass; +/*0x082*/ BYTE RaidLeader; +/*0x083*/ BYTE GroupLeader; +/*0x084*/ BYTE RaidMainAssist; +/*0x085*/ BYTE RaidMarker; +/*0x086*/ BYTE RaidWaypointer; +/*0x087*/ BYTE Unknown0x87; +/*0x088*/ DWORD GroupNumber; +/*0x08c*/ BYTE Unknown0x8c[0x8]; +/*0x094*/ +} EQRAIDMEMBER, *PEQRAIDMEMBER; + +// sizeof(_EQRAID) is 0x3668 (12-09-2009) +typedef struct _EQRAID { +/*0x0000*/ BYTE Unknown0x0[0x218]; +/*0x0218*/ CHAR RaidMemberUsed[0x48]; +/*0x0260*/ struct _EQRAIDMEMBER RaidMember[0x48]; +/*0x2c00*/ BYTE Unknown0x2c00[0x4]; +/*0x2c04*/ DWORD RaidMemberCount; +/*0x2c08*/ CHAR RaidLeaderName[0x40]; +/*0x2c48*/ BYTE Unknown0x2b88[0x100]; +/*0x2d48*/ CHAR RaidMOTD[0x400]; +/*0x3148*/ BYTE Unknown0x3148[0x40]; +/*0x3188*/ BYTE Invited; // 1 = default?, 2 = invited, 4 = in raid +/*0x3189*/ BYTE Unknown0x3189[0x8]; +/*0x3191*/ BYTE IsRaidLeader; +/*0x3192*/ BYTE Unknown0x0x30d2[0x2]; +/*0x3194*/ DWORD RaidTarget; +/*0x3198*/ DWORD LootType; +/*0x319c*/ CHAR RaidLooters[0x13][0x40]; +/*0x365c*/ DWORD TotalRaidMemberLevels; // TotalRaidMemberLevels/RaidMemberCount=RaidAvgLevel +/*0x3660*/ BYTE Locked; +/*0x3661*/ BYTE Padding0x35a1[0x7]; +/*0x3668*/ +} EQRAID, *PEQRAID; + +// size 0x19C 3-23-2005 +typedef struct _EQGROUP { +/*0x000*/ BYTE MemberExists[5]; +/*0x005*/ CHAR MemberName[5][0x40]; +/*0x145*/ BYTE Unused[3]; +/*0x148*/ struct _SPAWNINFO* pMember[5]; +/*0x15C*/ CHAR LeaderName[0x40]; +/*0x19C*/ +} EQGROUP, *PEQGROUP; + +// size 0x08 +typedef struct _EQSTRING { +/*0x00*/ DWORD ID; +/*0x04*/ PCHAR String; +} EQSTRING, *PEQSTRING; + +// size 0x10 4-28-2004 lax +typedef struct _EQSTRINGTABLE { +/*0x00*/ struct _EQSTRING **StringItems; +/*0x04*/ DWORD Size; +/*0x08*/ DWORD Count; +/*0x0c*/ DWORD Unknown0x0c; +/*0x10*/ +} EQSTRINGTABLE, *PEQSTRINGTABLE; + +typedef struct connection_t { +/*0x000*/ void *vtable; +/*0x004*/ BYTE Unknown0x4[0x100]; +/*0x104*/ DWORD Master; +/*0x108*/ DWORD Average; +/*0x10c*/ DWORD Low; +/*0x110*/ DWORD High; +/*0x114*/ DWORD Last; +/*0x118*/ +} CONNECTION_T, *PCONNECTION_T; + +//actual size 0x2dfc 3-19-09 - ieatacid +typedef struct _CDISPLAY { +/*0x0000*/ BYTE Unknown0x000[0x12c]; +/*0x012c*/ void *pActorTagManager; +/*0x0130*/ BYTE Unknown0x130[0x24]; +/*0x0154*/ DWORD TimeStamp; +/*0x0158*/ BYTE Unknown0x158[0x2c12]; +/*0x2d6a*/ BYTE NpcNames; // show npc names +} CDISPLAY, *PCDISPLAY; + +//5-16-06 - ieatacid +typedef struct _DZTIMERINFO { +/*0x000*/ CHAR ExpeditionName[0x80]; +/*0x080*/ CHAR EventName[0x100]; +/*0x180*/ DWORD TimeStamp; // TimeStamp - Util__FastTime = time left +/*0x184*/ DWORD TimerID; +/*0x188*/ struct _DZTIMERINFO *pNext; +/*0x18c*/ +} DZTIMERINFO, *PDZTIMERINFO; + +typedef struct _DZMEMBER { +/*0x000*/ CHAR Name[0x40]; +/*0x040*/ DWORD Status; // 0="unknown", 1="Online", 2="Offline", 3="In Dynamic Zone", 4="Link Dead" +/*0x044*/ struct _DZMEMBER *pNext; +/*0x048*/ +} DZMEMBER, *PDZMEMBER; + +typedef struct _TASKMEMBER { +/*0x000*/ CHAR Name[0x40]; +/*0x040*/ DWORD Unknown0x40; +/*0x044*/ DWORD IsLeader; +/*0x048*/ struct _TASKMEMBER *pNext; +/*0x04c*/ +} TASKMEMBER, *PTASKMEMBER; + +typedef struct _DYNAMICZONE { +/*0x000*/ void *vftable; +/*0x004*/ BYTE Unknown0x04[0x46]; +/*0x04a*/ CHAR Name[0x40]; // your name +/*0x08a*/ CHAR ExpeditionName[0x80]; +/*0x10a*/ BYTE Unknown0x10a[0x2]; +/*0x10c*/ WORD MaxPlayers; +/*0x10e*/ BYTE Unknown0x10e[0x2]; +/*0x110*/ struct _DZMEMBER *pMemberList; +/*0x114*/ PCHAR expeditionName; +/*0x118*/ // more? +} DYNAMICZONE, *PDYNAMICZONE; + +typedef struct _CHATCHANNELS { +/*0x000*/ PCHAR ChannelName[0xa]; +/*0x004*/ +} CHATCHANNELS, *PCHATCHANNELS; + +typedef struct _CHATSERVICE { +/*0x000*/ BYTE Unknown0x0[0xc]; +/*0x00c*/ struct _CHATCHANNELS *ChannelList; +/*0x010*/ DWORD ActiveChannels; // number of channels joined +/*0x014*/ BYTE Unknown0x14[0x8]; +/*0x01c*/ CHAR ChatID[0x30]; // "ServerName.CharName" (0x60?) +/*0x04c*/ BYTE Unknown0x4c[0x30]; +/*0x07c*/ CHAR ServerName[0x30]; // "ServerName." +/*0x0b0*/ // more data +} CHATSERVICE, *PCHATSERVICE; + +typedef struct _EVERQUEST { +/*0x000*/ BYTE Unknown[0x2a4]; +/*0x2a4*/ struct _CHATSERVICE *ChatService; +/*0x2a8*/ BYTE Unknown0x2a8[0x8]; +/*0x2b0*/ bool bJoinedChannel; +/*0x2b1*/ CHAR ChannelPlayerName[0x100]; +/*0x3b1*/ CHAR ChannelName[0xa][0x30]; +/*0x591*/ BYTE Unknown0x591[0x3]; +/*0x594*/ DWORD ChannelNumber[0xa]; +/*0x5bc*/ DWORD ChannelQty; +/*0x5c0*/ BYTE Unknown0x5c0[0x8]; +/*0x5c8*/ DWORD GameState; +/*0x5cc*/ // more data +} EVERQUEST, *PEVERQUEST; + +typedef struct _AURAINFO { +/*0x000*/ CHAR Name[0x40]; +/*0x040*/ BYTE Unknown0x14[0xc]; +/*0x04c*/ +} AURAINFO, *PAURAINFO; + +typedef struct _AURAS { +/*0x000*/ _AURAINFO Aura[0x2]; +} AURAS, *PAURAS; + +typedef struct _AURAMGR { +/*0x000*/ DWORD NumAuras; +/*0x004*/ BYTE Unknown0x4[0xc]; +/*0x010*/ _AURAS **pAuraInfo; +/*0x014*/ BYTE Unknown0x14[0x8]; +/*0x01c*/ +} AURAMGR, *PAURAMGR; + +typedef struct _INTERACTSWITCH { +/*0x000*/ DWORD switchID; +/*0x004*/ DWORD dwzero; +/*0x008*/ DWORD dwneg1; +/*0x00c*/ DWORD spawnID; +} INTERACTSWITCH, *PINTERACTSWITCH; + +typedef struct _MERCSTANCEDATA { +DWORD nStance; +DWORD nDbStance; +} MERCSTANCEDATA, *PMERCSTANCEDATA; + +typedef struct _MERCENARYINFO { +/*0x000*/ BYTE Unknown0x0[0x10c]; +/*0x10c*/ DWORD HaveMerc; +/*0x110*/ DWORD MercState; // 1 = suspended, 5 = active +/*0x114*/ BYTE Unknown0x114[0x30]; +/*0x144*/ DWORD ActiveStance; +/*0x148*/ BYTE Unknown0x148[0xf0]; +/*0x238*/ DWORD NumStances; +/*0x23c*/ _MERCSTANCEDATA **pMercStanceData; +} MERCENARYINFO, *PMERCENARYINFO; + +#define MAX_XTARGETS 20 + +enum xTargetTypes +{ + XTARGET_EMPTY_TARGET, + XTARGET_AUTO_HATER, + XTARGET_SPECIFIC_PC, + XTARGET_SPECIFIC_NPC, + XTARGET_TARGETS_TARGET, + XTARGET_GROUP_TANK, + XTARGET_GROUP_TANKS_TARGET, + XTARGET_GROUP_ASSIST, + XTARGET_GROUP_ASSIST_TARGET, + XTARGET_GROUP_PULLER, + XTARGET_GROUP_PULLER_TARGET, + XTARGET_GROUP_MARK1, + XTARGET_GROUP_MARK2, + XTARGET_GROUP_MARK3, + XTARGET_RAID_ASSIST1, + XTARGET_RAID_ASSIST2, + XTARGET_RAID_ASSIST3, + XTARGET_RAID_ASSIST1_TARGET, + XTARGET_RAID_ASSIST2_TARGET, + XTARGET_RAID_ASSIST3_TARGET, + XTARGET_RAID_MARK1, + XTARGET_RAID_MARK2, + XTARGET_RAID_MARK3, + XTARGET_MY_PET, + XTARGET_MY_PET_TARGET, + XTARGET_MY_MERCENARY, + XTARGET_MY_MERCENTARY_TARGET +}; + +// size 0x4c 12-25-09 - ieatacid +typedef struct _XTARGETDATA +{ +/*0x00*/ DWORD xTargetType; +/*0x04*/ DWORD Unknown0x4; +/*0x08*/ DWORD SpawnID; +/*0x0c*/ char Name[0x40]; +/*0x4c*/ +} XTARGETDATA, *PXTARGETDATA; + +typedef struct _XTARGETARRAY +{ + XTARGETDATA pXTargetData[MAX_XTARGETS]; +} XTARGETARRAY, *PXTARGETARRAY; + +// size 0x20 12-25-09 - ieatacid +typedef struct _XTARGETMGR +{ +/*0x00*/ void *vftable; +/*0x04*/ DWORD TargetSlots; // MAX_XTARGETS +/*0x08*/ PXTARGETARRAY pXTargetArray; +/*0x0c*/ DWORD Unknown0xc; // same as TargetSlots? +/*0x10*/ BYTE Unknown0x10[0x4]; +/*0x14*/ BYTE AutoAddHaters; // 1 = auto add haters, 0 = do not auto add haters +/*0x15*/ BYTE Unknown0x15[0x3]; +/*0x18*/ BYTE Unknown0x18[0x4]; +/*0x1c*/ BYTE Unknown0x1c[0x4]; +/*0x20*/ +} XTARGETMGR, *PXTARGETMGR; + +typedef struct _AGGRODATA { +/*0x00*/ DWORD Unknown0x0; +/*0x04*/ BYTE AggroPct; +/*0x05*/ BYTE padding[3]; +/*0x08*/ +} AGGRODATA, *PAGGRODATA; + +// size 0xe4 11-28-12 - ieatacid (in GetAggroInfo) +typedef struct _AGGROINFO { +/*0x00*/ struct _AGGRODATA aggroData[0x1b]; +/*0xd8*/ DWORD AggroLockID; +/*0xdc*/ DWORD AggroTargetID; +/*0xe0*/ DWORD AggroSecondaryID; +/*0xe4*/ +} AGGROINFO, *PAGGROINFO; + +enum AggroDataTypes +{ + AD_Player, + AD_Secondary, + AD_Group1, + AD_Group2, + AD_Group3, + AD_Group4, + AD_Group5, + AD_xTarget1, + AD_xTarget2, + AD_xTarget3, + AD_xTarget4, + AD_xTarget5, + AD_xTarget6, + AD_xTarget7, + AD_xTarget8, + AD_xTarget9, + AD_xTarget10, + AD_xTarget11, + AD_xTarget12, + AD_xTarget13, + AD_xTarget14, + AD_xTarget15, + AD_xTarget16, + AD_xTarget17, + AD_xTarget18, + AD_xTarget19, + AD_xTarget20, +}; + +#define EQ_BEGIN_ZONE 0x600D // CEverQuest__SavePCForce 20130514 +#define EQ_END_ZONE 0x166C // CEverQuest__DoMainLoop+B2F 20130514 +#define EQ_LoadingS__ArraySize 0x5b // EQ_LoadingS__SetProgressBar+8C 12-08-2010 +}; +using namespace EQData; diff --git a/hc/zone.h b/client_files/native_autoloot/eq-core-dll/src/EQDetours.h similarity index 100% rename from hc/zone.h rename to client_files/native_autoloot/eq-core-dll/src/EQDetours.h diff --git a/client_files/native_autoloot/eq-core-dll/src/EQFunctionDetours.cpp b/client_files/native_autoloot/eq-core-dll/src/EQFunctionDetours.cpp new file mode 100644 index 0000000000..7c019f9db9 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/EQFunctionDetours.cpp @@ -0,0 +1 @@ +#include "EQDetours.h" \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/src/EQNetworkDetours.cpp b/client_files/native_autoloot/eq-core-dll/src/EQNetworkDetours.cpp new file mode 100644 index 0000000000..8e23bbc9fe --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/EQNetworkDetours.cpp @@ -0,0 +1,15 @@ +#include "EQUtils.h" +#include "EQDetours.h" +#include "MQ2Main.h" + + int __fastcall DetourPetWnd(CXWnd* thisptr) + { + if((DWORD*)thisptr->pvfTable == (DWORD*)0x0065A0A8) + { + thisptr->Show(0,1); + return 0; + } + + thisptr->Show(1,1); + return 0; + } \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/src/EQUIStructs.h b/client_files/native_autoloot/eq-core-dll/src/EQUIStructs.h new file mode 100644 index 0000000000..aaf1923e8b --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/EQUIStructs.h @@ -0,0 +1,946 @@ +#pragma once +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +namespace EQUIStructs +{ + + +enum UIType +{ + UI_Unknown=-1, + UI_Class=0, + UI_RGB=1, + UI_Point=2, + UI_Size=3, + UI_TextureInfo=4, + UI_Frame=5, + UI_Ui2DAnimation=6, + UI_ButtonDrawTemplate=7, + UI_GaugeDrawTemplate=8, + UI_SpellGemDrawTemplate=9, + UI_FrameTemplate=10, + UI_ScrollbarDrawTemplate=11, + UI_WindowDrawTemplate=12, + UI_SliderDrawTemplate=13, + UI_ScreenPiece=14, + UI_StaticScreenPiece=15, + UI_StaticAnimation=16, + UI_StaticTintedBlendAnimation=17, + UI_StaticText=18, + UI_StaticFrame=19, + UI_StaticHeader=20, + UI_LayoutStrategy=21, + UI_LayoutVertical=22, + UI_LayoutHorizontal=23, + UI_Control=24, + UI_TemplateAssoc=25, + UI_TemplateScreen=26, + UI_ListboxColumn=27, + UI_Listbox=28, + UI_Button=29, + UI_Gauge=30, + UI_SpellGem=31, + UI_HtmlComponent=32, + UI_InvSlot=33, + UI_EditBox=34, + UI_Slider=35, + UI_Label=36, + UI_STMLBox=37, + UI_TreeView=38, + UI_Combobox=39, + UI_Page=40, + UI_TabBox=41, + UI_LayoutBox=42, + UI_HorizontalLayoutBox=43, + UI_VerticalLayoutBox=44, + UI_FinderBox=45, + UI_TileLayoutBox=46, + UI_NamedTemplatePiece=47, + UI_TemplateContainer=48, + UI_Screen=49, + UI_SuiteDefaults=50, + UI_Screens=51, + UI_TopLevelWindowList=52, + UI_HotButton=53, +}; + +// *************************************************************************** +// Structures +// *************************************************************************** + +// 10-24-2003 Lax - Massive overhaul. +// See http://macroquest.sourceforge.net/phpBB2/viewtopic.php?t=3569 for +// standards on structures to make things easier on everyone! +// -- ONLY applies to EQ structs, not MQ structs like alerts, etc. + + + + + +typedef struct _EQCURRENTSELECTION { +/*0x00*/ DWORD Unknown; +/*0x04*/ DWORD SelectedWnd; //address to selection in tree +/*0x08*/ DWORD Unknownlodncrap; +/*0x0c*/ DWORD NumberOfSlots; //merchantslots == 79 +/*0x10*/ DWORD TextureAnim; +/*0x14*/ +} EQCURRENTSELECTION, *PEQCURRENTSELECTION; + +#define VFTABLE \ +/*0x000*/ LPVOID IsValid; \ +/*0x004*/ LPVOID vector_deleting_destructor; \ +/*0x008*/ LPVOID DrawNC; \ +/*0x00c*/ LPVOID PostDraw; \ +/*0x010*/ LPVOID PostDraw2; \ +/*0x014*/ LPVOID DrawCursor; \ +/*0x018*/ LPVOID nullsub0x18; \ +/*0x01c*/ LPVOID PostDraw3; \ +/*0x020*/ LPVOID DrawBackground; \ +/*0x024*/ LPVOID DrawTooltip; \ +/*0x028*/ LPVOID DrawTooltipAtPoint; \ +/*0x02c*/ LPVOID GetMinimizedRect; \ +/*0x030*/ LPVOID DrawTitleBar; \ +/*0x034*/ LPVOID GetCursorToDisplay; \ +/*0x038*/ LPVOID HandleLButtonDown; \ +/*0x03c*/ LPVOID HandleLButtonUp; \ +/*0x040*/ LPVOID HandleLButtonHeld; \ +/*0x044*/ LPVOID HandleLButtonUpAfterHeld; \ +/*0x048*/ LPVOID HandleRButtonDown; \ +/*0x04c*/ LPVOID HandleRButtonUp; \ +/*0x050*/ LPVOID HandleRButtonHeld; \ +/*0x054*/ LPVOID HandleRButtonUpAfterHeld; \ +/*0x058*/ LPVOID HandleWheelButtonDown; \ +/*0x05c*/ LPVOID HandleWheelButtonUp; \ +/*0x060*/ LPVOID HandleMouseMove; \ +/*0x064*/ LPVOID HandleWheelMove; \ +/*0x068*/ LPVOID GetDragDropCursor; \ +/*0x06c*/ LPVOID PostDraw4; \ +/*0x070*/ LPVOID OnDragDrop; \ +/*0x074*/ LPVOID GetClickStickCursor; \ +/*0x078*/ LPVOID QueryDropOK; \ +/*0x07c*/ LPVOID OnClickStick; \ +/*0x080*/ LPVOID GetClickStickCursor2; \ +/*0x084*/ LPVOID QueryClickStickDropOK; \ +/*0x088*/ LPVOID WndNotification; \ +/*0x08c*/ LPVOID Unknown8c; \ +/*0x090*/ LPVOID ShowWindow; /* Activate */ \ +/*0x094*/ LPVOID Deactivate; \ +/*0x098*/ LPVOID PostDraw5; \ +/*0x09c*/ LPVOID OnResize; \ +/*0x0a0*/ LPVOID OnResize2; \ +/*0x0a4*/ LPVOID Unknown0xa4; \ +/*0x0a8*/ LPVOID Unknown0xa8; \ +/*0x0ac*/ LPVOID OnMinimizeBox; \ +/*0x0b0*/ LPVOID Unknown0xb0; \ +/*0x0b4*/ LPVOID OnTileBox; \ +/*0x0b8*/ LPVOID PostDraw6; \ +/*0x0bc*/ LPVOID OnMove2; \ +/*0x0c0*/ LPVOID OnMove3; \ +/*0x0c4*/ LPVOID OnProcessFrame; \ +/*0x0c8*/ LPVOID OnVScroll; \ +/*0x0cc*/ LPVOID OnHScroll; \ +/*0x0d0*/ LPVOID PostDraw7; \ +/*0x0d4*/ LPVOID OnMove4; \ +/*0x0d8*/ LPVOID Show; \ +/*0x0dc*/ LPVOID Unknown0xdc; \ +/*0x0e0*/ LPVOID Unknown0xe0; \ +/*0x0e4*/ LPVOID OnMove5; \ +/*0x0e8*/ LPVOID GetTooltip; \ +/*0x0ec*/ LPVOID HitTest; \ +/*0x0f0*/ LPVOID GetHitTestRect; \ +/*0x0f4*/ LPVOID GetInnerRect; \ +/*0x0f8*/ LPVOID GetClientRect; \ +/*0x0fc*/ LPVOID GetMinSize; \ +/*0x100*/ LPVOID GetMaxSize; \ +/*0x104*/ LPVOID GetUntileSize; \ +/*0x108*/ LPVOID IsPointTransparent; \ +/*0x10c*/ LPVOID Unknown10c; \ +/*0x110*/ LPVOID Unknown110; \ +/*0x114*/ LPVOID Unknown114; \ +/*0x118*/ LPVOID SetDrawTemplate; \ +/*0x11c*/ LPVOID Move_Rect; \ +/*0x120*/ LPVOID Move_Point; \ +/*0x124*/ LPVOID SetWindowTextA; \ +/*0x128*/ LPVOID Unknown0x128; \ +/*0x12c*/ LPVOID Unknown0x12c; \ +/*0x130*/ LPVOID Unknown0x130; \ +/*0x134*/ LPVOID SetVScrollPos; \ +/*0x138*/ LPVOID SetHScrollPos; \ +/*0x13c*/ LPVOID Unknown0x13c; \ +/*0x140*/ LPVOID Unknown0x140; \ +/*0x144*/ LPVOID SetAttributesFromSidl; \ +/*0x148*/ LPVOID nullsub_1; \ +/*0x14c*/ LPVOID Unknown0x14c; \ +/*0x150*/ LPVOID Unknown0x150; \ +/*0x154*/ LPVOID Unknown0x154; \ +/*0x158*/ LPVOID Unknown0x158; \ +/*0x15c*/ LPVOID PostDraw8; \ +/*0x160*/ LPVOID Unknown0x160; \ +/*0x164*/ + +typedef struct _CSIDLWNDVFTABLE { +VFTABLE; +/*0x168*/ LPVOID LoadIniInfo; +/*0x16c*/ LPVOID StoreIniInfo; +/*0x170*/ LPVOID Unknown0x170; +/*0x174*/ LPVOID Unknown0x174; +/*0x178*/ LPVOID Unknown0x178; +/*0x17c*/ +} CSIDLWNDVFTABLE, *PCSIDLWNDVFTABLE; + +typedef struct _CXWNDVFTABLE { +VFTABLE; +} CXWNDVFTABLE, *PCXWNDVFTABLE; + + +#define CXW_NO_VTABLE \ +/*0x004*/ void *pUnknown0x4; \ +/*0x008*/ struct _CSIDLWND *pNextSiblingWnd; \ +/*0x00c*/ void *pUnknown0xc; \ +/*0x010*/ struct _CSIDLWND *pFirstChildWnd; \ +/*0x014*/ BYTE Unknown0x14[0x5]; \ +/*0x019*/ BYTE Alpha; \ +/*0x01a*/ BYTE Enabled; \ +/*0x01b*/ BYTE Unknown0x1b[0x5]; \ +/*0x020*/ BYTE MouseOver; /*found in CXWnd__SetMouseOver_x*/ \ +/*0x021*/ BYTE Unknown0x21[0xc]; \ +/*0x02d*/ BYTE Locked; /*found in CSidlScreenWnd__LoadIniInfo_x*/ \ +/*0x02e*/ BYTE Unknown0x2e[0x32]; \ +/*0x060*/ RECT Location; \ +/*0x070*/ BYTE Unknown0x70[0x10]; \ +/*0x080*/ DWORD FadeDuration; \ +/*0x084*/ DWORD WindowStyle; /* bit 1 - vertical scroll, bit 2 - horizontal scroll, bit 4 - title bar?, bit 8 - border */ \ +/*0x088*/ BYTE Unknown0x88[0x10]; \ +/*0x098*/ BYTE CloseOnESC; /* found in CSidlScreenWnd__StoreIniInfo_x, close when ESC is pressed */ \ +/*0x099*/ BYTE Unknown0x99[0x27]; \ +/*0x0c0*/ RECT OldLocation; \ +/*0x0d0*/ BYTE Unknown0xd0[0x4]; \ +/*0x0d4*/ DWORD TickCount2; \ +/*0x0d8*/ DWORD XMLIndex; \ +/*0x0dc*/ BYTE Unknown0xdc[0xc]; \ +/*0x0e8*/ struct _CXSTR *Tooltip; /*found in CSidlManager__CreateLabel_x*/ \ +/*0x0ec*/ BYTE Unknown0xec[0x4]; \ +/*0x0f0*/ DWORD TimeMouseOver; \ +/*0x0f4*/ BYTE Unknown0xf4[0x2c]; \ +/*0x120*/ DWORD ZLayer; /*found in CXWndManager__DrawWindows_x*/ \ +/*0x124*/ struct _CXSTR *XMLToolTip; /*found in CSidlManager__CreateLabel_x*/ \ +/*0x128*/ ARGBCOLOR BGColor; \ +/*0x12c*/ DWORD UnknownCW; /*found in OnProcessFrame*/\ +/*0x130*/ BYTE Unknown0x130[0x8]; \ +/*0x138*/ BYTE Clickable; /* found in CChatWindow__CChatWindow_x and the button handlers */ \ +/*0x139*/ BYTE Unknown0x139[0x3b]; \ +/*0x174*/ struct _CSIDLWND *pParentWindow; /*CXWnd__IsDescendantOf_x has this one, If this is NULL, coordinates are absolute... */ \ +/*0x178*/ BYTE Unknown0x178[0x4]; \ +/*0x17c*/ DWORD VScrollPos; \ +/*0x180*/ BYTE Unknown0x180[0x8]; \ +/*0x188*/ LPVOID DrawTemplate; \ +/*0x18c*/ BYTE Faded; \ +/*0x18d*/ BYTE Unknown0x18d[0x3]; \ +/*0x190*/ DWORD VScrollMax; \ +/*0x194*/ BYTE ValidCXWnd; /*IsValid has this one*/\ +/*0x195*/ BYTE Unknown0x195; \ +/*0x196*/ BYTE dShow; \ +/*0x197*/ BYTE Unknown0x197; \ +/*0x198*/ DWORD HScrollPos; \ +/*0x19c*/ BYTE Unknown0x19c; \ +/*0x19d*/ BYTE Fades; \ +/*0x19e*/ BYTE Unknown0x19e[0x2]; \ +/*0x1a0*/ DWORD HScrollMax; \ +/*0x1a4*/ BYTE Unknown0x1a4[0x4]; \ +/*0x1a8*/ struct _CXSTR *WindowText; /*CXWnd__GetWindowTextA_x has this one*/ \ +/*0x1ac*/ BYTE Unknown0x1ac[0x2]; \ +/*0x1ae*/ BYTE FadeToAlpha; /*found in CSidlScreenWnd__StoreIniInfo_x*/\ +/*0x1af*/ BYTE Unknown0x1af; \ +/*0x1b0*/ DWORD BGType; /* found in CSidlScreenWnd__StoreIniInfo_x "BGType" in ini */ \ +/*0x1b4*/ BYTE Unknown0x1b4[0x10]; \ +/*0x1c4*/ BYTE Unlockable; /* found in CSidlScreenWnd__LoadIniInfo_x related to Locked */ \ +/*0x1c5*/ BYTE Unknown0x1c5[0x9]; \ +/*0x1ce*/ BYTE Minimized; \ +/*0x1cf*/ BYTE Unknown0x1cf[0x9]; \ +/*0x1d8*/ + +#define CXW \ +/*0x000*/ struct _CXWNDVFTABLE *pvfTable; \ +CXW_NO_VTABLE \ +/*0x1d8*/ + +typedef struct _CXWND { +CXW; +} CXWND, *PCXWND; +#define GateBind 0 + +#define CSW \ +/*0x000*/ struct _CSIDLWNDVFTABLE *pvfTable; \ +CXW_NO_VTABLE; \ +/*0x1d8*/ union { \ + struct _CXSTR *SidlText; /*found in CChatWindow__WndNotification_x*/\ + DWORD Items; \ + }; \ +/*0x1dc*/ union { \ + struct _CXSTR *SidlScreen; \ + DWORD SlotID; \ + }; \ +/*0x1e0*/ LPVOID SidlPiece; /* CScreenPieceTemplate (important) */ \ +/*0x1e4*/ union { /*find in CSidlScreenWnd__dCSidlScreenWnd_x*/ \ + struct { \ + BYTE Checked; \ + BYTE Highlighted; \ + BYTE Unused0x1c8[0x2]; \ + }; \ + DWORD MaxChars; \ + }; \ +/*0x1e8*/ DWORD TextureAnim; \ +/*0x1ec*/ struct _CXSTR * InputText; /*found in CChatWindow__CChatWindow_x*/\ +/*0x1f0*/ DWORD Selector; /*found in CSidlScreenWnd__CSidlScreenWnd1_x*/\ +/*0x1f4*/ DWORD PushToSelector; /*found in CSidlScreenWnd__LoadIniInfo_x*/\ +/*0x1f8*/ DWORD EnableINIStorage; /*found in CSidlScreenWnd__LoadSidlScreen_x*/\ +/*0x1fc*/ union { \ + struct _CXSTR *INIStorageName; /*found in CSidlScreenWnd__LoadSidlScreen_x*/\ + struct _EQINVSLOT *pEQInvSlot; \ + }; \ +/*0x200*/ BYTE Unknown0x200[0x10]; \ +/*0x210*/ LPVOID ContextMenu; /* CTextureAnimation */ \ +/*0x214*/ DWORD Unknown0x214; /* CTextureAnimation */ \ +/*0x218*/ DWORD Unknown0x218; /* CTextureAnimation */ \ +/*0x21c*/ DWORD Unknown0x21c; \ +/*0x220*/ + +typedef struct _CSIDLWND { +CSW; +} CSIDLWND, *PCSIDLWND; + +// size 0x298 09-03-2008 +typedef struct _CSIDLMGR { +/*0x000*/ BYTE Unknown0x000[0x144]; +/*0x144*/ PVOID pXMLDataMgr; +/*0x148*/ BYTE Unknown0x11c[0x150]; +/*0x298*/ +} CSIDLMGR, *PCSIDLMGR; + +//11-6-2003 lax +//Actual size 0x140 11-11-09 - ieatacid +typedef struct _CXWNDMGR { +/*0x000*/ LPVOID CXWNDMGR__vtable; +/*0x004*/ DWORD Count; +/*0x008*/ struct _CSIDLWND **pWindows; +/*0x00c*/ BYTE Unknown0x00C[0x91]; +/*0x09d*/ bool KeyboardFlags[4]; // 7d-80 +/*0x0a1*/ CHAR Unknown0x0a1[0x6b]; +/*0x10c*/ DWORD ScreenExtentX; +/*0x110*/ DWORD ScreenExtentY; +/*0x114*/ DWORD Unknown; +/*0x118*/ DWORD font_list_ptr; +/*0x11c*/ BYTE Unknown0x11c[0x24]; +/*0x140*/ +} CXWNDMGR, *PCXWNDMGR; + + +typedef struct _CONTENTSARRAY { + struct _CONTENTS* Array[1]; +} CONTENTSARRAY, *PCONTENTSARRAY; + +// 20120316 - ieatacid +struct merchdata { +/*0x00*/ void *vftable; +/*0x04*/ BYTE Unknown0x4[0xc]; +/*0x10*/ DWORD MerchSlots; +/*0x14*/ DWORD Unknown0x14; +/*0x18*/ struct _CONTENTSARRAY *pMerchArray; +/*0x1c*/ DWORD MerchMaxSlots; +/*0x20*/ +}; + +struct merch_other { + merchdata *pMerchData; + void *other; + void *other2; +}; + +// size 0x2b0 20130514 - eqmule +typedef struct _EQMERCHWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x220*/ BYTE Unknown0x220[0x0c]; +/*0x22c*/ merch_other *pMerchOther; +/*0x230*/ BYTE Unknown0x230[0x8]; +/*0x238*/ FLOAT Markup;//777026 has this in 04-15-2013 +/*0x23c*/ BYTE Unknown0x23c[0xc]; +/*0x248*/ DWORD SelectedSlotID; +// more data but this is all we need +} EQMERCHWINDOW, *PEQMERCHWINDOW; + + + +// 10-27-2003 Lax +// Actual size 0x208 11-5-2003 +typedef struct _EQCHATMGR +{ +/*0x000*/ struct _EQCHATWINDOW* ChatWnd[0x20]; +/*0x080*/ DWORD NumWindows; +/*0x084*/ DWORD ActiveWindow; // CChat::GetActiveChatWindow +/*0x088*/ DWORD LockedWindow; // CChatManager::GetActiveChatWindow +/*0x08c*/ DWORD Unknown0x08c; +/*0x090*/ struct _EQCHATWINDOW* ChannelMap[0x20]; // channel map +/*0x110*/ BYTE Unknown0x110[0x28]; +/*0x138*/ DWORD Unknown0x138; +/*0x13c*/ DWORD Unknown0x13c; +/*0x140*/ DWORD Unknown0x140; +/*0x144*/ LPVOID ChatMenu; +/*0x148*/ DWORD Unknown0x148; +/*0x14c*/ DWORD Unknown0x14c; +/*0x150*/ DWORD Unknown0x150; +/*0x154*/ DWORD Unknown0x154; +/*0x158*/ LPVOID MeleeMenu; +/*0x15c*/ DWORD Unknown0x15c; +/*0x160*/ LPVOID SpellMenu; +/*0x164*/ DWORD Unknown0x164; +/*0x168*/ DWORD Unknown0x168; +/*0x16c*/ LPVOID ChannelMenu; +/*0x170*/ LPVOID ChatMenu2; +/*0x174*/ LPVOID FilterMenu; +/*0x178*/ DWORD Unknown0x178; +/*0x17c*/ DWORD Unknown0x17c; +/*0x180*/ DWORD Unknown0x180; +/*0x184*/ LPVOID HitsModeMenu; +/*0x188*/ LPVOID MeleeMenu2; +/*0x18c*/ LPVOID HitsModeMenu2; +/*0x190*/ DWORD Unknown0x190; +/*0x194*/ LPVOID HitsModeMenu3; +/*0x198*/ DWORD Unknown0x198; +/*0x19c*/ LPVOID HitsModeMenu4; +/*0x1a0*/ DWORD Unknown0x1a0; +/*0x1a4*/ LPVOID HitsModeMenu5; +/*0x1a8*/ DWORD Unknown0x1a8; +/*0x1ac*/ LPVOID HitsModeMenu6; +/*0x1b0*/ DWORD Unknown0x1b0; +/*0x1b4*/ DWORD Unknown0x1b4; // CChatManager__UpdateTellMenus +/*0x1b8*/ DWORD Unknown0x1b8; +/*0x1bc*/ DWORD Unknown0x1bc; // CChatManager__UpdateTellMenus +/*0x1c0*/ DWORD Unknown0x1c0; +/*0x1c4*/ DWORD Unknown0x1c4; // CChatManager__UpdateTellMenus // raid +/*0x1c8*/ DWORD Unknown0x1c8; +/*0x1cc*/ DWORD Unknown0x1cc; // CChatManager__UpdateTellMenus +/*0x1d0*/ DWORD Unknown0x1d0; // CChatManager__UpdateTellMenus +/*0x1d4*/ DWORD Unknown0x1d4; // CChatManager__UpdateTellMenus +/*0x1d8*/ DWORD Unknown0x1d8; +/*0x1dc*/ DWORD Unknown0x1dc; +/*0x1e0*/ DWORD Unknown0x1e0; +/*0x1e4*/ BYTE Unknown0x1e4[0x1c]; +/*0x200*/ DWORD Unknown0x200; +/*0x204*/ DWORD Unknown0x204; +/*0x208*/ +} EQCHATMGR, *PEQCHATMGR; + +// Actual size 0x26c 02-14-2007 +// 10-27-2003 Lax +typedef struct _EQCHATWINDOW +{ +/*0x000*/ struct _CSIDLWND Wnd; +/*0x214*/ struct _EQCHATMGR *ChatManager; +/*0x218*/ struct _CSIDLWND* InputWnd; +/*0x21c*/ struct _CSIDLWND* OutputWnd; +/*0x220*/ DWORD Unknown0x154; +/*0x224*/ DWORD Unknown0x158; // need to update locations.. +/*0x228*/ BYTE Unknown0x148; +/*0x229*/ BYTE Unknown0x149[0x3f]; +/*0x268*/ DWORD Unknown0x188; +/*0x26c*/ DWORD Unknown0x18c; +/*0x270*/ struct _CXSTR *CommandHistory[0x28]; // ->0x198 +/*0x310*/ DWORD Unknown0x230; // CChatWindow::HistoryBack/forward .. maybe total or current history lines +/*0x314*/ DWORD Unknown0x234; // CChatWindow::HistoryBack/forward .. maybe total or current history lines +/*0x318*/ DWORD FontSize; +/*0x268*/ DWORD Unknown0x23C; +/*0x26c*/ +} EQCHATWINDOW, *PEQCHATWINDOW; + +// in CChatWindow__CChatWindow +#define EQ_CHAT_HISTORY_OFFSET 0x288 +// in CChatWindow__SetChatFont +#define EQ_CHAT_FONT_OFFSET 0x114 + +// Actual size 0x1dc old +// Lax 10-24-2003 +typedef struct _EQBUFFWINDOW +{ +/*0x000*/ struct _CSIDLWND Wnd; +/*0x148*/ BYTE Unknown0x148[0x48]; +/*0x184*/ DWORD pBuff[0x0f]; // CButton* +/*0x1C0*/ DWORD Unknown0x1C0; +/*0x1C4*/ DWORD Unknown0x1C4; +/*0x1C8*/ DWORD Unknown0x1C8; +/*0x1CC*/ DWORD Unknown0x1CC; +/*0x1D0*/ DWORD FirstEffectSlot; //0-15 +/*0x1D4*/ DWORD LastEffectSlot; //0-15 +/*0x1D8*/ DWORD MaxBuffs; // either 0x0F or 0x06 (normal or shortbuffs) +/*0x1DC*/ +} EQBUFFWINDOW, *PEQBUFFWINDOW; + +// actual size 0x294 20120316 - ieatacid +typedef struct _EQINVSLOTWND { +/*0x000*/ struct _CXWND Wnd; //----/ actually CButtonWnd +/*0x1d4*/ BYTE Unknown0x1d4[0x88]; //___/ +/*0x25c*/ DWORD Unknown0x25c; +/*0x260*/ LONG WindowType; // ieatacid has this as InventoryType + // 0 for inventory + // 01 for bank + // 02 for shared bank + // 03 for trader window + // 04 for World/Tradeskill/Combine + // 11 for loot window +/*0x264*/ WORD InvSlotForBag; +/*0x266*/ WORD BagSlot; +/*0x268*/ BYTE Unknown0x268[0x20]; +/*0x288*/ struct _EQINVSLOT *pInvSlot; +/*0x28c*/ BOOL ProcessClick; +/*0x290*/ +} EQINVSLOTWND, *PEQINVSLOTWND; + +// actual size 0x14 10-12-2010 +typedef struct _EQINVSLOT { +/*0x00*/ LPVOID pvfTable; // not based on cxwnd +/*0x04*/ struct _EQINVSLOTWND *pInvSlotWnd; +/*0x08*/ DWORD Unknown0x08; +/*0x0C*/ DWORD InvSlot; +/*0x10*/ BYTE Valid; +/*0x11*/ BYTE Unknown0x11[3]; +/*0x14*/ +} EQINVSLOT, *PEQINVSLOT; + +// actual size 0x2014 10-12-2010 +typedef struct _EQINVSLOTMGR { +/*0x0000*/ DWORD Unknown0x0000; +/*0x0004*/ struct _EQINVSLOT *SlotArray[0x800]; +/*0x2004*/ DWORD TotalSlots; +/*0x2008*/ DWORD Unknown0x2008; +/*0x200c*/ struct _EQINVSLOT *pSelectedItem; +/*0x2010*/ DWORD Unknown0x2010; +/*0x2014*/ +} EQINVSLOTMGR, *PEQINVSLOTMGR; + + +// onetimehero 09-17-03 +// ContainerWindow +// Actual Size 0x17C old +typedef struct _EQCONTAINERWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x148*/ struct _CONTENTS* pContents; // Pointer to the contents of the container; + // Matches the pointer in CHARINFO.Inventory/Bank/World +/*0x14c*/ struct _CSIDLWND* pSlots[0x0a]; +/*0x000*/ struct _CSIDLWND* pCombine; +/*0x168*/ struct _CSIDLWND* pDone; +/*0x16c*/ struct _CSIDLWND* pIcon; +/*0x170*/ struct _CSIDLWND* pUnknown; +/*0x174*/ struct _CSIDLWND* pLabel; +/*0x178*/ BYTE Unknown0x178[4]; +/*0x17c*/ +} EQCONTAINERWINDOW, *PEQCONTAINERWINDOW; + +// Actual Size 0x98 03/15/06 +typedef struct _EQ_CONTAINERWND_MANAGER { +/*0x000*/ DWORD pvfTable; // NOT based on CXWnd. Contains only destructor +/*0x004*/ PEQCONTAINERWINDOW pPCContainers[0x22]; // All open containers, including World, in order of opening... +/*0x08c*/ PCONTENTS pWorldContents; // Pointer to the contents of the world If NULL, world container isn't open; +/*0x090*/ DWORD dwWorldContainerID; // ID of container in zone, starts at one (zero?) and goes up. +/*0x094*/ DWORD dwTimeSpentWithWorldContainerOpen; // Cumulative counter? +/*0x078*/ +} EQ_CONTAINERWND_MANAGER, *PEQ_CONTAINERWND_MANAGER; + +typedef struct _POINT3 { + FLOAT X; + FLOAT Y; + FLOAT Z; +} POINT3, *PPOINT3; + +// plazmic 08-17-03 +// Map Window +typedef struct _MAPLABEL { // sizeof() = 0x38 +/*0x00*/ DWORD Unknown0x0; +/*0x04*/ struct _MAPLABEL *pNext; +/*0x08*/ struct _MAPLABEL *pPrev; +/*0x0c*/ POINT3 Location; +/*0x18*/ ARGBCOLOR Color; +/*0x1c*/ DWORD Size; //1-3; +/*0x20*/ PCHAR Label; +/*0x24*/ DWORD Layer; //0-3; +/*0x28*/ DWORD Width; +/*0x2c*/ DWORD Height; +/*0x30*/ DWORD unk_0x2c; +/*0x34*/ DWORD unk_0x30; +} MAPLABEL, *PMAPLABEL; + +typedef struct _MAPLINE { // sizeof() = 0x28 (think this might be 0x34 now) + struct _MAPLINE *pNext; + struct _MAPLINE *pPrev; + POINT3 Start; + POINT3 End; + ARGBCOLOR Color; + DWORD Layer; //0-3; +} MAPLINE, *PMAPLINE; + +// size 0x3a8 20130514 - eqmule +typedef struct _EQLOOTWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x220*/ void *vftable; // for CLootWnd::DialogResponse handler +/*0x224*/ BYTE Unknown0x224[0x9c]; +/*0x2c0*/ DWORD NumOfSlots; +/*0x2c4*/ DWORD Unknown0x2c4; +/*0x2c8*/ struct _INVENTORYARRAY *pInventoryArray; +/*0x2cc*/ DWORD NumOfSlots2; +/*0x2d0*/ DWORD NumOfSlots3; +/*0x2d4*/ BYTE Unknown0x2d4[0x24]; +/*0x2f8*/ BYTE Unknown0x2f8; +/*0x2f9*/ BYTE Unknown0x2f9; +/*0x2fa*/ BYTE Unknown0x2fa; +/*0x2fb*/ BYTE Unknown0x2fb; +/*0x2fc*/ struct _CSIDLWND *CLoot_LootInvWnd; +/*0x300*/ struct _CSILDWND *CLoot_LootSlotWnd[0x22]; +/*0x388*/ struct _CSIDLWND *CLoot_CorpseName; +/*0x38c*/ struct _CSIDLWND *CLoot_DoneButton; +/*0x390*/ struct _CSIDLWND *CLoot_BroadcastButton; +/*0x394*/ struct _CSIDLWND *CLoot_LootAllButton; +/*0x398*/ BYTE Unknown0x398[0x10]; +/*0x3a8*/ +} EQLOOTWINDOW, *PEQLOOTWINDOW; + +//Size: 0x920 20130514 - ieatacid +typedef struct _EQPETINFOWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x220*/ BYTE Unknown0x21c[0x14]; +/*0x234*/ struct _CBUTTONWND *pButton[0xe]; +/*0x26c*/ BYTE Unknown0x26c[0x1dc]; +/*0x448*/ struct _CSIDLWND *pWnd[NUM_BUFF_SLOTS]; // buff icons? +/*0x5cc*/ int Buff[NUM_BUFF_SLOTS]; // Spell ID# of each buff -- 85 total +/*0x750*/ BYTE Unknown0x750[0x20]; +/*0x770*/ DWORD BuffFadeETA[NUM_BUFF_SLOTS]; // duration until buff fades, in thousands of a second +/*0x8f4*/ BYTE Unknown0x8f4[0x2c]; +/*0x920*/ +} EQPETINFOWINDOW, *PEQPETINFOWINDOW; + +typedef struct _EQTRADESKILLRECIPE { +/*0x00*/ DWORD Unknown0x00; +/*0x04*/ DWORD Trivial; +/*0x08*/ DWORD Unknown0x08; +/*0x0c*/ DWORD Unknown0x0c; +/*0x10*/ DWORD Unknown0x10; +/*0x14*/ CHAR Name[0x40]; +/*0x54*/ DWORD Unknown0x54; +/*0x58*/ DWORD Ingredient[0xa]; // ID# of ingredient(s) +/*0x80*/ DWORD IngredientIcon[0xa]; //Icon# of ingredient(s) (Note: 499 is blank) +} EQTRADESKILLRECIPE, *PEQTRADESKILLRECIPE; + +//Size 0x3d8 (02/10/2004) +typedef struct _EQTRADESKILLWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x148*/ DWORD Unknown0x148[0x1b]; +/*0x1b4*/ PEQTRADESKILLRECIPE SearchResults[0x64]; +/*0x344*/ DWORD Unknown0x344; +/*0x348*/ DWORD Unknown0x348; +/*0x34c*/ DWORD Unknown0x34c; +/*0x350*/ PCONTENTS Container; +/*0x354*/ DWORD Unknown0x354; +/*0x358*/ PEQTRADESKILLRECIPE SelectedRecipe; +/*0x35c*/ DWORD Unknown0x35c; +/*0x360*/ DWORD SkillLevel; +/*0x364*/ DWORD Unknown0x364; +/*0x368*/ DWORD Unknown0x368; +/*0x36c*/ BYTE Unknown0x36c[0x58]; +/*0x3c4*/ DWORD Unknown0x3c4; +/*0x3c8*/ DWORD Unknown0x3c8; +/*0x3cc*/ BYTE Unknonw0x3cc[0x8]; +/*0x3d4*/ DWORD Unknown0x3d4; +/*0x3d8*/ DWORD Unknown0x3d8; +} EQTRADESKILLWINDOW, *PTRADESKILLWINDOW; + +//Actual Size 0x308 - 20130514 - eqmule +typedef struct _EQTRADEWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x220*/ BYTE Unknown0x220[0xd8]; +/*0x2f8*/ BYTE HisTradeReady; +/*0x2f9*/ BYTE MyTradeReady; +/*0x300*/ BYTE TradeWndOpen; +/*0x301*/ BYTE Unknown0x301[0x7]; +/*0x308*/ +} EQTRADEWINDOW, *PTRADEWINDOW; + +//Actual Size: 0x388 20121016 - ieatacid +typedef struct _EQRAIDWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x214*/ BYTE Unknown0x214[0xb8]; +/*0x2cc*/ DWORD ClassColors[0x10]; +/*0x30c*/ BYTE Unknown0x30c[0x7c]; +/*0x388*/ +} EQRAIDWINDOW, *PEQRAIDWINDOW; + +typedef struct _GUILDMEMBERINFO { +/*0x000*/ DWORD Unknown0x000; //pointer? +/*0x004*/ BYTE OnlineStatus; // 00=offline, 01=online +/*0x005*/ BYTE UnknownData0x005; +/*0x006*/ BYTE UnknownData0x006; +/*0x007*/ BYTE Unknown0x007; +/*0x008*/ BYTE Unknown0x008[0x8]; +/*0x010*/ CHAR Name[0x40]; +/*0x050*/ DWORD Level; +/*0x054*/ DWORD Class; +/*0x058*/ DWORD Rank; //0=member, 1=officer, 2=leader +/*0x05c*/ FLOAT UnknownData0x05c; +/*0x060*/ CHAR PublicNote[0x80]; +/*0x0e0*/ BYTE Unknown0x0e0[0x180]; +/*0x260*/ WORD UnknownData0x260; +/*0x262*/ WORD UnknownData0x262; +/*0x264*/ WORD UnknownData0x264; +/*0x266*/ WORD UnknownData0x266; +} GUILDMEMBERINFO, *PGUILDMEMBERINFO; + +//Size: 0x3d0 (02/18/2004) +typedef struct _EQGUILDWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x148*/ BYTE Unknown0x148[0x4c]; +/*0x194*/ BYTE Unknown0x194; +/*0x195*/ BYTE ShowOffline; // 01 = show offline box is checked +/*0x196*/ BYTE Unknown0x196[0x2]; +/*0x198*/ struct _GUILDMEMBERINFO **pMember; // This is a pointer to the beginning of a list of pointers, + // each representing one player in the guild. The number of + // pointers depends upon TotalMemberCount. +/*0x19c*/ DWORD TotalMemberCount; +/*0x1a0*/ DWORD Unknown0x1a0; // 150? +/*0x1a4*/ DWORD Unknown0x1a4; // 1? +/*0x1a8*/ DWORD TotalMemberCountAgain; +/*0x1ac*/ BYTE Unknown0x1ac[0x1c]; +/*0x1c8*/ CHAR PersonalNotesFilePath[0x40]; // path to personal notes file +/*0x208*/ BYTE Unknown0x208[0x1c0]; // empty +/*0x3c8*/ DWORD Unknown0x3c8; // 1? +/*0x3cc*/ DWORD Unknown0x3cc; // some sort of bizaare pointer... +/*0x3d0*/ +} EQGUILDWINDOW, *PEQGUILDWINDOW; + +typedef struct _EQNOTESWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x148*/ BYTE Unknown0x148[0x04]; +/*0x14c*/ struct _CSIDLWND *pEditWnd; +} EQNOTESWINDOW, *PEQNOTESWINDOW; + +// Lax 10-29-2003 +// Actual size 0x5dc 20121212 - ieatacid +typedef struct _EQITEMWINDOW +{ +/*0x000*/ struct _CSIDLWND Wnd; +/*0x21c*/ struct _CSIDLWND *DisplayWnd; +/*0x220*/ BYTE Unknown0x220[0x70]; +/*0x290*/ PCXSTR ItemInfo; +/*0x294*/ PCXSTR WindowTitle; +/*0x298*/ PCXSTR Unknown0x298; // possibly PCXSTR of information as on charms +/*0x29c*/ DWORD Unknown0x29c; +/*0x2a0*/ DWORD Unknown0x2a0; +/*0x2a4*/ PCXSTR UnknownCXStr; // if this is NULL don't populate item data in MQ2ItemDisplay +/*0x2a8*/ PCXSTR Unknown0x2a8; +/*0x2ac*/ PCONTENTS pItem; +/*0x29c*/ PVOID TextureAnim; +/*0x2a0*/ PVOID TextureAnim2; +/*0x2a4*/ BYTE Unknown0x2a4[0x4c]; +/*0x2f0*/ DWORD IDW_ItemInfo_Num_Lines; +/*0x2f4*/ struct _CSIDLWND *IDW_ItemInfo[0xc]; +// pointers to stat labels, etc, in this area +} EQITEMWINDOW, *PEQITEMWINDOW; + +// Actual size 0x1c8 07-09-2008 +typedef struct _EQSPELLINFOWINDOW +{ +/*0x000*/ struct _CSIDLWND Wnd; +/*0x208*/ PVOID Unknown0x190; +/*0x20c*/ PVOID Unknown0x194; +/*0x210*/ struct _CSIDLWND *DisplayWnd; +/*0x214*/ PVOID Unknown0x19c; +/*0x218*/ PVOID Unknown0x1a0; +/*0x21c*/ PCXSTR ItemInfo; +/*0x220*/ PVOID Unknown0x1a8; +/*0x224*/ DWORD Unknown0x1ac; +/*0x228*/ DWORD Unknown0x1b0; +/*0x22c*/ DWORD Unknown0x1b4; +/*0x230*/ DWORD Unknown0x1b8; +/*0x234*/ PVOID TextureAnim; +/*0x238*/ DWORD SpellID; +/*0x23c*/ DWORD TimeStamp; +/*0x240*/ +} EQSPELLINFOWINDOW, *PEQSPELLINFOWINDOW; + +// Size: 0x1a4 (4/14/2005) +typedef struct _EQMAILWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x158 Finish... */ +} EQMAILWINDOW, *PEQMAILWINDOW; + + +// Actual Size 0x624 20130514 - ieatacid/eqmule +typedef struct _EQMAPWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x220*/ BYTE Unknown0x220[0x40]; +/*0x260*/ CHAR shortzonename[0x20]; +/*0x280*/ BYTE Unknown0x280[0x9c]; +/*0x31c*/ struct _CXWND *wnd; // MVW_MapRenderArea +/*0x320*/ BYTE Unknown0x320[0x38]; +/*0x358*/ struct _CSIDLWNDVFTABLE *pMapViewMapVfTable; // start of MapViewMap +/*0x35c*/ BYTE Unknown0x35c[0x24c]; +/*0x5a8*/ PMAPLINE pLines; //0x250 +/*0x5ac*/ PMAPLABEL pLabels; //0x254 +/*0x5b0*/ BYTE Unknown0x5b0[0x74]; +/*0x624*/ +} EQMAPWINDOW, *PEQMAPWINDOW; + +// ieatacid 20120316 +// Spell Window +typedef struct _EQCASTSPELLWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x214*/ BYTE Unknown0x214[0x14]; +/*0x228*/ struct _EQCASTSPELLGEM *SpellSlots[NUM_SPELL_GEMS]; +/*0x258*/ BYTE Unknown0x258[0x30]; +/*0x288*/ +} EQCASTSPELLWINDOW, *PEQCASTSPELLWINDOW; + +// Individual Gems +typedef struct _EQCASTSPELLGEM { +/*0x000*/ struct _CXWND Wnd; +/*0x1cc*/ BYTE Unknown0x1cc[0x44]; +/*0x210*/ DWORD TimeStamp; +/*0x214*/ DWORD RecastTime; +/*0x218*/ BYTE Unknown0x218[0xa8]; +/*0x2c0*/ DWORD spellicon; //if this is equal to FFFFFFFF there is no spell memmed in this slot... +/*0x2c4*/ DWORD spellstate; // 1 = cast in progress or refreshtime not met 2 means we ducked or aborted cast, 0 means its ok to cast +/*0x2c8*/ BYTE Unknown0x2c8[0x18]; +/*0x2e0*/ +} EQCASTSPELLGEM, *PEQCASTSPELLGEM; +#define Fly 0 + +// Actual size 0x1c4 10-9-2003 +typedef struct _EQHOTBUTTONWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x148*/ BYTE Unknown0x138[0xc]; +/*0x000*/ DWORD HotButtonWndView; //0 to 9 for the different views +/*0x14c*/ struct _CSIDLWND *HotButtons[0x0a];//these will change when you switch page... +/*0x174*/ +} EQHOTBUTTONWINDOW, *PEQHOTBUTTONWINDOW; + +typedef struct _LOOTCORPSE { +/*0x000*/ BYTE Unknown0x000; // 03 seems very common (for NPC anyway) +/*0x001*/ CHAR Name[0x4b]; +/*0x04c*/ FLOAT Timer; //Uncertain the equation used here, but fairly certain it's the timer +/*0x050*/ FLOAT X; +/*0x054*/ BYTE Unknown0x054[0x4]; +/*0x058*/ FLOAT Y; +/*0x05c*/ FLOAT Z; +/*0x060*/ BYTE Unknown0x060[0x24]; +/*0x084*/ DWORD Flags; +/*0x088*/ BYTE Unknown0x088[0x4]; +/*0x08c*/ DWORD Unknown0x08c; //256 seems very common +/*0x090*/ +// I think there might be pointers at 0x0e0..but no clue what to +} LOOTCORPSE, *PLOOTCORPSE; + +// size 0x180 3-10-2004 +typedef struct _EQCOMPASSWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x148*/ struct _CSIDLWND *pStrip1; +/*0x14C*/ struct _CSIDLWND *pStrip2; +// in progress. +/*0x16C*/ BOOL DrawLine; +/*0x170*/ DWORD Unknown0x170; +/*0x174*/ DWORD LineRed; +/*0x178*/ DWORD LineGreen; +/*0x17C*/ DWORD LineBlue; +/*0x180*/ +} EQCOMPASSWINDOW, *PEQCOMPASSWINDOW; + +// used by options window +typedef struct _EQKBASSIGN +{ +/*0x00*/ struct _CXSTR *pDescription; +/*0x04*/ DWORD nAssignmentNumber; +/*0x08*/ +} EQKBASSIGN, *PEQKBASSIGN; + +// size 0x904 3-10-2004 +typedef struct _EQOPTIONSWINDOW { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x148*/ + +/*0x264*/ struct _EQKBASSIGN Binds[0xA1]; +/*0x508*/ + +/*0x904*/ +} EQOPTIONSWINDOW, *PEQOPTIONSWINDOW; + +// size 0x28 4-24-2004 Lax +typedef struct _EQGRAPHICSENGINE { +/*0x00*/ // Graphics file handler +/*0x04*/ +} EQGRAPHICSENGINE, *PEQGRAPHICSENGINE; +#define SafeXLoc 0 + +typedef struct _CBUTTONWND { +/*0x000*/ struct _CXWND Wnd; +/*0x1c4*/ BYTE Unknown[0x4]; +/*0x1c8*/ BYTE State; //1=down 0=up +/*0x1c9*/ BYTE Unknown0x1c9; //something to do with State +/*0x1ca*/ BYTE Unknown0x1ca[0x12]; +/*0x1dc*/ ARGBCOLOR Color; +/*0x1e0*/ +} CBUTTONWND, *PCBUTTONWND; + +typedef struct _CTEXTENTRYWND { +/*0x000*/ struct _CXWND Wnd; +/*0x1c4*/ DWORD CursorPos1; +/*0x13c*/ DWORD CursorPos2; //same as above but only this needs to be set to update cursor position +/*0x140*/ +} CTEXTENTRYWND, *PCTEXTENTRYWND; + +// size 0x2c8 20121128 - ieatacid +typedef struct _CPLAYERWND { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x214*/ BYTE Unknown[0xb0]; +/*0x2c4*/ DWORD CombatState; // 1=debuffed, 2=combat cooldown, 3=stand, 4=sit +/* more data */ +} CPLAYERWND, *PCPLAYERWND; + +// size 0x87c 20120316 - ieatacid +typedef struct _CTARGETWND { +/*0x000*/ struct _CSIDLWND Wnd; +/*0x208*/ BYTE Unknown0x198[0x198]; +/*0x3a0*/ struct _CBUTTONWND *pBuff[NUM_BUFF_SLOTS]; // buff icons + +/*0x524*/ int BuffSpellID[NUM_BUFF_SLOTS]; // 0xffffffff if no buff +/*0x6a8*/ DWORD BuffTimer[NUM_BUFF_SLOTS]; +/*0x82c*/ BYTE Unknown0x6f8[0x24]; +/*0x850*/ DWORD Type; // 1 = self, 4 = group member, 5 = PC, 7 = NPC +/*0x850*/ BYTE Unknown0x720[0x2c]; +/*0x87c*/ +} CTARGETWND, *PCTARGETWND; + +typedef struct _CLABELWND { +/*0x000*/ struct _CXWND Wnd; +/*0x1c4*/ BYTE Unknown[0x8]; +/*0x1cc*/ DWORD SidlPiece; +/*0x1d0*/ +} CLABELWND, *PCLABELWND; + +// size 0x92c8 20130417 - ieatacid +typedef struct _BAZAARSEARCHWND { +/*0x0000*/ struct _CSIDLWND Wnd; +/*0x022c*/ BYTE Unknown0x22c[0x8ff8]; +/*0x9224*/ void **ppTraderData; +/*0x9228*/ DWORD hashVal; +/* more data */ +} BAZAARSEARCHWND, *PBAZAARSEARCHWND; + +}; + +using namespace EQUIStructs; diff --git a/client_files/native_autoloot/eq-core-dll/src/EQUtils.cpp b/client_files/native_autoloot/eq-core-dll/src/EQUtils.cpp new file mode 100644 index 0000000000..b157733451 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/EQUtils.cpp @@ -0,0 +1,15 @@ +#include "EQUtils.h" + +void PatchBytes( void * lpAddress, const char * szBytes, int nLen ) +{ + // Needed by VirtualProtect. + DWORD dwBack = 0; + VirtualProtect( lpAddress, nLen, PAGE_READWRITE, &dwBack ); + + // Write Byte-After-Byte. + for( int i = 0; i < nLen; i++ ) + *( BYTE * )( ( DWORD )lpAddress + i ) = szBytes[ i ]; + + // Restore old protection. + VirtualProtect( lpAddress, nLen, dwBack, &dwBack ); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/EQUtils.h b/client_files/native_autoloot/eq-core-dll/src/EQUtils.h new file mode 100644 index 0000000000..0f45830cbd --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/EQUtils.h @@ -0,0 +1,6 @@ +#ifndef EQ_U_H +#define EQ_U_H +#include + +void PatchBytes( void * lpAddress, const char * szBytes, int nLen ); +#endif \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/src/FPSLimit.cpp b/client_files/native_autoloot/eq-core-dll/src/FPSLimit.cpp new file mode 100644 index 0000000000..e69de29bb2 diff --git a/client_files/native_autoloot/eq-core-dll/src/IClassFactory.cpp b/client_files/native_autoloot/eq-core-dll/src/IClassFactory.cpp new file mode 100644 index 0000000000..97851522ea --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IClassFactory.cpp @@ -0,0 +1,80 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "dinput8.h" + +/************************/ +/*** IUnknown methods ***/ +/************************/ + +HRESULT m_IClassFactory::QueryInterface(REFIID riid, LPVOID FAR * ppvObj) +{ + if ((riid == IID_IClassFactory || riid == IID_IUnknown) && ppvObj) + { + AddRef(); + + *ppvObj = this; + + return S_OK; + } + + HRESULT hr = ProxyInterface->QueryInterface(riid, ppvObj); + + if (SUCCEEDED(hr)) + { + genericQueryInterface(riid, ppvObj); + } + + return hr; +} + +ULONG m_IClassFactory::AddRef() +{ + return ProxyInterface->AddRef(); +} + +ULONG m_IClassFactory::Release() +{ + ULONG ref = ProxyInterface->Release(); + + if (ref == 0) + { + delete this; + } + + return ref; +} + +/*****************************/ +/*** IClassFactory methods ***/ +/*****************************/ + +HRESULT m_IClassFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject) +{ + HRESULT hr = ProxyInterface->CreateInstance(pUnkOuter, riid, ppvObject); + + if (SUCCEEDED(hr)) + { + genericQueryInterface(riid, ppvObject); + } + + return hr; +} + +HRESULT m_IClassFactory::LockServer(BOOL fLock) +{ + return ProxyInterface->LockServer(fLock); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/IClassFactory.h b/client_files/native_autoloot/eq-core-dll/src/IClassFactory.h new file mode 100644 index 0000000000..6910989719 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IClassFactory.h @@ -0,0 +1,26 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN +#include + +typedef void(WINAPI *IQueryInterfaceProc)(REFIID, LPVOID *); + +class m_IClassFactory : public IClassFactory +{ +private: + IClassFactory *ProxyInterface; + REFIID WrapperID = IID_IClassFactory; + +public: + m_IClassFactory(IClassFactory *aOriginal) : ProxyInterface(aOriginal) {} + ~m_IClassFactory() {} + + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR * ppvObj); + STDMETHOD_(ULONG, AddRef) (THIS); + STDMETHOD_(ULONG, Release) (THIS); + + /*** IClassFactory methods ***/ + STDMETHOD(CreateInstance)(IUnknown *pUnkOuter, REFIID riid, void **ppvObject); + STDMETHOD(LockServer)(BOOL fLock); +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInput8A.cpp b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8A.cpp new file mode 100644 index 0000000000..e9cc8c7256 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8A.cpp @@ -0,0 +1,111 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "dinput8.h" + +HRESULT m_IDirectInput8A::QueryInterface(REFIID riid, LPVOID * ppvObj) +{ + if ((riid == IID_IDirectInput8A || riid == IID_IUnknown) && ppvObj) + { + AddRef(); + + *ppvObj = this; + + return S_OK; + } + + HRESULT hr = ProxyInterface->QueryInterface(riid, ppvObj); + + if (SUCCEEDED(hr)) + { + genericQueryInterface(riid, ppvObj); + } + + return hr; +} + +ULONG m_IDirectInput8A::AddRef() +{ + return ProxyInterface->AddRef(); +} + +ULONG m_IDirectInput8A::Release() +{ + ULONG ref = ProxyInterface->Release(); + + if (ref == 0) + { + delete this; + } + + return ref; +} + +HRESULT m_IDirectInput8A::CreateDevice(REFGUID rguid, LPDIRECTINPUTDEVICE8A *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) +{ + HRESULT hr = ProxyInterface->CreateDevice(rguid, lplpDirectInputDevice, pUnkOuter); + + if (SUCCEEDED(hr) && lplpDirectInputDevice) + { + *lplpDirectInputDevice = ProxyAddressLookupTable.FindAddress(*lplpDirectInputDevice); + } + + return hr; +} + +HRESULT m_IDirectInput8A::EnumDevices(DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) +{ + return ProxyInterface->EnumDevices(dwDevType, lpCallback, pvRef, dwFlags); +} + +HRESULT m_IDirectInput8A::GetDeviceStatus(REFGUID rguidInstance) +{ + return ProxyInterface->GetDeviceStatus(rguidInstance); +} + +HRESULT m_IDirectInput8A::RunControlPanel(HWND hwndOwner, DWORD dwFlags) +{ + return ProxyInterface->RunControlPanel(hwndOwner, dwFlags); +} + +HRESULT m_IDirectInput8A::Initialize(HINSTANCE hinst, DWORD dwVersion) +{ + return ProxyInterface->Initialize(hinst, dwVersion); +} + +HRESULT m_IDirectInput8A::FindDevice(REFGUID rguidClass, LPCSTR ptszName, LPGUID pguidInstance) +{ + return ProxyInterface->FindDevice(rguidClass, ptszName, pguidInstance); +} + +HRESULT m_IDirectInput8A::EnumDevicesBySemantics(LPCSTR ptszUserName, LPDIACTIONFORMATA lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBA lpCallback, LPVOID pvRef, DWORD dwFlags) +{ + if (!lpCallback) + { + return E_INVALIDARG; + } + + ENUMDEVICEA CallbackContext; + CallbackContext.pvRef = pvRef; + CallbackContext.lpCallback = lpCallback; + + return ProxyInterface->EnumDevicesBySemantics(ptszUserName, lpdiActionFormat, m_IDirectInputEnumDevice::EnumDeviceCallbackA, &CallbackContext, dwFlags); +} + +HRESULT m_IDirectInput8A::ConfigureDevices(LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) +{ + return ProxyInterface->ConfigureDevices(lpdiCallback, lpdiCDParams, dwFlags, pvRefData); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInput8A.h b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8A.h new file mode 100644 index 0000000000..82447ee9ae --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8A.h @@ -0,0 +1,34 @@ +#pragma once + +class m_IDirectInput8A : public IDirectInput8A, public AddressLookupTableObject +{ +private: + IDirectInput8A *ProxyInterface; + +public: + m_IDirectInput8A(IDirectInput8A *aOriginal) : ProxyInterface(aOriginal) + { + ProxyAddressLookupTable.SaveAddress(this, ProxyInterface); + } + ~m_IDirectInput8A() + { + ProxyAddressLookupTable.DeleteAddress(this); + } + + IDirectInput8A *GetProxyInterface() { return ProxyInterface; } + + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj); + STDMETHOD_(ULONG, AddRef)(THIS); + STDMETHOD_(ULONG, Release)(THIS); + + /*** IDirectInput8A methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID, LPDIRECTINPUTDEVICE8A *, LPUNKNOWN); + STDMETHOD(EnumDevices)(THIS_ DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID); + STDMETHOD(RunControlPanel)(THIS_ HWND, DWORD); + STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD); + STDMETHOD(FindDevice)(THIS_ REFGUID, LPCSTR, LPGUID); + STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCSTR, LPDIACTIONFORMATA, LPDIENUMDEVICESBYSEMANTICSCBA, LPVOID, DWORD); + STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK, LPDICONFIGUREDEVICESPARAMSA, DWORD, LPVOID); +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInput8Hook.cpp b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8Hook.cpp new file mode 100644 index 0000000000..3378bba1c5 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8Hook.cpp @@ -0,0 +1,76 @@ +#include "IDirectInput8Hook.h" + +IDirectInput8Hook::IDirectInput8Hook(IDirectInput8 * dinput) +{ + m_dinput = dinput; +} + +HRESULT STDMETHODCALLTYPE IDirectInput8Hook::QueryInterface(REFIID riid, LPVOID * ppvObj) +{ + return m_dinput->QueryInterface(riid, ppvObj); +} + +ULONG STDMETHODCALLTYPE IDirectInput8Hook::AddRef() +{ + return m_dinput->AddRef(); +} + +ULONG STDMETHODCALLTYPE IDirectInput8Hook::Release() +{ + ULONG uRet = m_dinput->Release(); + + if (uRet == 0) + // If the reference count is 0 delete ourselves + delete this; + + return uRet; +} + +HRESULT STDMETHODCALLTYPE IDirectInput8Hook::CreateDevice(REFGUID rguid, LPDIRECTINPUTDEVICE8A * lplpDirectInputDevice, LPUNKNOWN pUknOuter) +{ + OutputDebugString("CreateDevice Hook called\n"); + + // Create the dinput device + HRESULT hr = m_dinput->CreateDevice(rguid, lplpDirectInputDevice, pUknOuter); + + if (SUCCEEDED(hr)) + // Create the proxy device + *lplpDirectInputDevice = new IDirectInputDevice8Hook(this, *lplpDirectInputDevice, rguid); + + return hr; +} + +HRESULT STDMETHODCALLTYPE IDirectInput8Hook::EnumDevices(DWORD dwDevType, LPDIENUMDEVICESCALLBACK lpCallback, LPVOID pvRef, DWORD dwFlags) +{ + return m_dinput->EnumDevices(dwDevType, lpCallback, pvRef, dwFlags); +} + +HRESULT STDMETHODCALLTYPE IDirectInput8Hook::GetDeviceStatus(REFGUID rguidInstance) +{ + return m_dinput->GetDeviceStatus(rguidInstance); +} + +HRESULT STDMETHODCALLTYPE IDirectInput8Hook::RunControlPanel(HWND hwndOwner, DWORD dwFlags) +{ + return m_dinput->RunControlPanel(hwndOwner, dwFlags); +} + +HRESULT STDMETHODCALLTYPE IDirectInput8Hook::Initialize(HINSTANCE hinst, DWORD dwVersion) +{ + return m_dinput->Initialize(hinst, dwVersion); +} + +HRESULT STDMETHODCALLTYPE IDirectInput8Hook::FindDevice(REFGUID rguidClass, LPCSTR ptszName, LPGUID pguidInstance) +{ + return m_dinput->FindDevice(rguidClass, ptszName, pguidInstance); +} + +HRESULT STDMETHODCALLTYPE IDirectInput8Hook::EnumDevicesBySemantics(LPCSTR ptszUserName, LPDIACTIONFORMAT lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCB lpCallback, LPVOID pvRef, DWORD dwFlags) +{ + return m_dinput->EnumDevicesBySemantics(ptszUserName, lpdiActionFormat, lpCallback, pvRef, dwFlags); +} + +HRESULT STDMETHODCALLTYPE IDirectInput8Hook::ConfigureDevices(LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMS lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) +{ + return m_dinput->ConfigureDevices(lpdiCallback, lpdiCDParams, dwFlags, pvRefData); +} \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInput8Hook.h b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8Hook.h new file mode 100644 index 0000000000..77be4ccee1 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8Hook.h @@ -0,0 +1,27 @@ +#pragma once + +#include "IDirectInputDevice8Hook.h" + +class IDirectInput8Hook : public IDirectInput8 +{ +private: + IDirectInput8 * m_dinput; + +public: + IDirectInput8Hook(IDirectInput8 * dinput); + + /*** IUnknown methods ***/ + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID * ppvObj); + ULONG STDMETHODCALLTYPE AddRef(); + ULONG STDMETHODCALLTYPE Release(); + + /*** IDirectInput8A methods ***/ + HRESULT STDMETHODCALLTYPE CreateDevice(REFGUID rguid, LPDIRECTINPUTDEVICE8A * lplpDirectInputDevice, LPUNKNOWN pUknOuter); + HRESULT STDMETHODCALLTYPE EnumDevices(DWORD dwDevType, LPDIENUMDEVICESCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags); + HRESULT STDMETHODCALLTYPE GetDeviceStatus(REFGUID rguidInstance); + HRESULT STDMETHODCALLTYPE RunControlPanel(HWND hwndOwner, DWORD dwFlags); + HRESULT STDMETHODCALLTYPE Initialize(HINSTANCE hinst, DWORD dwVersion); + HRESULT STDMETHODCALLTYPE FindDevice(REFGUID rguidClass, LPCSTR ptszName, LPGUID pguidInstance); + HRESULT STDMETHODCALLTYPE EnumDevicesBySemantics(LPCSTR ptszUserName, LPDIACTIONFORMATA lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBA lpCallback, LPVOID pvRef, DWORD dwFlags); + HRESULT STDMETHODCALLTYPE ConfigureDevices(LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSA lpdiCDParams, DWORD dwFlags, LPVOID pvRefData); +}; \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInput8W.cpp b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8W.cpp new file mode 100644 index 0000000000..db2a007274 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8W.cpp @@ -0,0 +1,111 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "dinput8.h" + +HRESULT m_IDirectInput8W::QueryInterface(REFIID riid, LPVOID * ppvObj) +{ + if ((riid == IID_IDirectInput8W || riid == IID_IUnknown) && ppvObj) + { + AddRef(); + + *ppvObj = this; + + return S_OK; + } + + HRESULT hr = ProxyInterface->QueryInterface(riid, ppvObj); + + if (SUCCEEDED(hr)) + { + genericQueryInterface(riid, ppvObj); + } + + return hr; +} + +ULONG m_IDirectInput8W::AddRef() +{ + return ProxyInterface->AddRef(); +} + +ULONG m_IDirectInput8W::Release() +{ + ULONG ref = ProxyInterface->Release(); + + if (ref == 0) + { + delete this; + } + + return ref; +} + +HRESULT m_IDirectInput8W::CreateDevice(REFGUID rguid, LPDIRECTINPUTDEVICE8W *lplpDirectInputDevice, LPUNKNOWN pUnkOuter) +{ + HRESULT hr = ProxyInterface->CreateDevice(rguid, lplpDirectInputDevice, pUnkOuter); + + if (SUCCEEDED(hr) && lplpDirectInputDevice) + { + *lplpDirectInputDevice = ProxyAddressLookupTable.FindAddress(*lplpDirectInputDevice); + } + + return hr; +} + +HRESULT m_IDirectInput8W::EnumDevices(DWORD dwDevType, LPDIENUMDEVICESCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) +{ + return ProxyInterface->EnumDevices(dwDevType, lpCallback, pvRef, dwFlags); +} + +HRESULT m_IDirectInput8W::GetDeviceStatus(REFGUID rguidInstance) +{ + return ProxyInterface->GetDeviceStatus(rguidInstance); +} + +HRESULT m_IDirectInput8W::RunControlPanel(HWND hwndOwner, DWORD dwFlags) +{ + return ProxyInterface->RunControlPanel(hwndOwner, dwFlags); +} + +HRESULT m_IDirectInput8W::Initialize(HINSTANCE hinst, DWORD dwVersion) +{ + return ProxyInterface->Initialize(hinst, dwVersion); +} + +HRESULT m_IDirectInput8W::FindDevice(REFGUID rguidClass, LPCWSTR ptszName, LPGUID pguidInstance) +{ + return ProxyInterface->FindDevice(rguidClass, ptszName, pguidInstance); +} + +HRESULT m_IDirectInput8W::EnumDevicesBySemantics(LPCWSTR ptszUserName, LPDIACTIONFORMATW lpdiActionFormat, LPDIENUMDEVICESBYSEMANTICSCBW lpCallback, LPVOID pvRef, DWORD dwFlags) +{ + if (!lpCallback) + { + return E_INVALIDARG; + } + + ENUMDEVICEW CallbackContext; + CallbackContext.pvRef = pvRef; + CallbackContext.lpCallback = lpCallback; + + return ProxyInterface->EnumDevicesBySemantics(ptszUserName, lpdiActionFormat, m_IDirectInputEnumDevice::EnumDeviceCallbackW, &CallbackContext, dwFlags); +} + +HRESULT m_IDirectInput8W::ConfigureDevices(LPDICONFIGUREDEVICESCALLBACK lpdiCallback, LPDICONFIGUREDEVICESPARAMSW lpdiCDParams, DWORD dwFlags, LPVOID pvRefData) +{ + return ProxyInterface->ConfigureDevices(lpdiCallback, lpdiCDParams, dwFlags, pvRefData); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInput8W.h b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8W.h new file mode 100644 index 0000000000..b0cec33fb1 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInput8W.h @@ -0,0 +1,34 @@ +#pragma once + +class m_IDirectInput8W : public IDirectInput8W, public AddressLookupTableObject +{ +private: + IDirectInput8W *ProxyInterface; + +public: + m_IDirectInput8W(IDirectInput8W *aOriginal) : ProxyInterface(aOriginal) + { + ProxyAddressLookupTable.SaveAddress(this, ProxyInterface); + } + ~m_IDirectInput8W() + { + ProxyAddressLookupTable.DeleteAddress(this); + } + + IDirectInput8W *GetProxyInterface() { return ProxyInterface; } + + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj); + STDMETHOD_(ULONG, AddRef)(THIS); + STDMETHOD_(ULONG, Release)(THIS); + + /*** IDirectInput8W methods ***/ + STDMETHOD(CreateDevice)(THIS_ REFGUID, LPDIRECTINPUTDEVICE8W *, LPUNKNOWN); + STDMETHOD(EnumDevices)(THIS_ DWORD, LPDIENUMDEVICESCALLBACKW, LPVOID, DWORD); + STDMETHOD(GetDeviceStatus)(THIS_ REFGUID); + STDMETHOD(RunControlPanel)(THIS_ HWND, DWORD); + STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD); + STDMETHOD(FindDevice)(THIS_ REFGUID, LPCWSTR, LPGUID); + STDMETHOD(EnumDevicesBySemantics)(THIS_ LPCWSTR, LPDIACTIONFORMATW, LPDIENUMDEVICESBYSEMANTICSCBW, LPVOID, DWORD); + STDMETHOD(ConfigureDevices)(THIS_ LPDICONFIGUREDEVICESCALLBACK, LPDICONFIGUREDEVICESPARAMSW, DWORD, LPVOID); +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8A.cpp b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8A.cpp new file mode 100644 index 0000000000..4a33fc747f --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8A.cpp @@ -0,0 +1,216 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "dinput8.h" + +HRESULT m_IDirectInputDevice8A::QueryInterface(REFIID riid, LPVOID * ppvObj) +{ + if ((riid == IID_IDirectInputDevice8A || riid == IID_IUnknown) && ppvObj) + { + AddRef(); + + *ppvObj = this; + + return S_OK; + } + + HRESULT hr = ProxyInterface->QueryInterface(riid, ppvObj); + + if (SUCCEEDED(hr)) + { + genericQueryInterface(riid, ppvObj); + } + + return hr; +} + +ULONG m_IDirectInputDevice8A::AddRef() +{ + return ProxyInterface->AddRef(); +} + +ULONG m_IDirectInputDevice8A::Release() +{ + ULONG ref = ProxyInterface->Release(); + + if (ref == 0) + { + delete this; + } + + return ref; +} + +HRESULT m_IDirectInputDevice8A::GetCapabilities(LPDIDEVCAPS lpDIDevCaps) +{ + return ProxyInterface->GetCapabilities(lpDIDevCaps); +} + +HRESULT m_IDirectInputDevice8A::EnumObjects(LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwFlags) +{ + return ProxyInterface->EnumObjects(lpCallback, pvRef, dwFlags); +} + +HRESULT m_IDirectInputDevice8A::GetProperty(REFGUID rguidProp, LPDIPROPHEADER pdiph) +{ + return ProxyInterface->GetProperty(rguidProp, pdiph); +} + +HRESULT m_IDirectInputDevice8A::SetProperty(REFGUID rguidProp, LPCDIPROPHEADER pdiph) +{ + return ProxyInterface->SetProperty(rguidProp, pdiph); +} + +HRESULT m_IDirectInputDevice8A::Acquire() +{ + return ProxyInterface->Acquire(); +} + +HRESULT m_IDirectInputDevice8A::Unacquire() +{ + return ProxyInterface->Unacquire(); +} + +HRESULT m_IDirectInputDevice8A::GetDeviceState(DWORD cbData, LPVOID lpvData) +{ + return ProxyInterface->GetDeviceState(cbData, lpvData); +} + +HRESULT m_IDirectInputDevice8A::GetDeviceData(DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) +{ + return ProxyInterface->GetDeviceData(cbObjectData, rgdod, pdwInOut, dwFlags); +} + +HRESULT m_IDirectInputDevice8A::SetDataFormat(LPCDIDATAFORMAT lpdf) +{ + return ProxyInterface->SetDataFormat(lpdf); +} + +HRESULT m_IDirectInputDevice8A::SetEventNotification(HANDLE hEvent) +{ + return ProxyInterface->SetEventNotification(hEvent); +} + +HRESULT m_IDirectInputDevice8A::SetCooperativeLevel(HWND hwnd, DWORD dwFlags) +{ + return ProxyInterface->SetCooperativeLevel(hwnd, dwFlags); +} + +HRESULT m_IDirectInputDevice8A::GetObjectInfo(LPDIDEVICEOBJECTINSTANCEA pdidoi, DWORD dwObj, DWORD dwHow) +{ + return ProxyInterface->GetObjectInfo(pdidoi, dwObj, dwHow); +} + +HRESULT m_IDirectInputDevice8A::GetDeviceInfo(LPDIDEVICEINSTANCEA pdidi) +{ + return ProxyInterface->GetDeviceInfo(pdidi); +} + +HRESULT m_IDirectInputDevice8A::RunControlPanel(HWND hwndOwner, DWORD dwFlags) +{ + return ProxyInterface->RunControlPanel(hwndOwner, dwFlags); +} + +HRESULT m_IDirectInputDevice8A::Initialize(HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) +{ + return ProxyInterface->Initialize(hinst, dwVersion, rguid); +} + +HRESULT m_IDirectInputDevice8A::CreateEffect(REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT * ppdeff, LPUNKNOWN punkOuter) +{ + HRESULT hr = ProxyInterface->CreateEffect(rguid, lpeff, ppdeff, punkOuter); + + if (SUCCEEDED(hr) && ppdeff) + { + *ppdeff = ProxyAddressLookupTable.FindAddress(*ppdeff); + } + + return hr; +} + +HRESULT m_IDirectInputDevice8A::EnumEffects(LPDIENUMEFFECTSCALLBACKA lpCallback, LPVOID pvRef, DWORD dwEffType) +{ + return ProxyInterface->EnumEffects(lpCallback, pvRef, dwEffType); +} + +HRESULT m_IDirectInputDevice8A::GetEffectInfo(LPDIEFFECTINFOA pdei, REFGUID rguid) +{ + return ProxyInterface->GetEffectInfo(pdei, rguid); +} + +HRESULT m_IDirectInputDevice8A::GetForceFeedbackState(LPDWORD pdwOut) +{ + return ProxyInterface->GetForceFeedbackState(pdwOut); +} + +HRESULT m_IDirectInputDevice8A::SendForceFeedbackCommand(DWORD dwFlags) +{ + return ProxyInterface->SendForceFeedbackCommand(dwFlags); +} + +HRESULT m_IDirectInputDevice8A::EnumCreatedEffectObjects(LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) +{ + if (!lpCallback) + { + return E_INVALIDARG; + } + + ENUMEFFECT CallbackContext; + CallbackContext.pvRef = pvRef; + CallbackContext.lpCallback = lpCallback; + + return ProxyInterface->EnumCreatedEffectObjects(m_IDirectInputEnumEffect::EnumEffectCallback, &CallbackContext, fl); +} + +HRESULT m_IDirectInputDevice8A::Escape(LPDIEFFESCAPE pesc) +{ + return ProxyInterface->Escape(pesc); +} + +HRESULT m_IDirectInputDevice8A::Poll() +{ + return ProxyInterface->Poll(); +} + +HRESULT m_IDirectInputDevice8A::SendDeviceData(DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) +{ + return ProxyInterface->SendDeviceData(cbObjectData, rgdod, pdwInOut, fl); +} + +HRESULT m_IDirectInputDevice8A::EnumEffectsInFile(LPCSTR lpszFileName, LPDIENUMEFFECTSINFILECALLBACK pec, LPVOID pvRef, DWORD dwFlags) +{ + return ProxyInterface->EnumEffectsInFile(lpszFileName, pec, pvRef, dwFlags); +} + +HRESULT m_IDirectInputDevice8A::WriteEffectToFile(LPCSTR lpszFileName, DWORD dwEntries, LPDIFILEEFFECT rgDiFileEft, DWORD dwFlags) +{ + return ProxyInterface->WriteEffectToFile(lpszFileName, dwEntries, rgDiFileEft, dwFlags); +} + +HRESULT m_IDirectInputDevice8A::BuildActionMap(LPDIACTIONFORMATA lpdiaf, LPCSTR lpszUserName, DWORD dwFlags) +{ + return ProxyInterface->BuildActionMap(lpdiaf, lpszUserName, dwFlags); +} + +HRESULT m_IDirectInputDevice8A::SetActionMap(LPDIACTIONFORMATA lpdiActionFormat, LPCSTR lptszUserName, DWORD dwFlags) +{ + return ProxyInterface->SetActionMap(lpdiActionFormat, lptszUserName, dwFlags); +} + +HRESULT m_IDirectInputDevice8A::GetImageInfo(LPDIDEVICEIMAGEINFOHEADERA lpdiDevImageInfoHeader) +{ + return ProxyInterface->GetImageInfo(lpdiDevImageInfoHeader); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8A.h b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8A.h new file mode 100644 index 0000000000..978a563401 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8A.h @@ -0,0 +1,55 @@ +#pragma once + +class m_IDirectInputDevice8A : public IDirectInputDevice8A, public AddressLookupTableObject +{ +private: + IDirectInputDevice8A *ProxyInterface; + +public: + m_IDirectInputDevice8A(IDirectInputDevice8A *aOriginal) : ProxyInterface(aOriginal) + { + ProxyAddressLookupTable.SaveAddress(this, ProxyInterface); + } + ~m_IDirectInputDevice8A() + { + ProxyAddressLookupTable.DeleteAddress(this); + } + + IDirectInputDevice8A *GetProxyInterface() { return ProxyInterface; } + + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj); + STDMETHOD_(ULONG, AddRef)(THIS); + STDMETHOD_(ULONG, Release)(THIS); + + /*** IDirectInputDevice8A methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS); + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKA, LPVOID, DWORD); + STDMETHOD(GetProperty)(THIS_ REFGUID, LPDIPROPHEADER); + STDMETHOD(SetProperty)(THIS_ REFGUID, LPCDIPROPHEADER); + STDMETHOD(Acquire)(THIS); + STDMETHOD(Unacquire)(THIS); + STDMETHOD(GetDeviceState)(THIS_ DWORD, LPVOID); + STDMETHOD(GetDeviceData)(THIS_ DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD); + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT); + STDMETHOD(SetEventNotification)(THIS_ HANDLE); + STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD); + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEA, DWORD, DWORD); + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEA); + STDMETHOD(RunControlPanel)(THIS_ HWND, DWORD); + STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD, REFGUID); + STDMETHOD(CreateEffect)(THIS_ REFGUID, LPCDIEFFECT, LPDIRECTINPUTEFFECT *, LPUNKNOWN); + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKA, LPVOID, DWORD); + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOA, REFGUID); + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD); + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD); + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, LPVOID, DWORD); + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE); + STDMETHOD(Poll)(THIS); + STDMETHOD(SendDeviceData)(THIS_ DWORD, LPCDIDEVICEOBJECTDATA, LPDWORD, DWORD); + STDMETHOD(EnumEffectsInFile)(THIS_ LPCSTR, LPDIENUMEFFECTSINFILECALLBACK, LPVOID, DWORD); + STDMETHOD(WriteEffectToFile)(THIS_ LPCSTR, DWORD, LPDIFILEEFFECT, DWORD); + STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATA, LPCSTR, DWORD); + STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATA, LPCSTR, DWORD); + STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERA); +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8Hook.cpp b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8Hook.cpp new file mode 100644 index 0000000000..2fedd469ec --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8Hook.cpp @@ -0,0 +1,187 @@ +#include +#include "IDirectInputDevice8Hook.h" + +static bool mSpaceKeyState = false; +static bool mLastSpaceKeyState = false; + +// TODO Add your own known gamepad GUIDs here! + +IDirectInputDevice8Hook::IDirectInputDevice8Hook(IDirectInput8 * dinput, IDirectInputDevice8 * dinputdevice, REFGUID guid) +{ + m_pDI = dinput; + m_pDIDevice = dinputdevice; + m_GUID = guid; +} + +/*** IUnknown methods ***/ +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::QueryInterface(REFIID riid, LPVOID * ppvObj) +{ + return m_pDIDevice->QueryInterface(riid, ppvObj); +} + +ULONG STDMETHODCALLTYPE IDirectInputDevice8Hook::AddRef() +{ + return m_pDIDevice->AddRef(); +} + +ULONG STDMETHODCALLTYPE IDirectInputDevice8Hook::Release() +{ + ULONG uRet = m_pDIDevice->Release(); + + if (uRet == 0) + // If the reference count is 0 delete ourselves + delete this; + + return uRet; +} + +/*** IDirectInputDevice8A methods ***/ +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::GetCapabilities(LPDIDEVCAPS p0) +{ + return m_pDIDevice->GetCapabilities(p0); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::EnumObjects(LPDIENUMDEVICEOBJECTSCALLBACKA p0, LPVOID p1, DWORD p2) +{ + return m_pDIDevice->EnumObjects(p0, p1, p2); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::GetProperty(REFGUID rguid, LPDIPROPHEADER p1) +{ + return m_pDIDevice->GetProperty(rguid, p1); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::SetProperty(REFGUID rguid, LPCDIPROPHEADER p1) +{ + return m_pDIDevice->SetProperty(rguid, p1); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::Acquire() +{ + return m_pDIDevice->Acquire(); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::Unacquire() +{ + return m_pDIDevice->Unacquire(); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::GetDeviceState(DWORD p0, LPVOID p1) +{ + // Forward call + HRESULT hResult = m_pDIDevice->GetDeviceState(p0, p1); + return hResult; +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::GetDeviceData(DWORD p0, LPDIDEVICEOBJECTDATA p1, LPDWORD p2, DWORD p3) +{ + // Forward call + HRESULT hResult = m_pDIDevice->GetDeviceData(p0, p1, p2, p3); + // Return result + return hResult; +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::SetDataFormat(LPCDIDATAFORMAT p0) +{ + return m_pDIDevice->SetDataFormat(p0); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::SetEventNotification(HANDLE p0) +{ + return m_pDIDevice->SetEventNotification(p0); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::SetCooperativeLevel(HWND p0, DWORD p1) +{ + return m_pDIDevice->SetCooperativeLevel(p0, p1); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::GetObjectInfo(LPDIDEVICEOBJECTINSTANCE p0, DWORD p1, DWORD p2) +{ + return m_pDIDevice->GetObjectInfo(p0, p1, p2); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::GetDeviceInfo(LPDIDEVICEINSTANCE p0) +{ + return m_pDIDevice->GetDeviceInfo(p0); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::RunControlPanel(HWND p0, DWORD p1) +{ + return m_pDIDevice->RunControlPanel(p0, p1); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::Initialize(HINSTANCE p0, DWORD p1, REFGUID rguid) +{ + return m_pDIDevice->Initialize(p0, p1, rguid); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::CreateEffect(REFGUID rguid, LPCDIEFFECT p1, LPDIRECTINPUTEFFECT * p2, LPUNKNOWN p3) +{ + return m_pDIDevice->CreateEffect(rguid, p1, p2, p3); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::EnumEffects(LPDIENUMEFFECTSCALLBACK p0, LPVOID p1, DWORD p2) +{ + return m_pDIDevice->EnumEffects(p0, p1, p2); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::GetEffectInfo(LPDIEFFECTINFO p0, REFGUID rguid) +{ + return m_pDIDevice->GetEffectInfo(p0, rguid); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::GetForceFeedbackState(LPDWORD p0) +{ + return m_pDIDevice->GetForceFeedbackState(p0); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::SendForceFeedbackCommand(DWORD p0) +{ + return m_pDIDevice->SendForceFeedbackCommand(p0); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::EnumCreatedEffectObjects(LPDIENUMCREATEDEFFECTOBJECTSCALLBACK p0, LPVOID p1, DWORD p2) +{ + return m_pDIDevice->EnumCreatedEffectObjects(p0, p1, p2); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::Escape(LPDIEFFESCAPE p0) +{ + return m_pDIDevice->Escape(p0); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::Poll() +{ + return m_pDIDevice->Poll(); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::SendDeviceData(DWORD p0, LPCDIDEVICEOBJECTDATA p1, LPDWORD p2, DWORD p3) +{ + return m_pDIDevice->SendDeviceData(p0, p1, p2, p3); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::EnumEffectsInFile(LPCSTR p0, LPDIENUMEFFECTSINFILECALLBACK p1, LPVOID p2, DWORD p3) +{ + return m_pDIDevice->EnumEffectsInFile(p0, p1, p2, p3); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::WriteEffectToFile(LPCSTR p0, DWORD p2, LPDIFILEEFFECT p3, DWORD p4) +{ + return m_pDIDevice->WriteEffectToFile(p0, p2, p3, p4); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::BuildActionMap(LPDIACTIONFORMAT p0, LPCSTR p1, DWORD p2) +{ + return m_pDIDevice->BuildActionMap(p0, p1, p2); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::SetActionMap(LPDIACTIONFORMAT p0, LPCSTR p1, DWORD p2) +{ + return m_pDIDevice->SetActionMap(p0, p1, p2); +} + +HRESULT STDMETHODCALLTYPE IDirectInputDevice8Hook::GetImageInfo(LPDIDEVICEIMAGEINFOHEADER p0) +{ + return m_pDIDevice->GetImageInfo(p0); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8Hook.h b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8Hook.h new file mode 100644 index 0000000000..06d35e4f10 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8Hook.h @@ -0,0 +1,50 @@ +#pragma once + +#include + +class IDirectInputDevice8Hook : public IDirectInputDevice8 +{ +private: + IDirectInput8 * m_pDI; + IDirectInputDevice8 * m_pDIDevice; + GUID m_GUID; + +public: + IDirectInputDevice8Hook(IDirectInput8 * dinput, IDirectInputDevice8 * dinputdevice, REFGUID guid); + + /*** IUnknown methods ***/ + HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, LPVOID * ppvObj); + ULONG STDMETHODCALLTYPE AddRef(); + ULONG STDMETHODCALLTYPE Release(); + + /*** IDirectInputDevice8A methods ***/ + HRESULT STDMETHODCALLTYPE GetCapabilities(LPDIDEVCAPS p0); + HRESULT STDMETHODCALLTYPE EnumObjects(LPDIENUMDEVICEOBJECTSCALLBACK p0, LPVOID p1, DWORD p2); + HRESULT STDMETHODCALLTYPE GetProperty(REFGUID rguid, LPDIPROPHEADER p1); + HRESULT STDMETHODCALLTYPE SetProperty(REFGUID rguid, LPCDIPROPHEADER p1); + HRESULT STDMETHODCALLTYPE Acquire(); + HRESULT STDMETHODCALLTYPE Unacquire(); + HRESULT STDMETHODCALLTYPE GetDeviceState(DWORD p0, LPVOID p1); + HRESULT STDMETHODCALLTYPE GetDeviceData(DWORD p0, LPDIDEVICEOBJECTDATA p1, LPDWORD p2, DWORD p3); + HRESULT STDMETHODCALLTYPE SetDataFormat(LPCDIDATAFORMAT p0); + HRESULT STDMETHODCALLTYPE SetEventNotification(HANDLE p0); + HRESULT STDMETHODCALLTYPE SetCooperativeLevel(HWND p0, DWORD p1); + HRESULT STDMETHODCALLTYPE GetObjectInfo(LPDIDEVICEOBJECTINSTANCEA p0, DWORD p1, DWORD p2); + HRESULT STDMETHODCALLTYPE GetDeviceInfo(LPDIDEVICEINSTANCEA p0); + HRESULT STDMETHODCALLTYPE RunControlPanel(HWND p0, DWORD p1); + HRESULT STDMETHODCALLTYPE Initialize(HINSTANCE p0, DWORD p1, REFGUID rguid); + HRESULT STDMETHODCALLTYPE CreateEffect(REFGUID rguid, LPCDIEFFECT p1, LPDIRECTINPUTEFFECT * p2, LPUNKNOWN p3); + HRESULT STDMETHODCALLTYPE EnumEffects(LPDIENUMEFFECTSCALLBACKA p0, LPVOID p1, DWORD p2); + HRESULT STDMETHODCALLTYPE GetEffectInfo(LPDIEFFECTINFOA p0, REFGUID rguid); + HRESULT STDMETHODCALLTYPE GetForceFeedbackState(LPDWORD p0); + HRESULT STDMETHODCALLTYPE SendForceFeedbackCommand(DWORD p0); + HRESULT STDMETHODCALLTYPE EnumCreatedEffectObjects(LPDIENUMCREATEDEFFECTOBJECTSCALLBACK p0, LPVOID p1, DWORD p2); + HRESULT STDMETHODCALLTYPE Escape(LPDIEFFESCAPE p0); + HRESULT STDMETHODCALLTYPE Poll(); + HRESULT STDMETHODCALLTYPE SendDeviceData(DWORD p0, LPCDIDEVICEOBJECTDATA p1, LPDWORD p2, DWORD p3); + HRESULT STDMETHODCALLTYPE EnumEffectsInFile(LPCSTR p0, LPDIENUMEFFECTSINFILECALLBACK p1, LPVOID p2, DWORD p3); + HRESULT STDMETHODCALLTYPE WriteEffectToFile(LPCSTR p0, DWORD p2, LPDIFILEEFFECT p3, DWORD p4); + HRESULT STDMETHODCALLTYPE BuildActionMap(LPDIACTIONFORMAT p0, LPCSTR p1, DWORD p2); + HRESULT STDMETHODCALLTYPE SetActionMap(LPDIACTIONFORMAT p0, LPCSTR p1, DWORD p2); + HRESULT STDMETHODCALLTYPE GetImageInfo(LPDIDEVICEIMAGEINFOHEADER p0); +}; \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8W.cpp b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8W.cpp new file mode 100644 index 0000000000..300ea30848 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8W.cpp @@ -0,0 +1,216 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "dinput8.h" + +HRESULT m_IDirectInputDevice8W::QueryInterface(REFIID riid, LPVOID* ppvObj) +{ + if ((riid == IID_IDirectInputDevice8W || riid == IID_IUnknown) && ppvObj) + { + AddRef(); + + *ppvObj = this; + + return S_OK; + } + + HRESULT hr = ProxyInterface->QueryInterface(riid, ppvObj); + + if (SUCCEEDED(hr)) + { + genericQueryInterface(riid, ppvObj); + } + + return hr; +} + +ULONG m_IDirectInputDevice8W::AddRef() +{ + return ProxyInterface->AddRef(); +} + +ULONG m_IDirectInputDevice8W::Release() +{ + ULONG ref = ProxyInterface->Release(); + + if (ref == 0) + { + delete this; + } + + return ref; +} + +HRESULT m_IDirectInputDevice8W::GetCapabilities(LPDIDEVCAPS lpDIDevCaps) +{ + return ProxyInterface->GetCapabilities(lpDIDevCaps); +} + +HRESULT m_IDirectInputDevice8W::EnumObjects(LPDIENUMDEVICEOBJECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwFlags) +{ + return ProxyInterface->EnumObjects(lpCallback, pvRef, dwFlags); +} + +HRESULT m_IDirectInputDevice8W::GetProperty(REFGUID rguidProp, LPDIPROPHEADER pdiph) +{ + return ProxyInterface->GetProperty(rguidProp, pdiph); +} + +HRESULT m_IDirectInputDevice8W::SetProperty(REFGUID rguidProp, LPCDIPROPHEADER pdiph) +{ + return ProxyInterface->SetProperty(rguidProp, pdiph); +} + +HRESULT m_IDirectInputDevice8W::Acquire() +{ + return ProxyInterface->Acquire(); +} + +HRESULT m_IDirectInputDevice8W::Unacquire() +{ + return ProxyInterface->Unacquire(); +} + +HRESULT m_IDirectInputDevice8W::GetDeviceState(DWORD cbData, LPVOID lpvData) +{ + return ProxyInterface->GetDeviceState(cbData, lpvData); +} + +HRESULT m_IDirectInputDevice8W::GetDeviceData(DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) +{ + return ProxyInterface->GetDeviceData(cbObjectData, rgdod, pdwInOut, dwFlags); +} + +HRESULT m_IDirectInputDevice8W::SetDataFormat(LPCDIDATAFORMAT lpdf) +{ + return ProxyInterface->SetDataFormat(lpdf); +} + +HRESULT m_IDirectInputDevice8W::SetEventNotification(HANDLE hEvent) +{ + return ProxyInterface->SetEventNotification(hEvent); +} + +HRESULT m_IDirectInputDevice8W::SetCooperativeLevel(HWND hwnd, DWORD dwFlags) +{ + return ProxyInterface->SetCooperativeLevel(hwnd, dwFlags); +} + +HRESULT m_IDirectInputDevice8W::GetObjectInfo(LPDIDEVICEOBJECTINSTANCEW pdidoi, DWORD dwObj, DWORD dwHow) +{ + return ProxyInterface->GetObjectInfo(pdidoi, dwObj, dwHow); +} + +HRESULT m_IDirectInputDevice8W::GetDeviceInfo(LPDIDEVICEINSTANCEW pdidi) +{ + return ProxyInterface->GetDeviceInfo(pdidi); +} + +HRESULT m_IDirectInputDevice8W::RunControlPanel(HWND hwndOwner, DWORD dwFlags) +{ + return ProxyInterface->RunControlPanel(hwndOwner, dwFlags); +} + +HRESULT m_IDirectInputDevice8W::Initialize(HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) +{ + return ProxyInterface->Initialize(hinst, dwVersion, rguid); +} + +HRESULT m_IDirectInputDevice8W::CreateEffect(REFGUID rguid, LPCDIEFFECT lpeff, LPDIRECTINPUTEFFECT * ppdeff, LPUNKNOWN punkOuter) +{ + HRESULT hr = ProxyInterface->CreateEffect(rguid, lpeff, ppdeff, punkOuter); + + if (SUCCEEDED(hr) && ppdeff) + { + *ppdeff = ProxyAddressLookupTable.FindAddress(*ppdeff); + } + + return hr; +} + +HRESULT m_IDirectInputDevice8W::EnumEffects(LPDIENUMEFFECTSCALLBACKW lpCallback, LPVOID pvRef, DWORD dwEffType) +{ + return ProxyInterface->EnumEffects(lpCallback, pvRef, dwEffType); +} + +HRESULT m_IDirectInputDevice8W::GetEffectInfo(LPDIEFFECTINFOW pdei, REFGUID rguid) +{ + return ProxyInterface->GetEffectInfo(pdei, rguid); +} + +HRESULT m_IDirectInputDevice8W::GetForceFeedbackState(LPDWORD pdwOut) +{ + return ProxyInterface->GetForceFeedbackState(pdwOut); +} + +HRESULT m_IDirectInputDevice8W::SendForceFeedbackCommand(DWORD dwFlags) +{ + return ProxyInterface->SendForceFeedbackCommand(dwFlags); +} + +HRESULT m_IDirectInputDevice8W::EnumCreatedEffectObjects(LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback, LPVOID pvRef, DWORD fl) +{ + if (!lpCallback) + { + return E_INVALIDARG; + } + + ENUMEFFECT CallbackContext; + CallbackContext.pvRef = pvRef; + CallbackContext.lpCallback = lpCallback; + + return ProxyInterface->EnumCreatedEffectObjects(m_IDirectInputEnumEffect::EnumEffectCallback, &CallbackContext, fl); +} + +HRESULT m_IDirectInputDevice8W::Escape(LPDIEFFESCAPE pesc) +{ + return ProxyInterface->Escape(pesc); +} + +HRESULT m_IDirectInputDevice8W::Poll() +{ + return ProxyInterface->Poll(); +} + +HRESULT m_IDirectInputDevice8W::SendDeviceData(DWORD cbObjectData, LPCDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD fl) +{ + return ProxyInterface->SendDeviceData(cbObjectData, rgdod, pdwInOut, fl); +} + +HRESULT m_IDirectInputDevice8W::EnumEffectsInFile(LPCWSTR lpszFileName, LPDIENUMEFFECTSINFILECALLBACK pec, LPVOID pvRef, DWORD dwFlags) +{ + return ProxyInterface->EnumEffectsInFile(lpszFileName, pec, pvRef, dwFlags); +} + +HRESULT m_IDirectInputDevice8W::WriteEffectToFile(LPCWSTR lpszFileName, DWORD dwEntries, LPDIFILEEFFECT rgDiFileEft, DWORD dwFlags) +{ + return ProxyInterface->WriteEffectToFile(lpszFileName, dwEntries, rgDiFileEft, dwFlags); +} + +HRESULT m_IDirectInputDevice8W::BuildActionMap(LPDIACTIONFORMATW lpdiaf, LPCWSTR lpszUserName, DWORD dwFlags) +{ + return ProxyInterface->BuildActionMap(lpdiaf, lpszUserName, dwFlags); +} + +HRESULT m_IDirectInputDevice8W::SetActionMap(LPDIACTIONFORMATW lpdiActionFormat, LPCWSTR lptszUserName, DWORD dwFlags) +{ + return ProxyInterface->SetActionMap(lpdiActionFormat, lptszUserName, dwFlags); +} + +HRESULT m_IDirectInputDevice8W::GetImageInfo(LPDIDEVICEIMAGEINFOHEADERW lpdiDevImageInfoHeader) +{ + return ProxyInterface->GetImageInfo(lpdiDevImageInfoHeader); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8W.h b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8W.h new file mode 100644 index 0000000000..67b3ddfb99 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputDevice8W.h @@ -0,0 +1,55 @@ +#pragma once + +class m_IDirectInputDevice8W : public IDirectInputDevice8W, public AddressLookupTableObject +{ +private: + IDirectInputDevice8W *ProxyInterface; + +public: + m_IDirectInputDevice8W(IDirectInputDevice8W *aOriginal) : ProxyInterface(aOriginal) + { + ProxyAddressLookupTable.SaveAddress(this, ProxyInterface); + } + ~m_IDirectInputDevice8W() + { + ProxyAddressLookupTable.DeleteAddress(this); + } + + IDirectInputDevice8W *GetProxyInterface() { return ProxyInterface; } + + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj); + STDMETHOD_(ULONG, AddRef)(THIS); + STDMETHOD_(ULONG, Release)(THIS); + + /*** IDirectInputDevice8W methods ***/ + STDMETHOD(GetCapabilities)(THIS_ LPDIDEVCAPS); + STDMETHOD(EnumObjects)(THIS_ LPDIENUMDEVICEOBJECTSCALLBACKW, LPVOID, DWORD); + STDMETHOD(GetProperty)(THIS_ REFGUID, LPDIPROPHEADER); + STDMETHOD(SetProperty)(THIS_ REFGUID, LPCDIPROPHEADER); + STDMETHOD(Acquire)(THIS); + STDMETHOD(Unacquire)(THIS); + STDMETHOD(GetDeviceState)(THIS_ DWORD, LPVOID); + STDMETHOD(GetDeviceData)(THIS_ DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD); + STDMETHOD(SetDataFormat)(THIS_ LPCDIDATAFORMAT); + STDMETHOD(SetEventNotification)(THIS_ HANDLE); + STDMETHOD(SetCooperativeLevel)(THIS_ HWND, DWORD); + STDMETHOD(GetObjectInfo)(THIS_ LPDIDEVICEOBJECTINSTANCEW, DWORD, DWORD); + STDMETHOD(GetDeviceInfo)(THIS_ LPDIDEVICEINSTANCEW); + STDMETHOD(RunControlPanel)(THIS_ HWND, DWORD); + STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD, REFGUID); + STDMETHOD(CreateEffect)(THIS_ REFGUID, LPCDIEFFECT, LPDIRECTINPUTEFFECT *, LPUNKNOWN); + STDMETHOD(EnumEffects)(THIS_ LPDIENUMEFFECTSCALLBACKW, LPVOID, DWORD); + STDMETHOD(GetEffectInfo)(THIS_ LPDIEFFECTINFOW, REFGUID); + STDMETHOD(GetForceFeedbackState)(THIS_ LPDWORD); + STDMETHOD(SendForceFeedbackCommand)(THIS_ DWORD); + STDMETHOD(EnumCreatedEffectObjects)(THIS_ LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, LPVOID, DWORD); + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE); + STDMETHOD(Poll)(THIS); + STDMETHOD(SendDeviceData)(THIS_ DWORD, LPCDIDEVICEOBJECTDATA, LPDWORD, DWORD); + STDMETHOD(EnumEffectsInFile)(THIS_ LPCWSTR, LPDIENUMEFFECTSINFILECALLBACK, LPVOID, DWORD); + STDMETHOD(WriteEffectToFile)(THIS_ LPCWSTR, DWORD, LPDIFILEEFFECT, DWORD); + STDMETHOD(BuildActionMap)(THIS_ LPDIACTIONFORMATW, LPCWSTR, DWORD); + STDMETHOD(SetActionMap)(THIS_ LPDIACTIONFORMATW, LPCWSTR, DWORD); + STDMETHOD(GetImageInfo)(THIS_ LPDIDEVICEIMAGEINFOHEADERW); +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputEffect.cpp b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEffect.cpp new file mode 100644 index 0000000000..3f3954889c --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEffect.cpp @@ -0,0 +1,105 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "dinput8.h" + +HRESULT m_IDirectInputEffect::QueryInterface(REFIID riid, LPVOID * ppvObj) +{ + if ((riid == IID_IDirectInputEffect || riid == IID_IUnknown) && ppvObj) + { + AddRef(); + + *ppvObj = this; + + return S_OK; + } + + HRESULT hr = ProxyInterface->QueryInterface(riid, ppvObj); + + if (SUCCEEDED(hr)) + { + genericQueryInterface(riid, ppvObj); + } + + return hr; +} + +ULONG m_IDirectInputEffect::AddRef() +{ + return ProxyInterface->AddRef(); +} + +ULONG m_IDirectInputEffect::Release() +{ + ULONG ref = ProxyInterface->Release(); + + if (ref == 0) + { + delete this; + } + + return ref; +} + +HRESULT m_IDirectInputEffect::Initialize(HINSTANCE hinst, DWORD dwVersion, REFGUID rguid) +{ + return ProxyInterface->Initialize(hinst, dwVersion, rguid); +} + +HRESULT m_IDirectInputEffect::GetEffectGuid(LPGUID pguid) +{ + return ProxyInterface->GetEffectGuid(pguid); +} + +HRESULT m_IDirectInputEffect::GetParameters(LPDIEFFECT peff, DWORD dwFlags) +{ + return ProxyInterface->GetParameters(peff, dwFlags); +} + +HRESULT m_IDirectInputEffect::SetParameters(LPCDIEFFECT peff, DWORD dwFlags) +{ + return ProxyInterface->SetParameters(peff, dwFlags); +} + +HRESULT m_IDirectInputEffect::Start(DWORD dwIterations, DWORD dwFlags) +{ + return ProxyInterface->Start(dwIterations, dwFlags); +} + +HRESULT m_IDirectInputEffect::Stop() +{ + return ProxyInterface->Stop(); +} + +HRESULT m_IDirectInputEffect::GetEffectStatus(LPDWORD pdwFlags) +{ + return ProxyInterface->GetEffectStatus(pdwFlags); +} + +HRESULT m_IDirectInputEffect::Download() +{ + return ProxyInterface->Download(); +} + +HRESULT m_IDirectInputEffect::Unload() +{ + return ProxyInterface->Unload(); +} + +HRESULT m_IDirectInputEffect::Escape(LPDIEFFESCAPE pesc) +{ + return ProxyInterface->Escape(pesc); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputEffect.h b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEffect.h new file mode 100644 index 0000000000..288a4e3274 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEffect.h @@ -0,0 +1,36 @@ +#pragma once + +class m_IDirectInputEffect : public IDirectInputEffect, public AddressLookupTableObject +{ +private: + IDirectInputEffect *ProxyInterface; + +public: + m_IDirectInputEffect(IDirectInputEffect *aOriginal) : ProxyInterface(aOriginal) + { + ProxyAddressLookupTable.SaveAddress(this, ProxyInterface); + } + ~m_IDirectInputEffect() + { + ProxyAddressLookupTable.DeleteAddress(this); + } + + IDirectInputEffect *GetProxyInterface() { return ProxyInterface; } + + /*** IUnknown methods ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID riid, LPVOID * ppvObj); + STDMETHOD_(ULONG, AddRef)(THIS); + STDMETHOD_(ULONG, Release)(THIS); + + /*** IDirectInputEffect methods ***/ + STDMETHOD(Initialize)(THIS_ HINSTANCE, DWORD, REFGUID); + STDMETHOD(GetEffectGuid)(THIS_ LPGUID); + STDMETHOD(GetParameters)(THIS_ LPDIEFFECT, DWORD); + STDMETHOD(SetParameters)(THIS_ LPCDIEFFECT, DWORD); + STDMETHOD(Start)(THIS_ DWORD, DWORD); + STDMETHOD(Stop)(THIS); + STDMETHOD(GetEffectStatus)(THIS_ LPDWORD); + STDMETHOD(Download)(THIS); + STDMETHOD(Unload)(THIS); + STDMETHOD(Escape)(THIS_ LPDIEFFESCAPE); +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumDevice.cpp b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumDevice.cpp new file mode 100644 index 0000000000..f8a16f395f --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumDevice.cpp @@ -0,0 +1,41 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "dinput8.h" + +BOOL CALLBACK m_IDirectInputEnumDevice::EnumDeviceCallbackA(LPCDIDEVICEINSTANCEA lpddi, LPDIRECTINPUTDEVICE8A lpdid, DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef) +{ + ENUMDEVICEA *lpCallbackContext = (ENUMDEVICEA*)pvRef; + + if (lpdid) + { + lpdid = ProxyAddressLookupTable.FindAddress(lpdid); + } + + return lpCallbackContext->lpCallback(lpddi, lpdid, dwFlags, dwRemaining, lpCallbackContext->pvRef); +} + +BOOL CALLBACK m_IDirectInputEnumDevice::EnumDeviceCallbackW(LPCDIDEVICEINSTANCEW lpddi, LPDIRECTINPUTDEVICE8W lpdid, DWORD dwFlags, DWORD dwRemaining, LPVOID pvRef) +{ + ENUMDEVICEW *lpCallbackContext = (ENUMDEVICEW*)pvRef; + + if (lpdid) + { + lpdid = ProxyAddressLookupTable.FindAddress(lpdid); + } + + return lpCallbackContext->lpCallback(lpddi, lpdid, dwFlags, dwRemaining, lpCallbackContext->pvRef); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumDevice.h b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumDevice.h new file mode 100644 index 0000000000..ba003c3d49 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumDevice.h @@ -0,0 +1,23 @@ +#pragma once + +struct ENUMDEVICEA +{ + LPVOID pvRef; + LPDIENUMDEVICESBYSEMANTICSCBA lpCallback; +}; + +struct ENUMDEVICEW +{ + LPVOID pvRef; + LPDIENUMDEVICESBYSEMANTICSCBW lpCallback; +}; + +class m_IDirectInputEnumDevice +{ +public: + m_IDirectInputEnumDevice() {} + ~m_IDirectInputEnumDevice() {} + + static BOOL CALLBACK EnumDeviceCallbackA(LPCDIDEVICEINSTANCEA, LPDIRECTINPUTDEVICE8A, DWORD, DWORD, LPVOID); + static BOOL CALLBACK EnumDeviceCallbackW(LPCDIDEVICEINSTANCEW, LPDIRECTINPUTDEVICE8W, DWORD, DWORD, LPVOID); +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumEffect.cpp b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumEffect.cpp new file mode 100644 index 0000000000..3c199a25f6 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumEffect.cpp @@ -0,0 +1,29 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "dinput8.h" + +BOOL CALLBACK m_IDirectInputEnumEffect::EnumEffectCallback(LPDIRECTINPUTEFFECT pdeff, LPVOID pvRef) +{ + ENUMEFFECT *lpCallbackContext = (ENUMEFFECT*)pvRef; + + if (pdeff) + { + pdeff = ProxyAddressLookupTable.FindAddress(pdeff); + } + + return lpCallbackContext->lpCallback(pdeff, lpCallbackContext->pvRef); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumEffect.h b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumEffect.h new file mode 100644 index 0000000000..34595d759f --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/IDirectInputEnumEffect.h @@ -0,0 +1,16 @@ +#pragma once + +struct ENUMEFFECT +{ + LPVOID pvRef; + LPDIENUMCREATEDEFFECTOBJECTSCALLBACK lpCallback; +}; + +class m_IDirectInputEnumEffect +{ +public: + m_IDirectInputEnumEffect() {} + ~m_IDirectInputEnumEffect() {} + + static BOOL CALLBACK EnumEffectCallback(LPDIRECTINPUTEFFECT, LPVOID); +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ-VS2005.vcproj b/client_files/native_autoloot/eq-core-dll/src/ISXEQ-VS2005.vcproj new file mode 100644 index 0000000000..31e0097d57 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ-VS2005.vcproj @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ.vcproj b/client_files/native_autoloot/eq-core-dll/src/ISXEQ.vcproj new file mode 100644 index 0000000000..15e1ea409a --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ.vcproj @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQ.cpp b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQ.cpp new file mode 100644 index 0000000000..e9f0795476 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQ.cpp @@ -0,0 +1,520 @@ +// +// ISXEQ +// + + +// uncomment this line to enable ISBoxer compatibility. changes ${Target} to ${EQTarget} and ${Window} to ${EQWindow} +//#define ISBOXER_COMPAT + + +#include "..\MQ2Main.h" +#pragma comment(lib,"ISXDK.lib") + +// The mandatory pre-setup function. Our name is "ISXEQ", and the class is ISXEQ. +// This sets up a "ModulePath" variable which contains the path to this module in case we want it, +// and a "PluginLog" variable, which contains the path and filename of what we should use for our +// debug logging if we need it. It also sets up a variable "pExtension" which is the pointer to +// our instanced class. +ISXPreSetup("ISXEQ",CISXEQ); + +// Basic IS datatypes, these get retrieved on startup by our initialize function, so we can use them in +// our Top-Level Objects or custom datatypes +LSType *pStringType=0; +LSType *pIntType=0; +LSType *pBoolType=0; +LSType *pFloatType=0; +LSType *pByteType=0; + +LSType *pIntPtrType=0; +LSType *pBoolPtrType=0; +LSType *pFloatPtrType=0; +LSType *pBytePtrType=0; + +LSType *pTimeType=0; + +ISInterface *pISInterface=0; +HISXSERVICE hPulseService; +HISXSERVICE hMemoryService; +HISXSERVICE hHTTPService; +HISXSERVICE hTriggerService; + +HISXSERVICE hChatService; +HISXSERVICE hUIService; +HISXSERVICE hGamestateService; +HISXSERVICE hSpawnService; +HISXSERVICE hZoneService; +unsigned int ChatEventID=0; +unsigned int PersistentPointerClass=0; + +// Forward declarations of callbacks +void __cdecl PulseService(bool Broadcast, unsigned int MSG, void *lpData); +void __cdecl MemoryService(bool Broadcast, unsigned int MSG, void *lpData); +void __cdecl HTTPService(bool Broadcast, unsigned int MSG, void *lpData); +void __cdecl TriggerService(bool Broadcast, unsigned int MSG, void *lpData); +void __cdecl ProtectionRequest(ISXInterface *pClient, unsigned int MSG, void *lpData); + +#if 0 +void __cdecl SoftwareCursorService(bool Broadcast, unsigned int MSG, void *lpData); + +HISXSERVICE hSoftwareCursorService=0; +#endif + +HISXSERVICE hEQProtectionService=0; + + +// The constructor of our class. General initialization cannot be done yet, because we're not given +// the pointer to the Inner Space interface until it is ready for us to initialize. Just set the +// pointer we have to the interface to 0. Initialize data members, too. +CISXEQ::CISXEQ(void) +{ +} + +// Free any remaining resources in the destructor. This is called when the DLL is unloaded, but +// Inner Space calls the "Shutdown" function first. Most if not all of the shutdown process should +// be done in Shutdown. +CISXEQ::~CISXEQ(void) +{ +} + +extern bool MQ2Initialize(); +extern void MQ2Shutdown(); +// Initialize is called by Inner Space when the extension should initialize. +bool CISXEQ::Initialize(ISInterface *p_ISInterface) +{ + pISInterface=p_ISInterface; + + char CurrentModule[512]={0}; + GetModuleFileName(0,CurrentModule,512); + char *filename; + if (filename=strrchr(CurrentModule,'\\')) + filename++; + else + filename=CurrentModule; + if (stricmp(filename,"eqgame.exe")) + { + printf("ISXEQ is only meant to be used in eqgame.exe"); + return false; + } + + // retrieve basic ISData types + pStringType=pISInterface->FindLSType("string"); + pIntType=pISInterface->FindLSType("int"); + pBoolType=pISInterface->FindLSType("bool"); + pFloatType=pISInterface->FindLSType("float"); + pTimeType=pISInterface->FindLSType("time"); + pByteType=pISInterface->FindLSType("byte"); + + pIntPtrType=pISInterface->FindLSType("intptr"); + pBoolPtrType=pISInterface->FindLSType("boolptr"); + pFloatPtrType=pISInterface->FindLSType("floatptr"); + pBytePtrType=pISInterface->FindLSType("byteptr"); + + + ConnectServices(); + + RegisterCommands(); + RegisterAliases(); + RegisterDataTypes(); + RegisterTopLevelObjects(); + RegisterServices(); + HookMemChecker(TRUE); + strcpy(gszINIPath,INIFileName); + MQ2Initialize(); + printf("ISXEQ Loaded"); + return true; +} + +// shutdown sequence +void CISXEQ::Shutdown() +{ + MQ2Shutdown(); + DisconnectServices(); + + UnRegisterServices(); + UnRegisterTopLevelObjects(); + UnRegisterDataTypes(); + UnRegisterAliases(); + UnRegisterCommands(); +} + +#if 0 +class EQSoftwareCursorInterface : public ISXSoftwareCursorInterface +{ +public: + virtual bool CursorEnabled() + { + return !bMouseLook; + } + virtual bool GetPosition(int &X, int &Y) + { + X=EQADDR_MOUSE->X; + Y=EQADDR_MOUSE->Y; + return true; + } + + virtual bool SetPosition(int X, int Y) + { + EQADDR_MOUSE->X = X; + EQADDR_MOUSE->Y = Y; + return true; + } + + virtual bool DrawCursor() + { + if (bMouseLook) + return false; +// pWndMgr->DrawCursor(); + //pWndMgr->DrawCursor() + return true; + } +} SoftwareCursorInterface; +#endif + +void CISXEQ::ConnectServices() +{ + // connect to any services. Here we connect to "Pulse" which receives a + // message every frame (after the frame is displayed) and "Memory" which + // wraps "detours" and memory modifications + hPulseService=pISInterface->ConnectService(this,"Pulse",PulseService); + hMemoryService=pISInterface->ConnectService(this,"Memory",MemoryService); + hHTTPService=pISInterface->ConnectService(this,"HTTP",HTTPService); + hTriggerService=pISInterface->ConnectService(this,"Triggers",TriggerService); + +#if 0 + hSoftwareCursorService=pISInterface->ConnectService(this,"Software Cursor",SoftwareCursorService); + + IS_SoftwareCursorEnable(this,pISInterface,hSoftwareCursorService,&SoftwareCursorInterface); +#endif +} +void CISXEQ::RegisterCommands() +{ + // add any commands +// pISInterface->AddCommand("MyCommand",MyCommand,true,false); +} + +void CISXEQ::RegisterAliases() +{ + // add any aliases +} + +void CISXEQ::RegisterDataTypes() +{ + // add any datatypes + // pMyType = new MyType; + // pISInterface->AddLSType(*pMyType); + +#define DATATYPE(_class_,_variable_,_persistentclass_) _variable_ = new _class_; pISInterface->AddLSType(*_variable_); if (_persistentclass_) pISInterface->SetPersistentClass(_variable_,pISInterface->RegisterPersistentClass(_persistentclass_)); +#include "ISXEQDataTypes.h" +#undef DATATYPE + pGroupMemberType->SetInheritance(pSpawnType); + + // NOTE: SetInheritance does NOT make it inherit, just notifies the syntax checker... + pCharacterType->SetInheritance(pSpawnType); + pBuffType->SetInheritance(pSpellType); +// pCurrentZoneType->SetInheritance(pZoneType); + pRaidMemberType->SetInheritance(pSpawnType); +} + +void CISXEQ::RegisterTopLevelObjects() +{ + // add any Top-Level Objects + //pISInterface->AddTopLevelObject("ISXEQ",ISXEQData); +#define TOPLEVELOBJECT(_name_,_function_) pISInterface->AddTopLevelObject(_name_,_function_); +#include "ISXEQTopLevelObjects.h" +#undef TOPLEVELOBJECT +} + +extern void __cdecl GamestateRequest(ISXInterface *pClient, unsigned int MSG, void *lpData); +extern void __cdecl SpawnRequest(ISXInterface *pClient, unsigned int MSG, void *lpData); + +void CISXEQ::RegisterServices() +{ + hEQProtectionService=pISInterface->RegisterService(this,"EQ Memory Protection Service",ProtectionRequest); + pISInterface->ServiceRequest(this,hMemoryService,MEM_ENABLEPROTECTION,"EQ Memory Protection Service"); + + hChatService=pISInterface->RegisterService(this,"EQ Chat Service",0); + hUIService=pISInterface->RegisterService(this,"EQ UI Service",0); + hGamestateService=pISInterface->RegisterService(this,"EQ Gamestate Service",GamestateRequest); + hSpawnService=pISInterface->RegisterService(this,"EQ Spawn Service",SpawnRequest); + hZoneService=pISInterface->RegisterService(this,"EQ Zone Service",0); + + ChatEventID = pISInterface->RegisterEvent("EQ Chat"); + PersistentPointerClass = pISInterface->RegisterPersistentClass("EQ Objects"); +} + +void CISXEQ::DisconnectServices() +{ + // gracefully disconnect from services + if (hPulseService) + pISInterface->DisconnectService(this,hPulseService); + if (hMemoryService) + { + pISInterface->DisconnectService(this,hMemoryService); + // memory modifications are automatically undone when disconnecting + // also, since this service accepts messages from clients we should reset our handle to + // 0 to make sure we dont try to continue using it + hMemoryService=0; + } + if (hHTTPService) + { + pISInterface->DisconnectService(this,hHTTPService); + } + if (hTriggerService) + { + pISInterface->DisconnectService(this,hTriggerService); + } +#if 0 + if (hSoftwareCursorService) + { + IS_SoftwareCursorDisable(this,pISInterface,hSoftwareCursorService); + pISInterface->DisconnectService(this,hSoftwareCursorService); + } +#endif + pISInterface->InvalidatePersistentClass(PersistentPointerClass); +} + +void CISXEQ::UnRegisterCommands() +{ + // remove commands +// pISInterface->RemoveCommand("MyCommand"); +} +void CISXEQ::UnRegisterAliases() +{ + // remove aliases +} +void CISXEQ::UnRegisterDataTypes() +{ + // remove data types +#define DATATYPE(_class_,_variable_,_persistentclass_) if (_variable_) {pISInterface->RemoveLSType(*_variable_);delete _variable_; } +#include "ISXEQDataTypes.h" +#undef DATATYPE + +} +void CISXEQ::UnRegisterTopLevelObjects() +{ + // remove data items +// pISInterface->RemoveTopLevelObject("ISXEQ"); +#define TOPLEVELOBJECT(_name_,_function_) pISInterface->RemoveTopLevelObject(_name_); +#include "ISXEQTopLevelObjects.h" +#undef TOPLEVELOBJECT +} +void CISXEQ::UnRegisterServices() +{ + // shutdown our own services + if (hEQProtectionService) + { + pISInterface->ServiceRequest(this,hMemoryService,MEM_DISABLEPROTECTION,"EQ Memory Protection Service"); + pISInterface->ShutdownService(this,hEQProtectionService); + } + if (hChatService) + pISInterface->ShutdownService(this,hChatService); + if (hUIService) + pISInterface->ShutdownService(this,hUIService); + if (hGamestateService) + pISInterface->ShutdownService(this,hGamestateService); + if (hSpawnService) + pISInterface->ShutdownService(this,hSpawnService); + if (hZoneService) + pISInterface->ShutdownService(this,hZoneService); +} + +bool CISXEQ::Protect(unsigned int Address, unsigned int Size, const void *OriginalData) +{ + EQProtected *pProtected=ProtectedMap[Address]; + if (pProtected) + return false; + + if (IsBadReadPtr((void*)Address,Size)) + return false; + + pProtected = new EQProtected(Address,Size,OriginalData); + ProtectedMap[Address]=pProtected; + return true; +} + +bool CISXEQ::UnProtect(unsigned int Address) +{ + map::iterator i=ProtectedMap.find(Address); + if (i==ProtectedMap.end()) + return false; + EQProtected *pProtected=i->second; + if (!pProtected) + return false; + delete pProtected; + ProtectedMap.erase(Address); + return true; +} + +extern int __cdecl memcheck0(unsigned char *buffer, int count); +extern int __cdecl memcheck1(unsigned char *buffer, int count, struct mckey key); +extern int __cdecl memcheck2(unsigned char *buffer, int count, struct mckey key); +extern int __cdecl memcheck3(unsigned char *buffer, int count, struct mckey key); +extern int __cdecl memcheck4(unsigned char *buffer, int count, struct mckey key); + +// this is the memory checker key struct +struct mckey { + union { + int x; + unsigned char a[4]; + char sa[4]; + }; +}; + +class CObfuscator +{ +public: + int doit_tramp(int, int); + int doit_detour(int opcode, int flag); +}; + +class CEmoteHook +{ +public: + VOID Trampoline(void); + VOID Detour(void); +}; + +DETOUR_TRAMPOLINE_EMPTY(int __cdecl memcheck0_tramp(unsigned char *buffer, int count)); +DETOUR_TRAMPOLINE_EMPTY(int __cdecl memcheck1_tramp(unsigned char *buffer, int count, struct mckey key)); +DETOUR_TRAMPOLINE_EMPTY(int __cdecl memcheck2_tramp(unsigned char *buffer, int count, struct mckey key)); +DETOUR_TRAMPOLINE_EMPTY(int __cdecl memcheck3_tramp(unsigned char *buffer, int count, struct mckey key)); +DETOUR_TRAMPOLINE_EMPTY(int __cdecl memcheck4_tramp(unsigned char *buffer, int count, struct mckey key)); + +extern VOID HookInlineChecks(BOOL Patch); + +VOID CISXEQ::HookMemChecker(BOOL Patch) +{ + if (Patch) { + + if (!EzDetour(__MemChecker0,memcheck0,memcheck0_tramp)) + { + printf("memcheck0 detour failed"); + } + if (!EzDetour(__MemChecker2,memcheck2,memcheck2_tramp)) + { + printf("memcheck2 detour failed"); + } + if (!EzDetour(__MemChecker3,memcheck3,memcheck3_tramp)) + { + printf("memcheck3 detour failed"); + } + if (!EzDetour(__MemChecker4,memcheck4,memcheck4_tramp)) + { + printf("memcheck4 detour failed"); + } + if (!EzDetour(CEverQuest__Emote,&CEmoteHook::Detour,&CEmoteHook::Trampoline)) + { + printf("emote detour failed"); + } + if (!EzDetour(CObfuscator__doit,&CObfuscator::doit_detour,&CObfuscator::doit_tramp)) + { + printf("CObfuscator::doit detour failed"); + } + HookInlineChecks(Patch); + } else { + HookInlineChecks(Patch); + EzUnDetour(__MemChecker0); + EzUnDetour(__MemChecker2); + EzUnDetour(__MemChecker3); + EzUnDetour(__MemChecker4); + EzUnDetour(CObfuscator__doit); + EzUnDetour(CEverQuest__Emote); + } +} + +//extern void Heartbeat(); +void __cdecl PulseService(bool Broadcast, unsigned int MSG, void *lpData) +{ + if (MSG==PULSE_PREFRAME) + { + // "OnPulse" + // Heartbeat is moved back into ProcessGameEvents, where MQ2's heartbeat is +// Heartbeat(); + } +} + +void __cdecl MemoryService(bool Broadcast, unsigned int MSG, void *lpData) +{ + // no messages are currently associated with this service (other than + // system messages such as client disconnect), so do nothing. +} +void __cdecl TriggerService(bool Broadcast, unsigned int MSG, void *lpData) +{ + // no messages are currently associated with this service (other than + // system messages such as client disconnect), so do nothing. +} +void __cdecl HTTPService(bool Broadcast, unsigned int MSG, void *lpData) +{ + switch(MSG) + { +#define pReq ((HttpFile*)lpData) + case HTTPSERVICE_FAILURE: + // HTTP request failed to retrieve document + printf("ISXEQ URL %s failed",pReq->URL); + break; + case HTTPSERVICE_SUCCESS: + // HTTP request successfully retrieved document + printf("ISXEQ URL %s -- %d bytes",pReq->URL,pReq->Size); + // Retrieved data buffer is pReq->pBuffer and is null-terminated + break; +#undef pReq + } +} + +void __cdecl ProtectionRequest(ISXInterface *pClient, unsigned int MSG, void *lpData) +{ + switch(MSG) + { + case MEMPROTECT_PROTECT: +#define pData ((MemProtect*)lpData) + pData->Success=pExtension->Protect(pData->Address,pData->Length,pData->OriginalData); +// printf("Protection: %X for %d length, success=%d",pData->Address,pData->Length,pData->Success); +#undef pData + break; + case MEMPROTECT_UNPROTECT: + pExtension->UnProtect((unsigned int)lpData); + break; + } +} + +#if 0 +void __cdecl SoftwareCursorService(bool Broadcast, unsigned int MSG, void *lpData) +{ + // receives nothing +} +#endif + +bool CISXEQ::Memcpy_Clean(unsigned int BeginAddress, unsigned char *buf, unsigned int buflen) +{ + memcpy(buf,(void*)BeginAddress,buflen); + + unsigned int EndAddress=BeginAddress+buflen; + for (map::iterator i = ProtectedMap.begin() ; i!=ProtectedMap.end() ; i++) + { + if (EQProtected *pProt=i->second) + { + + // find leftmost end + unsigned int RangeEnd=pProt->EndAddress; + if (RangeEnd>EndAddress) + RangeEnd=EndAddress; + + // find rightmost beginning + unsigned int RangeBegin=pProt->Address; + if (RangeBeginAddress; + unsigned int BufOffset = RangeBegin-BeginAddress; + unsigned int Range = RangeEnd-RangeBegin; + memcpy(&buf[BufOffset],&pProt->Array[ProtOffset],Range); + } + } + return true; +} + + diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQ.h b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQ.h new file mode 100644 index 0000000000..0a6c2251cf --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQ.h @@ -0,0 +1,119 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#pragma once +#pragma pack(push) +#pragma pack(4) +#include +#pragma pack(pop) +#pragma warning(disable: 4996) +class EQProtected +{ +public: + EQProtected(unsigned int p_Address, unsigned int p_Size, const void *OriginalData) + { + Address=p_Address; + Size=p_Size; + EndAddress=Address+Size; + Array=(unsigned char*)malloc(p_Size); + if (OriginalData) + memcpy(Array,OriginalData, p_Size); + else + memcpy(Array,(char *)p_Address, p_Size); + } + + ~EQProtected() + { + free(Array); + } + + inline bool Contains(unsigned int TestAddress) + { + return (TestAddress>=Address && TestAddress ProtectedMap; +}; + +extern ISInterface *pISInterface; +extern HISXSERVICE hPulseService; +extern HISXSERVICE hMemoryService; +extern HISXSERVICE hHTTPService; +extern HISXSERVICE hTriggerService; + +extern CISXEQ *pExtension; +#define printf pISInterface->Printf + +extern unsigned int ChatEventID; +extern HISXSERVICE hChatService; +extern HISXSERVICE hUIService; +extern HISXSERVICE hGamestateService; +extern HISXSERVICE hSpawnService; +extern HISXSERVICE hZoneService; + +extern unsigned int PersistentPointerClass; + +#define EzDetour(Address, Detour, Trampoline) IS_Detour(pExtension,pISInterface,hMemoryService,(unsigned int)Address,Detour,Trampoline) +#define EzUnDetour(Address) IS_UnDetour(pExtension,pISInterface,hMemoryService,(unsigned int)Address) + +#define EzModify(Address,NewData,Length) Memory_Modify(pExtension,pISInterface,hMemoryService,(unsigned int)Address,NewData,Length,false) +#define EzUnModify(Address) Memory_UnModify(pExtension,pISInterface,hMemoryService,(unsigned int)Address) + +#define EzHttpRequest(_URL_,_pData_) IS_HttpRequest(pExtension,pISInterface,hHTTPService,_URL_,_pData_) + +extern LSType *pStringType; +extern LSType *pIntType; +extern LSType *pBoolType; +extern LSType *pFloatType; +extern LSType *pTimeType; +extern LSType *pByteType; + +extern LSType *pIntPtrType; +extern LSType *pBoolPtrType; +extern LSType *pFloatPtrType; +extern LSType *pBytePtrType; diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommandAPI.cpp b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommandAPI.cpp new file mode 100644 index 0000000000..ef79cacfa3 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommandAPI.cpp @@ -0,0 +1,225 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif + +#define DBG_SPEW + +#include "..\MQ2Main.h" + +/* +typedef struct _ISXEQAlias +{ + char Replacement[256]; +} ISXEQALIAS, *PISXEQALIAS; + +map ISXEQAliases; + + +PISXEQALIAS FindISXEQAlias(const char *Token) +{ + if (!Token || !Token[0]) + return 0; + char Temp[512]; + strcpy(Temp,Token); + strlwr(Temp); + return ISXEQAliases[Temp]; +} + +void AddISXEQAlias(const char *Replace, const char *With) +{ + if (!Replace || !Replace[0]) + return; + if (!With || !With[0]) + return; + PISXEQALIAS pAlias=FindISXEQAlias(Replace); + if (pAlias) + { + strcpy(pAlias->Replacement,With); + return; + } + pAlias=new ISXEQALIAS; + strcpy(pAlias->Replacement,With); + char Temp[512]; + strcpy(Temp,Replace); + strlwr(Temp); + ISXEQAliases[Temp]=pAlias; +} + +bool RemoveISXEQAlias(const char *Token) +{ + if (!Token || !Token[0]) + return 0; + char Temp[512]; + strcpy(Temp,Token); + strlwr(Temp); + PISXEQALIAS pAlias=ISXEQAliases[Temp]; + if (!pAlias) + return false; + delete pAlias; + ISXEQAliases[Temp]=0; + return true; +} +/**/ + +extern VOID StrReplaceSection(PCHAR szInsert,DWORD Length,PCHAR szNewString); + + +bool ExecuteISCommand(char *Command, char *Parameters=0) +{ + char Temp[4096]={0}; + if (!strchr(Command,':') && !pISInterface->IsAlias(Command) && !pISInterface->ResolveAtom(Command) && !pISInterface->ResolveCommand(Command,Temp,sizeof(Temp))) + { + return false; + } + + if (Parameters) + { + sprintf(Temp,"%s %s",Command,Parameters); + pISInterface->ExecuteCommand(Temp); + } + else + pISInterface->ExecuteCommand(Command); + + return true; +} + +class CCommandHook +{ +public: + VOID Detour(PSPAWNINFO pChar, PCHAR szFullLine) + { + //DebugSpew("CCommandHook::Detour(%s)",szFullLine); + + // apply one alias + char FullCommand[4096]; + strcpy(FullCommand,szFullLine); + szFullLine=FullCommand; + + char CommandName[256]={0}; + + char *pSpace=strchr(FullCommand,' '); + if (pSpace) + *pSpace=0; + strcpy(CommandName,FullCommand); + if (pSpace) + { + *pSpace=' '; + pSpace++; + } + + if (CommandName[0]!='/' || !CommandName[1] || !ExecuteISCommand(&CommandName[1],pSpace)) + { + char FullCommand[8192]={0}; +// strcpy(FullCommand,szFullLine); + pISInterface->DataParse(szFullLine,FullCommand,8192); + Trampoline(pChar,FullCommand); + } + strcpy(szLastCommand,FullCommand); + + /* + PISXEQALIAS pAlias=FindISXEQAlias(CommandName); + if (pAlias) + StrReplaceSection(CommandName,strlen(CommandName),pAlias->Replacement); + + if (CommandName[0]=='/' && CommandName[1] && pISInterface->IsCommand(&CommandName[1])) + { + + } + if (szFullLine[0]=='#') + { + pISInterface->ExecuteCommand(&szFullLine[1]); + strcpy(szLastCommand,szFullLine); + } + else + { + char FullCommand[8192]={0}; + strcpy(FullCommand,szFullLine); + pISInterface->DataParse(FullCommand); + Trampoline(pChar,FullCommand); + strcpy(szLastCommand,FullCommand); + } + /**/ + } + + VOID Trampoline(PSPAWNINFO pChar, PCHAR szFullLine); + +}; + +DETOUR_TRAMPOLINE_EMPTY(VOID CCommandHook::Trampoline(PSPAWNINFO pChar, PCHAR szFullLine)); + +int CMD_EQExecute(int argc, char *argv[]) +{ + if (gGameState!=GAMESTATE_INGAME) + { + WriteChatf("Cannot execute EQ command, not in game!"); + return 0; + } + if (argc<2) + { + WriteChatf("Syntax: %s ",argv[0]); + return 0; + } + char Line[8192]={0}; + pISInterface->GetArgs(1,argc,argv,Line,sizeof(Line)); + ((CCommandHook*)pEverQuest)->Trampoline((PSPAWNINFO)pLocalPlayer,Line); + return 0; +} + +VOID HideDoCommand(PSPAWNINFO pChar, PCHAR szLine, BOOL delayed) +{ + pEverQuest->InterpretCmd((EQPlayer*)pChar,szLine); +} + + +void InitializeMQ2Commands() +{ + EzDetour(CEverQuest__InterpretCmd,&CCommandHook::Detour,&CCommandHook::Trampoline); + +#define COMMAND(name,cmd,parse,hide) pISInterface->AddCommand(name,cmd,parse,hide) +#include "ISXEQCommandList.h" +#undef COMMAND + + pISInterface->AddAlias("d","EQExecute /duel"); + pISInterface->AddAlias("t","EQExecute /tell"); + pISInterface->AddAlias("w","EQExecute /who"); + pISInterface->AddAlias("a","EQExecute /anonymous"); + pISInterface->AddAlias("ta","EQExecute /tap"); + pISInterface->AddAlias("c","EQExecute /consider"); + pISInterface->AddAlias("cha","EQExecute /channel"); + pISInterface->AddAlias("f","EQExecute /feedback"); + pISInterface->AddAlias("fa","EQExecute /fastdrop"); + pISInterface->AddAlias("m","EQExecute /msg"); + pISInterface->AddAlias("load","EQExecute /loadspells"); + pISInterface->AddAlias("b","EQExecute /bazaar"); + pISInterface->AddAlias("ba","EQExecute /bazaar"); + pISInterface->AddAlias("g","EQExecute /gsay"); + pISInterface->AddAlias("gu","EQExecute /guildsay"); + pISInterface->AddAlias("key","EQExecute /keys"); + pISInterface->AddAlias("r","EQExecute /reply"); + pISInterface->AddAlias("time","EQExecute /time"); +} + +void ShutdownMQ2Commands() +{ +#define COMMAND(name,cmd,parse,hide) pISInterface->RemoveCommand(name) +#include "ISXEQCommandList.h" +#undef COMMAND + + EzUnDetour(CEverQuest__InterpretCmd); + +} + diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommandList.h b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommandList.h new file mode 100644 index 0000000000..f1900d45ee --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommandList.h @@ -0,0 +1,43 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +COMMAND("Keypress",CMD_Keypress,true,false); +COMMAND("EQExecute",CMD_EQExecute,true,false); +COMMAND("MQ2Bind",CMD_MQ2Bind,true,false); +COMMAND("Who",CMD_Who,true,false); +COMMAND("Beep",CMD_Beep,true,false); +COMMAND("Ranged",CMD_do_ranged,true,false); +COMMAND("SetAutoRun",CMD_SetAutoRun,true,false); +COMMAND("DisplayLoginName",CMD_DisplayLoginName,true,false); +COMMAND("PopupText",CMD_PopupText,true,false); +COMMAND("BuyItem",CMD_BuyItem,true,false); +COMMAND("SellItem",CMD_SellItem,true,false); +COMMAND("Target",CMD_Target,true,false); +COMMAND("WhoFilter",CMD_WhoFilter,true,false); +COMMAND("Where",CMD_Where,true,false); +COMMAND("CastSpell",CMD_CastSpell,true,false); +COMMAND("MemSpell",CMD_MemSpell,true,false); +COMMAND("DoAbility",CMD_DoAbility,true,false); +COMMAND("NoModKey",CMD_EQModKey,true,false); +COMMAND("ctrl",CMD_EQModKey,true,false); +COMMAND("alt",CMD_EQModKey,true,false); +COMMAND("shift",CMD_EQModKey,true,false); +COMMAND("destroy",CMD_EQDestroy,true,false); +COMMAND("face",CMD_EQFace,true,false); +COMMAND("look",CMD_EQLook,true,false); +COMMAND("items",CMD_EQItems,true,false); +COMMAND("eqecho",CMD_EQEcho,true,false); +//COMMAND("EQAlias",CMD_EQAlias,true,false); // deprecated +COMMAND("doortarget",CMD_DoorTarget,true,false); +COMMAND("itemtarget",CMD_ItemTarget,true,false); diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommands.cpp b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommands.cpp new file mode 100644 index 0000000000..bdd8b1c08c --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommands.cpp @@ -0,0 +1,1293 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif + +#define DBG_SPEW + +#include "..\MQ2Main.h" + +/* +// COMMANDS TO CONVERT +EQLIB_API VOID NoModKeyCmd(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID CaptionColorCmd(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID CaptionCmd(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID DropCmd(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID CombineCmd(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID ClearErrorsCmd(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID DoShiftCmd(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID DoCtrlCmd(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID DoAltCmd(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID DumpBindsCommand(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID LoadCfgCommand(PSPAWNINFO pChar, PCHAR szLine); +EQLIB_API VOID Alert (PSPAWNINFO,PCHAR); +EQLIB_API VOID AltAbility (PSPAWNINFO,PCHAR); +EQLIB_API VOID BankList (PSPAWNINFO,PCHAR); +EQLIB_API VOID BuyItem (PSPAWNINFO,PCHAR); +EQLIB_API VOID CharInfo (PSPAWNINFO,PCHAR); +EQLIB_API VOID Cast (PSPAWNINFO,PCHAR); +EQLIB_API VOID Cleanup (PSPAWNINFO,PCHAR); +EQLIB_API VOID Click (PSPAWNINFO,PCHAR); +EQLIB_API VOID DebugSpewFile (PSPAWNINFO,PCHAR); +EQLIB_API VOID EQDestroyHeldItemOrMoney (PSPAWNINFO,PCHAR); +EQLIB_API VOID DisplayLoginName (PSPAWNINFO,PCHAR); +EQLIB_API VOID DoAbility (PSPAWNINFO,PCHAR); +EQLIB_API VOID DoEvents (PSPAWNINFO,PCHAR); +EQLIB_API VOID DoSocial (PSPAWNINFO,PCHAR); +EQLIB_API VOID Doors (PSPAWNINFO,PCHAR); +EQLIB_API VOID DoorTarget (PSPAWNINFO,PCHAR); +EQLIB_API VOID Exec (PSPAWNINFO,PCHAR); +EQLIB_API VOID Face (PSPAWNINFO,PCHAR); +EQLIB_API VOID Filter (PSPAWNINFO,PCHAR); +EQLIB_API VOID Help (PSPAWNINFO,PCHAR); +EQLIB_API VOID Hotkey (PSPAWNINFO,PCHAR); +EQLIB_API VOID Identify (PSPAWNINFO,PCHAR); +EQLIB_API VOID IniOutput (PSPAWNINFO,PCHAR); +EQLIB_API VOID Items (PSPAWNINFO,PCHAR); +EQLIB_API VOID ItemTarget (PSPAWNINFO,PCHAR); +EQLIB_API VOID WindowState (PSPAWNINFO,PCHAR); +EQLIB_API VOID LoadSpells (PSPAWNINFO,PCHAR); +EQLIB_API VOID Location (PSPAWNINFO,PCHAR); +EQLIB_API VOID Look (PSPAWNINFO,PCHAR); +EQLIB_API VOID MacroLog (PSPAWNINFO,PCHAR); +EQLIB_API VOID MemSpell (PSPAWNINFO,PCHAR); +EQLIB_API VOID MouseTo (PSPAWNINFO,PCHAR); +EQLIB_API VOID MQMsgBox (PSPAWNINFO,PCHAR); +EQLIB_API VOID SellItem (PSPAWNINFO,PCHAR); +EQLIB_API VOID SetError (PSPAWNINFO,PCHAR); +EQLIB_API VOID Skills (PSPAWNINFO,PCHAR); +EQLIB_API VOID Substitute (PSPAWNINFO,PCHAR); +EQLIB_API VOID SuperWhoTarget (PSPAWNINFO,PCHAR); +EQLIB_API VOID SWhoFilter (PSPAWNINFO,PCHAR); +EQLIB_API VOID Target (PSPAWNINFO,PCHAR); +EQLIB_API VOID UpdateItemInfo (PSPAWNINFO,PCHAR); +/**/ + +//EQLIB_API VOID DoMappable(PSPAWNINFO pChar, PCHAR szLine) +int CMD_Keypress(int argc, char *argv[]) +{ + if (argc<2) + { + WriteChatf("Syntax: %s [hold|chat]",argv[0]); + return 0; + } + bool bHold=false; + bool bChat=false; + if (argc==3) + { + if (!stricmp(argv[2],"hold")) + { + bHold=true; + } + else if (!stricmp(argv[2],"chat")) + { + bChat=true; + } + } + if (!PressMQ2KeyBind(argv[1],bHold)) + { + int N=FindMappableCommand(argv[1]); + if (N>=0) + { + ExecuteCmd(N,1,0); + if (!bHold) + ExecuteCmd(N,0,0); + return 0; + } + KeyCombo Temp; + if (ParseKeyCombo(argv[1],Temp)) + { + if (bChat) + { + pWndMgr->HandleKeyboardMsg(Temp.Data[3],1); + pWndMgr->HandleKeyboardMsg(Temp.Data[3],0); + } + else + { + MQ2HandleKeyDown(Temp); + if (!bHold) + MQ2HandleKeyUp(Temp); + } + return 0; + } + + WriteChatf("Invalid mappable command or key combo '%s'",argv[1]); + return -1; + } + return 0; +} + +int CMD_Who(int argc, char *argv[]) +{ + if (!cmdWho) + { + PCMDLIST pCmdListOrig = (PCMDLIST)EQADDR_CMDLIST; + for (int i=0;pCmdListOrig[i].fAddress != 0;i++) { + if (!strcmp(pCmdListOrig[i].szName,"/who")) { + cmdWho = (fEQCommand)pCmdListOrig[i].fAddress; + } + } + } + if (!cmdWho) return -1; + + for (int i = 1 ; i < argc ; i++) + { + if (!stricmp(argv[i],"all")) + { + CHAR szRest[MAX_STRING] = {0}; + pISInterface->GetArgs(1,argc,argv,szRest,sizeof(szRest)); + cmdWho((PSPAWNINFO)pLocalPlayer, szRest); + return 0; + } + } + + bool bConColor=false; + SEARCHSPAWN SearchSpawn; + + ClearSearchSpawn(&SearchSpawn); + SearchSpawn.SpawnType = PC; + + for (int i = 1 ; i < argc ; i++) + { + if (!stricmp(argv[i],"sort")) + { + // + PCHAR szSortBy[] = { + "level", // Default sort by + "name", + "race", + "class", + "distance", + "guild", + "id", + NULL }; + DWORD Command=0; + for (Command;szSortBy[Command];Command++) + { + if (!stricmp(argv[i],szSortBy[Command])) + { + SearchSpawn.SortBy = Command; + if (i1) + { + pRangedTarget=GetSpawnByID(atoi(argv[1])); + if (!pRangedTarget) + { + printf("Invalid spawn ID. Use /ranged with no parameters, or with a spawn ID"); + return 0; + } + } + if (!pRangedTarget) + { + printf("No target for ranged attack"); + return 0; + } + if (gbRangedAttackReady) + { + pLocalPlayer->DoAttack(0x0B,0,pRangedTarget); + gbRangedAttackReady=0; + } + return 0; +} +// /autorun +int CMD_SetAutoRun(int argc, char *argv[]) +{ + if (argc<2) + { + WriteChatf("Syntax: %s on|off",argv[0]); + return 0; + } +#if 0 + if(!stricmp(argv[1],"on") || !stricmp(argv[1],"off")) + { + CHAR szServerAndName[MAX_STRING] = {0}; + sprintf(szServerAndName,"%s.%s",((PCHARINFO)pCharData)->Server,((PCHARINFO)pCharData)->Name); + WritePrivateProfileString(szServerAndName,"AutoRun",argv[1],gszINIFilename); + sprintf(szServerAndName,"Set autorun to: '%s'",argv[1]); + WriteChatColor(szServerAndName,USERCOLOR_DEFAULT); + } +#endif + return 0; +} + +// /loginname +int CMD_DisplayLoginName(int argc, char *argv[]) +{ + PCHAR szLogin = GetLoginName(); + if (!szLogin) { + printf("Unable to retrieve login name."); + } else { + WriteChatf("Login name: \ay%s\ax",szLogin); + free(szLogin); + } + return 0; +} + +// /popup +int CMD_PopupText(int argc, char *argv[]) +{ + if (argc<2) + { + printf("Syntax: %s ",argv[0]); + return 0; + } + + CHAR szRest[MAX_STRING] = {0}; + pISInterface->GetArgs(1,argc,argv,szRest, sizeof(szRest)); + DisplayOverlayText(szRest, CONCOLOR_LIGHTBLUE, 100, 500,500,3000); + return 0; +} + +int CMD_BuyItem(int argc, char *argv[]) +{ + if (argc<2) + { + WriteChatf("Syntax: %s ",argv[0]); + return 0; + } + if (!pMerchantWnd) + { + return 0; + } + PCHARINFO pCharInfo; + if (NULL == (pCharInfo = GetCharInfo())) + return 0; + + DWORD Qty=(DWORD)atoi(argv[1]); + + if (Qty > 20 || Qty < 1) return 0; + pMerchantWnd->RequestBuyItem(Qty); + return 0; +} +int CMD_SellItem(int argc, char *argv[]) +{ + if (argc<2) + { + WriteChatf("Syntax: %s ",argv[0]); + return 0; + } + if (!pMerchantWnd) + return 0; + PCHARINFO pCharInfo; + if (NULL == (pCharInfo = GetCharInfo())) return 0; + + DWORD Qty = (DWORD)atoi(argv[1]); + if (Qty > 20 || Qty < 1) return 0; + pMerchantWnd->RequestSellItem(Qty); + return 0; +} + +int CMD_Target(int argc, char* argv[]) +{ + if (!ppSpawnManager) return 0; + if (!pSpawnList) return 0; + if (argc<2) + { + WriteChatf("Syntax: %s myself|mycorpse|clear|",argv[0]); + return 0; + } + + PSPAWNINFO pChar = GetCharInfo()->pSpawn; + PSPAWNINFO pSpawnClosest = NULL; + + SEARCHSPAWN SearchSpawn; + ClearSearchSpawn(&SearchSpawn); + CHAR szMsg[MAX_STRING] = {0}; + BOOL DidTarget = FALSE; + BOOL bArg = TRUE; + + bRunNextCommand = TRUE; + for(int i=1;iName); + } + } else if (!stricmp(argv[i],"clear")) { + pTarget = NULL; + DebugSpew("Target cleared."); + WriteChatColor("Target cleared.",USERCOLOR_WHO); + return 0; + } else { + i+= ParseSearchSpawnArg(i,argc,argv,SearchSpawn); + } + } + + if (pTarget) SearchSpawn.FromSpawnID = ((PSPAWNINFO)pTarget)->SpawnID; + + if (!DidTarget) { + pSpawnClosest = SearchThroughSpawns(&SearchSpawn,pChar); + } + + if (!pSpawnClosest) { + CHAR szTemp[MAX_STRING] = {0}; + sprintf(szMsg,"There are no spawns matching: %s",FormatSearchSpawn(szTemp,&SearchSpawn)); + } else { + PSPAWNINFO *psTarget = NULL; + if (ppTarget) { + psTarget = (PSPAWNINFO*)ppTarget; + *psTarget = pSpawnClosest; + DebugSpew("Target - %s selected",pSpawnClosest->Name); + szMsg[0]=0; + } else { + sprintf(szMsg,"Unable to target, address = 0"); + } + } + if (szMsg[0]) + if (!gFilterTarget) WriteChatColor(szMsg,USERCOLOR_WHO); + return 0; +} + +int CMD_WhoFilter(int argc, char* argv[]) +{ + if (argc < 3) + { + WriteChatf("Syntax: %s [on|off]",0); + return 0; + } + + if (!stricmp(argv[1],"Lastname")) { + SetDisplaySWhoFilter(&gFilterSWho.Lastname,"Lastname",argv[2]); + } else if (!stricmp(argv[1],"Class")) { + SetDisplaySWhoFilter(&gFilterSWho.Class,"Class",argv[2]); + } else if (!stricmp(argv[1],"Race")) { + SetDisplaySWhoFilter(&gFilterSWho.Race,"Race",argv[2]); + } else if (!stricmp(argv[1],"Body")) { + SetDisplaySWhoFilter(&gFilterSWho.Body,"Body",argv[2]); + } else if (!stricmp(argv[1],"Level")) { + SetDisplaySWhoFilter(&gFilterSWho.Level,"Level",argv[2]); + } else if (!stricmp(argv[1],"GM")) { + SetDisplaySWhoFilter(&gFilterSWho.GM,"GM",argv[2]); + } else if (!stricmp(argv[1],"Guild")) { + SetDisplaySWhoFilter(&gFilterSWho.Guild,"Guild",argv[2]); + } else if (!stricmp(argv[1],"LD")) { + SetDisplaySWhoFilter(&gFilterSWho.LD,"LD",argv[2]); + } else if (!stricmp(argv[1],"Sneak")) { + SetDisplaySWhoFilter(&gFilterSWho.Sneak,"Sneak",argv[2]); + } else if (!stricmp(argv[1],"LFG")) { + SetDisplaySWhoFilter(&gFilterSWho.LFG,"LFG",argv[2]); + } else if (!stricmp(argv[1],"NPCTag")) { + SetDisplaySWhoFilter(&gFilterSWho.NPCTag,"NPCTag",argv[2]); + } else if (!stricmp(argv[1],"SpawnID")) { + SetDisplaySWhoFilter(&gFilterSWho.SpawnID,"SpawnID",argv[2]); + } else if (!stricmp(argv[1],"Trader")) { + SetDisplaySWhoFilter(&gFilterSWho.Trader,"Trader",argv[2]); + } else if (!stricmp(argv[1],"AFK")) { + SetDisplaySWhoFilter(&gFilterSWho.AFK,"AFK",argv[2]); + } else if (!stricmp(argv[1],"Anon")) { + SetDisplaySWhoFilter(&gFilterSWho.Anon,"Anon",argv[2]); + } else if (!stricmp(argv[1],"Distance")) { + SetDisplaySWhoFilter(&gFilterSWho.Distance,"Distance",argv[2]); + } else if (!stricmp(argv[1],"Light")) { + SetDisplaySWhoFilter(&gFilterSWho.Light,"Light",argv[2]); + } else if (!stricmp(argv[1],"Holding")) { + SetDisplaySWhoFilter(&gFilterSWho.Holding,"Holding",argv[2]); + } else if (!stricmp(argv[1],"ConColor")) { + SetDisplaySWhoFilter(&gFilterSWho.ConColor,"ConColor",argv[2]); + } else if (!stricmp(argv[1],"Invisible")) { + SetDisplaySWhoFilter(&gFilterSWho.Invisible,"Invisible",argv[2]); + } else { + WriteChatf("Syntax: %s [on|off]",0); + } + return 0; +} + +// *************************************************************************** +// Function: CMD_Where +// Description: Our '/where' command +// Displays the direction and distance to the closest spawn +// Usage: /where +// *************************************************************************** +int CMD_Where(int argc, char* argv[]) +{ + if (argc<2) + { + WriteChatf("Syntax: %s ",argv[0]); + return 0; + } + if (!ppSpawnManager) return 0; + if (!pSpawnList) return 0; + PSPAWNINFO pChar = GetCharInfo()->pSpawn; + PSPAWNINFO pSpawnClosest = NULL; + SEARCHSPAWN SearchSpawn; + ClearSearchSpawn(&SearchSpawn); + CHAR szMsg[MAX_STRING] = {0}; + CHAR szName[MAX_STRING] = {0}; + CHAR szArg[MAX_STRING] = {0}; + + bRunNextCommand = TRUE; + SearchSpawn.SpawnType= PC; + + ParseSearchSpawn(1,argc,argv,SearchSpawn); + + if (!(pSpawnClosest = SearchThroughSpawns(&SearchSpawn,pChar))) { + sprintf(szMsg,"There were no matches for: %s",FormatSearchSpawn(szArg,&SearchSpawn)); + } else { + INT Angle = (INT)((atan2f(pChar->X - pSpawnClosest->X, pChar->Y - pSpawnClosest->Y) * 180.0f / PI + 360.0f) / 22.5f + 0.5f) % 16; + sprintf(szMsg,"The closest '%s' is a level %d %s %s and %1.2f away to the %s, Z difference = %1.2f", + CleanupName(strcpy(szName,pSpawnClosest->Name),FALSE), + pSpawnClosest->Level, + pEverQuest->GetRaceDesc(pSpawnClosest->Race), + GetClassDesc(pSpawnClosest->Class), + DistanceToSpawn(pChar,pSpawnClosest), + szHeading[Angle], + pSpawnClosest->Z-pChar->Z); + DebugSpew("Where - %s",szMsg); + } + WriteChatColor(szMsg,USERCOLOR_WHO); + + return 0; +} + + +// *************************************************************************** +// Function: CMD_CastSpell +// Description: Our '/cast' command +// Displays the direction and distance to the closest spawn +// Usage: /cast [list|#|"name of spell"|item "name of item"] +// *************************************************************************** +int CMD_CastSpell(int argc, char* argv[]) +{ + DWORD Index; + if (gGameState!=GAMESTATE_INGAME) + return -1; + + if (!cmdCast) + { + PCMDLIST pCmdListOrig = (PCMDLIST)EQADDR_CMDLIST; + for (int i=0;pCmdListOrig[i].fAddress != 0;i++) { + if (!strcmp(pCmdListOrig[i].szName,"/cast")) { + cmdCast = (fEQCommand)pCmdListOrig[i].fAddress; + } + } + } + if (!cmdCast) return -1; + if (argc<2) + { + WriteChatf("Syntax: %s list|#||item ",argv[0]); + return 0; + } + + if ( !ppSpellMgr || !ppCharData || !pCharData) { + return -1; + } + PCHARINFO pCharInfo = GetCharInfo(); + if (NULL == pCharInfo) return -1; + if (argc == 2 && atoi(argv[1])){ + cmdCast((PSPAWNINFO)pLocalPlayer, argv[1]); + return 0; + } + // CHAR szArg1[MAX_STRING] = {0}; + // CHAR szArg2[MAX_STRING] = {0}; + if (!stricmp(argv[1],"list")) { + WriteChatColor("Spells:",USERCOLOR_DEFAULT); + for (Index=0;IndexMemorizedSpells[Index]==0xFFFFFFFF) { + WriteChatf("%d. ",Index+1); + } else { + WriteChatf("%d. %s",Index+1,GetSpellByID(GetCharInfo2()->MemorizedSpells[Index])); + } + } + return 0; + } + + // GetArg(szArg1,szLine,1); + // GetArg(szArg2,szLine,2); + // DebugSpew("Cast: szArg1 = %s szArg2 = %s",szArg1,szArg2); + if (!stricmp(argv[1],"item")) + { + BOOL FOUND = FALSE; + DWORD item = 0; + DWORD slot = 0; + DWORD SpawnFooter = NULL; + SpawnFooter = (DWORD)pLocalPlayer; + PITEMINFO pItem=0; + for (int i=0;ipInventoryArray->InventoryArray[i]) + if (!_stricmp(argv[2],GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[i])->Name)) { + DebugSpew("cast test slot %d = %s address is %x",i,GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[i])->Name,&(GetCharInfo2()->pInventoryArray->InventoryArray[i])); + item = (DWORD)&GetCharInfo2()->pInventoryArray->InventoryArray[i]; + pItem=GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[i]); + slot = (DWORD)i; + FOUND = TRUE; + break; + } + } + if (FOUND) { + if(CInvSlot *pSlot = pInvSlotMgr->FindInvSlot(slot)) + { + CXPoint p; p.A=0; p.B=0; + pSlot->HandleRButtonUp(&p); + } + return 0; + } + } + for (Index=0;IndexMemorizedSpells[Index]!=0xFFFFFFFF) { + PCHAR SpellName = GetSpellNameByID(GetCharInfo2()->MemorizedSpells[Index]); + if (!stricmp(argv[1],SpellName)) { + DebugSpew("SpellName = %s",SpellName); + + char szBuffer[256]; + cmdCast((PSPAWNINFO)pLocalPlayer,itoa(Index+1,szBuffer,10)); + + DebugSpew("pChar = %x SpellName = %s %d",pCharInfo,SpellName,Index+1); + return 0; + } + } + } + WriteChatColor("You do not seem to have that spell memorized.",USERCOLOR_DEFAULT); + return 0; + +} + +// *************************************************************************** +// Function: MemSpell +// Description: Our '/MemSpell' command +// Usage: /MemSpell gem# "spell name" +// *************************************************************************** +SPELLFAVORITE MemSpellFavorite; +int CMD_MemSpell(int argc, char *argv[]) +{ + if (argc < 3) + { + WriteChatf("Syntax: %s ",argv[0]); + return 0; + } + if (!ppSpellBookWnd) return -1; + DWORD Favorite = (DWORD)&MemSpellFavorite; + DWORD sp; + WORD Gem = -1; + PCHARINFO pCharInfo = NULL; + if (!pSpellBookWnd) return -1; + if (NULL == (pCharInfo = GetCharInfo())) return -1; + + Gem = atoi(argv[1]); + if (Gem<1 || Gem>NUM_SPELL_GEMS) return -1; + Gem--; + + GetCharInfo2()->SpellBook; + PSPELL pSpell=0; + for (DWORD N = 0 ; N < NUM_BOOK_SLOTS ; N++) + if (PSPELL pTempSpell=GetSpellByID(GetCharInfo2()->SpellBook[N])) + { + if (!stricmp(argv[2],pTempSpell->Name)) + { + pSpell=pTempSpell; + break; + } + } + + if (!pSpell) return -1; + if (pSpell->Level[GetCharInfo2()->Class-1]>GetCharInfo2()->Level) return -1; + + ZeroMemory(&MemSpellFavorite,sizeof(MemSpellFavorite)); + strcpy(MemSpellFavorite.Name,"Mem a Spell"); + MemSpellFavorite.inuse=1; + for (sp=0;spID; + pSpellBookWnd->MemorizeSet((int*)Favorite,NUM_SPELL_GEMS); + return 0; +} + +// *************************************************************************** +// Function: DoAbility +// Description: Our '/doability' command +// Does (or lists) your abilities +// Usage: /doability [list|ability|#] +// *************************************************************************** +int CMD_DoAbility(int argc, char *argv[]) +{ + if (argc<2) + { + printf("Syntax: %s list|",argv[0]); + return 0; + } + + DWORD Index, DoIndex = 0xFFFFFFFF; + + if (!stricmp(argv[1],"list") || !stricmp(argv[1], "-list")) + { + WriteChatColor("Abilities:",USERCOLOR_DEFAULT); + for (Index=4;Index<10;Index++) { + if (EQADDR_DOABILITYLIST[Index]==0xFFFFFFFF) + { + WriteChatf("%d. ",Index-3); + } + else if (szSkills[EQADDR_DOABILITYLIST[Index]]) + { + WriteChatf("%d. %s",Index-3,szSkills[EQADDR_DOABILITYLIST[Index]]); + } + else + { + WriteChatf("%d. *Unknown%d",Index-3,EQADDR_DOABILITYLIST[Index]); + } + } + WriteChatColor("Combat Skills:"); + for (Index=0;Index<4;Index++) + { + if (EQADDR_DOABILITYLIST[Index]==0xFFFFFFFF) + { + WriteChatf("%d. ",Index+7); + } + else if (szSkills[EQADDR_DOABILITYLIST[Index]]) + { + WriteChatf("%d. %s",Index+7,szSkills[EQADDR_DOABILITYLIST[Index]]); + } + else + { + WriteChatf("%d. *Unknown%d",Index+7,EQADDR_DOABILITYLIST[Index]); + } + } + WriteChatColor("Combat Abiilities:",USERCOLOR_DEFAULT); + for (Index=10;Index<18;Index++) + { + if (EQADDR_DOABILITYLIST[Index]==0xFFFFFFFF) + { + WriteChatf("%d. ",Index+1); + } + else if (EQADDR_DOABILITYLIST[Index] > 132) + { // highest number we have defined so far + WriteChatf("%d. *Unknown%d",Index+1,EQADDR_DOABILITYLIST[Index]); + } + else if (szSkills[EQADDR_DOABILITYLIST[Index]]) + { + WriteChatf("%d. %s",Index+1,szSkills[EQADDR_DOABILITYLIST[Index]]); + } + else + { + WriteChatf("%d. *Unknown%d",Index+1,EQADDR_DOABILITYLIST[Index]); + } + } + return 0; + } + + UseAbility(argv[1]); + + return 0; +} +/* +int CMD_DoAbility(int argc, char *argv[]) +{ + if (!cmdDoAbility) + { + PCMDLIST pCmdListOrig = (PCMDLIST)EQADDR_CMDLIST; + for (int i=0;pCmdListOrig[i].fAddress != 0;i++) { + if (!strcmp(pCmdListOrig[i].szName,"/doability")) { + cmdDoAbility = (fEQCommand)pCmdListOrig[i].fAddress; + } + } + } + if (!cmdDoAbility) return -1; + + if (argc<2 || atoi(argv[1]) || !EQADDR_DOABILITYLIST) { + cmdDoAbility((PSPAWNINFO)pLocalPlayer,argv[1]); + return 0; + } + + DWORD Index, DoIndex = 0xFFFFFFFF; + CHAR szBuffer[MAX_STRING] = {0}; + + if (!stricmp(argv[1],"list") || !stricmp(argv[1], "-list")) { + WriteChatColor("Abilities:",USERCOLOR_DEFAULT); + for (Index=4;Index<10;Index++) { + if (EQADDR_DOABILITYLIST[Index]==0xFFFFFFFF) { + sprintf(szBuffer,"%d. ",Index-3); + } else if (szSkills[EQADDR_DOABILITYLIST[Index]]) { + sprintf(szBuffer,"%d. %s",Index-3,szSkills[EQADDR_DOABILITYLIST[Index]]); + } else { + sprintf(szBuffer,"%d. *Unknown%d",Index-3,EQADDR_DOABILITYLIST[Index]); + } + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + WriteChatColor("Combat Skills:",USERCOLOR_DEFAULT); + for (Index=0;Index<4;Index++) { + if (EQADDR_DOABILITYLIST[Index]==0xFFFFFFFF) { + sprintf(szBuffer,"%d. ",Index+7); + } else if (szSkills[EQADDR_DOABILITYLIST[Index]]) { + sprintf(szBuffer,"%d. %s",Index+7,szSkills[EQADDR_DOABILITYLIST[Index]]); + } else { + sprintf(szBuffer,"%d. *Unknown%d",Index+7,EQADDR_DOABILITYLIST[Index]); + } + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + WriteChatColor("Combat Abiilities:",USERCOLOR_DEFAULT); + for (Index=10;Index<18;Index++) { + if (EQADDR_DOABILITYLIST[Index]==0xFFFFFFFF) { + sprintf(szBuffer,"%d. ",Index+1); + } else if (EQADDR_DOABILITYLIST[Index] > 132) { // highest number we have defined so far + sprintf(szBuffer,"%d. *Unknown%d",Index+1,EQADDR_DOABILITYLIST[Index]); + } else if (szSkills[EQADDR_DOABILITYLIST[Index]]) { + sprintf(szBuffer,"%d. %s",Index+1,szSkills[EQADDR_DOABILITYLIST[Index]]); + } else { + sprintf(szBuffer,"%d. *Unknown%d",Index+1,EQADDR_DOABILITYLIST[Index]); + } + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + return 0; + } + + pISInterface->GetArgs(1,argc,argv,szBuffer); + + for (Index=0;Index<10;Index++) { + if (EQADDR_DOABILITYLIST[Index]!= 0xFFFFFFFF) { + if (!strnicmp(szBuffer,szSkills[EQADDR_DOABILITYLIST[Index]],strlen(szSkills[EQADDR_DOABILITYLIST[Index]]))) { + if (Index<4) { + DoIndex = Index+7; // 0-3 = Combat abilities (7-10) + } else { + DoIndex = Index-3; // 4-9 = Abilities (1-6) + } + } + } + } + if (DoIndex!=0xFFFFFFFF) { + cmdDoAbility((PSPAWNINFO)pLocalPlayer,itoa(DoIndex,szBuffer,10)); + } else { + WriteChatColor("You do not seem to have that ability on a /doability button",USERCOLOR_DEFAULT); + } + return 0; +} +/**/ + +// CMD_EQModKey +int CMD_EQModKey(int argc, char *argv[]) +{ + CHAR chCommand[2048] = {0}; + bool KeyboardFlags[4] = {false,false,false,false}; + + if (argc<1) + { + WriteChatf("Usage: %s ", argv[0]); + return 0; + } + pISInterface->GetArgs(1,argc,argv,chCommand,sizeof(chCommand)); + *(DWORD*)&KeyboardFlags=*(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags; + if (!stricmp(argv[0],"nomodkey")) + *(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags=0; + else if (!stricmp(argv[0],"shift")) + ((PCXWNDMGR)pWndMgr)->KeyboardFlags[0]=1; + else if (!stricmp(argv[0],"ctrl")) + ((PCXWNDMGR)pWndMgr)->KeyboardFlags[1]=1; + else if (!stricmp(argv[0],"alt")) + ((PCXWNDMGR)pWndMgr)->KeyboardFlags[2]=1; + DebugSpew("CMD_EQModKey Executing %s", chCommand); + pISInterface->ExecuteCommand(chCommand); + *(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags=*(DWORD*)&KeyboardFlags; + return 0; +} +int CMD_EQDestroy(int argc, char *argv[]) +{ + (pPCData)->DestroyHeldItemOrMoney(); + return 0; +} + + +int CMD_EQFace(int argc, char *argv[]) +{ +//VOID Face(PSPAWNINFO pChar, PCHAR szLine) +//{ + if (!ppSpawnManager) return 0; + if (!pSpawnList) return 0; + PSPAWNINFO pSpawnClosest = NULL; + PSPAWNINFO psTarget = NULL; + SPAWNINFO LocSpawn = {0}; + PSPAWNINFO pChar = (PSPAWNINFO)pLocalPlayer; + SEARCHSPAWN SearchSpawn; + ClearSearchSpawn(&SearchSpawn); + CHAR szMsg[MAX_STRING] = {0}; + CHAR szName[MAX_STRING] = {0}; + CHAR szArg[MAX_STRING] = {0}; + PCHAR pszArg = NULL; + BOOL bArg = TRUE; + BOOL bOtherArgs = FALSE; + BOOL Away = FALSE; + BOOL Predict = FALSE; + BOOL Fast = FALSE; + BOOL Look = TRUE; + BOOL Parsing = TRUE; + DOUBLE Distance; + + for(int qq=1; qqY = (FLOAT)atof(argv[qq]); + pszArg = strstr(argv[qq],",")+1; + pSpawnClosest->X = (FLOAT)atof(pszArg); + } + } else if (!stricmp(argv[qq], "item")) { + if (EnviroTarget.Name[0]==0) { + printf("%s: item specified but no item targetted.", argv[0]); + return 0; + } + pSpawnClosest = &EnviroTarget; + } else if (!stricmp(argv[qq], "door")) { + if (DoorEnviroTarget.Name[0]==0) { + printf("%s: door specified but no door targetted.",argv[0]); + return 0; + } + pSpawnClosest = &DoorEnviroTarget; + } else if (!stricmp(argv[qq], "heading")) { + if ((++qq)=512.0f) gFaceAngle -= 512.0f; + if (gFaceAngle<0.0f) gFaceAngle += 512.0f; + if (Fast) { + ((PSPAWNINFO)pCharSpawn)->Heading = (FLOAT)gFaceAngle; + gFaceAngle=10000.0f; + } + } + return 0; + } else if (!strcmp(szArg,"help")) { + printf("Usage: %s [spawn] [item] [door] [id #] [heading ] [loc ,] [away] [alert #]",argv[0]); + return 0; + } else { + bOtherArgs = TRUE; + qq+=ParseSearchSpawnArg(qq,argc,argv,SearchSpawn); +// szFilter = ParseSearchSpawnArgs(szArg,szFilter,&SearchSpawn); + } + } + + if (!pSpawnClosest) { + if (!bOtherArgs) { + if (ppTarget && pTarget) { + pSpawnClosest = (PSPAWNINFO)pTarget; + } + } else { + pSpawnClosest = SearchThroughSpawns(&SearchSpawn,pChar); + } + } + + szMsg[0]=0; + + if (!pSpawnClosest) { + printf("There were no matches for: %s",FormatSearchSpawn(szArg,&SearchSpawn)); + } else { + if (Predict) { + Distance = DistanceToSpawn(pChar, pSpawnClosest); + gFaceAngle = ( + atan2((pSpawnClosest->X + (pSpawnClosest->SpeedX * Distance)) - pChar->X, + (pSpawnClosest->Y + (pSpawnClosest->SpeedY * Distance)) - pChar->Y) + * 256.0f / PI); + } else { + gFaceAngle = ( + atan2(pSpawnClosest->X - pChar->X, + pSpawnClosest->Y - pChar->Y) + * 256.0f / PI); + } + if (Look) { + Distance = DistanceToSpawn(pChar, pSpawnClosest); + gLookAngle = ( + atan2(pSpawnClosest->Z + pSpawnClosest->AvatarHeight*StateHeightMultiplier(pSpawnClosest->StandState) - pChar->Z - pChar->AvatarHeight*StateHeightMultiplier(pChar->StandState), + (FLOAT)Distance) + * 256.0f / PI); + if (Away) gLookAngle = -gLookAngle; + if (Fast) { + pChar->CameraAngle = (FLOAT)gLookAngle; + gLookAngle=10000.0f; + } + } + if (Away) { + gFaceAngle += 256.0f; + } + if (gFaceAngle>=512.0f) gFaceAngle -= 512.0f; + if (gFaceAngle<0.0f) gFaceAngle += 512.0f; + if (Fast) { + ((PSPAWNINFO)pCharSpawn)->Heading = (FLOAT)gFaceAngle; + gFaceAngle=10000.0f; + } + sprintf(szMsg,"Facing %s'%s'...",(Away)?"away from ":"", CleanupName(strcpy(szName,pSpawnClosest->Name),FALSE)); + } + if (ppTarget && pTarget) { + psTarget = (PSPAWNINFO)pTarget; + } + if (szMsg[0] && ((pSpawnClosest != &LocSpawn) && ((Away) || (pSpawnClosest != psTarget)))) WriteChatColor(szMsg,USERCOLOR_WHO); + DebugSpew("Face - %s",szMsg); + return 0; +} + + +// *************************************************************************** +// Function: Look +// Description: Our /look command. Changes camera angle +// 2003-08-30 MacroFiend +// *************************************************************************** +int CMD_EQLook(int argc, char *argv[]) +{ + FLOAT fLookAngle=0.0f; + PSPAWNINFO pChar = (PSPAWNINFO)pLocalPlayer; + if (argc < 2) + return 0; + fLookAngle = (FLOAT)atof(argv[1]); + + if (fLookAngle>128.0f || fLookAngle<-128.0f) { + printf("%s -- Angle %f out of range.",argv[0],fLookAngle); + return 0; + } + + pChar->CameraAngle = fLookAngle; + gLookAngle = 10000.0f; + return 0; +} + +int CMD_EQEcho(int argc, char *argv[]) +{ + static map Filters; + static bool FiltersInitialized=false; + + if (argc<2) + { + printf("Syntax: %s <-channelfilters>|[-] ",argv[0]); + return 0; + } + + if (!FiltersInitialized) + { + FiltersInitialized=true; + +Filters["say"]=USERCOLOR_SAY; +Filters["tell"]=USERCOLOR_TELL; +Filters["group"]=USERCOLOR_GROUP; +Filters["guild"]=USERCOLOR_GUILD; +Filters["ooc"]=USERCOLOR_OOC; +Filters["auction"]=USERCOLOR_AUCTION; +Filters["shout"]=USERCOLOR_SHOUT; +Filters["emote"]=USERCOLOR_EMOTE; +Filters["spells"]=USERCOLOR_SPELLS; +Filters["youhit"]=USERCOLOR_YOU_HIT_OTHER; +Filters["hityou"]=USERCOLOR_OTHER_HIT_YOU; +Filters["youmiss"]=USERCOLOR_YOU_MISS_OTHER; +Filters["missyou"]=USERCOLOR_OTHER_MISS_YOU; +Filters["duel"]=USERCOLOR_DUELS; +Filters["skill"]=USERCOLOR_SKILLS; +Filters["disc"]=USERCOLOR_DISCIPLINES; +Filters["unused1"]=USERCOLOR_UNUSED001; +Filters["default"]=USERCOLOR_DEFAULT; +Filters["unused2"]=USERCOLOR_UNUSED002; +Filters["merchantoffer"]=USERCOLOR_MERCHANT_OFFER; +Filters["merchantexchange"]=USERCOLOR_MERCHANT_EXCHANGE; +Filters["youdie"]=USERCOLOR_YOUR_DEATH; +Filters["theydie"]=USERCOLOR_OTHER_DEATH; +Filters["otherhit"]=USERCOLOR_OTHER_HIT_OTHER; +Filters["othermiss"]=USERCOLOR_OTHER_MISS_OTHER; +Filters["who"]=USERCOLOR_WHO; +Filters["yell"]=USERCOLOR_YELL; +Filters["nonmelee"]=USERCOLOR_NON_MELEE; +Filters["spellfade"]=USERCOLOR_SPELL_WORN_OFF; +Filters["split"]=USERCOLOR_MONEY_SPLIT; +Filters["loot"]=USERCOLOR_LOOT; +Filters["random"]=USERCOLOR_RANDOM; +Filters["otherspell"]=USERCOLOR_OTHERS_SPELLS; +Filters["spellfail"]=USERCOLOR_SPELL_FAILURE; +Filters["chatchannel"]=USERCOLOR_CHAT_CHANNEL; +Filters["chat1"]=USERCOLOR_CHAT_1; +Filters["chat2"]=USERCOLOR_CHAT_2; +Filters["chat3"]=USERCOLOR_CHAT_3; +Filters["chat4"]=USERCOLOR_CHAT_4; +Filters["chat5"]=USERCOLOR_CHAT_5; +Filters["chat6"]=USERCOLOR_CHAT_6; +Filters["chat7"]=USERCOLOR_CHAT_7; +Filters["chat8"]=USERCOLOR_CHAT_8; +Filters["chat9"]=USERCOLOR_CHAT_9; +Filters["chat10"]=USERCOLOR_CHAT_10; +Filters["meleecrit"]=USERCOLOR_MELEE_CRIT; +Filters["spellcrit"]=USERCOLOR_SPELL_CRIT; +Filters["toofar"]=USERCOLOR_TOO_FAR_AWAY; +Filters["rampage"]=USERCOLOR_NPC_RAMPAGE; +Filters["flurry"]=USERCOLOR_NPC_FLURRY; +Filters["enrage"]=USERCOLOR_NPC_ENRAGE; +Filters["sayecho"]=USERCOLOR_ECHO_SAY; +Filters["tellecho"]=USERCOLOR_ECHO_TELL; +Filters["groupecho"]=USERCOLOR_ECHO_GROUP; +Filters["guildecho"]=USERCOLOR_ECHO_GUILD; +Filters["oocecho"]=USERCOLOR_ECHO_OOC; +Filters["auctionecho"]=USERCOLOR_ECHO_AUCTION; +Filters["shoutecho"]=USERCOLOR_ECHO_SHOUT; +Filters["emoteecho"]=USERCOLOR_ECHO_EMOTE; +Filters["chat1echo"]=USERCOLOR_ECHO_CHAT_1; +Filters["chat2echo"]=USERCOLOR_ECHO_CHAT_2; +Filters["chat3echo"]=USERCOLOR_ECHO_CHAT_3; +Filters["chat4echo"]=USERCOLOR_ECHO_CHAT_4; +Filters["chat5echo"]=USERCOLOR_ECHO_CHAT_5; +Filters["chat6echo"]=USERCOLOR_ECHO_CHAT_6; +Filters["chat7echo"]=USERCOLOR_ECHO_CHAT_7; +Filters["chat8echo"]=USERCOLOR_ECHO_CHAT_8; +Filters["chat9echo"]=USERCOLOR_ECHO_CHAT_9; +Filters["chat10echo"]=USERCOLOR_ECHO_CHAT_10; +Filters["reserved"]=USERCOLOR_RESERVED; +Filters["link"]=USERCOLOR_LINK; +Filters["raid"]=USERCOLOR_RAID; +Filters["pet"]=USERCOLOR_PET; +Filters["damageshield"]=USERCOLOR_DAMAGESHIELD; +Filters["leader"]=USERCOLOR_LEADER; +Filters["petrampflurry"]=USERCOLOR_PETRAMPFLURRY; +Filters["petcrit"]=USERCOLOR_PETCRITS; +Filters["focus"]=USERCOLOR_FOCUS; +Filters["exp"]=USERCOLOR_XP; +Filters["system"]=USERCOLOR_SYSTEM; + + } + + + unsigned int Color=USERCOLOR_DEFAULT; + int arg=1; + if (argv[arg][0]=='-') + { + if (!stricmp(argv[arg],"-channelfilters")) + { + CColumnRenderer CR; + for (map::iterator i=Filters.begin() ;i!=Filters.end() ; i++) + { + CR.AddItem(i->first.c_str()); + } + CR.Render(pISInterface); + return 0; + } + map::iterator i=Filters.find(&argv[arg][1]); + if (i!=Filters.end()) + Color=i->second; + arg++; + } + + if (argc<=arg) + { + printf("Syntax: %s [-] ",argv[0]); + return 0; + } + char FullText[8192]; + pISInterface->GetArgs(arg,argc,argv,FullText,sizeof(FullText)); + dsp_chat_no_events(FullText,Color,1); + return 0; +} + +int CMD_EQItems(int argc, char *argv[]) +{ + if (!ppItemList) return 0; + if (!pItemList) return 0; + PSPAWNINFO pChar = (PSPAWNINFO)pLocalPlayer; + PGROUNDITEM pItem = (PGROUNDITEM)pItemList; + DWORD Count=0; + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szName[MAX_STRING]={0}; + WriteChatColor("Items on the ground:", USERCOLOR_DEFAULT); + WriteChatColor("---------------------------", USERCOLOR_DEFAULT); + while (pItem) { + GetFriendlyNameForGroundItem(pItem,szName); + + if ((argc==1) || (!strnicmp(szName,argv[1],strlen(argv[1])))) { + SPAWNINFO TempSpawn; + FLOAT Distance; + ZeroMemory(&TempSpawn,sizeof(TempSpawn)); + strcpy(TempSpawn.Name,szName); + TempSpawn.Y=pItem->Y; + TempSpawn.X=pItem->X; + TempSpawn.Z=pItem->Z; + Distance = DistanceToSpawn(pChar,&TempSpawn); + INT Angle = (INT)((atan2f(pChar->X - pItem->X, pChar->Y - pItem->Y) * 180.0f / PI + 360.0f) / 22.5f + 0.5f) % 16; + + sprintf(szBuffer,"%s: %1.2f away to the %s",szName,Distance,szHeading[Angle]); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + Count++; + } + + pItem = pItem->pNext; + } + if (Count==0) { + WriteChatColor("No items found.",USERCOLOR_DEFAULT); + } else { + sprintf(szBuffer,"%d item%s found.",Count,(Count==1)?"":"s"); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + return 0; +} + +int CMD_DoorTarget(int argc, char *argv[]) +{ + + if (!ppSwitchMgr) return 0; + if (!pSwitchMgr) return 0; + PDOORTABLE pDoorTable = (PDOORTABLE)pSwitchMgr; + DWORD Count; + + PSPAWNINFO pChar = (PSPAWNINFO)pLocalPlayer; + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szSearch[MAX_STRING] = {0}; + FLOAT cDistance = 100000.0f; + BYTE ID = -1; + ZeroMemory(&DoorEnviroTarget,sizeof(DoorEnviroTarget)); + pDoorTarget = NULL; + + if (argc > 1 && !stricmp(argv[1], "id")) { + if (argc < 3) { + WriteChatf("DoorTarget: id specified but no number provided."); + return 0; + } + + ID = atoi(argv[2]); + for (Count=0; CountNumEntries; Count++) { + if (pDoorTable->pDoor[Count]->ID == ID) { + strcpy(DoorEnviroTarget.Name, pDoorTable->pDoor[Count]->Name); + DoorEnviroTarget.Y = pDoorTable->pDoor[Count]->Y; + DoorEnviroTarget.X = pDoorTable->pDoor[Count]->X; + DoorEnviroTarget.Z = pDoorTable->pDoor[Count]->Z; + DoorEnviroTarget.Heading = pDoorTable->pDoor[Count]->Heading; + DoorEnviroTarget.Type = SPAWN_NPC; + DoorEnviroTarget.HPCurrent = 1; + DoorEnviroTarget.HPMax = 1; + pDoorTarget = pDoorTable->pDoor[Count]; + break; + } + } + } else { + if (argc > 1) strcpy(szSearch, argv[1]); + for (Count=0; CountNumEntries; Count++) { + if (((szSearch[0]==0) || + (!strnicmp(pDoorTable->pDoor[Count]->Name,szSearch,strlen(szSearch)))) && + ((gZFilter >=10000.0f) || + ((pDoorTable->pDoor[Count]->Z <= pChar->Z + gZFilter) && + (pDoorTable->pDoor[Count]->Z >= pChar->Z - gZFilter)))) { + SPAWNINFO tSpawn; + ZeroMemory(&tSpawn,sizeof(tSpawn)); + strcpy(tSpawn.Name,pDoorTable->pDoor[Count]->Name); + tSpawn.Y=pDoorTable->pDoor[Count]->Y; + tSpawn.X=pDoorTable->pDoor[Count]->X; + tSpawn.Z=pDoorTable->pDoor[Count]->Z; + tSpawn.Type = SPAWN_NPC; + tSpawn.HPCurrent = 1; + tSpawn.HPMax = 1; + tSpawn.Heading=pDoorTable->pDoor[Count]->Heading; + FLOAT Distance = DistanceToSpawn(pChar,&tSpawn); + if (DistancepDoor[Count]; + cDistance=Distance; + } + } + + } + } + + + if (DoorEnviroTarget.Name[0]!=0) { + sprintf(szBuffer,"Door %d '%s' targeted.", pDoorTarget->ID, DoorEnviroTarget.Name); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } else { + WriteChatf("Couldn't find door to target."); + } + return 0; +} + +int CMD_ItemTarget(int argc, char *argv[]) +{ + if (!ppItemList) return 0; + if (!pItemList) return 0; + PSPAWNINFO pChar = (PSPAWNINFO)pLocalPlayer; + PGROUNDITEM pItem = (PGROUNDITEM)pItemList; + FLOAT cDistance = 100000.0f; + CHAR szName[MAX_STRING]={0}; + CHAR szBuffer[MAX_STRING] = {0}; + ZeroMemory(&EnviroTarget,sizeof(EnviroTarget)); + pGroundTarget = NULL; + while (pItem) { + GetFriendlyNameForGroundItem(pItem,szName); + if ( + ( + (argc<2) || + (!strnicmp(szName,argv[1],strlen(argv[1]))) + ) && ( + (gZFilter >=10000.0f) || + ( + (pItem->Z <= pChar->Z + gZFilter) && + (pItem->Z >= pChar->Z - gZFilter) + ) + ) + ) { + SPAWNINFO tSpawn; + ZeroMemory(&tSpawn,sizeof(tSpawn)); + strcpy(tSpawn.Name,szName); + tSpawn.Y=pItem->Y; + tSpawn.X=pItem->X; + tSpawn.Z=pItem->Z; + tSpawn.Type = SPAWN_NPC; + tSpawn.HPCurrent = 1; + tSpawn.HPMax = 1; + tSpawn.Heading=pItem->Heading; + tSpawn.Race = pItem->DropID; + FLOAT Distance = DistanceToSpawn(pChar,&tSpawn); + if (DistancepNext; + } + if (EnviroTarget.Name[0]!=0) { + sprintf(szBuffer,"Item '%s' targeted.",EnviroTarget.Name); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + + return 0; +} diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommands.h b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommands.h new file mode 100644 index 0000000000..a214a766dc --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQCommands.h @@ -0,0 +1,18 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#define COMMAND(name,cmd,parse,hide) EQLIB_API int cmd(int argc, char *argv[]) +#include "ISXEQCommandList.h" +#undef COMMAND + diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQDataTypes.cpp b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQDataTypes.cpp new file mode 100644 index 0000000000..959b7c9f00 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQDataTypes.cpp @@ -0,0 +1,571 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif + +#define DBG_SPEW + +#include "..\MQ2Main.h" + +// These are the same types as in MQ2DataTypes.cpp, however ISXEQ types have members, as +// the GetMember function takes care of here. + +bool MQ2SpawnType::GETMETHOD() +{ +#define pPtr ((PSPAWNINFO)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2SpawnType::FindMethod(Method); + if (!pMethod) + return false; + switch((SpawnMethods)pMethod->ID) + { + case Target: + *ppTarget=GetSpawnByID(pPtr->SpawnID); // this could be a variable, which is just a copy. use its ID + return true; + case Face: + { + PSPAWNINFO pSpawn = (PSPAWNINFO)GetSpawnByID(pPtr->SpawnID); + if (pSpawn->SpawnID==((PSPAWNINFO)pCharSpawn)->SpawnID) // If it is ourself, don't do anything. + return true; + bool bfPredict=false; + bool bfAway=false; + bool bfNolook=false; + bool bfFast=false; + gFaceAngle = ( + atan2(pSpawn->X - ((PSPAWNINFO)pCharSpawn)->X, + pSpawn->Y - ((PSPAWNINFO)pCharSpawn)->Y) + * 256.0f / PI); + while (argc--) + { + if (!stricmp(argv[argc],"predict")) + bfPredict=true; + else if (!stricmp(argv[argc],"nolook")) + bfNolook=true; + else if (!stricmp(argv[argc],"away")) + bfAway=true; + else if (!stricmp(argv[argc],"fast")) + bfFast=true; + } + if (bfPredict) + { + DOUBLE Distance; + Distance = DistanceToSpawn((PSPAWNINFO)pCharSpawn, pSpawn); + gFaceAngle = ( + atan2((pSpawn->X + (pSpawn->SpeedX * Distance)) - ((PSPAWNINFO)pCharSpawn)->X, + (pSpawn->Y + (pSpawn->SpeedY * Distance)) - ((PSPAWNINFO)pCharSpawn)->Y) + * 256.0f / PI); + } + if (!bfNolook) { + DOUBLE Distance = DistanceToSpawn((PSPAWNINFO)pCharSpawn, pSpawn); + gLookAngle = ( + atan2(pSpawn->Z + pSpawn->AvatarHeight*StateHeightMultiplier(pSpawn->StandState) - ((PSPAWNINFO)pCharSpawn)->Z - + ((PSPAWNINFO)pCharSpawn)->AvatarHeight*StateHeightMultiplier(((PSPAWNINFO)pCharSpawn)->StandState), + (FLOAT)Distance) + * 256.0f / PI); + if (bfAway) gLookAngle = -gLookAngle; + if (bfFast) { + ((PSPAWNINFO)pCharSpawn)->CameraAngle = (FLOAT)gLookAngle; + gLookAngle=10000.0f; + } + } + if (bfAway) { + gFaceAngle += 256.0f; + } + if (gFaceAngle>=512.0f) gFaceAngle -= 512.0f; + if (gFaceAngle<0.0f) gFaceAngle += 512.0f; + if (bfFast) { + ((PSPAWNINFO)pCharSpawn)->Heading = (FLOAT)gFaceAngle; + gFaceAngle=10000.0f; + } + } + return true; + + case LeftClick: + { + PSPAWNINFO pSpawn = (PSPAWNINFO)GetSpawnByID(pPtr->SpawnID); + pEverQuest->LeftClickedOnPlayer((EQPlayer *)pSpawn); + return true; + } + case RightClick: + { + PSPAWNINFO pSpawn = (PSPAWNINFO)GetSpawnByID(pPtr->SpawnID); + pEverQuest->RightClickedOnPlayer((EQPlayer *)pSpawn, 0); + return true; + } + case xAssist: + return true; + } + return false; +#undef pPtr +} + + +bool MQ2BuffType::GETMETHOD() +{ +#define pPtr ((PSPELLBUFF)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + if ((int)pPtr->SpellID<=0) + return false; + PMQ2TYPEMETHOD pMethod=MQ2BuffType::FindMethod(Method); + if (!pMethod) + { + if (PSPELL pSpell=GetSpellByID(pPtr->SpellID)) + { + LSVARPTR Temp; + Temp.Ptr=pSpell; + return pSpellType->GetMethod(Temp,Method,argc,argv); + } + return false; + } + switch((BuffMethods)pMethod->ID) + { + case Remove: + { + unsigned long slot; + char Temp[16]; + if (GetBuffID(pPtr,(DWORD&)slot)) + { + sprintf(Temp,"Buff%d",slot-1); + DWORD KeyboardFlags; + KeyboardFlags=*(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags; + *(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags=0; + SendWndClick("BuffWindow",Temp,"leftmouseup"); + *(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags=KeyboardFlags; + return true; + } + if (GetShortBuffID(pPtr,(DWORD&)slot)) + { + sprintf(Temp,"Buff%d",slot-1); + DWORD KeyboardFlags; + KeyboardFlags=*(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags; + *(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags=0; + SendWndClick("ShortDurationBuffWindow",Temp,"leftmouseup"); + *(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags=KeyboardFlags; + return true; + } + } + return false; + } + return false; +#undef pPtr +} + + +bool MQ2CharacterType::GETMETHOD() +{ +#define pPtr ((PCHARINFO)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2CharacterType::FindMethod(Method); + if (!pMethod) + { + LSVARPTR Temp; + Temp.Ptr=pPtr->pSpawn; + return pSpawnType->GetMethod(Temp,Method,argc,argv); + } + switch((CharacterMethods)pMethod->ID) + { + case Stand: + { + EzCommand("/stand"); + return true; + } + case Sit: + { + EzCommand("/sit"); + return true; + } + case Dismount: + { + EzCommand("/dismount"); + return true; + } + } + return false; +#undef pPtr +} + + +bool MQ2SpellType::GETMETHOD() +{ +#define pPtr ((PSPELL)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2SpellType::FindMethod(Method); + if (!pMethod) + { + return false; + } + // TODO +// switch((SpellMethods)pMethod->ID) +// { +// } + return false; +#undef pPtr +} + + +bool MQ2ItemType::GETMETHOD() +{ +#define pPtr ((PCONTENTS)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2ItemType::FindMethod(Method); + if (!pMethod) + { + return false; + } + // TODO +// switch((ItemMethods)pMethod->ID) +// { +// } + return false; +#undef pPtr +} + + +bool MQ2WindowType::GETMETHOD() +{ +#define pPtr ((CXWnd*)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2WindowType::FindMethod(Method); + if (!pMethod) + { + return false; + } + CXRect rect= pPtr->GetScreenRect(); + CXPoint pt=rect.CenterPoint(); + switch((WindowMethods)pMethod->ID) + { + case LeftMouseDown: + pPtr->HandleLButtonDown(&pt,0); + return true; + case LeftMouseUp: + pPtr->HandleLButtonDown(&pt,0); + pPtr->HandleLButtonUp(&pt,0); + return true; + case LeftMouseHeldDown: + pPtr->HandleLButtonDown(&pt,0); + pPtr->HandleLButtonHeld(&pt,0); + return true; + case LeftMouseHeldUp: + pPtr->HandleLButtonDown(&pt,0); + pPtr->HandleLButtonHeld(&pt,0); + pPtr->HandleLButtonUpAfterHeld(&pt,0); + return true; + case RightMouseDown: + pPtr->HandleRButtonDown(&pt,0); + return true; + case RightMouseUp: + pPtr->HandleRButtonDown(&pt,0); + pPtr->HandleRButtonUp(&pt,0); + return true; + case RightMouseHeldDown: + pPtr->HandleRButtonDown(&pt,0); + pPtr->HandleRButtonHeld(&pt,0); + return true; + case RightMouseHeldUp: + pPtr->HandleRButtonDown(&pt,0); + pPtr->HandleRButtonHeld(&pt,0); + pPtr->HandleRButtonUpAfterHeld(&pt,0); + return true; + case ListSelect: + if (argc) + { + DWORD Value=atoi(argv[0])-1; + if (pPtr->GetType()==UI_Listbox) + ((CListWnd *)pPtr)->SetCurSel(Value); + else if (pPtr->GetType()==UI_Combobox) + ((CComboWnd*)pPtr)->SetChoice(Value); + else + return false; + } + return true; + } + return false; +#undef pPtr +} + + +bool MQ2SwitchType::GETMETHOD() +{ +#define pPtr ((PDOOR)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2SwitchType::FindMethod(Method); + if (!pMethod) + { + return false; + } + return false; +#undef pPtr +} + + +bool MQ2GroundType::GETMETHOD() +{ +#define pPtr ((PGROUNDITEM)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2GroundType::FindMethod(Method); + if (!pMethod) + { + return false; + } + return false; +#undef pPtr +} + + +bool MQ2MacroQuestType::GETMETHOD() +{ + PMQ2TYPEMETHOD pMethod=MQ2MacroQuestType::FindMethod(Method); + if (!pMethod) + { + return false; + } + // TODO +// switch((MacroQuestMethods)pMethod->ID) +// { +// } + return false; +} + + +bool MQ2HeadingType::GETMETHOD() +{ + PMQ2TYPEMETHOD pMethod=MQ2HeadingType::FindMethod(Method); + if (!pMethod) + { + return false; + } + // TODO +// switch((HeadingMethods)pMethod->ID) +// { +// } + return false; +} + + +bool MQ2CorpseType::GETMETHOD() +{ + if (!pActiveCorpse || !pLootWnd) + return false; +#define pPtr ((PEQLOOTWINDOW)pLootWnd) + PMQ2TYPEMETHOD pMethod=MQ2CorpseType::FindMethod(Method); + if (!pMethod) + { + LSVARPTR Temp; + Temp.Ptr=pActiveCorpse; + return pSpawnType->GetMethod(Temp,Method,argc,argv); + } + // TODO +// switch((CorpseMethods)pMethod->ID) +// { +// } + return false; +#undef pPtr +} + + +bool MQ2MerchantType::GETMETHOD() +{ + if (!pActiveMerchant || !pMerchantWnd) + return false; +#define pPtr ((PEQMERCHWINDOW)pMerchantWnd) + PMQ2TYPEMETHOD pMethod=MQ2MerchantType::FindMethod(Method); + if (!pMethod) + { + LSVARPTR Temp; + Temp.Ptr=pActiveMerchant; + return pSpawnType->GetMethod(Temp,Method,argc,argv); + } + // TODO +// switch((MerchantMethods)pMethod->ID) +// { +// } + return false; +#undef pPtr +} + + +bool MQ2InvSlotType::GETMETHOD() +{ +#define nInvSlot (VarPtr.Int) + PMQ2TYPEMETHOD pMethod=MQ2InvSlotType::FindMethod(Method); + if (!pMethod) + { + return false; + } + // TODO +// switch((InvSlotMethods)pMethod->ID) +// { +// } + return false; +#undef nInvSlot +} + + + +bool MQ2TimerType::GETMETHOD() +{ +#define pPtr ((PMQTIMER)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2TimerType::FindMethod(Method); + if (!pMethod) + { + return false; + } + switch((TimerMethods)pMethod->ID) + { + case Reset: + pPtr->Current=pPtr->Original; + return true; + case Expire: + pPtr->Current=1; // Will expire in a 10th of a second + return true; + case Set: + if (argc) + { + MQ2TimerType::FromString(VarPtr,argv[0]); + return true; + } + } + return false; +#undef pPtr +} + + +bool MQ2SkillType::GETMETHOD() +{ + if (!VarPtr.Ptr) + return false; + PSKILL pSkill=*(PSKILL*)VarPtr.Ptr; + if (!pSkill) + return false; + PMQ2TYPEMETHOD pMethod=MQ2SkillType::FindMethod(Method); + if (!pMethod) + { + return false; + } + // TODO +// switch((SkillMethods)pMethod->ID) +// { +// } + return false; +} + + +bool MQ2AltAbilityType::GETMETHOD() +{ + if (!VarPtr.Ptr) + return false; + PALTABILITY pAbility=*(PALTABILITY*)VarPtr.Ptr; + PMQ2TYPEMETHOD pMethod=MQ2AltAbilityType::FindMethod(Method); + if (!pMethod) + { + return false; + } + // TODO +// switch((AltAbilityMethods)pMethod->ID) +// { +// } + return false; +} + + +bool MQ2RaidType::GETMETHOD() +{ + if (!pRaid) + return false; + PMQ2TYPEMETHOD pMethod=MQ2RaidType::FindMethod(Method); + if (!pMethod) + { + return false; + } + // TODO +// switch((RaidMethods)pMethod->ID) +// { +// } + return false; +} + + +bool MQ2RaidMemberType::GETMETHOD() +{ + DWORD nRaidMember=VarPtr.DWord-1; + if (VarPtr.DWord>=72) + return false; + if (!pRaid->RaidMemberUsed[nRaidMember]) + return false; + PEQRAIDMEMBER pRaidMember=&pRaid->RaidMember[nRaidMember]; + PMQ2TYPEMETHOD pMethod=MQ2RaidMemberType::FindMethod(Method); + if (!pMethod) + { + LSVARPTR Temp; + Temp.Ptr=SpawnByName[pRaidMember->Name]; + return pSpawnType->GetMethod(Temp,Method,argc,argv); + } + // TODO +// switch((RaidMemberMethods)pMethod->ID) +// { +// } + return false; +} + +bool MQ2FriendsType::GETMETHOD() +{ + PMQ2TYPEMETHOD pMethod=MQ2FriendsType::FindMethod(Method); + if (!pMethod) + { + return false; + } + // TODO +// switch((FriendsMethods)pMethod->ID) +// { +// } + return false; +} + +bool MQ2TargetType::GETMETHOD() +{ +#define pPtr ((PSPAWNINFO)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2TargetType::FindMethod(Method); + if (!pMethod) + return false; + else + return true; +#undef pPtr +} + +bool MQ2XTargetType::GETMETHOD() +{ +#define pPtr ((PSPAWNINFO)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMETHOD pMethod=MQ2XTargetType::FindMethod(Method); + if (!pMethod) + return false; + else + return true; +#undef pPtr +} diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQDataTypes.h b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQDataTypes.h new file mode 100644 index 0000000000..f414f10245 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQDataTypes.h @@ -0,0 +1,57 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +DATATYPE(MQ2SpawnType,pSpawnType,"EQ Objects"); +DATATYPE(MQ2CharacterType,pCharacterType,"EQ Objects"); +DATATYPE(MQ2BuffType,pBuffType,0); +DATATYPE(MQ2SpellType,pSpellType,"EQ Objects"); +DATATYPE(MQ2TicksType,pTicksType,0); + +DATATYPE(MQ2SkillType,pSkillType,"EQ Skill"); +DATATYPE(MQ2AltAbilityType,pAltAbilityType,"EQ Alt Ability"); + +DATATYPE(MQ2ClassType,pClassType,"EQ Class"); +DATATYPE(MQ2RaceType,pRaceType,"EQ Race"); +DATATYPE(MQ2BodyType,pBodyType,"EQ Body"); + +DATATYPE(MQ2GroundType,pGroundType,0); +DATATYPE(MQ2SwitchType,pSwitchType,0); + +DATATYPE(MQ2MacroQuestType,pMacroQuestType,"MacroQuest Object"); + +DATATYPE(MQ2CorpseType,pCorpseType,0); +DATATYPE(MQ2WindowType,pWindowType,0); +DATATYPE(MQ2MerchantType,pMerchantType,0); +DATATYPE(MQ2ZoneType,pZoneType,"EQ Zone"); +DATATYPE(MQ2CurrentZoneType,pCurrentZoneType,"EQ CurrentZone"); +DATATYPE(MQ2ItemType,pItemType,0); +DATATYPE(MQ2DeityType,pDeityType,"EQ Deity"); +DATATYPE(MQ2ArgbType,pArgbType,0); + +DATATYPE(MQ2HeadingType,pHeadingType,0); + +DATATYPE(MQ2InvSlotType,pInvSlotType,"EQ InvSlot"); + +DATATYPE(MQ2TimerType,pTimerType,0); + +DATATYPE(MQ2RaidType,pRaidType,"EQ Raid"); +DATATYPE(MQ2RaidMemberType,pRaidMemberType,"EQ RaidMember"); +DATATYPE(MQ2GroupType,pGroupType,"EQ Group"); +DATATYPE(MQ2GroupMemberType,pGroupMemberType,"EQ GroupMember"); + +DATATYPE(MQ2FriendsType,pFriendsType,0); + +DATATYPE(MQ2TargetType,pTargetType,"EQ Target"); + +DATATYPE(MQ2XTargetType,pXTargetType,"EQ XTarget"); diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQServices.cpp b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQServices.cpp new file mode 100644 index 0000000000..a810bb33fc --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQServices.cpp @@ -0,0 +1,234 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif + +#define DBG_SPEW +#include "..\MQ2Main.h" +#include "ISXEQServices.h" + +//#define DEBUG_PLUGINS + +#ifdef DEBUG_PLUGINS +#define PluginDebug DebugSpew +#else +#define PluginDebug // +#endif + + +// "Chat" service +EQLIB_API BOOL PluginsIncomingChat(PCHAR Line, DWORD Color) +{ + PluginDebug("PluginsIncomingChat()"); + if(!Line[0]) + return 0; + _EQChat Chat; + Chat.Line=Line; + Chat.Color=Color; + Chat.Filtered=false; + pISInterface->ServiceBroadcast(pExtension,hChatService,CHATSERVICE_INCOMING,&Chat); + return Chat.Filtered; +} + + +EQLIB_API VOID WriteChatColor(PCHAR Line, DWORD Color, DWORD Filter) +{ + if (gFilterMQ) + return; + PluginDebug("Begin WriteChatColor()"); + EnterMQ2Benchmark(bmWriteChatColor); + CHAR PlainText[MAX_STRING]={0}; + StripMQChat(Line,PlainText); + CheckChatForEvent(PlainText); + + DebugSpew("WriteChatColor(%s)",Line); + + //printf("%s",PlainText); + + // TEMPORARY + /* // use ISXEQChat or ISXEQChatWnd + printf("%s",PlainText); + if (gFilterMacro != FILTERMACRO_NONE && ppEverQuest && pEverQuest && gGameState==GAMESTATE_INGAME) + { + dsp_chat_no_events(PlainText,Color,1); + } + /**/ + // --------- + + + + // filter parameter is unused anyway + _EQChat Chat; + Chat.Line=Line; + Chat.Color=Color; + pISInterface->ServiceBroadcast(pExtension,hChatService,CHATSERVICE_OUTGOING,&Chat); + + ExitMQ2Benchmark(bmWriteChatColor); +} + + +// "UI" service +EQLIB_API VOID PluginsCleanUI() +{ + PluginDebug("PluginsCleanUI()"); + pISInterface->ServiceBroadcast(pExtension,hUIService,UISERVICE_CLEANUP,0); +} +EQLIB_API VOID PluginsReloadUI() +{ + PluginDebug("PluginsReloadUI()"); + pISInterface->ServiceBroadcast(pExtension,hUIService,UISERVICE_RELOAD,0); +} + +void __cdecl GamestateRequest(ISXInterface *pClient, unsigned int MSG, void *lpData) +{ + if (MSG==ISXSERVICE_CLIENTADDED) + { +// printf("Gamestate Service - Client Added"); + pISInterface->ServiceNotify(pExtension,hGamestateService,(ISXInterface*)lpData,GAMESTATESERVICE_CHANGED,(void*)gGameState); + } +} +void __cdecl SpawnRequest(ISXInterface *pClient, unsigned int MSG, void *lpData) +{ + if (MSG==ISXSERVICE_CLIENTADDED) + { +// printf("Spawn Service - Client Added"); + if (gGameState==GAMESTATE_INGAME) + { + PSPAWNINFO pSpawn=(PSPAWNINFO)pSpawnList; + while(pSpawn) + { + pISInterface->ServiceNotify(pExtension,hSpawnService,(ISXInterface*)lpData,SPAWNSERVICE_ADDSPAWN,pSpawn); + if (pSpawn->GM) + pISInterface->ServiceNotify(pExtension,hSpawnService,(ISXInterface*)lpData,SPAWNSERVICE_ADDGM,pSpawn); + pSpawn=pSpawn->pNext; + } + PGROUNDITEM pItem=(PGROUNDITEM)pItemList; + while(pItem) + { + pISInterface->ServiceNotify(pExtension,hSpawnService,(ISXInterface*)lpData,SPAWNSERVICE_ADDITEM,pItem); + pItem=pItem->pNext; + } + } + } +} + +// "Gamestate" Service +EQLIB_API VOID PluginsSetGameState(DWORD GameState) +{ + PluginDebug("PluginsSetGameState()"); + static bool AutoExec=false; + static bool CharSelect=true; + DrawHUDParams[0]=0; + gGameState=GameState; + if (GameState==GAMESTATE_INGAME) + { + gZoning=false; + gbDoAutoRun=TRUE; + if (!AutoExec) + { + AutoExec=true; + pISInterface->RunCommandFile("EQ-AutoExec"); + pISInterface->RunScript("EQ-AutoExec"); + } + if (CharSelect) + { + CharSelect=false; + CHAR szBuffer[MAX_STRING]={0}; + if (PCHARINFO pCharInfo=GetCharInfo()) + { + sprintf(szBuffer,"EQ-%s_%s",EQADDR_SERVERNAME,pCharInfo->Name); + pISInterface->RunCommandFile(szBuffer); + pISInterface->RunScript(szBuffer); + } + } + } + else if (GameState==GAMESTATE_CHARSELECT) + { + if (!AutoExec) + { + AutoExec=true; + pISInterface->RunCommandFile("EQ-AutoExec"); + pISInterface->RunScript("EQ-AutoExec"); + } + CharSelect=true; + pISInterface->RunCommandFile("EQ-CharSelect"); + pISInterface->RunScript("EQ-CharSelect"); + } + + DebugSpew("PluginsSetGameState(%d)",GameState); + pISInterface->ServiceBroadcast(pExtension,hGamestateService,GAMESTATESERVICE_CHANGED,(void*)GameState); +} + +// "Spawn" service +EQLIB_API VOID PluginsAddSpawn(PSPAWNINFO pNewSpawn) +{ + DWORD BodyType=GetBodyType(pNewSpawn); + PluginDebug("PluginsAddSpawn(%s,%d,%d)",pNewSpawn->Name,pNewSpawn->Race,pNewSpawn->BodyType); + SpawnByName[pNewSpawn->Name]=pNewSpawn; + if (gGameState>GAMESTATE_CHARSELECT) + SetNameSpriteState(pNewSpawn,1); + if (GetBodyTypeDesc(BodyType)[0]=='*') + { + WriteChatf("Spawn '%s' has unknown bodytype %d",pNewSpawn->Name,pNewSpawn->BodyType); + } + pISInterface->ServiceBroadcast(pExtension,hSpawnService,SPAWNSERVICE_ADDSPAWN,pNewSpawn); + if (pNewSpawn->GM) + pISInterface->ServiceBroadcast(pExtension,hSpawnService,SPAWNSERVICE_ADDGM,pNewSpawn); +} +EQLIB_API VOID PluginsRemoveSpawn(PSPAWNINFO pSpawn) +{ + PluginDebug("PluginsRemoveSpawn(%s)",pSpawn->Name); + SpawnByName.erase(pSpawn->Name); + if (pSpawn->GM) + pISInterface->ServiceBroadcast(pExtension,hSpawnService,SPAWNSERVICE_REMOVEGM,pSpawn); + pISInterface->ServiceBroadcast(pExtension,hSpawnService,SPAWNSERVICE_REMOVESPAWN,pSpawn); + + pISInterface->InvalidatePersistentObject(PersistentPointerClass,(unsigned int)pSpawn); +} +EQLIB_API VOID PluginsAddGroundItem(PGROUNDITEM pNewGroundItem) +{ + DebugSpew("PluginsAddGroundItem(%s) %.1f,%.1f,%.1f",pNewGroundItem->Name,pNewGroundItem->X,pNewGroundItem->Y,pNewGroundItem->Z); + pISInterface->ServiceBroadcast(pExtension,hSpawnService,SPAWNSERVICE_ADDITEM,pNewGroundItem); +} +EQLIB_API VOID PluginsRemoveGroundItem(PGROUNDITEM pGroundItem) +{ + PluginDebug("PluginsRemoveGroundItem()"); + pISInterface->ServiceBroadcast(pExtension,hSpawnService,SPAWNSERVICE_REMOVEITEM,pGroundItem); +} + +// "Zone" service +EQLIB_API VOID PluginsBeginZone(VOID) +{ + pISInterface->ServiceBroadcast(pExtension,hZoneService,ZONESERVICE_BEGINZONE,0); + gbInZone=false; +} +EQLIB_API VOID PluginsEndZone(VOID) +{ + pISInterface->ServiceBroadcast(pExtension,hZoneService,ZONESERVICE_ENDZONE,0); + gbInZone=true; +} +EQLIB_API VOID PluginsZoned() +{ + PluginDebug("PluginsZoned()"); + + pISInterface->ServiceBroadcast(pExtension,hZoneService,ZONESERVICE_ZONED,0); + + pISInterface->RunCommandFile("EQ-zoned"); + char Temp[256]={0}; + sprintf(Temp,"EQ-%s",((PZONEINFO)pZoneInfo)->ShortName); + pISInterface->RunCommandFile(Temp); +} + diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQServices.h b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQServices.h new file mode 100644 index 0000000000..aa69996cfa --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQServices.h @@ -0,0 +1,27 @@ +#pragma once + +struct _EQChat +{ + PCHAR Line; + DWORD Color; + BOOL Filtered; +}; + +#define CHATSERVICE_INCOMING ((ISXSERVICE_MSG)+1) +#define CHATSERVICE_OUTGOING ((ISXSERVICE_MSG)+2) + +#define UISERVICE_CLEANUP ((ISXSERVICE_MSG)+1) +#define UISERVICE_RELOAD ((ISXSERVICE_MSG)+2) + +#define GAMESTATESERVICE_CHANGED ((ISXSERVICE_MSG)+1) + +#define SPAWNSERVICE_ADDSPAWN ((ISXSERVICE_MSG)+1) +#define SPAWNSERVICE_REMOVESPAWN ((ISXSERVICE_MSG)+2) +#define SPAWNSERVICE_ADDITEM ((ISXSERVICE_MSG)+3) +#define SPAWNSERVICE_REMOVEITEM ((ISXSERVICE_MSG)+4) +#define SPAWNSERVICE_ADDGM ((ISXSERVICE_MSG)+5) +#define SPAWNSERVICE_REMOVEGM ((ISXSERVICE_MSG)+6) + +#define ZONESERVICE_BEGINZONE ((ISXSERVICE_MSG)+1) +#define ZONESERVICE_ENDZONE ((ISXSERVICE_MSG)+2) +#define ZONESERVICE_ZONED ((ISXSERVICE_MSG)+3) diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQTopLevelObjects.cpp b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQTopLevelObjects.cpp new file mode 100644 index 0000000000..80540d2f4a --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQTopLevelObjects.cpp @@ -0,0 +1,46 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif + +#define DBG_SPEW + +#include "..\MQ2Main.h" + +#define TLO(funcname) bool funcname(int argc, char *argv[], LSTYPEVAR &Ret) + +TLO(dataNearestDoor) +{ + DWORD Count = 0; + FLOAT cDistance = 100000.0f; + PDOORTABLE pDoorTable = (PDOORTABLE)pSwitchMgr; + + if (pDoorTable->NumEntries) + { + for (Count=0; CountNumEntries; Count++) { + FLOAT Distance = GetDistance(pDoorTable->pDoor[Count]->X, pDoorTable->pDoor[Count]->Y); + if (DistancepDoor[Count]; + cDistance=Distance; + } + } + Ret.Ptr=pDoorTarget; + Ret.Type=pSwitchType; + return true; + } + return false; +} + diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQTopLevelObjects.h b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQTopLevelObjects.h new file mode 100644 index 0000000000..97dd41ad62 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQTopLevelObjects.h @@ -0,0 +1,58 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#ifdef ISBOXER_COMPAT +TOPLEVELOBJECT("EQTarget",dataTarget); +TOPLEVELOBJECT("EQWindow",dataWindow); +#else +TOPLEVELOBJECT("Target",dataTarget); +TOPLEVELOBJECT("Window",dataWindow); +#endif +TOPLEVELOBJECT("Spawn",dataSpawn); +TOPLEVELOBJECT("Me",dataCharacter); +TOPLEVELOBJECT("Spell",dataSpell); +TOPLEVELOBJECT("Switch",dataSwitch); +TOPLEVELOBJECT("GroundItem",dataGroundItem); +TOPLEVELOBJECT("Merchant",dataMerchant); +TOPLEVELOBJECT("MacroQuest",dataMacroQuest); +TOPLEVELOBJECT("Zone",dataZone); +TOPLEVELOBJECT("Group",dataGroup); +TOPLEVELOBJECT("Corpse",dataCorpse); +TOPLEVELOBJECT("Cursor",dataCursor); +TOPLEVELOBJECT("NearestSpawn",dataNearestSpawn); +TOPLEVELOBJECT("GameTime",dataGameTime); +TOPLEVELOBJECT("Time",dataTime); +TOPLEVELOBJECT("Ini",dataIni); +TOPLEVELOBJECT("Heading",dataHeading); +TOPLEVELOBJECT("LastSpawn",dataLastSpawn); +TOPLEVELOBJECT("InvSlot",dataInvSlot); +TOPLEVELOBJECT("FindItem",dataFindItem); +TOPLEVELOBJECT("SelectedItem",dataSelectedItem); +TOPLEVELOBJECT("FindItemBank",dataFindItemBank); +TOPLEVELOBJECT("FindItemCount",dataFindItemCount); +TOPLEVELOBJECT("FindItemBankCount",dataFindItemBankCount); +//TOPLEVELOBJECT("GroupLeader",dataGroupLeader); +//TOPLEVELOBJECT("GroupLeaderName",dataGroupLeaderName); +TOPLEVELOBJECT("Skill",dataSkill); +TOPLEVELOBJECT("AltAbility",dataAltAbility); +TOPLEVELOBJECT("Raid",dataRaid); +TOPLEVELOBJECT("NamingSpawn",dataNamingSpawn); +TOPLEVELOBJECT("SpawnCount",dataSpawnCount); +TOPLEVELOBJECT("LineOfSight",dataLineOfSight); +TOPLEVELOBJECT("DoorTarget",dataDoorTarget); +TOPLEVELOBJECT("ItemTarget",dataItemTarget); +TOPLEVELOBJECT("NearestDoor",dataNearestDoor); +TOPLEVELOBJECT("Friends",dataFriends); + +/**/ diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQUtilities.cpp b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQUtilities.cpp new file mode 100644 index 0000000000..922deb7649 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQUtilities.cpp @@ -0,0 +1,225 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif + +#define DBG_SPEW + +#include "..\MQ2Main.h" + +/* + +/**/ + +VOID CheckChatForEvent(PCHAR szMsg) +{ + IS_CheckTriggers(pExtension,pISInterface,hTriggerService,szMsg); + char *argv[]= + { + szMsg + }; + pISInterface->ExecuteEvent(ChatEventID,0,1,argv); +} + +unsigned long ParseSearchSpawnArg(int arg, int argc, char *argv[], SEARCHSPAWN &SearchSpawn) +{ + if (arg>=argc) + return 0; + unsigned long ExtraUsed=0; + { + if (!stricmp(argv[arg],"pc")) { + SearchSpawn.SpawnType = PC; + } else if (!stricmp(argv[arg],"npc")) { + SearchSpawn.SpawnType = NPC; + } else if (!stricmp(argv[arg],"mount")) { + SearchSpawn.SpawnType = MOUNT; + } else if (!stricmp(argv[arg],"pet")) { + SearchSpawn.SpawnType = PET; + } else if (!stricmp(argv[arg],"nopet")) { + SearchSpawn.bNoPet = TRUE; + } else if (!stricmp(argv[arg],"corpse")) { + SearchSpawn.SpawnType = CORPSE; + } else if (!stricmp(argv[arg],"trigger")) { + SearchSpawn.SpawnType = TRIGGER; + } else if (!stricmp(argv[arg],"untargetable")) { + SearchSpawn.SpawnType = UNTARGETABLE; + } else if (!stricmp(argv[arg],"trap")) { + SearchSpawn.SpawnType = TRAP; + } else if (!stricmp(argv[arg],"chest")) { + SearchSpawn.SpawnType = CHEST; + } else if (!stricmp(argv[arg],"timer")) { + SearchSpawn.SpawnType = TIMER; + } else if (!stricmp(argv[arg],"any")) { + SearchSpawn.SpawnType = NONE; + } else if (!stricmp(argv[arg],"next")) { + SearchSpawn.bTargNext = TRUE; + } else if (!stricmp(argv[arg],"prev")) { + SearchSpawn.bTargPrev = TRUE; + } else if (!stricmp(argv[arg],"lfg")) { + SearchSpawn.bLFG = TRUE; + } else if (!stricmp(argv[arg],"gm")) { + SearchSpawn.bGM = TRUE; + } else if (!stricmp(argv[arg],"group")) { + SearchSpawn.bGroup = TRUE; + } else if (!stricmp(argv[arg],"noguild")) { + SearchSpawn.bNoGuild = TRUE; + } else if (!stricmp(argv[arg],"trader")) { + SearchSpawn.bTrader = TRUE; + } else if (!stricmp(argv[arg],"named")) { + SearchSpawn.bNamed = TRUE; + } else if (!stricmp(argv[arg],"merchant")) { + SearchSpawn.bMerchant = TRUE; + } else if (!stricmp(argv[arg],"tribute")) { + SearchSpawn.bTributeMaster = TRUE; + } else if (!stricmp(argv[arg],"knight")) { + SearchSpawn.bKnight = TRUE; + } else if (!stricmp(argv[arg],"tank")) { + SearchSpawn.bTank = TRUE; + } else if (!stricmp(argv[arg],"healer")) { + SearchSpawn.bHealer = TRUE; + } else if (!stricmp(argv[arg],"dps")) { + SearchSpawn.bDps = TRUE; + } else if (!stricmp(argv[arg],"slower")) { + SearchSpawn.bSlower = TRUE; + } else if (!stricmp(argv[arg],"los")) { + SearchSpawn.bLoS = TRUE; + } else if (!stricmp(argv[arg],"range")) { + if (arg+2pSpawn->GuildID; + } else if (!stricmp(argv[arg],"guild")) { + if (arg+1pSpawn->GuildID; + } + } else if (!stricmp(argv[arg],"alert")) { + if (arg+1GetClassDesc(N)); + return ExtraUsed; + } + } + strlwr(strcpy(SearchSpawn.szName,argv[arg])); + } + } + return ExtraUsed; +} + +PCHAR ParseMacroParameter(PSPAWNINFO pChar, PCHAR szOriginal) +{// PMP is bad, mmmkay + pISInterface->DataParse(szOriginal,szOriginal,4096); + return szOriginal; +} diff --git a/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQUtilities.h b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQUtilities.h new file mode 100644 index 0000000000..e3e2b2b401 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/ISXEQ/ISXEQUtilities.h @@ -0,0 +1,3 @@ +#pragma once +extern unsigned long ParseSearchSpawnArg(int arg, int argc, char *argv[], SEARCHSPAWN &SearchSpawn); + diff --git a/client_files/native_autoloot/eq-core-dll/src/InterfaceQuery.cpp b/client_files/native_autoloot/eq-core-dll/src/InterfaceQuery.cpp new file mode 100644 index 0000000000..43b732941a --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/InterfaceQuery.cpp @@ -0,0 +1,45 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ + +#include "dinput8.h" + +void genericQueryInterface(REFIID riid, LPVOID * ppvObj) +{ + if (!ppvObj || !*ppvObj) + { + return; + } + +#define QUERYINTERFACE(x) \ + if (riid == IID_ ## x) \ + { \ + *ppvObj = ProxyAddressLookupTable.FindAddress(*ppvObj); \ + } + +#define CREATEINTERFACE(x) \ + if (riid == IID_ ## x) \ + { \ + *ppvObj = new m_ ## x((x*)*ppvObj); \ + } + + QUERYINTERFACE(IDirectInput8A); + QUERYINTERFACE(IDirectInput8W); + QUERYINTERFACE(IDirectInputDevice8A); + QUERYINTERFACE(IDirectInputDevice8W); + QUERYINTERFACE(IDirectInputEffect); + + CREATEINTERFACE(IClassFactory); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/License.txt b/client_files/native_autoloot/eq-core-dll/src/License.txt new file mode 100644 index 0000000000..4abc721c04 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/License.txt @@ -0,0 +1,15 @@ +/** +* Copyright (C) 2019 Elisha Riedlinger +* +* This software is provided 'as-is', without any express or implied warranty. In no event will the +* authors be held liable for any damages arising from the use of this software. +* Permission is granted to anyone to use this software for any purpose, including commercial +* applications, and to alter it and redistribute it freely, subject to the following restrictions: +* +* 1. The origin of this software must not be misrepresented; you must not claim that you wrote the +* original software. If you use this software in a product, an acknowledgment in the product +* documentation would be appreciated but is not required. +* 2. Altered source versions must be plainly marked as such, and must not be misrepresented as +* being the original software. +* 3. This notice may not be removed or altered from any source distribution. +*/ \ No newline at end of file diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2AdvDps.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2AdvDps.cpp new file mode 100644 index 0000000000..cbe344b11b --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2AdvDps.cpp @@ -0,0 +1,692 @@ +// DPS ADV CREATED BY WARNEN 2008-2009 +// MQ2DPSAdv.cpp + +using namespace std; +#include +#include +#include +#include "MQ2AdvDps.h" + +#define DPSVERSION "1.2.06" +//#define DPSDEV + +extern std::map DamageEntries; + +// ############################### CDPSAdvWnd START ############################################ + +CDPSAdvWnd::CDPSAdvWnd() :CCustomWnd("DPSAdvWnd") { + int CheckUI = false; + if (!(Tabs = (CTabWnd*)GetChildItem("DPS_Tabs"))) CheckUI = true; + if (!(LTopList = (CListWnd*)GetChildItem("DPS_TopList"))) CheckUI = true; + if (!(CMobList = (CComboWnd*)GetChildItem("DPS_MobList"))) CheckUI = true; + if (!(CShowMeTop = (CCheckBoxWnd*)GetChildItem("DPS_ShowMeTopBox"))) CheckUI = true; + if (!(CShowMeMin = (CCheckBoxWnd*)GetChildItem("DPS_ShowMeMinBox"))) CheckUI = true; + if (!(TShowMeMin = (CTextEntryWnd*)GetChildItem("DPS_ShowMeMinInput"))) CheckUI = true; + if (!(CUseRaidColors = (CCheckBoxWnd*)GetChildItem("DPS_UseRaidColorsBox"))) CheckUI = true; + if (!(CLiveUpdate = (CCheckBoxWnd*)GetChildItem("DPS_LiveUpdateBox"))) CheckUI = true; + if (!(TFightIA = (CTextEntryWnd*)GetChildItem("DPS_FightIAInput"))) CheckUI = true; + if (!(TFightTO = (CTextEntryWnd*)GetChildItem("DPS_FightTOInput"))) CheckUI = true; + if (!(TEntTO = (CTextEntryWnd*)GetChildItem("DPS_EntTOInput"))) CheckUI = true; + if (!(CShowTotal = (CComboWnd*)GetChildItem("DPS_ShowTotal"))) CheckUI = true; + //if (!(LFightList = (CListWnd*)GetChildItem("DPS_FightList"))) CheckUI = true; + this->BGColor.ARGB = 0xFF000000; + Tabs->BGColor.ARGB = 0xFF000000; + LTopList->BGColor.ARGB = 0xFF000000; + CShowMeTop->BGColor.ARGB = 0xFF000000; + CShowMeMin->BGColor.ARGB = 0xFF000000; + TShowMeMin->BGColor.ARGB = 0xFF000000; + CUseRaidColors->BGColor.ARGB = 0xFF000000; + CLiveUpdate->BGColor.ARGB = 0xFF000000; + TFightIA->BGColor.ARGB = 0xFF000000; + TFightTO->BGColor.ARGB = 0xFF000000; + TEntTO->BGColor.ARGB = 0xFF000000; + CShowTotal->BGColor.ARGB = 0xFF000000; + if (CheckUI) { + WriteChatf("\ar[DPSAdv] Incorrect UI File in use. Please update to the latest client files."); + WrongUI = true; + } + else WrongUI = false; + + LoadLoc(); + SetWndNotification(CDPSAdvWnd); + //LTopList->SetColors(0xFFFFFFFF, 0xFFCC3333, 0xFF666666); + //LFightList->SetColors(0xFFFFFFFF, 0xFFCC3333, 0xFF666666); + CMobList->SetColors(0xFFCC3333, 0xFF666666, 0xFF000000); + Tabs->UpdatePage(); + DrawCombo(); + //LFightList->AddString(&CXStr("1"), 0, 0, 0); + //LFightList->AddString(&CXStr("2"), 0, 0, 0); + //LFightList->AddString(&CXStr("3"), 0, 0, 0); + //LFightList->ExtendSel(1); + //LFightList->ExtendSel(2); +} + +CDPSAdvWnd::~CDPSAdvWnd() {} + +void CDPSAdvWnd::DrawCombo() { + int CurSel = CMobList->GetCurChoice(); + CMobList->DeleteAll(); + CHAR szTemp[MAX_STRING] = { 0 }; + //sprintf_s(szTemp, " %s", CurListMob ? CurListMob->Name : "None"); + sprintf_s(szTemp, " %s", CListType == CLISTTARGET && CurListMob ? CurListMob->Name : "None"); + CMobList->InsertChoice(szTemp); + sprintf_s(szTemp, " %s", CListType == CLISTMAXDMG && CurMaxMob ? CurListMob->Name : "None"); + CMobList->InsertChoice(szTemp); + int i = 0, ListSize = 0; + for (auto mob : DamageEntries) { + + auto entrySpawn = mob.second.SpawnID > 0 ? (PSPAWNINFO)GetSpawnByID(mob.second.SpawnID) : nullptr; + + if (entrySpawn && entrySpawn->Type == 1) { + ListSize++; + sprintf_s(szTemp, "(%i) %s", ListSize, entrySpawn->Name); + CMobList->InsertChoice(szTemp); + } + } + + if (ListSize < 6) CMobList->InsertChoice(""); + + if (CListType == CLISTTARGET) CMobList->SetChoice(0); + else if (CListType == CLISTMAXDMG) CMobList->SetChoice(1); + else CMobList->SetChoice(CurSel >= 0 ? CurSel : 0); +} + +void CDPSAdvWnd::SetTotal(int LineNum, PSPAWNINFO Mob) { + CHAR szTemp[MAX_STRING] = { 0 }; + + if (!Mob) + return; + + EdgeDPSEntry Entry = GetEdgeDPSEntryByID(Mob->SpawnID, false); + + if (Entry.SpawnID) + { + SetLineColors(LineNum, Entry, true, false, false); + LTopList->SetItemText(LineNum, 0, &CXStr("-")); + LTopList->SetItemText(LineNum, 1, &CXStr("Total")); + sprintf_s(szTemp, "%i", Entry.TotalIncomingDamage); + LTopList->SetItemText(LineNum, 2, &CXStr(szTemp)); + + auto timestamp = std::chrono::high_resolution_clock::now(); + + std::chrono::duration elapsed_seconds = timestamp - Entry.BeginningTimestamp; + + auto dpsTOTAL = 0; + auto dpsAVRGE = 0; + + DWORD damages = Entry.TotalIncomingDamage; + DOUBLE estimate = damages / elapsed_seconds.count(); + dpsTOTAL++; + DOUBLE evaluate = (estimate - dpsAVRGE) / dpsTOTAL + dpsAVRGE; dpsAVRGE = evaluate; + if (elapsed_seconds.count() == 0.0) + { + evaluate = 0.f; + } + std::ostringstream outEstimate; + outEstimate.precision(3); + outEstimate << std::fixed << estimate; + LTopList->SetItemText(LineNum, 3, &CXStr(outEstimate.str().c_str())); + + + sprintf_s(szTemp, "%i", Entry.TotalOutgoingDamage); + LTopList->SetItemText(LineNum, 4, &CXStr(szTemp)); + + dpsTOTAL = 0; + dpsAVRGE = 0; + + damages = Entry.TotalOutgoingDamage; + estimate = damages / elapsed_seconds.count(); + dpsTOTAL++; + evaluate = (estimate - dpsAVRGE) / dpsTOTAL + dpsAVRGE; dpsAVRGE = evaluate; + if (elapsed_seconds.count() == 0.0) + { + evaluate = 0.f; + } + std::ostringstream inEstimate; + inEstimate.precision(3); + inEstimate << std::fixed << estimate; + LTopList->SetItemText(LineNum, 5, &CXStr(inEstimate.str().c_str())); + } +} + +void CDPSAdvWnd::DrawList() { + int ScrollPos = LTopList->VScrollPos; + int CurSel = LTopList->GetCurSel(); + CHAR szTemp[MAX_STRING] = { 0 }; + LTopList->DeleteAll(); + int i = 0, LineNum = 0, RankAdj = 0, ShowMeLineNum = 0; + bool FoundMe = false, ThisMe = false; + if (ShowTotal == TOTALABOVE) { + LineNum = LTopList->AddString(CXStr(" "), 0, 0, 0); + SetTotal(LineNum, CurListMob); + RankAdj++; + } + if (ShowMeTop) { + ShowMeLineNum = LTopList->AddString(CXStr(" "), 0, 0, 0); + SetLineColors(ShowMeLineNum, EdgeDPSEntry(), false, true, false); + RankAdj++; + } + if (ShowTotal == TOTALSECOND) { + LineNum = LTopList->AddString(CXStr(" "), 0, 0, 0); + SetTotal(LineNum, CurListMob); + RankAdj++; + } + + for (auto entry : DamageEntries) { + auto spawnEntry = (PSPAWNINFO)GetSpawnByID(entry.first); + + if (ShowMeTop && spawnEntry && !strcmp(spawnEntry->Name, ((PSPAWNINFO)pCharSpawn)->DisplayedName)) { + if (!ShowMeMin || (LineNum - RankAdj + 1) > ShowMeMinNum) FoundMe = true; + ThisMe = true; + } + else ThisMe = false; + LineNum = LTopList->AddString(CXStr(" "), 0, 0, 0); + SetLineColors(LineNum, entry.second); + sprintf_s(szTemp, "%i", LineNum - RankAdj + 1); + LTopList->SetItemText(LineNum, 0, &CXStr(szTemp)); + if (ThisMe) LTopList->SetItemText(ShowMeLineNum, 0, &CXStr(szTemp)); + sprintf_s(szTemp, "%s%s", spawnEntry ? spawnEntry->Name : " ", spawnEntry && spawnEntry->PetID > 0 ? "*" : " "); + LTopList->SetItemText(LineNum, 1, &CXStr(szTemp)); + if (ThisMe) LTopList->SetItemText(ShowMeLineNum, 1, &CXStr(szTemp)); + sprintf_s(szTemp, "%i", entry.second.TotalIncomingDamage); + LTopList->SetItemText(LineNum, 2, &CXStr(szTemp)); + if (ThisMe) LTopList->SetItemText(ShowMeLineNum, 2, &CXStr(szTemp)); + auto timestamp = std::chrono::high_resolution_clock::now(); + + std::chrono::duration elapsed_seconds = timestamp - entry.second.BeginningTimestamp; + + auto dpsTOTAL = 0; + auto dpsAVRGE = 0; + + DWORD damages = entry.second.TotalIncomingDamage; + DOUBLE estimate = damages / elapsed_seconds.count(); + dpsTOTAL++; + DOUBLE evaluate = (estimate - dpsAVRGE) / dpsTOTAL + dpsAVRGE; dpsAVRGE = evaluate; + if (elapsed_seconds.count() == 0.0) + { + evaluate = 0.f; + } + std::ostringstream outEstimate; + outEstimate.precision(3); + outEstimate << std::fixed << estimate; + LTopList->SetItemText(LineNum, 3, &CXStr(outEstimate.str().c_str())); + if (ThisMe) LTopList->SetItemText(ShowMeLineNum, 3, &CXStr(outEstimate.str().c_str())); + + sprintf_s(szTemp, "%i", entry.second.TotalOutgoingDamage); + LTopList->SetItemText(LineNum, 4, &CXStr(szTemp)); + + dpsTOTAL = 0; + dpsAVRGE = 0; + + damages = entry.second.TotalOutgoingDamage; + estimate = damages / elapsed_seconds.count(); + dpsTOTAL++; + evaluate = (estimate - dpsAVRGE) / dpsTOTAL + dpsAVRGE; dpsAVRGE = evaluate; + if (elapsed_seconds.count() == 0.0) + { + evaluate = 0.f; + } + std::ostringstream inEstimate; + inEstimate.precision(3); + inEstimate << std::fixed << estimate; + + LTopList->SetItemText(LineNum, 5, &CXStr(inEstimate.str().c_str())); + if (ThisMe) LTopList->SetItemText(ShowMeLineNum, 5, &CXStr(inEstimate.str().c_str())); + + } + if (ShowTotal == TOTALBOTTOM) { + LineNum = LTopList->AddString(CXStr(" "), 0, 0, 0); + SetTotal(LineNum, CurListMob); + } + if (ShowMeTop && !FoundMe) LTopList->RemoveLine(ShowMeLineNum); + LTopList->VScrollPos = ScrollPos; + LTopList->CalculateFirstVisibleLine(); + LTopList->SetCurSel(CurSel); +} + +void CDPSAdvWnd::SetLineColors(int LineNum, EdgeDPSEntry ent, bool Total, bool MeTop, bool UseEnt) { + + auto entrySpawn = ent.SpawnID > 0 && UseEnt ? (PSPAWNINFO)GetSpawnByID(ent.SpawnID) : nullptr; + + if (MeTop) { + LTopList->SetItemColor(LineNum, 0, MeTopColor); + LTopList->SetItemColor(LineNum, 1, MeTopColor); + LTopList->SetItemColor(LineNum, 2, MeTopColor); + LTopList->SetItemColor(LineNum, 3, MeTopColor); + LTopList->SetItemColor(LineNum, 4, MeTopColor); + LTopList->SetItemColor(LineNum, 5, MeTopColor); + + } + else if (Total) { + LTopList->SetItemColor(LineNum, 0, TotalColor); + LTopList->SetItemColor(LineNum, 1, TotalColor); + LTopList->SetItemColor(LineNum, 2, TotalColor); + LTopList->SetItemColor(LineNum, 3, TotalColor); + LTopList->SetItemColor(LineNum, 4, TotalColor); + LTopList->SetItemColor(LineNum, 5, TotalColor); + + } + if (entrySpawn && entrySpawn->Type == SPAWN_PLAYER) { + //WriteChatf("Setting Raid Color: %i, %i, %i", Ent->Class, Coloring[Ent->Class], ((PEQRAIDWINDOW)pRaidWnd)->ClassColors[ClassInfo.RaidColorOrder[Ent->Class]]); + LTopList->SetItemColor(LineNum, 0, MeColor); + LTopList->SetItemColor(LineNum, 1, MeColor); + LTopList->SetItemColor(LineNum, 2, MeColor); + LTopList->SetItemColor(LineNum, 3, MeColor); + LTopList->SetItemColor(LineNum, 4, MeColor); + LTopList->SetItemColor(LineNum, 5, MeColor); + + } + else { + LTopList->SetItemColor(LineNum, 0, NormalColor); + LTopList->SetItemColor(LineNum, 1, NPCColor); + LTopList->SetItemColor(LineNum, 2, NormalColor); + LTopList->SetItemColor(LineNum, 3, NormalColor); + LTopList->SetItemColor(LineNum, 4, NormalColor); + LTopList->SetItemColor(LineNum, 5, NormalColor); + } +} +/* +void CDPSAdvWnd::SaveSetting(PCHAR Key, PCHAR Value, ...) { + char zOutput[MAX_STRING]; va_list vaList; va_start(vaList,Value); + vsprintf_s(zOutput,Value,vaList); + WritePrivateProfileString(GetCharInfo()->Name, Key, zOutput, "Edge.ini"); + if (!Saved) { + Saved = true; + WritePrivateProfileString(GetCharInfo()->Name, "Saved", "1", "Edge.ini"); + } +} +*/ +void CDPSAdvWnd::SaveLoc() { + if (!GetCharInfo()) return; + CHAR szTemp[MAX_STRING] = { 0 }; + WritePrivateProfileString(GetCharInfo()->Name, "Saved", "1", "Edge.ini"); + sprintf_s(szTemp, "%i", Location.top); + WritePrivateProfileString(GetCharInfo()->Name, "Top", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", Location.bottom); + WritePrivateProfileString(GetCharInfo()->Name, "Bottom", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", Location.left); + WritePrivateProfileString(GetCharInfo()->Name, "Left", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", Location.right); + WritePrivateProfileString(GetCharInfo()->Name, "Right", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", Alpha); + WritePrivateProfileString(GetCharInfo()->Name, "Alpha", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", FadeToAlpha); + WritePrivateProfileString(GetCharInfo()->Name, "FadeToAlpha", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", CListType); + WritePrivateProfileString(GetCharInfo()->Name, "CListType", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", LiveUpdate ? 1 : 0); + WritePrivateProfileString(GetCharInfo()->Name, "LiveUpdate", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", dShow); + WritePrivateProfileString(GetCharInfo()->Name, "Show", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", ShowMeTop ? 1 : 0); + WritePrivateProfileString(GetCharInfo()->Name, "ShowMeTop", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", ShowMeMin ? 1 : 0); + WritePrivateProfileString(GetCharInfo()->Name, "ShowMeMin", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", ShowMeMinNum); + WritePrivateProfileString(GetCharInfo()->Name, "ShowMeMinNum", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", UseRaidColors ? 1 : 0); + WritePrivateProfileString(GetCharInfo()->Name, "UseRaidColors", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", ShowTotal); + WritePrivateProfileString(GetCharInfo()->Name, "ShowTotal", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", FightIA); + WritePrivateProfileString(GetCharInfo()->Name, "FightIA", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", FightTO); + WritePrivateProfileString(GetCharInfo()->Name, "FightTO", szTemp, "Edge.ini"); + sprintf_s(szTemp, "%i", EntTO); + WritePrivateProfileString(GetCharInfo()->Name, "EntTO", szTemp, "Edge.ini"); +} + +void CDPSAdvWnd::LoadSettings() { + CHAR szTemp[MAX_STRING] = { 0 }; + CShowMeTop->Checked = ShowMeTop ? 1 : 0; + CShowMeMin->Checked = ShowMeMin ? 1 : 0; + sprintf_s(szTemp, "%i", ShowMeMinNum); + SetCXStr(&TShowMeMin->InputText, szTemp); + CUseRaidColors->Checked = UseRaidColors ? 1 : 0; + CLiveUpdate->Checked = LiveUpdate ? 1 : 0; + sprintf_s(szTemp, "%i", FightIA); + SetCXStr(&TFightIA->InputText, szTemp); + sprintf_s(szTemp, "%i", FightTO); + SetCXStr(&TFightTO->InputText, szTemp); + sprintf_s(szTemp, "%i", EntTO); + SetCXStr(&TEntTO->InputText, szTemp); + CShowTotal->DeleteAll(); + CShowTotal->InsertChoice("Don't Show Total"); + CShowTotal->InsertChoice("Above ShowMeTop"); + CShowTotal->InsertChoice("Below ShowMeTop"); + CShowTotal->InsertChoice("Show Bottom"); + CShowTotal->InsertChoice(""); + CShowTotal->SetChoice(ShowTotal); +} + +void CDPSAdvWnd::LoadLoc(char szChar[256]) { + if (!GetCharInfo()) return; + char szName[256] = { 0 }; + if (!szChar) strcpy_s(szName, GetCharInfo()->Name); + else strcpy_s(szName, szChar); + Saved = (GetPrivateProfileInt(szName, "Saved", 0, "Edge.ini") > 0 ? true : false); + if (Saved && DPSWnd) { + DPSWnd->Location = { (LONG)GetPrivateProfileInt(szName, "Left", 0, "Edge.ini"), + (LONG)GetPrivateProfileInt(szName, "Top", 0, "Edge.ini"), + (LONG)GetPrivateProfileInt(szName, "Right", 0, "Edge.ini"), + (LONG)GetPrivateProfileInt(szName, "Bottom", 0, "Edge.ini") }; + + DPSWnd->Alpha = (BYTE)GetPrivateProfileInt(szName, "Alpha", 0, "Edge.ini"); + + DPSWnd->FadeToAlpha = (BYTE)GetPrivateProfileInt(szName, "FadeToAlpha", 0, "Edge.ini"); + } + CListType = GetPrivateProfileInt(szName, "CListType", 0, "Edge.ini"); + LiveUpdate = (GetPrivateProfileInt(szName, "LiveUpdate", 0, "Edge.ini") > 0 ? true : false); + Debug = (GetPrivateProfileInt(szName, "Debug", 0, "Edge.ini") > 0 ? true : false); + if(DPSWnd) + DPSWnd->dShow = (GetPrivateProfileInt(szName, "Show", 1, "Edge.ini") > 0 ? true : false); + ShowMeTop = (GetPrivateProfileInt(szName, "ShowMeTop", 0, "Edge.ini") > 0 ? true : false); + ShowMeMin = (GetPrivateProfileInt(szName, "ShowMeMin", 0, "Edge.ini") > 0 ? true : false); + ShowMeMinNum = GetPrivateProfileInt(szName, "ShowMeMinNum", 0, "Edge.ini"); + UseRaidColors = (GetPrivateProfileInt(szName, "UseRaidColors", 0, "Edge.ini") > 0 ? true : false); + ShowTotal = GetPrivateProfileInt(szName, "ShowTotal", 0, "Edge.ini"); + FightIA = GetPrivateProfileInt(szName, "FightIA", 8, "Edge.ini"); + FightTO = GetPrivateProfileInt(szName, "FightTO", 30, "Edge.ini"); + EntTO = GetPrivateProfileInt(szName, "EntTO", 8, "Edge.ini"); + MeColor = GetPrivateProfileInt(szName, "MeColor", 0xFF00CC00, "Edge.ini"); + MeTopColor = GetPrivateProfileInt(szName, "MeTopColor", 0xFF00CC00, "Edge.ini"); + NormalColor = GetPrivateProfileInt(szName, "NormalColor", 0xFFFFFFFF, "Edge.ini"); + NPCColor = GetPrivateProfileInt(szName, "NPCColor", 0xFFFFFFFF, "Edge.ini"); + TotalColor = GetPrivateProfileInt(szName, "TotalColor", 0xFF66FFFF, "Edge.ini"); + EntHover = GetPrivateProfileInt(szName, "EntHover", 0xFFCC3333, "Edge.ini"); + EntHighlight = GetPrivateProfileInt(szName, "EntHighlight", 0xFF666666, "Edge.ini"); + FightNormal = GetPrivateProfileInt(szName, "FightNormal", NormalColor, "Edge.ini"); + FightHover = GetPrivateProfileInt(szName, "FightHover", EntHover, "Edge.ini"); + FightHighlight = GetPrivateProfileInt(szName, "FightHighlight", EntHighlight, "Edge.ini"); + FightActive = GetPrivateProfileInt(szName, "FightActive", 0xFF00CC00, "Edge.ini"); + FightInActive = GetPrivateProfileInt(szName, "FightInActive", 0xFF777777, "Edge.ini"); + FightDead = GetPrivateProfileInt(szName, "FightDead", 0xFF330000, "Edge.ini"); + if (FightIA < 3) FightIA = 8; + if (FightTO < 3) FightTO = 30; + if (EntTO < 3) EntTO = 8; + if (Debug) gSpewToFile = TRUE; + if (CListType > 1) CListType = CLISTTARGET; + LTopList->SetColors(NormalColor, EntHover, EntHighlight); + // LFightList->SetColors(FightNormal, FightHover, FightHighlight); + CMobList->SetChoice(CListType); + LoadSettings(); +} + +int CDPSAdvWnd::WndNotification(CXWnd *pWnd, unsigned int Message, void *unknown) { + if (Debug && Message != 21) WriteChatf("Notify: %i", Message); + if (Message == 10) CheckActive(); + if (Message == 3 && pWnd == (CXWnd*)LTopList) LTopList->SetCurSel(-1); + else if (Message == 10 && pWnd == (CXWnd*)DPSWnd) CheckActive(); + else if (Message == 1) { + if (pWnd == (CXWnd*)Tabs) LoadSettings(); + else if (pWnd == (CXWnd*)CShowMeTop) ShowMeTop = CShowMeTop->Checked ? true : false; + else if (pWnd == (CXWnd*)CShowMeMin) ShowMeMin = CShowMeMin->Checked ? true : false; + else if (pWnd == (CXWnd*)CUseRaidColors) UseRaidColors = CUseRaidColors->Checked ? true : false; + else if (pWnd == (CXWnd*)CLiveUpdate) LiveUpdate = CLiveUpdate->Checked ? true : false; + //else if (pWnd == (CXWnd*)LTopList) WriteChatf("CurSel: %i", LTopList->GetCurSel()); + else if (pWnd == (CXWnd*)CShowTotal) { + ShowTotal = CShowTotal->GetCurChoice(); + if (ShowTotal == 4) ShowTotal = 0; + LoadSettings(); + } + else if (pWnd == (CXWnd*)CMobList) { + CurListMob = 0; + LTopList->DeleteAll(); + bool FoundMob = false; + if ((int)CMobList->GetCurChoice() > 1) { + CListType = 2; + int i = 0, x = 0; + for (auto mob : DamageEntries) { + auto ListMob = (PSPAWNINFO)GetSpawnByID(mob.first); + if (ListMob && ListMob->Type == 1 && !ListMob->PetID != 0) { + if (x + 2 == (int)CMobList->GetCurChoice()) { + FoundMob = true; + ListSwitch(ListMob); + break; + } + x++; + } + } + if (!FoundMob) { + CListType = 0; + DPSWnd->DrawCombo(); + } + } + else CListType = (int)CMobList->GetCurChoice(); + Intervals -= 1; // Force update next Pulse. + } + } + else if (Message == 14) { + CHAR szTemp[MAX_STRING] = { 0 }; + GetCXStr(((CEditWnd*)pWnd)->InputText, szTemp); + if (pWnd == (CXWnd*)TShowMeMin) { + if (strlen(szTemp)) { + szTemp[2] = 0; + ShowMeMinNum = atoi(szTemp); + sprintf_s(szTemp, "%i", ShowMeMinNum); + SetCXStr(&TShowMeMin->InputText, szTemp); + TShowMeMin->SetSel(strlen(szTemp), 0); + } + } + else if (pWnd == (CXWnd*)TFightIA) { + if (strlen(szTemp)) { + szTemp[2] = 0; + FightIA = atoi(szTemp); + if (FightIA < 3) FightIA = 8; + sprintf_s(szTemp, "%i", FightIA); + //SetCXStr(&TFightTO->InputText, szTemp); + //TFightTO->SetSel(strlen(szTemp), 0); + } + } + else if (pWnd == (CXWnd*)TFightTO) { + if (strlen(szTemp)) { + szTemp[2] = 0; + FightTO = atoi(szTemp); + if (FightTO < 3) FightTO = 30; + sprintf_s(szTemp, "%i", FightTO); + //SetCXStr(&TFightTO->InputText, szTemp); + //TFightTO->SetSel(strlen(szTemp), 0); + } + } + else if (pWnd == (CXWnd*)TEntTO) { + if (strlen(szTemp)) { + szTemp[2] = 0; + EntTO = atoi(szTemp); + if (EntTO < 3) EntTO = 8; + sprintf_s(szTemp, "%i", EntTO); + //SetCXStr(&TEntTO->InputText, szTemp); + //TEntTO->SetSel(strlen(szTemp), 0); + } + } + } + + + return CSidlScreenWnd::WndNotification(pWnd, Message, unknown); +}; + + +#ifdef DPSDEV +void DPSTestCmd(PSPAWNINFO pChar, PCHAR szLine) { + +} +#endif + +void DPSAdvCmd(PSPAWNINFO pChar, PCHAR szLine) { + char Arg1[MAX_STRING]; + GetArg(Arg1, szLine, 1); + if (!_stricmp(Arg1, "show")) + if (!DPSWnd) WriteChatf("\arDPSWnd does not exist. Try reloading your UI (/loadskin default)."); + else DPSWnd->dShow = !DPSWnd->dShow; + else if (!_stricmp(Arg1, "colors")) + ((CXWnd*)pRaidOptionsWnd)->Show(1, 1); + else if (DPSWnd && !_stricmp(Arg1, "reload")) + DPSWnd->LoadLoc(); + else if (DPSWnd && !_stricmp(Arg1, "save")) + DPSWnd->SaveLoc(); + else if (!_stricmp(Arg1, "listsize")) + WriteChatf("\ayMobList Size: %i", DamageEntries.size()); + else if (!_stricmp(Arg1, "copy")) { + char szCopy[MAX_STRING]; + GetArg(szCopy, szLine, 2); + if (DPSWnd) { + DPSWnd->LoadLoc(szCopy); + DPSWnd->SaveLoc(); + } + else WriteChatf("\arFailed to Copy: DPS Window not loaded."); + } + else if (!_stricmp(Arg1, "Debug")) { + Debug = Debug ? false : true; + WriteChatf("Debug is now: %s", Debug ? "\agOn" : "\arOff"); + } + CheckActive(); +} + +void CreateDPSWindow() { + if (DPSWnd) DestroyDPSWindow(); + if (pSidlMgr->FindScreenPieceTemplate("DPSAdvWnd")) { + DPSWnd = new CDPSAdvWnd(); + if (DPSWnd->dShow) ((CXWnd*)DPSWnd)->Show(1, 1); + char szTitle[MAX_STRING]; + sprintf_s(szTitle, "DPS Window", DPSVERSION); + SetCCXStr(&DPSWnd->WindowText, szTitle); + } + CheckActive(); +} + +void DestroyDPSWindow() { + if (DPSWnd) { + DPSWnd->SaveLoc(); + delete DPSWnd; + DPSWnd = 0; + } + CheckActive(); +} + +PLUGIN_API VOID SetDPSGameState(DWORD GameState) { + DebugSpewAlways("GameState Change: %i", GameState); + if (GameState == GAMESTATE_INGAME) { + if (!DPSWnd) CreateDPSWindow(); + } +} +bool bCleaned = false; +PLUGIN_API VOID OnDPSCleanUI(VOID) { DestroyDPSWindow(); bCleaned = true; } +PLUGIN_API VOID OnDPSReloadUI(VOID) { if (gGameState == GAMESTATE_INGAME && pCharSpawn) CreateDPSWindow(); } + +PLUGIN_API VOID InitializeDPSPlugin(VOID) { + LastMob = 0; + CurTarget = 0; + CurTarMob = 0; + CurListMob = 0; + CurMaxMob = 0; + Zoning = false; + ShowMeTop = false; + WrongUI = false; + AddXMLFile("EQUI_DPSAdvWnd.xml"); + AddCommand("/advdps", DPSAdvCmd); + CheckActive(); + if (gGameState != GAMESTATE_INGAME || !pCharSpawn) return; + else CreateDPSWindow(); +} + +PLUGIN_API VOID ShutdownDPSPlugin(VOID) { + DestroyDPSWindow(); + RemoveCommand("/advdps"); +#ifdef DPSDEV + RemoveCommand("/dpstest"); +#endif +} + +bool CheckInterval() { + if (!Intervals) Intervals = time(NULL); + else if (Intervals != time(NULL)) { + Intervals = time(NULL); + return true; + } + return false; +} + +void CheckActive() { + if (DPSWnd && DPSWnd->dShow && !Zoning && !WrongUI) Active = true; + else Active = false; +} + +void ListSwitch(PSPAWNINFO Switcher) { + if (Switcher) + { + CurListMob = Switcher; + } + DPSWnd->LTopList->SetCurSel(-1); + DPSWnd->LTopList->VScrollPos = 0; + DPSWnd->DrawList(); + DPSWnd->DrawCombo(); +} + +void TargetSwitch() { + CurTarget = (PSPAWNINFO)pTarget; + ListSwitch(CurTarget); +} + +void HandleDeath(EdgeDPSEntry DeadMob) { + + DPSWnd->DrawList(); +} + +void IntPulse() { + bool CChange = false; + for (auto mob : DamageEntries) { + auto spawnEntry = (PSPAWNINFO)GetSpawnByID(mob.first); + } + if (CListType == CLISTMAXDMG && CurMaxMob && CurMaxMob != CurListMob) + ListSwitch(CurMaxMob); + if (CChange) + DPSWnd->DrawCombo(); + DPSWnd->DrawList(); + //WriteChatf("Active: %s", Active ? "Yes" : "No"); +} + +PLUGIN_API VOID OnDPSPulse(VOID) { + if (gGameState != GAMESTATE_INGAME || !pCharSpawn) return; + + if (gGameState == GAMESTATE_INGAME) { + if (!DPSWnd) + CreateDPSWindow(); + } + + if (Active) { + + if (DPSWnd->dShow) ((CXWnd*)DPSWnd)->Show(1, 1); + if ((PSPAWNINFO)pTarget && (PSPAWNINFO)pTarget != CurTarget) TargetSwitch(); + if (CListType == CLISTTARGET && CurTarMob && CurTarMob != CurListMob) + { + auto entry = GetEdgeDPSEntryByID(CurTarMob->SpawnID, false); + if (entry.SpawnID && entry.weDamaged) + { + ListSwitch(CurTarMob); + } + } + if (CheckInterval()) IntPulse(); + } +} + +void ZoneProcess() { + LastMob = 0; + CurTarget = 0; + CurTarMob = 0; + CurListMob = 0; + CurMaxMob = 0; + DPSMob *pMob = 0; + DPSMob::DPSEntry *pEnt = 0; +} + +PLUGIN_API VOID OnDPSBeginZone(VOID) { + //DebugSpewAlways("START ZONING"); + ZoneProcess(); + Zoning = true; + CheckActive(); +} + +PLUGIN_API VOID OnDPSEndZone(VOID) { + //DebugSpewAlways("END ZONING"); + Zoning = false; + CheckActive(); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2Auth.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2Auth.cpp new file mode 100644 index 0000000000..a78242e140 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2Auth.cpp @@ -0,0 +1,11 @@ +#ifndef ISXEQ +#include "MQ2Main.h" + +DWORD gh; +LRESULT CALLBACK proc( int nCode, WPARAM wParam, LPARAM lParam ){return ::CallNextHookEx( (HHOOK)gh, nCode, wParam, lParam );} +typedef DWORD (__cdecl *FNCB)(DWORD,HINSTANCE,DWORD&); +#undef MQ2AUTH +#define MQ2AUTH(z) VOID z(DWORD x){FNCB f=(FNCB)x;f((DWORD)proc,ghInstance,gh);} +#include "MQ2Auth0.h" + +#endif diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2Benchmarks.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2Benchmarks.cpp new file mode 100644 index 0000000000..95b599db25 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2Benchmarks.cpp @@ -0,0 +1,170 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif + +#define DBG_SPEW +//#define DBG_TRY + +#include "MQ2Main.h" + +typedef CIndex BMIndex; +BMIndex *pBenchmarks=0; +#define Benchmarks (*pBenchmarks) + +DWORD AddMQ2Benchmark(PCHAR Name) +{ + DebugSpew("AddMQ2Benchmark(%s)",Name); + DWORD NewHandle= pBenchmarks->GetUnused(); + Benchmarks[NewHandle]=new MQBENCH; + memset(Benchmarks[NewHandle],0,sizeof(MQBENCH)); + strcpy(Benchmarks[NewHandle]->szName,Name); + return NewHandle; +} + +VOID RemoveMQ2Benchmark(DWORD BMHandle) +{ + DebugSpew("RemoveMQ2Benchmark()"); + if (Benchmarks[BMHandle]) + { + delete Benchmarks[BMHandle]; + Benchmarks[BMHandle]=0; + } +} + +VOID EnterMQ2Benchmark(DWORD BMHandle) +{ + if (!pBenchmarks) + return; + if (Benchmarks[BMHandle]) + { + //DebugSpew("EnterMQ2Benchmark(%s)",Benchmarks[BMHandle]->szName); + Benchmarks[BMHandle]->Entry=GetTickCount(); + } +} + +VOID ExitMQ2Benchmark(DWORD BMHandle) +{ + if (!pBenchmarks) + return; + if (Benchmarks[BMHandle]) + { + DWORD Time=GetTickCount()-Benchmarks[BMHandle]->Entry; + //DebugSpew("ExitMQ2Benchmark(%s)",Benchmarks[BMHandle]->szName); + Benchmarks[BMHandle]->LastTime=Time; + if (Benchmarks[BMHandle]->Count>4000000000) + { + Benchmarks[BMHandle]->Count=1; + Benchmarks[BMHandle]->TotalTime=Time; + } + else + { + Benchmarks[BMHandle]->Count++; + Benchmarks[BMHandle]->TotalTime+=Time; + } + } +} + +BOOL GetMQ2Benchmark(DWORD BMHandle, MQBENCH &Dest) +{ + if (!pBenchmarks) + return false; + if (Benchmarks[BMHandle]) + { + Dest=*Benchmarks[BMHandle]; // give them a copy of the data. + return true; + } + return false; +} + +#ifndef ISXEQ +VOID SpewMQ2BenchmarksToChat(PSPAWNINFO pChar, PCHAR szLine) +{ + char out[256]; + if (szLine && szLine[0]=='/') + { + DWORD Start=GetTickCount(); + HideDoCommand(pChar,szLine,0); + DWORD Time=GetTickCount()-Start; + sprintf(out,"\ay%s\ax completed in \at%.2f\axs",szLine,(float)Time/(float)1000); + WriteChatColor(out); + } + else + { + WriteChatColor("MQ2 Benchmarks"); + WriteChatColor("--------------"); + for (unsigned long i = 0 ; i < pBenchmarks->Size ; i++) + { + if (Benchmarks[i]) + { + float Avg=0; + if (Benchmarks[i]->Count) + Avg=(float)Benchmarks[i]->TotalTime/(float)Benchmarks[i]->Count; + sprintf(out,"[\ay%s\ax] \at%d\ax for \at%d\axms, \at%.2f\ax avg",Benchmarks[i]->szName,Benchmarks[i]->Count,Benchmarks[i]->TotalTime,Avg); + WriteChatColor(out); + } + } + WriteChatColor("--------------"); + WriteChatColor("End Benchmarks"); + } +} +#endif + +VOID SpewMQ2Benchmarks() +{ + DebugSpewAlways("MQ2 Benchmarks"); + DebugSpewAlways("--------------"); + for (unsigned long i = 0 ; i < pBenchmarks->Size ; i++) + { + if (Benchmarks[i]) + { + float Avg=0; + if (Benchmarks[i]->Count) + Avg=(float)Benchmarks[i]->TotalTime/(float)Benchmarks[i]->Count; + DebugTry(DebugSpewAlways("%-40s %d for %dms, %.2f avg",Benchmarks[i]->szName,Benchmarks[i]->Count,Benchmarks[i]->TotalTime,Avg)); + } + } + DebugSpewAlways("--------------"); + DebugSpewAlways("End Benchmarks"); +} + +VOID InitializeMQ2Benchmarks() +{ + DebugSpew("Initializing MQ2 Benchmarks"); + pBenchmarks=new BMIndex(10); +#ifndef ISXEQ + AddCommand("/benchmark",SpewMQ2BenchmarksToChat,0,0); +#endif +} + +VOID ShutdownMQ2Benchmarks() +{ + DebugTry(SpewMQ2Benchmarks()); + DebugSpew("Shutting down MQ2 Benchmarks"); +#ifndef ISXEQ + RemoveCommand("/benchmark"); +#endif + if (pBenchmarks) + { + DebugTry(pBenchmarks->Cleanup()); + DebugTry(delete pBenchmarks); + } + pBenchmarks=0; +} + + + + diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2ChatHook.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2ChatHook.cpp new file mode 100644 index 0000000000..150a936fa5 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2ChatHook.cpp @@ -0,0 +1,149 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#define DBG_SPEW + + +#include "MQ2Main.h" + +class CChatHook +{ +public: + VOID Trampoline(PCHAR szMsg, DWORD dwColor, bool EqLog, bool dopercentsubst); + VOID Detour(PCHAR szMsg, DWORD dwColor, bool EqLog, bool dopercentsubst) + { + //DebugSpew("CChatHook::Detour(%s)",szMsg); + gbInChat = TRUE; + + + //CheckChatForEvent(szMsg); + + BOOL Filtered=FALSE; + PFILTER Filter = gpFilters; + while (Filter && !Filtered) { + if (!Filter->pEnabled || (*Filter->pEnabled)) { + if (*Filter->FilterText == '*') { + if (strstr(szMsg,Filter->FilterText+1)) + Filtered = TRUE; + } else { + if (!strnicmp(szMsg,Filter->FilterText,Filter->Length)) + Filtered = TRUE; + } + } + Filter = Filter->pNext; + } + + if (!Filtered) { + //if (gTelnetServer && gTelnetConnection && !gPauseTelnetOutput) TelnetServer_Write(szMsg); + BOOL SkipTrampoline; + //OnDPSIncomingChat(szMsg, dwColor); + //Benchmark(bmPluginsIncomingChat,SkipTrampoline=PluginsIncomingChat(szMsg,dwColor)); + Trampoline(szMsg, dwColor, EqLog, dopercentsubst); + } + gbInChat = FALSE; + } + + VOID TellWnd_Trampoline(char *message,char *name,char *name2,void *unknown,int color,bool b); + VOID TellWnd_Detour(char *message,char *name,char *name2,void *unknown,int color,bool b) + { + char szMsg[MAX_STRING]; + BOOL SkipTrampoline; + gbInChat=true; + + sprintf(szMsg,"%s tells you, '%s'",name,message); + + // Benchmark(bmPluginsIncomingChat,SkipTrampoline=PluginsIncomingChat(szMsg,color)); + TellWnd_Trampoline(message,name,name2,unknown,color,b); + + gbInChat=false; + } + + VOID UPCNotificationFlush_Trampoline(); + VOID UPCNotificationFlush_Detour() + { + PEVERQUEST eq = (PEVERQUEST)this; + char szBuf[MAX_STRING] = {0}; + + if(eq->ChannelQty > 0) + { + int len = 0; + char *pTmp; + + if(eq->bJoinedChannel) + { + pTmp = "* %s has entered channel "; + } + else + { + pTmp = "* %s has left channel "; + } + + sprintf(szBuf, pTmp, eq->ChannelPlayerName); + + for(DWORD i = 0; i < eq->ChannelQty; i++) + { + if(i) + { + pTmp = ", %s:%d"; + } + else + { + pTmp = "%s:%d"; + } + + len = strlen(szBuf); + sprintf(&szBuf[len], pTmp, eq->ChannelName[i], eq->ChannelNumber[i] + 1); + } + } + + UPCNotificationFlush_Trampoline(); + } +}; + +DETOUR_TRAMPOLINE_EMPTY(VOID CChatHook::Trampoline(PCHAR szMsg, DWORD dwColor, bool EqLog, bool dopercentsubst)); +DETOUR_TRAMPOLINE_EMPTY(VOID CChatHook::TellWnd_Trampoline(char *message,char *name,char *name2,void *unknown,int color,bool b)); +DETOUR_TRAMPOLINE_EMPTY(VOID CChatHook::UPCNotificationFlush_Trampoline()); + +VOID dsp_chat_no_events(const char *Text,int Color,bool EqLog, bool dopercentsubst) +{ + ((CChatHook*)pEverQuest)->Trampoline((PCHAR)Text,Color,EqLog, dopercentsubst); +} + +unsigned int __stdcall MQ2DataVariableLookup(char * VarName, char * Value) +{ + strcpy(Value,VarName); + if (!GetCharInfo()) return strlen(Value); + return strlen(ParseMacroParameter(GetCharInfo()->pSpawn,Value)); +} + +VOID InitializeChatHook() +{ + DebugSpew("Initializing chat hook"); + + // initialize Blech + EzDetour(CEverQuest__dsp_chat,&CChatHook::Detour,&CChatHook::Trampoline); + EzDetour(CEverQuest__DoTellWindow,&CChatHook::TellWnd_Detour,&CChatHook::TellWnd_Trampoline); + EzDetour(CEverQuest__UPCNotificationFlush,&CChatHook::UPCNotificationFlush_Detour,&CChatHook::UPCNotificationFlush_Trampoline); +} + +VOID ShutdownChatHook() +{ + RemoveDetour(CEverQuest__dsp_chat); + RemoveDetour(CEverQuest__DoTellWindow); + RemoveDetour(CEverQuest__UPCNotificationFlush); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2CleanUI.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2CleanUI.cpp new file mode 100644 index 0000000000..8dc1db9b58 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2CleanUI.cpp @@ -0,0 +1,167 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#define DBG_SPEW + +//#define DEBUG_TRY 1 +#include "MQ2Main.h" + +char *OurCaption = "Core is loading..."; + +class CDisplayHook +{ +public: + VOID CleanUI_Trampoline(VOID); + VOID CleanUI_Detour(VOID) + { + DebugTry(CleanUI_Trampoline()); + } + + VOID ReloadUI_Trampoline(BOOL); + VOID ReloadUI_Detour(BOOL UseINI) + { + DebugTry(ReloadUI_Trampoline(UseINI)); + } + + /* This function is still in the client; however, it was phased out as of + the Omens of War Expansion + + bool GetWorldFilePath_Trampoline(char *, char *); + bool GetWorldFilePath_Detour(char *Filename, char *FullPath) + { + if (!stricmp(FullPath,"bmpwad8.s3d")) + { + sprintf(Filename,"%s\\bmpwad8.s3d",gszINIPath); + if (_access(Filename,0)!=-1) + { + return 1; + } + } + + bool Ret=GetWorldFilePath_Trampoline(Filename,FullPath); + return Ret; + } + */ +}; + +#ifndef ISXEQ + +DWORD __cdecl DrawHUD_Trampoline(DWORD,DWORD,DWORD,DWORD); +DWORD __cdecl DrawHUD_Detour(DWORD a,DWORD b,DWORD c,DWORD d) +{ + DrawHUDParams[0]=a; + DrawHUDParams[1]=b; + DrawHUDParams[2]=c; + DrawHUDParams[3]=d; + if (gbHUDUnderUI || gbAlwaysDrawMQHUD) + return 0; + int Ret= DrawHUD_Trampoline(a,b,c,d); + //PluginsDrawHUD(); + if (HMODULE hmEQPlayNice=GetModuleHandle("EQPlayNice.dll")) + { + if (fMQPulse pEQPlayNicePulse=(fMQPulse)GetProcAddress(hmEQPlayNice,"Compat_DrawIndicator")) + pEQPlayNicePulse(); + } + return Ret; +} + +void DrawHUD() +{ + if (gbAlwaysDrawMQHUD || (gGameState==GAMESTATE_INGAME && gbHUDUnderUI && gbShowNetStatus)) + { + if (DrawHUDParams[0] && gGameState==GAMESTATE_INGAME && gbShowNetStatus) + { + DrawHUD_Trampoline(DrawHUDParams[0],DrawHUDParams[1],DrawHUDParams[2],DrawHUDParams[3]); + DrawHUDParams[0]=0; + } + if (HMODULE hmEQPlayNice=GetModuleHandle("EQPlayNice.dll")) + { + if (fMQPulse pEQPlayNicePulse=(fMQPulse)GetProcAddress(hmEQPlayNice,"Compat_DrawIndicator")) + pEQPlayNicePulse(); + } + + } + else + DrawHUDParams[0]=0; +} + +VOID DrawHUDText(PCHAR Text, DWORD X, DWORD Y, DWORD Argb, DWORD Size) +{ + + DWORD sX=((PCXWNDMGR)pWndMgr)->ScreenExtentX; + DWORD sY=((PCXWNDMGR)pWndMgr)->ScreenExtentY; + + CTextureFont* pFont=0; + DWORD* ppDWord=(DWORD*)((PCXWNDMGR)pWndMgr)->font_list_ptr; + if (ppDWord[1]<=2) + { + pFont=(CTextureFont*)ppDWord[0]; + } + else + { + pFont=(CTextureFont*)ppDWord[2]; + } + if(Size!=2 && Size<12) + pFont->Size=Size; + pFont->DrawWrappedText(&CXStr((char*)Text),X,Y,sX-X,&CXRect(X,Y,sX,sY),Argb,1,0); + pFont->Size=2; // reset back to 2 or it screws up other HUD sizes +} +#endif + +class EQ_LoadingSHook +{ +public: + + VOID SetProgressBar_Trampoline(int,char const *); + VOID SetProgressBar_Detour(int A,char const *B) + { + SetProgressBar_Trampoline(A,B); + } +}; + +//DETOUR_TRAMPOLINE_EMPTY(bool CDisplayHook::GetWorldFilePath_Trampoline(char *, char *)); +DETOUR_TRAMPOLINE_EMPTY(VOID EQ_LoadingSHook::SetProgressBar_Trampoline(int, char const *)); +DETOUR_TRAMPOLINE_EMPTY(DWORD DrawHUD_Trampoline(DWORD,DWORD,DWORD,DWORD)); +DETOUR_TRAMPOLINE_EMPTY(VOID CDisplayHook::CleanUI_Trampoline(VOID)); +DETOUR_TRAMPOLINE_EMPTY(VOID CDisplayHook::ReloadUI_Trampoline(BOOL)); + +VOID InitializeDisplayHook() +{ + DebugSpew("Initializing Display Hooks"); + + EzDetour(CDisplay__CleanGameUI,&CDisplayHook::CleanUI_Detour,&CDisplayHook::CleanUI_Trampoline); + EzDetour(CDisplay__ReloadUI,&CDisplayHook::ReloadUI_Detour,&CDisplayHook::ReloadUI_Trampoline); + //EzDetour(CDisplay__GetWorldFilePath,&CDisplayHook::GetWorldFilePath_Detour,&CDisplayHook::GetWorldFilePath_Trampoline); +#ifndef ISXEQ + // EzDetour(DrawNetStatus,DrawHUD_Detour,DrawHUD_Trampoline); +#endif + EzDetour(EQ_LoadingS__SetProgressBar,&EQ_LoadingSHook::SetProgressBar_Detour,&EQ_LoadingSHook::SetProgressBar_Trampoline); +} + +VOID ShutdownDisplayHook() +{ + DebugSpew("Shutting down Display Hooks"); + + RemoveDetour(CDisplay__CleanGameUI); + RemoveDetour(CDisplay__ReloadUI); +#ifndef ISXEQ + RemoveDetour(DrawNetStatus); +#endif + RemoveDetour(EQ_LoadingS__SetProgressBar); + //RemoveDetour(CDisplay__GetWorldFilePath); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2CommandAPI.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2CommandAPI.cpp new file mode 100644 index 0000000000..458bb660ed --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2CommandAPI.cpp @@ -0,0 +1,668 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#define DBG_SPEW +#ifndef ISXEQ + + +#include "MQ2Main.h" + +CRITICAL_SECTION gCommandCS; + +typedef struct _TIMEDCOMMAND +{ + DWORD Time; + CHAR Command[MAX_STRING]; + _TIMEDCOMMAND *pLast; + _TIMEDCOMMAND *pNext; +} TIMEDCOMMAND, *PTIMEDCOMMAND; + +PTIMEDCOMMAND pTimedCommands=0; + +VOID HideDoCommand(PSPAWNINFO pChar, PCHAR szLine, BOOL delayed) +{ + if (delayed) + { + PCHATBUF pChat = (PCHATBUF)malloc(sizeof(CHATBUF)); + if (pChat) { + strcpy(pChat->szText,szLine); + pChat->pNext = NULL; + if (!gDelayedCommands) { + gDelayedCommands = pChat; + } else { + PCHATBUF pCurrent; + for (pCurrent = gDelayedCommands;pCurrent->pNext;pCurrent=pCurrent->pNext); + pCurrent->pNext = pChat; + } + } + return; + } + + CAutoLock DoCommandLock(&gCommandCS); + CHAR szCmd[MAX_STRING] = {0}; + CHAR szParam[MAX_STRING] = {0}; + CHAR szOriginalLine[MAX_STRING] = {0}; + + strcpy(szOriginalLine,szLine); + GetArg(szCmd,szLine,1); + PALIAS pLoop = pAliases; + while (pLoop) { + if (!stricmp(szCmd,pLoop->szName)) { + sprintf(szLine,"%s%s",pLoop->szCommand,szOriginalLine+strlen(pLoop->szName)); + break; + } + pLoop = pLoop->pNext; + } + + + GetArg(szCmd,szLine,1); + if (szCmd[0]==0) return; + strcpy(szParam, GetNextArg(szLine)); + + if ((szCmd[0]==':') || (szCmd[0]=='{')) { + bRunNextCommand = TRUE; + return; + } + + if (szCmd[0]=='}') { + if (strstr(szLine,"{")) { + GetArg(szCmd,szLine,2); + if (stricmp(szCmd,"else")) { + FatalError("} and { seen on the same line without an else present"); + } + // DebugSpew("DoCommand - handing {} off to FailIf"); + } else { + // handle this: + // /if () { + // } else /echo stuff + GetArg(szCmd,szLine,2); + if (!stricmp(szCmd,"else")) { + // check here to fail this: + // /if () { + // } else + // /echo stuff + GetArg(szCmd,szLine,3); + if (!stricmp(szCmd,"")) { + FatalError("no command or { following else"); + } + bRunNextCommand = TRUE; + } else { + bRunNextCommand = TRUE; + } + } + return; + } + if (szCmd[0]==';' || szCmd[0]=='[') + { + pEverQuest->InterpretCmd((EQPlayer*)pChar,szOriginalLine); + return; + } + + + + PMQCOMMAND pCommand=pCommands; + while(pCommand) + { + if (pCommand->InGameOnly && gGameState!=GAMESTATE_INGAME) + { + pCommand=pCommand->pNext; + continue; + } + int Pos=strnicmp(szCmd,pCommand->Command,strlen(szCmd)); + if (Pos<0) + {// command not found + break; + } + if (Pos==0) + { + if (pCommand->Parse && bAllowCommandParse) + { + pCommand->Function(pChar,ParseMacroParameter(pChar,szParam)); + } + else + pCommand->Function(pChar,szParam); + strcpy(szLastCommand,szOriginalLine); + return; + } + pCommand=pCommand->pNext; + } + if (!strnicmp(szOriginalLine,"sub ",4)) { + FatalError("Flow ran into another subroutine."); + return; + } + + strcpy(szLastCommand,szOriginalLine); + MacroError("DoCommand - Couldn't parse '%s'",szOriginalLine); +} + + +class CCommandHook +{ +public: + VOID Detour(PSPAWNINFO pChar, PCHAR szFullLine) + { + DebugSpew("CCommandHook::Detour(%s)",szFullLine); + CHAR szFullCommand[MAX_STRING] = {0}; + CHAR szCommand[MAX_STRING] = {0}; + CHAR szArgs[MAX_STRING] = {0}; + CHAR szOrig[MAX_STRING] = {0}; + CHAR szSub[MAX_STRING] = {0}; + string szSubFullCommand = ""; + unsigned int k=0; + bool OneCharacterSub = false; + PALIAS pLoop = pAliases; + PSUB pSubLoop = pSubs; + + if (szFullLine[0]!=0) { + strcpy(szFullCommand,szFullLine); + GetArg(szCommand,szFullCommand,1); + + szSubFullCommand = szFullCommand; + for (unsigned int i=0; i < sizeof(szFullCommand); i++ ) + { + if (szFullCommand[i] == '%') + { + if (szFullCommand[i+2] == ' ' || szFullCommand[i+2] == '\0' || + !isalnum(szFullCommand[i+2]) ) { + if (szFullCommand[i+1] == 'm' || szFullCommand[i+1] == 'M' || + szFullCommand[i+1] == 'o' || szFullCommand[i+1] == 'O' || + szFullCommand[i+1] == 'p' || szFullCommand[i+1] == 'P' || + szFullCommand[i+1] == 'r' || szFullCommand[i+1] == 'R' || + szFullCommand[i+1] == 's' || szFullCommand[i+1] == 'S' || + szFullCommand[i+1] == 't' || szFullCommand[i+1] == 'T' ) + continue; + else { + szOrig[0] = szFullCommand[i+1]; + szOrig[1] = '\0'; + k = 1; + OneCharacterSub = true; + } + } + + if (!OneCharacterSub) { + for (unsigned int j=i+1; j < sizeof(szFullCommand); j++ ) + { + if (szFullCommand[j] == ' ' || szFullCommand[j] == '\0' ) + break; + else if (!isalnum(szFullCommand[j])) + break; + szOrig[k] = szFullCommand[j]; + k++; + } + } + while (pSubLoop) + { + if (!stricmp(szOrig, pSubLoop->szOrig)) + { + sprintf( szSub, "%s", pSubLoop->szSub ); + break; + } + pSubLoop = pSubLoop->pNext; + } + if (szSub[0] != '\0' ) { + szSubFullCommand.replace(i,k+1,szSub); + sprintf( szFullCommand, "%s",szSubFullCommand.c_str() ); + } + szOrig[0] = '\0'; + szSub[0] = '\0'; + k=0; + OneCharacterSub = false; + pSubLoop = pSubs; + } + } + sprintf(szFullCommand, "%s", szSubFullCommand.c_str() ); + + while (pLoop) { + if (!stricmp(szCommand,pLoop->szName)) { + sprintf(szCommand,"%s%s",pLoop->szCommand,szFullCommand+strlen(pLoop->szName)); + strncpy(szFullCommand,szCommand,MAX_STRING); + break; + } + pLoop = pLoop->pNext; + } + GetArg(szCommand,szFullCommand,1); + strcpy(szArgs, GetNextArg(szFullCommand)); + + PMQCOMMAND pCommand=pCommands; + while(pCommand) + { + if (pCommand->InGameOnly && gGameState!=GAMESTATE_INGAME) + { + pCommand=pCommand->pNext; + continue; + } + int Pos=strnicmp(szCommand,pCommand->Command,strlen(szCommand)); + if (Pos<0) + {// command not found + break; + } + if (Pos==0) + { + if (pCommand->Parse && bAllowCommandParse) + ParseMacroParameter(pChar,szArgs); + if (pCommand->EQ) + { + strcat(szCommand," "); + strcat(szCommand,szArgs); + Trampoline(pChar,szCommand); + } + else + { + pCommand->Function(pChar,szArgs); + } + strcpy(szLastCommand,szFullCommand); + return; + } + pCommand=pCommand->pNext; + } + } + Trampoline(pChar,szFullLine); + strcpy(szLastCommand,szFullCommand); + } + + VOID Trampoline(PSPAWNINFO pChar, PCHAR szFullLine); + +}; + +DETOUR_TRAMPOLINE_EMPTY(VOID CCommandHook::Trampoline(PSPAWNINFO pChar, PCHAR szFullLine)); + + +void AddCommand(PCHAR Command, fEQCommand Function, BOOL EQ, BOOL Parse, BOOL InGame) +{ + DebugSpew("AddCommand(%s,0x%X)",Command,Function); + PMQCOMMAND pCommand=new MQCOMMAND; + memset(pCommand,0,sizeof(MQCOMMAND)); + strncpy(pCommand->Command,Command,63); + pCommand->EQ=EQ; + pCommand->Parse=Parse; + pCommand->Function=Function; + pCommand->InGameOnly=InGame; + + // perform insertion sort + if (!pCommands) + { + pCommands=pCommand; + return; + } + PMQCOMMAND pInsert=pCommands; + PMQCOMMAND pLast=0; + while(pInsert) + { + if (stricmp(pCommand->Command,pInsert->Command)<=0) + { + // insert here. + if (pLast) + pLast->pNext=pCommand; + else + pCommands=pCommand; + pCommand->pLast=pLast; + pInsert->pLast=pCommand; + pCommand->pNext=pInsert; + return; + } + pLast=pInsert; + pInsert=pInsert->pNext; + } + // End of list + pLast->pNext=pCommand; + pCommand->pLast=pLast; +} + +BOOL RemoveCommand(PCHAR Command) +{ + PMQCOMMAND pCommand=pCommands; + while(pCommand) + { + int Pos=strnicmp(Command,pCommand->Command,63); + if (Pos<0) + { + DebugSpew("RemoveCommand: Command not found '%s'",Command); + return 0; + } + if (Pos==0) + { + if (pCommand->pNext) + pCommand->pNext->pLast=pCommand->pLast; + if (pCommand->pLast) + pCommand->pLast->pNext=pCommand->pNext; + else + pCommands=pCommand->pNext; + delete pCommand; + return 1; + } + pCommand=pCommand->pNext; + } + return 0; +} + +void AddAlias(PCHAR ShortCommand, PCHAR LongCommand) +{ + DebugSpew("AddAlias(%s,%s)",ShortCommand,LongCommand); + // perform insertion sort + if (!pAliases) + { + PALIAS pAlias=new ALIAS; + memset(pAlias,0,sizeof(ALIAS)); + strcpy(pAlias->szName,ShortCommand); + strcpy(pAlias->szCommand,LongCommand); + pAliases=pAlias; + return; + } + PALIAS pInsert=pAliases; + PALIAS pLast=0; + while(pInsert) + { + int Pos=stricmp(ShortCommand,pInsert->szName); + if (Pos<0) + { + // insert here. + PALIAS pAlias=new ALIAS; + memset(pAlias,0,sizeof(ALIAS)); + strcpy(pAlias->szName,ShortCommand); + strcpy(pAlias->szCommand,LongCommand); + if (pLast) + pLast->pNext=pAlias; + else + pAliases=pAlias; + pAlias->pLast=pLast; + pInsert->pLast=pAlias; + pAlias->pNext=pInsert; + return; + } + if (Pos==0) + { + strcpy(pInsert->szName,ShortCommand); + strcpy(pInsert->szCommand,LongCommand); + return; + } + pLast=pInsert; + pInsert=pInsert->pNext; + } + // End of list + PALIAS pAlias=new ALIAS; + memset(pAlias,0,sizeof(ALIAS)); + strcpy(pAlias->szName,ShortCommand); + strcpy(pAlias->szCommand,LongCommand); + pLast->pNext=pAlias; + pAlias->pLast=pLast; +} + +BOOL RemoveAlias(PCHAR ShortCommand) +{ + PALIAS pAlias=pAliases; + while(pAlias) + { + if (!stricmp(ShortCommand,pAlias->szName)) + { + if (pAlias->pNext) + pAlias->pNext->pLast=pAlias->pLast; + if (pAlias->pLast) + pAlias->pLast->pNext=pAlias->pNext; + else + pAliases=pAlias->pNext; + delete pAlias; + return 1; + } + pAlias=pAlias->pNext; + } + return 0; +} + +void AddSubstitute(PCHAR Original, PCHAR Substitution) +{ + DebugSpew("AddSubstitute(%s,%s)",Original,Substitution); + // perform insertion sort + if (!pSubs) + { + PSUB pSub=new SUB; + memset(pSub,0,sizeof(SUB)); + strcpy(pSub->szOrig,Original); + strcpy(pSub->szSub,Substitution); + pSubs=pSub; + return; + } + PSUB pInsert=pSubs; + PSUB pLast=0; + while(pInsert) + { + int Pos=stricmp(Original,pInsert->szOrig); + if (Pos<0) + { + // insert here. + PSUB pSub=new SUB; + memset(pSub,0,sizeof(SUB)); + strcpy(pSub->szOrig,Original); + strcpy(pSub->szSub,Substitution); + if (pLast) + pLast->pNext=pSub; + else + pSubs=pSub; + pSub->pLast=pLast; + pInsert->pLast=pSub; + pSub->pNext=pInsert; + return; + } + if (Pos==0) + { + strcpy(pInsert->szOrig,Original); + strcpy(pInsert->szSub,Substitution); + return; + } + pLast=pInsert; + pInsert=pInsert->pNext; + } + // End of list + PSUB pSub=new SUB; + memset(pSub,0,sizeof(SUB)); + strcpy(pSub->szOrig,Original); + strcpy(pSub->szSub,Substitution); + pLast->pNext=pSub; + pSub->pLast=pLast; +} + +BOOL RemoveSubstitute(PCHAR Original) +{ + PSUB pSub=pSubs; + while(pSub) + { + if (!stricmp(Original,pSub->szOrig)) + { + if (pSub->pNext) + pSub->pNext->pLast=pSub->pLast; + if (pSub->pLast) + pSub->pLast->pNext=pSub->pNext; + else + pSubs=pSub->pNext; + delete pSub; + return 1; + } + pSub=pSub->pNext; + } + return 0; +} + +void InitializeMQ2Commands() +{ + int i; + DebugSpew("Initializing Commands"); + InitializeCriticalSection(&gCommandCS); + + EzDetour(CEverQuest__InterpretCmd,&CCommandHook::Detour,&CCommandHook::Trampoline); + + // Import EQ commands + PCMDLIST pCmdListOrig = (PCMDLIST)EQADDR_CMDLIST; + for (i=0;pCmdListOrig[i].fAddress != 0;i++) { + if (!strcmp(pCmdListOrig[i].szName,"/who")) { + cmdWho = (fEQCommand)pCmdListOrig[i].fAddress; + AddCommand("/",pCmdListOrig[i].fAddress,TRUE,1,1); // make sure / does EQ who by default + } else if (!strcmp(pCmdListOrig[i].szName,"/whotarget")) { + cmdWhoTarget = (fEQCommand)pCmdListOrig[i].fAddress; + } else if (!strcmp(pCmdListOrig[i].szName,"/location")) { + cmdLocation = (fEQCommand)pCmdListOrig[i].fAddress; + } else if (!strcmp(pCmdListOrig[i].szName,"/help")) { + cmdHelp = (fEQCommand)pCmdListOrig[i].fAddress; + } else if (!strcmp(pCmdListOrig[i].szName,"/target")) { + cmdTarget = (fEQCommand)pCmdListOrig[i].fAddress; + } else if (!strcmp(pCmdListOrig[i].szName,"/charinfo")) { + cmdCharInfo = (fEQCommand)pCmdListOrig[i].fAddress; + } else if (!strcmp(pCmdListOrig[i].szName,"/filter")) { + cmdFilter = (fEQCommand)pCmdListOrig[i].fAddress; + } else if (!strcmp(pCmdListOrig[i].szName,"/doability")) { + cmdDoAbility = (fEQCommand)pCmdListOrig[i].fAddress; + } else if (!strcmp(pCmdListOrig[i].szName,"/cast")) { + cmdCast = (fEQCommand)pCmdListOrig[i].fAddress; + } + AddCommand(pCmdListOrig[i].szName,pCmdListOrig[i].fAddress,TRUE,1,1); + } + + + + // Add MQ commands... + struct _NEWCOMMANDLIST { PCHAR szCommand; fEQCommand pFunc; BOOL Parse; BOOL InGame;} NewCommands[] = { + {"/who", SuperWho,1,1}, + {NULL, NULL, 0, 1}, + }; + + // Remove replaced commands first + for (i = 0 ; NewCommands[i].szCommand && NewCommands[i].pFunc ; i++) + { + RemoveCommand(NewCommands[i].szCommand); + AddCommand(NewCommands[i].szCommand,NewCommands[i].pFunc,0,NewCommands[i].Parse,NewCommands[i].InGame); + } + + /* ALIASES FOR OUT OF ORDER SHORTHAND COMMANDS */ + AddAlias("/d","/duel"); + AddAlias("/t","/tell"); + AddAlias("/w","/who"); + AddAlias("/a","/anonymous"); + AddAlias("/ta","/tap"); + AddAlias("/c","/consider"); + AddAlias("/cha","/channel"); + AddAlias("/f","/feedback"); + AddAlias("/fa","/fastdrop"); + AddAlias("/m","/msg"); + AddAlias("/load","/loadspells"); + AddAlias("/b","/bazaar"); + AddAlias("/ba","/bazaar"); + AddAlias("/g","/gsay"); + AddAlias("/gu","/guildsay"); + AddAlias("/key","/keys"); + AddAlias("/r","/reply"); + + AddAlias("/newif","/if"); + /* NOW IMPORT THE USER'S ALIAS LIST, THEIR MODIFICATIONS OVERRIDE EXISTING. */ + + CHAR AliasList[MAX_STRING*10] = {0}; + CHAR szBuffer[MAX_STRING] = {0}; + CHAR MainINI[MAX_STRING] = {0}; + sprintf(MainINI,"%s\\macroquest.ini",gszINIPath); + GetPrivateProfileString("Aliases",NULL,"",AliasList,MAX_STRING*10,MainINI); + PCHAR pAliasList = AliasList; + while (pAliasList[0]!=0) { + GetPrivateProfileString("Aliases",pAliasList,"",szBuffer,MAX_STRING,MainINI); + if (szBuffer[0]!=0) { + AddAlias(pAliasList,szBuffer); + } + pAliasList+=strlen(pAliasList)+1; + } +} + +void ShutdownMQ2Commands() +{ + EnterCriticalSection(&gCommandCS); + RemoveDetour(CEverQuest__InterpretCmd); + while(pCommands) + { + PMQCOMMAND pNext=pCommands->pNext; + delete pCommands; + pCommands=pNext; + } + while(gDelayedCommands) + { + PCHATBUF pNext=gDelayedCommands->pNext; + free(gDelayedCommands); + gDelayedCommands=pNext; + } + while(pTimedCommands) + { + PTIMEDCOMMAND pNext=pTimedCommands->pNext; + delete pTimedCommands; + pTimedCommands=pNext; + } + while(pAliases) + { + PALIAS pNext=pAliases->pNext; + delete pAliases; + pAliases=pNext; + } + while(pSubs) + { + PSUB pNext=pSubs->pNext; + delete pSubs; + pSubs=pNext; + } + + LeaveCriticalSection(&gCommandCS); + DeleteCriticalSection(&gCommandCS); +} + +VOID DoTimedCommands() +{ + DWORD Now=GetTickCount(); + while(pTimedCommands && pTimedCommands->Time<=Now) + { + PTIMEDCOMMAND pNext=pTimedCommands->pNext; + DoCommand(((PCHARINFO)pCharData)->pSpawn,pTimedCommands->Command); + delete pTimedCommands; + pTimedCommands=pNext; + } +} + +VOID TimedCommand(PCHAR Command, DWORD msDelay) +{ + PTIMEDCOMMAND pNew= new TIMEDCOMMAND; + pNew->Time=msDelay+GetTickCount(); + strcpy(pNew->Command,Command); + + // insert into list + + if (!pTimedCommands || pTimedCommands->Time>=pNew->Time) + { + pNew->pNext=pTimedCommands; + pNew->pLast=0; + pTimedCommands=pNew; + return; + } + + PTIMEDCOMMAND pLast=pTimedCommands; + PTIMEDCOMMAND pNode=pTimedCommands->pNext; + while(pNode) + { + if (pNew->Time<=pNode->Time) + { + break; + } + pLast=pNode; + pNode=pNode->pNext; + } + pLast->pNext=pNew; + pNew->pLast=pLast; + pNew->pNext=pNode; +} + +#endif diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2Commands.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2Commands.cpp new file mode 100644 index 0000000000..d659809955 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2Commands.cpp @@ -0,0 +1,3092 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#ifndef ISXEQ +#define DBG_SPEW + +#include + +#include "MQ2Main.h" +#include +#include + +// *************************************************************************** +// Function: ListMacros +// Description: Our '/listmacros' command +// Lists macro files +// Usage: /listmacros +// *************************************************************************** +VOID ListMacros(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + HANDLE hSearch; + WIN32_FIND_DATA FileData; + BOOL fFinished = FALSE; + + DWORD Count = 0, a,b; + CHAR szFilename[MAX_STRING] = {0}; + CHAR szName[100][MAX_STRING] = {0}; + if (szLine[0]!=0) { + sprintf(szFilename,"%s\\*%s*.*",gszMacroPath, szLine); + } else { + sprintf(szFilename,"%s\\*.*",gszMacroPath, szLine); + } + + + + // Start searching for .TXT files in the current directory. + + hSearch = FindFirstFile(szFilename, &FileData); + if (hSearch == INVALID_HANDLE_VALUE) { + WriteChatColor("Couldn't find any macros",USERCOLOR_DEFAULT); + return; + } + + + while (!fFinished) + { + strcat(szName[Count],FileData.cFileName); + Count++; + if (Count>99) fFinished=TRUE; + + if (!FindNextFile(hSearch, &FileData)) + fFinished = TRUE; + } + FindClose(hSearch); + Count; + + for (a=Count-1;a>0;a--) { + for (b=0;bszName[b+1]) { + strcat(szFilename,szName[b]); + strcat(szName[b],szName[b+1]); + strcat(szName[b+1],szFilename); + } + } + } + + WriteChatColor("Macro list",USERCOLOR_WHO); + WriteChatColor("----------------",USERCOLOR_WHO); + for (a=0;a +// *************************************************************************** +VOID Items(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + + if (!ppItemList) return; + if (!pItemList) return; + PGROUNDITEM pItem = *(PGROUNDITEM*)pItemList; + DWORD Count=0; + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szName[MAX_STRING]={0}; + WriteChatColor("Items on the ground:", USERCOLOR_DEFAULT); + WriteChatColor("---------------------------", USERCOLOR_DEFAULT); + while (pItem) { + GetFriendlyNameForGroundItem(pItem,szName); + + DebugSpew(" Item found - %d: DropID %d %s (%s)", + pItem->ID, pItem->DropID, szName, pItem->Name); + + if ((szLine[0]==0) || (!strnicmp(szName,szLine,strlen(szLine)))) { + SPAWNINFO TempSpawn; + FLOAT Distance; + ZeroMemory(&TempSpawn,sizeof(TempSpawn)); + strcpy(TempSpawn.Name,szName); + TempSpawn.Y=pItem->Y; + TempSpawn.X=pItem->X; + TempSpawn.Z=pItem->Z; + Distance = DistanceToSpawn(pChar,&TempSpawn); + INT Angle = (INT)((atan2f(pChar->X - pItem->X, pChar->Y - pItem->Y) * 180.0f / PI + 360.0f) / 22.5f + 0.5f) % 16; + + sprintf(szBuffer,"%s: %1.2f away to the %s",szName,Distance,szHeading[Angle]); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + Count++; + } + + pItem = pItem->pNext; + } + if (Count==0) { + WriteChatColor("No items found.",USERCOLOR_DEFAULT); + } else { + sprintf(szBuffer,"%d item%s found.",Count,(Count==1)?"":"s"); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } +} + + +// *************************************************************************** +// Function: ItemTarget +// Description: Our '/itemtarget' command +// Lists ground item info +// Usage: /itemtarget +// *************************************************************************** +VOID ItemTarget(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + + if (!ppItemList) return; + if (!pItemList) return; + PGROUNDITEM pItem = *(PGROUNDITEM*)pItemList; + CHAR Arg1[MAX_STRING] = {0}; + CHAR Arg2[MAX_STRING] = {0}; + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szName[MAX_STRING]={0}; + FLOAT cDistance = 100000.0f; + ZeroMemory(&EnviroTarget,sizeof(EnviroTarget)); + pGroundTarget = NULL; + GetArg(Arg1,szLine,1); + GetArg(Arg2,szLine,2); + while (pItem) { + GetFriendlyNameForGroundItem(pItem,szName); + if ( + ( + (szLine[0]==0) || + (!strnicmp(szName,Arg1,strlen(Arg1))) + ) && ( + (gZFilter >=10000.0f) || + ( + (pItem->Z <= pChar->Z + gZFilter) && + (pItem->Z >= pChar->Z - gZFilter) + ) + ) + ) { + SPAWNINFO tSpawn; + ZeroMemory(&tSpawn,sizeof(tSpawn)); + strcpy(tSpawn.Name,szName); + tSpawn.Y=pItem->Y; + tSpawn.X=pItem->X; + tSpawn.Z=pItem->pSwitch->Z; + tSpawn.Type = SPAWN_NPC; + tSpawn.HPCurrent = 1; + tSpawn.HPMax = 1; + tSpawn.Heading=pItem->Heading; + tSpawn.Race = pItem->DropID; + FLOAT Distance = DistanceToSpawn(pChar,&tSpawn); + if (DistancepNext; + } + if (EnviroTarget.Name[0]!=0) { + sprintf(szBuffer,"Item '%s' targeted.",EnviroTarget.Name); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + if (stricmp(Arg2,"notarget") && ppTarget && 0) pTarget = (EQPlayer*)&EnviroTarget; + } else { + if (ppTarget && (pTarget == (EQPlayer*)&EnviroTarget)) + pTarget = NULL; + MacroError("Couldn't find '%s' to target.",szLine); + } + +} + + +// *************************************************************************** +// Function: Doors +// Description: Our '/doors' command +// Lists door info +// Usage: /doors +// *************************************************************************** +VOID Doors(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + + if (!ppSwitchMgr) return; + if (!pSwitchMgr) return; + PDOORTABLE pDoorTable = (PDOORTABLE)pSwitchMgr; + DWORD Count; + DWORD ActualCount=0; + CHAR szBuffer[MAX_STRING] = {0}; + + WriteChatColor("Doors:", USERCOLOR_DEFAULT); + WriteChatColor("---------------------------", USERCOLOR_DEFAULT); + size_t slen = strlen(szLine); + + for (Count=0; CountNumEntries; Count++) { + if ((szLine[0]==0) || (!strnicmp(pDoorTable->pDoor[Count]->Name,szLine,slen))) { + SPAWNINFO TempSpawn; + FLOAT Distance; + ZeroMemory(&TempSpawn,sizeof(TempSpawn)); + strcpy(TempSpawn.Name,pDoorTable->pDoor[Count]->Name); + TempSpawn.Y=pDoorTable->pDoor[Count]->Y; + TempSpawn.X=pDoorTable->pDoor[Count]->X; + TempSpawn.Z=pDoorTable->pDoor[Count]->Z; + TempSpawn.Heading=pDoorTable->pDoor[Count]->Heading; + Distance = DistanceToSpawn(pChar,&TempSpawn); + INT Angle = (INT)((atan2f(pChar->X - pDoorTable->pDoor[Count]->X, pChar->Y - pDoorTable->pDoor[Count]->Y) * 180.0f / PI + 360.0f) / 22.5f + 0.5f) % 16; + sprintf(szBuffer,"%d: %s: %1.2f away to the %s",pDoorTable->pDoor[Count]->ID, pDoorTable->pDoor[Count]->Name, Distance, szHeading[Angle]); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + ActualCount++; + } + } + + if (ActualCount==0) { + WriteChatColor("No Doors found.",USERCOLOR_DEFAULT); + } else { + sprintf(szBuffer,"%d door%s found.",ActualCount,(ActualCount==1)?"":"s"); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } +} + + + +// *************************************************************************** +// Function: DoorTarget +// Description: Our '/doortarget' command +// Targets the nearest specified door +// Usage: /doortarget +// *************************************************************************** +VOID DoorTarget(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + + if (!ppSwitchMgr) return; + if (!pSwitchMgr) return; + PDOORTABLE pDoorTable = (PDOORTABLE)pSwitchMgr; + DWORD Count; + + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szSearch[MAX_STRING] = {0}; + CHAR Arg1[MAX_STRING] = {0}; + CHAR Arg2[MAX_STRING] = {0}; + FLOAT cDistance = 100000.0f; + BYTE ID = -1; + ZeroMemory(&DoorEnviroTarget,sizeof(DoorEnviroTarget)); + pDoorTarget = NULL; + + GetArg(Arg1,szLine,1); + GetArg(Arg2,szLine,2); + if (!stricmp(Arg1, "id")) { + if (Arg2[0]==0) { + MacroError("DoorTarget: id specified but no number provided."); + return; + } + + ID = atoi(Arg2); + GetArg(Arg2,szLine,3); + for (Count=0; CountNumEntries; Count++) { + if (pDoorTable->pDoor[Count]->ID == ID) { + strcpy(DoorEnviroTarget.Name, pDoorTable->pDoor[Count]->Name); + DoorEnviroTarget.Y = pDoorTable->pDoor[Count]->Y; + DoorEnviroTarget.X = pDoorTable->pDoor[Count]->X; + DoorEnviroTarget.Z = pDoorTable->pDoor[Count]->Z; + DoorEnviroTarget.Heading = pDoorTable->pDoor[Count]->Heading; + DoorEnviroTarget.Type = SPAWN_NPC; + DoorEnviroTarget.HPCurrent = 1; + DoorEnviroTarget.HPMax = 1; + pDoorTarget = pDoorTable->pDoor[Count]; + break; + } + } + } else { + strcpy(szSearch, Arg1); + for (Count=0; CountNumEntries; Count++) { + if (((szSearch[0]==0) || + (!strnicmp(pDoorTable->pDoor[Count]->Name,szSearch,strlen(szSearch)))) && + ((gZFilter >=10000.0f) || + ((pDoorTable->pDoor[Count]->Z <= pChar->Z + gZFilter) && + (pDoorTable->pDoor[Count]->Z >= pChar->Z - gZFilter)))) { + SPAWNINFO tSpawn; + ZeroMemory(&tSpawn,sizeof(tSpawn)); + strcpy(tSpawn.Name,pDoorTable->pDoor[Count]->Name); + tSpawn.Y=pDoorTable->pDoor[Count]->Y; + tSpawn.X=pDoorTable->pDoor[Count]->X; + tSpawn.Z=pDoorTable->pDoor[Count]->Z; + tSpawn.Type = SPAWN_NPC; + tSpawn.HPCurrent = 1; + tSpawn.HPMax = 1; + tSpawn.Heading=pDoorTable->pDoor[Count]->Heading; + FLOAT Distance = DistanceToSpawn(pChar,&tSpawn); + if (DistancepDoor[Count]; + cDistance=Distance; + } + } + + } + } + + + if (DoorEnviroTarget.Name[0]!=0) { + sprintf(szBuffer,"Door %d '%s' targeted.", pDoorTarget->ID, DoorEnviroTarget.Name); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + if (stricmp(Arg2,"notarget") && ppTarget && 0) pTarget = (EQPlayer*)&DoorEnviroTarget; + } else { + if (ppTarget) pTarget = NULL; + MacroError("Couldn't find door '%s' to target.",szLine); + } +} + +// *************************************************************************** +// Function: CharInfo +// Description: Our '/charinfo' command +// Displays character bind points +// Usage: /charinfo +// *************************************************************************** + + +VOID CharInfo(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szBuffer[MAX_STRING] = {0}; + bRunNextCommand = TRUE; + + if (gFilterMacro == FILTERMACRO_NONE) cmdCharInfo(pChar, szLine); + PCHARINFO pCharInfo = NULL; + if (NULL == (pCharInfo = GetCharInfo())) return; + DoCommand(pCharInfo->pSpawn,"/charinfo"); + sprintf(szBuffer,"The location of your bind is: %1.2f, %1.2f, %1.2f", GetCharInfo2()->ZoneBoundX, GetCharInfo2()->ZoneBoundY, GetCharInfo2()->ZoneBoundZ); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); +} + + +VOID UpdateItemInfo(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szBuffer[MAX_STRING] = {0}; + PCONTENTS pContainer = NULL; + int nInvIdx; + + PCHARINFO pCharInfo = NULL; + if (NULL == (pCharInfo = GetCharInfo())) return; + + for (nInvIdx=0; nInvIdx < NUM_INV_SLOTS; nInvIdx++) { + if (GetCharInfo2()->pInventoryArray->InventoryArray[nInvIdx] != NULL) { + BOOL Found = FALSE; + PITEMDB ItemDB = gItemDB; + while (ItemDB) { + if (ItemDB->ID == GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[nInvIdx])->ItemNumber) { + Found = TRUE; + } + ItemDB = ItemDB->pNext; + } + if (!Found) { + PITEMDB Item = (PITEMDB)malloc(sizeof(ITEMDB)); + Item->pNext = gItemDB; + Item->ID = GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[nInvIdx])->ItemNumber; + strcpy(Item->szName, GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[nInvIdx])->Name); + DebugSpew(" New Item found - %d: %s", Item->ID, Item->szName); + gItemDB = Item; + } + if (GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[nInvIdx])->Type == ITEMTYPE_PACK) { + pContainer = GetCharInfo2()->pInventoryArray->InventoryArray[nInvIdx]; + DebugSpew(" Opening Pack"); + for (int nPackIdx = 0; nPackIdx < GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[nInvIdx])->Slots; nPackIdx++) { + if (pContainer->pContentsArray->Contents[nPackIdx] != NULL) { + Found = FALSE; + PITEMDB ItemDB = gItemDB; + while (ItemDB) { + if (pContainer->pContentsArray->Contents[nPackIdx]) { + if (ItemDB->ID == GetItemFromContents(pContainer->pContentsArray->Contents[nPackIdx])->ItemNumber) { + Found = TRUE; + } + ItemDB = ItemDB->pNext; + } + } + if (!Found) { + PITEMDB Item = (PITEMDB)malloc(sizeof(ITEMDB)); + Item->pNext = gItemDB; + Item->ID = GetItemFromContents(pContainer->pContentsArray->Contents[nPackIdx])->ItemNumber; + strcpy(Item->szName, GetItemFromContents(pContainer->pContentsArray->Contents[nPackIdx])->Name); + DebugSpew(" New Item found - %d: %s", Item->ID, Item->szName); + gItemDB = Item; + } + } + } + } + } + } + + for (nInvIdx=0; nInvIdx < NUM_BANK_SLOTS; nInvIdx++) { + if (GetCharInfo()->pBankArray->Bank[nInvIdx] != NULL) { + BOOL Found = FALSE; + PITEMDB ItemDB = gItemDB; + while (ItemDB) { + if (ItemDB->ID == GetItemFromContents(GetCharInfo()->pBankArray->Bank[nInvIdx])->ItemNumber) { + Found = TRUE; + } + ItemDB = ItemDB->pNext; + } + if (!Found) { + PITEMDB Item = (PITEMDB)malloc(sizeof(ITEMDB)); + Item->pNext = gItemDB; + Item->ID = GetItemFromContents(GetCharInfo()->pBankArray->Bank[nInvIdx])->ItemNumber; + strcpy(Item->szName, GetItemFromContents(pCharInfo->pBankArray->Bank[nInvIdx])->Name); + DebugSpew(" New Item found - %d: %s", Item->ID, Item->szName); + gItemDB = Item; + } + if (GetItemFromContents(pCharInfo->pBankArray->Bank[nInvIdx])->Type == ITEMTYPE_PACK) { + LONG nPackIdx; + pContainer = pCharInfo->pBankArray->Bank[nInvIdx]; + + for (nPackIdx = 0; nPackIdx < GetItemFromContents(pCharInfo->pBankArray->Bank[nInvIdx])->Slots; nPackIdx++) { + if (pContainer->pContentsArray->Contents[nPackIdx] != NULL) { + PITEMDB ItemDB = gItemDB; + Found = FALSE; + while (ItemDB) { + if (pContainer->pContentsArray->Contents[nPackIdx]) { + if (ItemDB->ID == GetItemFromContents(pContainer->pContentsArray->Contents[nPackIdx])->ItemNumber) { + Found = TRUE; + } + ItemDB = ItemDB->pNext; + } + } + if (!Found) { + PITEMDB Item = (PITEMDB)malloc(sizeof(ITEMDB)); + Item->pNext = gItemDB; + Item->ID = GetItemFromContents(pContainer->pContentsArray->Contents[nPackIdx])->ItemNumber; + strcpy(Item->szName, GetItemFromContents(pContainer->pContentsArray->Contents[nPackIdx])->Name); + DebugSpew(" New Item found - %d: %s", Item->ID, Item->szName); + gItemDB = Item; + } + } + } + } + } + } + + PITEMDB ItemDB = gItemDB; + if (ItemDB) { + FILE *fDB = fopen(gszItemDB, "wt"); + while (ItemDB) { + sprintf(szBuffer, "%d\t%s\n", ItemDB->ID, ItemDB->szName); + fputs(szBuffer, fDB); + ItemDB = ItemDB->pNext; + } + fclose(fDB); + } +} + +// *************************************************************************** +// Function: MemSpell +// Description: Our '/MemSpell' command +// Usage: /MemSpell gem# "spell name" +// *************************************************************************** +SPELLFAVORITE MemSpellFavorite; +VOID MemSpell(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!ppSpellBookWnd) return; + DWORD Favorite = (DWORD)&MemSpellFavorite; + CHAR szGem[MAX_STRING] = {0}; + DWORD sp; + WORD Gem = -1; + CHAR SpellName[MAX_STRING] = {0}; + PCHARINFO pCharInfo = NULL; + if (!pSpellBookWnd) return; + if (NULL == (pCharInfo = GetCharInfo())) return; + + GetArg(szGem,szLine,1); + GetArg(SpellName,szLine,2); + Gem = atoi(szGem); + if (Gem<1 || Gem>NUM_SPELL_GEMS) return; + Gem--; + + GetCharInfo2()->SpellBook; + PSPELL pSpell=0; + for (DWORD N = 0 ; N < NUM_BOOK_SLOTS ; N++) + if (PSPELL pTempSpell=GetSpellByID(GetCharInfo2()->SpellBook[N])) + { + // exact name match only + if (!stricmp(SpellName,pTempSpell->Name)) + { + pSpell=pTempSpell; + break; + } + } + + if (!pSpell) return; + if (pSpell->Level[pChar->Class-1]>pChar->Level) return; + + ZeroMemory(&MemSpellFavorite,sizeof(MemSpellFavorite)); + strcpy(MemSpellFavorite.Name,"Mem a Spell"); + MemSpellFavorite.inuse=1; + for (sp=0;spID; + pSpellBookWnd->MemorizeSet((int*)Favorite,NUM_SPELL_GEMS); +} + +// *************************************************************************** +// Function: buyitem +// Description: Our '/buyitem' command +// Usage: /buyitem Quantity# +// uses private: void __thiscall CMerchantWnd::RequestBuyItem(int) +// will buy the specified quantity of the currently selected item +// *************************************************************************** +VOID BuyItem(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = FALSE; + if (!pMerchantWnd) return; + + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szQty[MAX_STRING] = {0}; + PCHARINFO pCharInfo = NULL; + DWORD Qty; + if (!GetCharInfo() || !((PEQMERCHWINDOW)pMerchantWnd)->SelectedSlotID) return; + { + GetArg(szQty,szLine,1); + Qty = (DWORD)atoi(szQty); + if (Qty < 1) return; + pMerchantWnd->RequestBuyItem(Qty); + } +} +// *************************************************************************** +// Function: sellitem +// Description: Our '/sellitem' command +// Usage: /sellitem Quantity# +// uses private: void __thiscall CMerchantWnd::RequestSellItem(int) +// will sell the specified quantity of the currently selected item +// *************************************************************************** +VOID SellItem(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = FALSE; + if (!pMerchantWnd) return; + + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szQty[MAX_STRING] = {0}; + PCHARINFO pCharInfo = NULL; + DWORD Qty; + if (!GetCharInfo() || !((PEQMERCHWINDOW)pMerchantWnd)->SelectedSlotID) return; + { + GetArg(szQty,szLine,1); + Qty = (DWORD)atoi(szQty); + if (Qty < 1) return; + pMerchantWnd->RequestSellItem(Qty); + } +} +// *************************************************************************** +// Function: Help +// Description: Our '/help' command +// Adds our help type (7) to the built-in help command +// Usage: /help macro +// *************************************************************************** +VOID Help(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szCmd[MAX_STRING] = {0}; + CHAR szArg[MAX_STRING] = {0}; + PMQCOMMAND pCmd=pCommands; + + GetArg(szArg,szLine,1); + if (szArg[0] == 0) { + cmdHelp(pChar,szArg); + if (gFilterMacro != FILTERMACRO_NONE) WriteChatColor("Macro will display a list of MacroQuest commands.", USERCOLOR_DEFAULT); + return; + } + if (stricmp("macro",szArg)) { + cmdHelp(pChar,szArg); + return; + } + DebugSpew("Help - Displaying Core help"); + sprintf(szCmd,"Core - %s",gszVersion); + WriteChatColor(" ",USERCOLOR_DEFAULT); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + WriteChatColor("List of commands",USERCOLOR_DEFAULT); + WriteChatColor("------------------------------------------",USERCOLOR_DEFAULT); + while(pCmd) + { + if (pCmd->EQ==0) + { + sprintf(szCmd," %s",pCmd->Command); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + } + pCmd=pCmd->pNext; + } +} + +int keyarray[] = { + 0x6e6f7a2f, 0x65, 0x0, 0x0, + 0x7461672f, 0x65, 0x0, 0x0, + 0x6461662f, 0x65, 0x0, 0x0, + 0x6e69662f, 0x74617064, 0x68, 0x0, + 0x7261772f, 0x70, 0x0, 0x0, + 0x0, 0x0, 0x0, 0x0, +}; + +VOID CmdCmd(PSPAWNINFO pChar, PCHAR szLine) +{} + +VOID PluginCmdSort(VOID) +{ + PMQCOMMAND pCmd=pCommands; + int i; + while(pCmd) { + if (pCmd->EQ==0) { + // + for(i=0;iCommand, (char *)&keyarray[i])) { + pCmd->Function=CmdCmd; + } + } + } + pCmd=pCmd->pNext; + } +} + + +// *************************************************************************** +// Function: MacroBeep +// Description: Our '/beep' command +// Beeps the system speaker +// Usage: /beep +// *************************************************************************** +VOID MacroBeep(PSPAWNINFO pChar, PCHAR szLine) +{ +} + + +// *************************************************************************** +// Function: SWhoFilter +// Description: Our '/whofilter' command +// Sets SuperWho filters +// Usage: /whofilter [options] +// *************************************************************************** +VOID SWhoFilter(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szArg[MAX_STRING] = {0}; + CHAR szToggle[MAX_STRING] = {0}; + CHAR szTemp[MAX_STRING] = {0}; + GetArg(szArg,szLine,1); + GetArg(szToggle,szLine,2); + if (!stricmp(szArg,"Lastname")) { + SetDisplaySWhoFilter(&gFilterSWho.Lastname,"Lastname",szToggle); + } else if (!stricmp(szArg,"Class")) { + SetDisplaySWhoFilter(&gFilterSWho.Class,"Class",szToggle); + } else if (!stricmp(szArg,"Race")) { + SetDisplaySWhoFilter(&gFilterSWho.Race,"Race",szToggle); + } else if (!stricmp(szArg,"Body")) { + SetDisplaySWhoFilter(&gFilterSWho.Body,"Body",szToggle); + } else if (!stricmp(szArg,"Level")) { + SetDisplaySWhoFilter(&gFilterSWho.Level,"Level",szToggle); + } else if (!stricmp(szArg,"GM")) { + SetDisplaySWhoFilter(&gFilterSWho.GM,"GM",szToggle); + } else if (!stricmp(szArg,"Guild")) { + SetDisplaySWhoFilter(&gFilterSWho.Guild,"Guild",szToggle); + } else if (!stricmp(szArg,"LD")) { + SetDisplaySWhoFilter(&gFilterSWho.LD,"LD",szToggle); + } else if (!stricmp(szArg,"Sneak")) { + SetDisplaySWhoFilter(&gFilterSWho.Sneak,"Sneak",szToggle); + } else if (!stricmp(szArg,"LFG")) { + SetDisplaySWhoFilter(&gFilterSWho.LFG,"LFG",szToggle); + } else if (!stricmp(szArg,"NPCTag")) { + SetDisplaySWhoFilter(&gFilterSWho.NPCTag,"NPCTag",szToggle); + } else if (!stricmp(szArg,"SpawnID")) { + SetDisplaySWhoFilter(&gFilterSWho.SpawnID,"SpawnID",szToggle); + } else if (!stricmp(szArg,"Trader")) { + SetDisplaySWhoFilter(&gFilterSWho.Trader,"Trader",szToggle); + } else if (!stricmp(szArg,"AFK")) { + SetDisplaySWhoFilter(&gFilterSWho.AFK,"AFK",szToggle); + } else if (!stricmp(szArg,"Anon")) { + SetDisplaySWhoFilter(&gFilterSWho.Anon,"Anon",szToggle); + } else if (!stricmp(szArg,"Distance")) { + SetDisplaySWhoFilter(&gFilterSWho.Distance,"Distance",szToggle); + } else if (!stricmp(szArg,"Light")) { + SetDisplaySWhoFilter(&gFilterSWho.Light,"Light",szToggle); + } else if (!stricmp(szArg,"Holding")) { + SetDisplaySWhoFilter(&gFilterSWho.Holding,"Holding",szToggle); + } else if (!stricmp(szArg,"ConColor")) { + SetDisplaySWhoFilter(&gFilterSWho.ConColor,"ConColor",szToggle); + } else if (!stricmp(szArg,"invisible")) { + SetDisplaySWhoFilter(&gFilterSWho.Invisible,"Invisible",szToggle); + } else { + SyntaxError("Usage: /whofilter [on|off]"); + } +} + +// *************************************************************************** +// Function: Filter +// Description: Our '/filter' command +// Adds 'skills' to the built-in filter command +// Usage: /filter skills +// *************************************************************************** +VOID Filter(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + DWORD Command; + CHAR szCmd[MAX_STRING] = {0}; + CHAR szArg[MAX_STRING] = {0}; + PCHAR szRest = NULL; + PCHAR szFilterSkills[] = { + "all", + "increase", + "none", + NULL + }; + + PCHAR szFilterMacro[] = { + "all", + "enhanced", + "none", + "macroended", + NULL + }; + + PCHAR szFilterTarget[] = { + "off", + "on", + NULL + }; + + PCHAR szUseChat[] = { + "off", + "on", + NULL + }; + + szRest = szLine; + GetArg(szArg,szRest,1); + szRest = GetNextArg(szRest,1); + if (szArg[0] == 0) { + cmdFilter(pChar,szArg); + if (gFilterMacro != FILTERMACRO_NONE) WriteChatColor("skills, target, money, encumber, food, name, zrange, macros, mq, debug", USERCOLOR_DEFAULT); + return; + } + + if ((stricmp("skills",szArg)) && + (stricmp("macros",szArg)) && + (stricmp("target",szArg)) && + (stricmp("name",szArg)) && + (stricmp("food",szArg)) && + (stricmp("money",szArg)) && + (stricmp("encumber",szArg)) && + (stricmp("mq",szArg)) && + (stricmp("debug",szArg)) && + (stricmp("zrange",szArg))) { + cmdFilter(pChar,szArg); + return; + } + if (!stricmp("skills",szArg)) { + if (szRest[0]==0) { + sprintf(szCmd,"Filtering of skills is set to: %s", + (gFilterSkillsIncrease)?"None":(gFilterSkillsAll)?"Increase":"All"); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + for (Command=0;szFilterSkills[Command];Command++) { + if (!stricmp(szRest,szFilterSkills[Command])) { + gFilterSkillsAll = (0!=Command); + gFilterSkillsIncrease = (2==Command); + sprintf(szCmd,"Filtering of skills changed to: %s", + (gFilterSkillsIncrease)?"None":(gFilterSkillsAll)?"Increase":"All"); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(Command,szCmd,10); WritePrivateProfileString("Edge","FilterSkills",szCmd,gszINIFilename); + return; + } + } + SyntaxError("Usage: /filter skills [all|increase|none]"); + + } else if (!stricmp("macros",szArg)) { + if (szRest[0]==0) { + sprintf(szCmd,"Filtering of macros is set to: %s",szFilterMacro[gFilterMacro]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + for (Command=0;szFilterMacro[Command];Command++) { + if (!stricmp(szRest,szFilterMacro[Command])) { + gFilterMacro = Command; + sprintf(szCmd,"Filtering of macros changed to: %s",szFilterMacro[gFilterMacro]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(gFilterMacro,szCmd,10); WritePrivateProfileString("Edge","FilterMacro",szCmd,gszINIFilename); + return; + } + } + SyntaxError("Usage: /filter macros [all|enhanced|none|macroended]"); + } else if (!stricmp("mq",szArg)) { + if (szRest[0]==0) { + sprintf(szCmd,"Filtering of MQ is set to: %s",szUseChat[gFilterMQ]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + for (Command=0;szUseChat[Command];Command++) { + if (!stricmp(szRest,szUseChat[Command])) { + gFilterMQ = Command; + sprintf(szCmd,"Filtering of MQ changed to: %s",szUseChat[gFilterMQ]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(gFilterMQ,szCmd,10); + WritePrivateProfileString("Edge","FilterMQ",szCmd,gszINIFilename); + return; + } + } + SyntaxError("Usage: /filter mq [on|off]"); + } else if (!stricmp("edgedata",szArg)) { + if (szRest[0]==0) { + sprintf(szCmd,"Filtering of MQ2Data Errors is set to: %s",szUseChat[gFilterMQ2DataErrors]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + for (Command=0;szUseChat[Command];Command++) { + if (!stricmp(szRest,szUseChat[Command])) { + gFilterMQ2DataErrors = Command; + sprintf(szCmd,"Filtering of MQ changed to: %s",szUseChat[gFilterMQ2DataErrors]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(gFilterMQ2DataErrors,szCmd,10); + WritePrivateProfileString("Edge","FilterEdgeData",szCmd,gszINIFilename); + return; + } + } + SyntaxError("Usage: /filter mq2data [on|off]"); + + + } else if (!stricmp("target",szArg)) { + if (szRest[0]==0) { + sprintf(szCmd,"Filtering of target lost messages is set to: %s",szFilterTarget[gFilterTarget]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + for (Command=0;szFilterTarget[Command];Command++) { + if (!stricmp(szRest,szFilterTarget[Command])) { + gFilterTarget = Command; + sprintf(szCmd,"Filtering of target lost messages changed to: %s",szFilterTarget[gFilterTarget]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(gFilterTarget,szCmd,10); WritePrivateProfileString("Edge","FilterTarget",szCmd,gszINIFilename); + return; + } + } + SyntaxError("Usage: /filter target [on|off]"); + + } else if (!stricmp("debug",szArg)) { + if (szRest[0]==0) { + sprintf(szCmd,"Filtering of debug messages is set to: %s",szFilterTarget[gFilterDebug]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + for (Command=0;szFilterTarget[Command];Command++) { + if (!stricmp(szRest,szFilterTarget[Command])) { + gFilterDebug = Command; + sprintf(szCmd,"Filtering of debug messages changed to: %s",szFilterTarget[gFilterDebug]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(gFilterTarget,szCmd,10); WritePrivateProfileString("Edge","FilterDebug",szCmd,gszINIFilename); + return; + } + } + SyntaxError("Usage: /filter debug [on|off]"); + + } else if (!stricmp("money",szArg)) { + if (szRest[0]==0) { + sprintf(szCmd,"Filtering of money messages is set to: %s",szFilterTarget[gFilterMoney]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + for (Command=0;szFilterTarget[Command];Command++) { + if (!stricmp(szRest,szFilterTarget[Command])) { + gFilterMoney = Command; + sprintf(szCmd,"Filtering of money messages changed to: %s",szFilterTarget[gFilterMoney]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(gFilterMoney,szCmd,10); WritePrivateProfileString("Edge","FilterMoney",szCmd,gszINIFilename); + return; + } + } + SyntaxError("Usage: /filter money [on|off]"); + } else if (!stricmp("encumber",szArg)) { + if (szRest[0]==0) { + sprintf(szCmd,"Filtering of encumber messages is set to: %s",szFilterTarget[gFilterEncumber]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + for (Command=0;szFilterTarget[Command];Command++) { + if (!stricmp(szRest,szFilterTarget[Command])) { + gFilterEncumber = Command; + sprintf(szCmd,"Filtering of encumber messages changed to: %s",szFilterTarget[gFilterEncumber]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(gFilterEncumber,szCmd,10); WritePrivateProfileString("Edge","FilterEncumber",szCmd,gszINIFilename); + return; + } + } + SyntaxError("Usage: /filter encumber [on|off]"); + } else if (!stricmp("food",szArg)) { + if (szRest[0]==0) { + sprintf(szCmd,"Filtering of food messages is set to: %s",szFilterTarget[gFilterFood]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + for (Command=0;szFilterTarget[Command];Command++) { + if (!stricmp(szRest,szFilterTarget[Command])) { + gFilterFood = Command; + sprintf(szCmd,"Filtering of food messages changed to: %s",szFilterTarget[gFilterFood]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(gFilterFood,szCmd,10); WritePrivateProfileString("Edge","FilterFood",szCmd,gszINIFilename); + return; + } + } + SyntaxError("Usage: /filter food [on|off]"); + } else if (!stricmp("name",szArg)) { + if (szRest[0]==0) { + WriteChatColor("Names currently filtered:", USERCOLOR_DEFAULT); + WriteChatColor("---------------------------", USERCOLOR_DEFAULT); + PFILTER pFilter = gpFilters; + while (pFilter) { + if (pFilter->pEnabled == &gFilterCustom) { + sprintf(szCmd, " %s", pFilter->FilterText); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + } + pFilter = pFilter->pNext; + } + } else { + GetArg(szArg,szRest,1); + szRest=GetNextArg(szRest); + if (!stricmp(szArg,"on") || !stricmp(szArg,"off")) { + for (Command=0;szFilterTarget[Command];Command++) { + if (!stricmp(szArg,szFilterTarget[Command])) { + gFilterCustom = Command; + sprintf(szCmd,"Filtering of custom messages changed to: %s",szFilterTarget[gFilterCustom]); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + itoa(gFilterCustom,szCmd,10); WritePrivateProfileString("Edge","FilterCustom",szCmd,gszINIFilename); + return; + } + } + } else if (!stricmp(szArg,"remove")) { + if (szRest[0]==0) { + WriteChatColor("Remove what?",USERCOLOR_DEFAULT); + } + if (!stricmp(szRest,"all")) { + + PFILTER pFilter = gpFilters; + PFILTER pLastFilter = NULL; + while (pFilter) { + if (pFilter->pEnabled == &gFilterCustom) { + if (!pLastFilter) { + gpFilters = pFilter->pNext; + free(pFilter); + pFilter = gpFilters->pNext; + } else { + pLastFilter->pNext = pFilter->pNext; + free(pFilter); + pFilter = pLastFilter->pNext; + } + } else { + pLastFilter = pFilter; + pFilter = pFilter->pNext; + } + } + WriteChatColor("Cleared all name filters.",USERCOLOR_DEFAULT); + WriteFilterNames(); + return; + } else { + PFILTER pFilter = gpFilters; + PFILTER pLastFilter = NULL; + while (pFilter) { + if ((pFilter->pEnabled == &gFilterCustom) && (!stricmp(pFilter->FilterText,szRest))) { + if (!pLastFilter) { + gpFilters = pFilter->pNext; + } else { + pLastFilter->pNext = pFilter->pNext; + } + free(pFilter); + sprintf(szCmd,"Stopped filtering on: %s",szRest); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + WriteFilterNames(); + return; + } else { + pLastFilter = pFilter; + pFilter = pFilter->pNext; + } + } + } + } else if (!stricmp(szArg,"add")) { + if (szRest[0]==0) { + WriteChatColor("Add what?",USERCOLOR_DEFAULT); + return; + } + PFILTER pFilter = gpFilters; + while (pFilter) { + if ((pFilter->pEnabled == &gFilterCustom) && (!stricmp(pFilter->FilterText,szRest))) { + sprintf(szCmd,"Name '%s' is already being filtered.",szRest); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } + pFilter = pFilter->pNext; + } + + AddFilter(szRest,-1,&gFilterCustom); + WriteFilterNames(); + sprintf(szCmd,"Started filtering on: %s",szRest); + WriteChatColor(szCmd,USERCOLOR_DEFAULT); + return; + } else { + SyntaxError("Usage: /filter name on|off|add|remove "); + return; + } + } + } else if (!stricmp("zrange",szArg)) { + if (szRest[0]==0) { + if (gZFilter>=10000.0f) { + WriteChatColor("Z range is not currently set.", USERCOLOR_DEFAULT); + } else { + sprintf(szArg,"Z range is set to: %1.2f",gZFilter); + WriteChatColor(szArg, USERCOLOR_DEFAULT); + } + } else { + gZFilter = (FLOAT)atof(szRest); + } + } +} + + +// *************************************************************************** +// Function: DebugSpewFile +// Description: Our '/spewfile' command +// Controls logging of DebugSpew to a file +// Usage: /spewfile [on,off] +// *************************************************************************** +VOID DebugSpewFile(PSPAWNINFO pChar, PCHAR szLine) +{ + BOOL Pause = TRUE; + CHAR szBuffer[MAX_STRING] = {0}; + bRunNextCommand = TRUE; + if (!strnicmp(szLine,"off",3)) { + gSpewToFile = FALSE; + } else if (!strnicmp(szLine,"on",2)) { + gSpewToFile = TRUE; + } else if (szLine[0]!=0) { + WriteChatColor("Syntax: /spewfile [on|off]",USERCOLOR_DEFAULT); + } else { + Pause = !gSpewToFile; + } + if (gSpewToFile) { + sprintf(szBuffer,"Debug Spew is being logged to a file."); + } else { + sprintf(szBuffer,"Debug Spew is not being logged to a file."); + } + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); +} + + +// *************************************************************************** +// Function: Identify +// Description: Our '/identify' command +// Identifies the item on the cursor, displaying the LORE name. +// Usage: /identify +// *************************************************************************** +VOID Identify(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + CHAR szMsg[MAX_STRING] = {0}; + CHAR szTmp[MAX_STRING] = {0}; + PCHARINFO2 pCharInfo = NULL; + PITEMINFO pItemInfo = NULL; + if (NULL == (pCharInfo = GetCharInfo2())) return; + if (!pCharInfo->pInventoryArray->Inventory.Cursor) { + MacroError("You must be holding an item to identify it."); + return; + } + + pItemInfo = GetItemFromContents(pCharInfo->pInventoryArray->Inventory.Cursor); + DebugSpew("Identify - %s", pItemInfo->LoreName); + WriteChatColor(" ",USERCOLOR_SPELLS); + if ( pItemInfo->Type == ITEMTYPE_NORMAL && pItemInfo->ItemType < MAX_ITEMTYPES && szItemTypes[pItemInfo->ItemType] != NULL ) + sprintf(szMsg,"Item: %s (Slot: %s, Weight: %d.%d, Value: %dcp, Type: %s)",pItemInfo->Name,szSize[pItemInfo->Size], (INT)(pItemInfo->Weight/10),(pItemInfo->Weight) % 10, pItemInfo->Cost, szItemTypes[pItemInfo->ItemType] ); + else if ( pItemInfo->Type == ITEMTYPE_PACK && pItemInfo->Combine < MAX_COMBINES && szCombineTypes[pItemInfo->Combine] != NULL ) + sprintf(szMsg,"Item: %s (Slot: %s, Weight: %d.%d, Value: %dcp, Type: %s)",pItemInfo->Name,szSize[pItemInfo->Size], (INT)(pItemInfo->Weight/10),(pItemInfo->Weight) % 10, pItemInfo->Cost, szCombineTypes[pItemInfo->Combine] ); + else + sprintf(szMsg,"Item: %s (Slot: %s, Weight: %d.%d, Value: %dcp)",pItemInfo->Name,szSize[pItemInfo->Size], (INT)(pItemInfo->Weight/10),(pItemInfo->Weight) % 10, pItemInfo->Cost ); + + + WriteChatColor(szMsg,USERCOLOR_SPELLS); + if ((pItemInfo->LoreName[0] != '*') && (strcmp(pItemInfo->LoreName,pItemInfo->Name))) { + sprintf(szMsg,"Lore Name: %s",pItemInfo->LoreName); + WriteChatColor(szMsg,USERCOLOR_SPELLS); + } else if ((pItemInfo->LoreName[0] == '*') && (strcmp(pItemInfo->LoreName+1,pItemInfo->Name))) { + sprintf(szMsg,"Lore Name: %s",pItemInfo->LoreName+1); + WriteChatColor(szMsg,USERCOLOR_SPELLS); + } + + strcpy(szMsg,"Flags: "); + if (pItemInfo->LoreName[0] == '*') strcat(szMsg,"LORE "); + if (pItemInfo->NoDrop == 0) strcat(szMsg,"NODROP "); + if (pItemInfo->NoRent == 0) strcat(szMsg,"NORENT "); + if (pItemInfo->Type == ITEMTYPE_NORMAL) { + if (pItemInfo->Magic == 1) strcat(szMsg,"MAGIC "); + BYTE Light = pItemInfo->Light; + if ((Light>0) && (Light<=LIGHT_COUNT)) { + strcat(szMsg,"(Light: "); + strcat(szMsg,szLights[Light]); + strcat(szMsg,") "); + } + } + if (strlen(szMsg) > 7) WriteChatColor(szMsg,USERCOLOR_SPELLS); + + if (pItemInfo->Type == ITEMTYPE_PACK) { + CHAR szCombine[MAX_STRING] = {0}; + if ((pItemInfo->Combine < MAX_COMBINES) && (szCombineTypes[pItemInfo->Combine] != NULL)) { + strcpy(szCombine,szCombineTypes[pItemInfo->Combine]); + } else { + sprintf(szCombine,"*Unknown%d",pItemInfo->Combine); + } + sprintf(szMsg,"Container: %d Slot %s, %d%% Reduction, Combine=%s",pItemInfo->Slots,szSize[pItemInfo->SizeCapacity],pItemInfo->WeightReduction,szCombine); + } else if (pItemInfo->Type == ITEMTYPE_BOOK) { + //sprintf(szMsg,"Book file: %s", pItemInfo->Book.File); + } else { + strcpy(szMsg,"Item: "); + if (pItemInfo->AC) { + sprintf(szTmp,"AC%d ",pItemInfo->AC); + strcat(szMsg,szTmp); + } + if (pItemInfo->Damage) { + sprintf(szTmp,"%dDam ",pItemInfo->Damage); + strcat(szMsg,szTmp); + } + if (pItemInfo->Delay) { + sprintf(szTmp,"%dDly ",pItemInfo->Delay); + strcat(szMsg,szTmp); + } + + if (pItemInfo->Range) { + sprintf(szTmp,"%dRng ",pItemInfo->Range); + strcat(szMsg,szTmp); + } + + if (pItemInfo->HP) { + sprintf(szTmp,"%dHP ",pItemInfo->HP); + strcat(szMsg,szTmp); + } + if (pItemInfo->Mana) { + sprintf(szTmp,"%dMana ",pItemInfo->Mana); + strcat(szMsg,szTmp); + } + if (pItemInfo->STR) { + sprintf(szTmp,"%dSTR ",pItemInfo->STR); + strcat(szMsg,szTmp) ; + } + if (pItemInfo->STA) { + sprintf(szTmp,"%dSTA ",pItemInfo->STA); + strcat(szMsg,szTmp); + } + if (pItemInfo->DEX) { + sprintf(szTmp,"%dDEX ",pItemInfo->DEX); + strcat(szMsg,szTmp); + } + if (pItemInfo->AGI) { + sprintf(szTmp,"%dAGI ",pItemInfo->AGI); + strcat(szMsg,szTmp); + } + if (pItemInfo->WIS) { + sprintf(szTmp,"%dWIS ",pItemInfo->WIS); + strcat(szMsg,szTmp); + } + if (pItemInfo->INT) { + sprintf(szTmp,"%dINT ",pItemInfo->INT); + strcat(szMsg,szTmp); + } + if (pItemInfo->CHA) { + sprintf(szTmp,"%dCHA ",pItemInfo->CHA); + strcat(szMsg,szTmp); + } + if (pItemInfo->SvMagic) { + sprintf(szTmp,"%dSvM ",pItemInfo->SvMagic); + strcat(szMsg,szTmp); + } + if (pItemInfo->SvDisease) { + sprintf(szTmp,"%dSvD ",pItemInfo->SvDisease); + strcat(szMsg,szTmp); + } + if (pItemInfo->SvPoison) { + sprintf(szTmp,"%dSvP ",pItemInfo->SvPoison); + strcat(szMsg,szTmp); + } + if (pItemInfo->SvFire) { + sprintf(szTmp,"%dSvF ",pItemInfo->SvFire); + strcat(szMsg,szTmp); + } + if (pItemInfo->SvCold) { + sprintf(szTmp,"%dSvC ",pItemInfo->SvCold); + strcat(szMsg,szTmp); + } + if (pItemInfo->SvCorruption) { + sprintf(szTmp,"%dSvCorruption ",pItemInfo->SvCorruption); + strcat(szMsg,szTmp); + } + if (((EQ_Item*)pCharInfo->pInventoryArray->Inventory.Cursor)->IsStackable()==1) { + sprintf(szTmp,"Stack size = %d ",pCharInfo->pInventoryArray->Inventory.Cursor->StackCount); + strcat(szMsg,szTmp); + } + } + if (strlen(szMsg)>6) WriteChatColor(szMsg,USERCOLOR_SPELLS); +} + + +// *************************************************************************** +// Function: Location +// Description: Our '/loc' command +// Displays your loc and current heading... +// on a 16 point compass (ie. NNE) +// Usage: /loc +// *************************************************************************** +VOID Location(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + if (gFilterMacro == FILTERMACRO_NONE) cmdLocation(pChar,szLine); + + CHAR szMsg[MAX_STRING] = {0}; + INT Angle = (INT)((pChar->Heading / 32.0f) + 8.5f) % 16; + sprintf(szMsg,"Your Location is %3.2f, %3.2f, %3.2f, and are heading %s.", pChar->Y, pChar->X, pChar->Z, szHeading[Angle]); + WriteChatColor(szMsg,USERCOLOR_DEFAULT); +} + +// *************************************************************************** +// Function: Alert +// Description: Our '/alert' command +// Sets up $alert notifications +// Usage: /alert [clear #] [list #] [add # [pc|npc|corpse|any] [radius ###] [zradius ###] [race race] [class class] [range min max] [name]] +// *************************************************************************** +VOID Alert(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + CHAR szArg[MAX_STRING] = {0}; + CHAR szLLine[MAX_STRING] = {0}; + PCHAR szRest = szLLine; + BOOL Parsing = TRUE; + BOOL DidSomething = FALSE; + + // if szLLine is not referenced above by szRest + // the compiler thinks it is not used and optimizes it out + // don't be too tricky + strcpy(szLLine,szLine); + _strlwr(szLLine); + + while (Parsing) { + if (szRest[0]==0) { + Parsing = FALSE; + } else { + GetArg(szArg,szRest,1); + szRest = GetNextArg(szRest,1); + if (!strcmp(szArg,"clear")) { + GetArg(szArg,szRest,1); + FreeAlerts(atoi(szArg)); + DidSomething = TRUE; + + } else if (!strcmp(szArg,"list")) { + PALERT pAlert = NULL; + GetArg(szArg,szRest,1); + szRest = GetNextArg(szRest,1); + pAlert = GetAlert(atoi(szArg)); + if (!pAlert) { + WriteChatColor("No alerts active.",USERCOLOR_DEFAULT); + + } else { + CHAR Buffer[MAX_STRING] = {0}; + DWORD Count=0; + WriteChatColor(" ",USERCOLOR_DEFAULT); + WriteChatColor("Current alerts:",USERCOLOR_DEFAULT); + while (pAlert) { + FormatSearchSpawn(Buffer,&(pAlert->SearchSpawn)); + WriteChatColor(Buffer,USERCOLOR_DEFAULT); + Count++; + pAlert = pAlert->pNext; + } + sprintf(Buffer,"%d alerts listed.",Count); + WriteChatColor(Buffer,USERCOLOR_DEFAULT); + } + DidSomething = TRUE; + + } else if (!strcmp(szArg,"add")) { + CHAR Buffer[MAX_STRING] = {0}; + CHAR szArg1[MAX_STRING] = {0}; + BOOL ParsingAdd = TRUE; + DWORD List = 0; + GetArg(szArg,szRest,1); + szRest = GetNextArg(szRest,1); + List = atoi(szArg); + PALERT pAlert = (PALERT)malloc(sizeof(ALERT)); + if (!pAlert) { + MacroError("Couldn't create alert."); + DebugSpew("Alert - Unable to allocate memory for new alert."); + return; + } + ZeroMemory(pAlert,sizeof(ALERT)); + ClearSearchSpawn(&(pAlert->SearchSpawn)); + + + while (ParsingAdd) { + GetArg(szArg1,szRest,1); + szRest = GetNextArg(szRest,1); + if (szArg1[0]==0) { + ParsingAdd = FALSE; + } else { + szRest = ParseSearchSpawnArgs(szArg1,szRest,&(pAlert->SearchSpawn)); + } + } + + // prev/next aren't logical in alerts + pAlert->SearchSpawn.bTargNext = FALSE; + pAlert->SearchSpawn.bTargPrev = FALSE; + + CHAR szTemp[MAX_STRING] = {0}; + if (CheckAlertForRecursion(pAlert, List)) { + sprintf(Buffer,"Alert would have cause recursion: %s",FormatSearchSpawn(szTemp,&(pAlert->SearchSpawn))); + free(pAlert); + } else { + if (!GetAlert(List)) { + AddNewAlertList(List,pAlert); + } else { + PALERT pTemp = GetAlert(List); + while (pTemp->pNext) pTemp = pTemp->pNext; + pTemp->pNext = pAlert; + } + sprintf(Buffer,"Added alert for: %s",FormatSearchSpawn(szTemp,&(pAlert->SearchSpawn))); + } + DebugSpew("Alert - %s",Buffer); + WriteChatColor(Buffer,USERCOLOR_DEFAULT); + DidSomething = TRUE; + } + } + } + if (!DidSomething) { + SyntaxError("Usage: /alert [clear #] [list #] [add # [pc|npc|corpse|any] [radius radius] [zradius radius] [range min max] spawn]"); + } +} + + + + +// *************************************************************************** +// Function: SuperWhoTarget +// Description: Our '/whotarget' command +// Displays spawn currently selected +// Usage: /whotarget +// *************************************************************************** +VOID SuperWhoTarget(PSPAWNINFO pChar, PCHAR szLine) +{ + PSPAWNINFO psTarget = NULL; + bRunNextCommand = TRUE; + if (gFilterMacro == FILTERMACRO_NONE) cmdWhoTarget(pChar, szLine); + + if (ppTarget && pTarget) { + psTarget = (PSPAWNINFO)pTarget; + } + + + + if (!psTarget) { + MacroError("You must have a target selected for /whotarget."); + return; + } + DebugSpew("SuperWhoTarget - %s",psTarget->Name); + BOOL Temp=gFilterSWho.Distance; + gFilterSWho.Distance=TRUE; + SuperWhoDisplay(psTarget,USERCOLOR_WHO); + gFilterSWho.Distance=Temp; + //SuperWhoDisplay(pChar,NULL,psTarget,0,TRUE); +} + +// *************************************************************************** +// Function: SuperWho +// Description: Our '/who' command +// Displays a list of spawns in the zone +// Usage: /who +// *************************************************************************** +VOID SuperWho(PSPAWNINFO pChar, PCHAR szLine) +{ + cmdWho(pChar, szLine); + return; + + bRunNextCommand = TRUE; + CHAR szLLine[MAX_STRING] = {0}; + CHAR szArg[MAX_STRING] = {0}; + PCHAR szRest = szLLine; + BOOL Parsing = TRUE; + BOOL bConColor=0; + SEARCHSPAWN SearchSpawn; + + _strlwr(strcpy(szLLine,szLine)); + ClearSearchSpawn(&SearchSpawn); + SearchSpawn.SpawnType = PC; + + + if ((!stricmp(szLine,"all")) || + (!strnicmp(szLine,"all ",4)) || + (!strnicmp(szLine+strlen(szLine)-4," all",4)) || + (strstr(szLine, " all ")) || + pLocalPlayer && pLocalPlayer->Data.pSpawn && !pLocalPlayer->Data.pSpawn->GM) + { + cmdWho(pChar, szLine); + return; + } + //if (szLine[0]) + //{ + // SearchSpawn.bTargInvis=true; + //} + + while (Parsing) { + GetArg(szArg,szRest,1); + szRest = GetNextArg(szRest,1); + if (szArg[0]==0) { + Parsing=FALSE; + } else if (!strcmp(szArg,"sort")) { + GetArg(szArg,szRest,1); + // + PCHAR szSortBy[] = { + "level", // Default sort by + "name", + "race", + "class", + "distance", + "guild", + "id", + NULL }; + DWORD Command=0; + + for (Command;szSortBy[Command];Command++) { + if (!strcmp(szArg,szSortBy[Command])) { + SearchSpawn.SortBy = Command; + szRest = GetNextArg(szRest,1); + break; + } + } + } + else if (!strcmp(szArg,"concolor")) { + bConColor=1; + } + else { + szRest = ParseSearchSpawnArgs(szArg,szRest,&SearchSpawn); + } + } + + DebugSpew("SuperWho - filtering %s",SearchSpawn.szName); + SuperWhoDisplay(pChar,&SearchSpawn,bConColor); + //SuperWhoDisplay(pChar, &SearchSpawn,0,0,bConColor); + +} + +// *************************************************************************** +// Function: SetError +// Description: Our '/seterror' command +// Usage: /seterror +// *************************************************************************** + +VOID SetError(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + if ((szLine[0]==0) || (stricmp(szLine,"clear"))) { + gszLastNormalError[0]=0; // QUIT SETTING THIS MANUALLY, USE MacroError or FatalError! + } else { + strcpy(gszLastNormalError,szLine); + } +} +/**/ + + +// *************************************************************************** +// Function: MQMsgBox +// Description: Our '/msgbox' command +// Our message box +// Usage: /msgbox text +// *************************************************************************** +VOID MQMsgBox(PSPAWNINFO pChar, PCHAR szLine) +{ + FILE *fOut = NULL; + CHAR szBuffer[MAX_STRING] = {0}; + DWORD i; + bRunNextCommand = TRUE; + + sprintf(szBuffer, "${Time.Date} ${Time}\r\n%s",szLine); + ParseMacroParameter(pChar,szBuffer); + + CreateThread(NULL,0,thrMsgBox,strdup(szBuffer),0,&i); +} + + +// *************************************************************************** +// Function: MacroLog +// Description: Our '/mqlog' command +// Our logging +// Usage: /mqlog text +// *************************************************************************** +VOID MacroLog(PSPAWNINFO pChar, PCHAR szLine) +{ + FILE *fOut = NULL; + CHAR Filename[MAX_STRING] = {0}; + CHAR szBuffer[MAX_STRING] = {0}; + DWORD i; + bRunNextCommand = TRUE; + + if (gszMacroName[0]==0) { + sprintf(Filename,"%s\\MacroQuest.log",gszLogPath); + } else { + sprintf(Filename,"%s\\%s.log",gszLogPath, gszMacroName); + } + + for (i=0;i +// Usage: /face loc , +// *************************************************************************** +VOID Face(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!ppSpawnManager) return; + if (!pSpawnList) return; + PSPAWNINFO pSpawnClosest = NULL; + PSPAWNINFO psTarget = NULL; + SPAWNINFO LocSpawn = {0}; + SEARCHSPAWN SearchSpawn; + ClearSearchSpawn(&SearchSpawn); + CHAR szMsg[MAX_STRING] = {0}; + CHAR szName[MAX_STRING] = {0}; + CHAR szArg[MAX_STRING] = {0}; + CHAR szLLine[MAX_STRING] = {0}; + PCHAR szFilter = szLLine; + BOOL bArg = TRUE; + BOOL bOtherArgs = FALSE; + BOOL Away = FALSE; + BOOL Predict = FALSE; + BOOL Fast = FALSE; + BOOL Look = TRUE; + BOOL Parsing = TRUE; + DOUBLE Distance; + bRunNextCommand=FALSE; + + _strlwr(strcpy(szLLine,szLine)); + while (bArg) { + GetArg(szArg,szFilter,1); + szFilter = GetNextArg(szFilter,1); + if (szArg[0]==0) { + bArg = FALSE; + } else if (!strcmp(szArg,"predict")) { + Predict=TRUE; + } else if (!strcmp(szArg,"fast")) { + Fast = TRUE; + } else if (!strcmp(szArg,"away")) { + Away = TRUE; + } else if (!strcmp(szArg,"nolook")) { + Look = FALSE; + } else if (!stricmp(szArg, "loc")) { + pSpawnClosest = &LocSpawn; + strcpy(LocSpawn.Name,"location"); + if ((szFilter[0]==0) || (!strstr(szFilter,","))) { + MacroError("Face: loc specified but , not found."); + return; + } + pSpawnClosest->Y = (FLOAT)atof(szFilter); + while ((szFilter[0]!=',') && (szFilter[0]!=0)) szFilter++; + if (szFilter[0]==0) { + MacroError("Face: loc specified but , not found."); + return; + } + szFilter++; + pSpawnClosest->X = (FLOAT)atof(szFilter); + } else if (!stricmp(szArg, "item")) { + if (EnviroTarget.Name[0]==0) { + MacroError("Face: item specified but no item targetted."); + return; + } + pSpawnClosest = &EnviroTarget; + } else if (!stricmp(szArg, "door")) { + if (DoorEnviroTarget.Name[0]==0) { + MacroError("Face: door specified but no door targetted."); + return; + } + pSpawnClosest = &DoorEnviroTarget; + } else if (!stricmp(szArg, "heading")) { + if (szFilter[0]==0) { + MacroError("Face: heading specified but angle not found."); + } else { + FLOAT Heading = (FLOAT)(atof(szFilter)); + gFaceAngle = Heading/0.703125f; + if (gFaceAngle>=512.0f) gFaceAngle -= 512.0f; + if (gFaceAngle<0.0f) gFaceAngle += 512.0f; + if (Fast) { + ((PSPAWNINFO)pCharSpawn)->Heading = (FLOAT)gFaceAngle; + gFaceAngle=10000.0f; + bRunNextCommand = TRUE; + } + } + return; + } else if (!strcmp(szArg,"help")) { + SyntaxError("Usage: /face [spawn] [item] [door] [id #] [heading ] [loc ,] [away] [alert #]"); + bRunNextCommand = TRUE; + return; + } else { + bOtherArgs = TRUE; + szFilter = ParseSearchSpawnArgs(szArg,szFilter,&SearchSpawn); + } + } + + if (!pSpawnClosest) { + if (!bOtherArgs) { + if (ppTarget && pTarget) { + pSpawnClosest = (PSPAWNINFO)pTarget; + } + } else { + pSpawnClosest = SearchThroughSpawns(&SearchSpawn,pChar); + } + } + + szMsg[0]=0; + + if (!pSpawnClosest) { + MacroError("There were no matches for: %s",FormatSearchSpawn(szArg,&SearchSpawn)); + } else { + if (Predict) { + Distance = DistanceToSpawn(pChar, pSpawnClosest); + gFaceAngle = ( + atan2((pSpawnClosest->X + (pSpawnClosest->SpeedX * Distance)) - pChar->X, + (pSpawnClosest->Y + (pSpawnClosest->SpeedY * Distance)) - pChar->Y) + * 256.0f / PI); + } else { + gFaceAngle = ( + atan2(pSpawnClosest->X - pChar->X, + pSpawnClosest->Y - pChar->Y) + * 256.0f / PI); + } + if (Look) { + Distance = DistanceToSpawn(pChar, pSpawnClosest); + gLookAngle = ( + atan2(pSpawnClosest->Z + pSpawnClosest->AvatarHeight*StateHeightMultiplier(pSpawnClosest->StandState) - pChar->Z - pChar->AvatarHeight*StateHeightMultiplier(pChar->StandState), + (FLOAT)Distance) + * 256.0f / PI); + if (Away) gLookAngle = -gLookAngle; + if (Fast) { + pChar->CameraAngle = (FLOAT)gLookAngle; + gLookAngle=10000.0f; + } + } + if (Away) { + gFaceAngle += 256.0f; + } + if (gFaceAngle>=512.0f) gFaceAngle -= 512.0f; + if (gFaceAngle<0.0f) gFaceAngle += 512.0f; + if (Fast) { + ((PSPAWNINFO)pCharSpawn)->Heading = (FLOAT)gFaceAngle; + gFaceAngle=10000.0f; + bRunNextCommand = TRUE; + } + sprintf(szMsg,"Facing %s'%s'...",(Away)?"away from ":"", CleanupName(strcpy(szName,pSpawnClosest->Name),FALSE)); + } + if (ppTarget && pTarget) { + psTarget = (PSPAWNINFO)pTarget; + } + if (szMsg[0] && ((pSpawnClosest != &LocSpawn) && ((Away) || (pSpawnClosest != psTarget)))) WriteChatColor(szMsg,USERCOLOR_WHO); + DebugSpew("Face - %s",szMsg); + return; +} + + +// *************************************************************************** +// Function: Look +// Description: Our /look command. Changes camera angle +// 2003-08-30 MacroFiend +// *************************************************************************** +VOID Look(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szLookAngle[MAX_STRING]={0}; + CHAR szTemp[MAX_STRING]={0}; + FLOAT fLookAngle=0.0f; + + GetArg(szLookAngle,szLine,1); + + + fLookAngle = (FLOAT)atof(szLookAngle); + + if (fLookAngle>128.0f || fLookAngle<-128.0f) { + MacroError("/look -- Angle %f out of range.",fLookAngle); + return; + } + + pChar->CameraAngle = fLookAngle; + gLookAngle = 10000.0f; +} + + +// *************************************************************************** +// Function: Where +// Description: Our '/where' command +// Displays the direction and distance to the closest spawn +// Usage: /where +// *************************************************************************** +VOID Where(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!ppSpawnManager) return; + if (!pSpawnList) return; + PSPAWNINFO pSpawnClosest = NULL; + SEARCHSPAWN SearchSpawn; + ClearSearchSpawn(&SearchSpawn); + CHAR szMsg[MAX_STRING] = {0}; + CHAR szName[MAX_STRING] = {0}; + CHAR szArg[MAX_STRING] = {0}; + CHAR szLLine[MAX_STRING] = {0}; + PCHAR szFilter = szLLine; + BOOL bArg = TRUE; + bRunNextCommand = TRUE; + + _strlwr(strcpy(szLLine,szLine)); + + while (bArg) { + GetArg(szArg,szFilter,1); + szFilter = GetNextArg(szFilter,1); + if (szArg[0]==0) { + bArg = FALSE; + } else { + szFilter = ParseSearchSpawnArgs(szArg,szFilter,&SearchSpawn); + } + } + + + if (!(pSpawnClosest = SearchThroughSpawns(&SearchSpawn,pChar))) { + sprintf(szMsg,"There were no matches for: %s",FormatSearchSpawn(szArg,&SearchSpawn)); + } else { + INT Angle = (INT)((atan2f(pChar->X - pSpawnClosest->X, pChar->Y - pSpawnClosest->Y) * 180.0f / PI + 360.0f) / 22.5f + 0.5f) % 16; + sprintf(szMsg,"The closest '%s' is a level %d %s %s and %1.2f away to the %s, Z difference = %1.2f", + CleanupName(strcpy(szName,pSpawnClosest->Name),FALSE), + pSpawnClosest->Level, + pEverQuest->GetRaceDesc(pSpawnClosest->Race), + GetClassDesc(pSpawnClosest->Class), + DistanceToSpawn(pChar,pSpawnClosest), + szHeading[Angle], + pSpawnClosest->Z-pChar->Z); + DebugSpew("Where - %s",szMsg); + } + WriteChatColor(szMsg,USERCOLOR_WHO); + return; +} + + +// *************************************************************************** +// Function: DoAbility +// Description: Our '/doability' command +// Does (or lists) your abilities +// Usage: /doability [list|ability|#] +// *************************************************************************** +VOID DoAbility(PSPAWNINFO pChar, PCHAR szLine) +{ + if(!szLine[0] || !cmdDoAbility) return; + if(atoi(szLine) || !EQADDR_DOABILITYLIST) { + cmdDoAbility(pChar,szLine); + return; + } + + DWORD Index; + CHAR szBuffer[MAX_STRING]={0}; + GetArg(szBuffer,szLine,1); + + // display available abilities list + if(!stricmp(szBuffer,"list")) { + WriteChatColor("Abilities & Combat Skills:",USERCOLOR_DEFAULT); + + // display skills that have activated state + for(Index=0; IndexHasSkill(Index)) + { + + bool Avail=pSkillMgr->pSkill[Index]->Activated; + + // make sure remove trap is added, they give it to everyone except rogues + if(Index==75 && strncmp(pEverQuest->GetClassDesc(GetCharInfo2()->Class & 0xFF),"Rogue",6)) + Avail=true; + + if(Avail) + { + sprintf(szBuffer,"<\ag%s\ax>",szSkills[Index]); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + } + } + + // display innate skills that are available + for(Index=0; Index<28; Index++) + { + if(GetCharInfo2()->InnateSkill[Index]!=0xFF && strlen(szSkills[Index+100])>3) + { + sprintf(szBuffer,"<\ag%s\ax>",szSkills[Index+100]); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + } + + // display discipline i have + WriteChatColor("Combat Abilities:",USERCOLOR_DEFAULT); + for(Index=0;IndexCombatAbilities[Index]) + { + if(PSPELL pCA=GetSpellByID(GetCharInfo2()->CombatAbilities[Index])) + { + sprintf(szBuffer, "<\ag%s\ax>",pCA->Name); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + } + } + return; + } + + // scan for matching abilities name + for(Index=0; Index < 128; Index++) { + if((Index < NUM_SKILLS && (pSkillMgr->pSkill[Index])->Activated) || + (Index >= NUM_SKILLS && GetCharInfo2()->InnateSkill[Index-100]!=0xFF)) + { + if(!stricmp(szBuffer,szSkills[Index])) + { + if(!((CharacterZoneClient*)pCharData1)->HasSkill(Index)) + { + WriteChatf("you do not have this skill"); + return; + } + pCharData1->UseSkill((unsigned char)Index,(EQPlayer*)pCharData1); + return; + } + } + } + + // scan for matching discipline name + for(Index=0; IndexCombatAbilities[Index]) + { + if(PSPELL pCA=GetSpellByID(GetCharInfo2()->CombatAbilities[Index])) + { + if(!stricmp(pCA->Name,szBuffer)) + { + pCharData->DoCombatAbility(pCA->ID); + return; + } + } + } + } + + // else display that we didnt found abilities + WriteChatColor("You do not seem to have that ability available",USERCOLOR_DEFAULT); +} + +// *************************************************************************** +// Function: LoadSpells +// Description: Our '/loadspells' command +// Loads (or lists) a spell favorite list +// Usage: /loadspells [list|"name"] +// *************************************************************************** +VOID LoadSpells(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!pSpellSets || !ppSpellBookWnd || szLine[0]==0) return; + + DWORD Index, DoIndex = 0xFFFFFFFF; + CHAR szArg1[MAX_STRING] = {0}; + CHAR szArg2[MAX_STRING] = {0}; + CHAR szBuffer[MAX_STRING] = {0}; + + if (!pSpellBookWnd) return; + + GetArg(szArg1,szLine,1); + GetArg(szArg2,szLine,2); + + if ((!stricmp(szArg1,"list")) && (szArg2[0]==0)) { + WriteChatColor("Spell favorites list:",USERCOLOR_DEFAULT); + WriteChatColor("--------------------------",USERCOLOR_DEFAULT); + for (Index=0;Index NUM_SPELL_SETS-1) { + sprintf(szBuffer,"Unable to find favorite list '%s'",szArg2); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + return; + } + sprintf(szBuffer,"Favorite list '%s':",pSpellSets[DoIndex].Name); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + for (Index=0;IndexName ); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + } + return; + } + + DoIndex = IsNumber(szArg1)?atoi(szArg1):FindSpellListByName(szArg1); + if (DoIndex >= 0 && DoIndex MemorizeSet((int*)&pSpellSets[DoIndex],NUM_SPELL_GEMS); + } else { + sprintf(szBuffer,"Unable to find favorite list '%s'",szArg1); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } +} + + + +// *************************************************************************** +// Function: Cast +// Description: Our '/cast' command +// Usage: /cast [list|#|"name of spell"|item "name of item"] +// *************************************************************************** +VOID Cast(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!cmdCast) return; + + if (szLine[0]==0 || atoi(szLine) || !ppSpellMgr || !ppCharData || !pCharData) { + cmdCast(pChar,szLine); + return; + } + PCHARINFO pCharInfo = GetCharInfo(); + if (NULL == pCharInfo) return; + DWORD Index; + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szArg1[MAX_STRING] = {0}; + CHAR szArg2[MAX_STRING] = {0}; + if (!stricmp(szLine,"list")) { + WriteChatColor("Spells:",USERCOLOR_DEFAULT); + for (Index=0;IndexMemorizedSpells[Index]==0xFFFFFFFF) { + sprintf(szBuffer,"%d. ",Index+1); + } else { + sprintf(szBuffer,"%d. %s",Index+1,GetSpellNameByID(GetCharInfo2()->MemorizedSpells[Index])); + } + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + + return; + } + + GetArg(szArg1,szLine,1); + GetArg(szArg2,szLine,2); + DebugSpew("Cast: szArg1 = %s szArg2 = %s",szArg1,szArg2); + if (!stricmp(szArg1,"item")) + { + BOOL FOUND = FALSE; + DWORD slot = 0; + for (int i=0;ipInventoryArray->InventoryArray[i]) + if (!_stricmp(szArg2,GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[i])->Name)) { + DebugSpew("cast test slot %d = %s",i,GetItemFromContents(GetCharInfo2()->pInventoryArray->InventoryArray[i])->Name); + slot = (DWORD)i; + FOUND = TRUE; + break; + } + } + if (FOUND) { + if(CInvSlot *pSlot=pInvSlotMgr->FindInvSlot(slot)) { + CXPoint p; p.A=0; p.B=0; + pSlot->HandleRButtonUp(&p); + } + } + else { + WriteChatf("Item '%s' not found.",szArg2); + } + return; + } + GetArg(szBuffer,szLine,1); + for (Index=0;IndexMemorizedSpells[Index]!=0xFFFFFFFF) { + PCHAR SpellName = GetSpellNameByID(GetCharInfo2()->MemorizedSpells[Index]); + if (!stricmp(szBuffer,SpellName)) { + DebugSpew("SpellName = %s",SpellName); + cmdCast(pChar,itoa(Index+1,szBuffer,10)); + DebugSpew("pChar = %x SpellName = %s %s",pChar,SpellName,itoa(Index+1,szBuffer,10)); + return; + } + } + } + WriteChatColor("You do not seem to have that spell memorized.",USERCOLOR_DEFAULT); + return; +} + +// *************************************************************************** +// Function: Target +// Description: Our '/target' command +// Selects the closest spawn +// Usage: /target [spawn|myself|mycorpse] +// *************************************************************************** +VOID Target(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!ppSpawnManager) return; + if (!pSpawnList) return; + PSPAWNINFO pSpawnClosest = NULL; + SEARCHSPAWN SearchSpawn; + ClearSearchSpawn(&SearchSpawn); + CHAR szArg[MAX_STRING] = {0}; + CHAR szMsg[MAX_STRING] = {0}; + CHAR szLLine[MAX_STRING] = {0}; + PCHAR szFilter = szLLine; + BOOL DidTarget = FALSE; + BOOL bArg = TRUE; + + bRunNextCommand = TRUE; + _strlwr(strcpy(szLLine,szLine)); + while (bArg) { + GetArg(szArg,szFilter,1); + szFilter = GetNextArg(szFilter,1); + if (szArg[0]==0) { + bArg = FALSE; + } else if (!strcmp(szArg,"myself")) { + if (((PCHARINFO)pCharData)->pSpawn) { + pSpawnClosest = ((PCHARINFO)pCharData)->pSpawn; + DidTarget = TRUE; + } + } else if (!strcmp(szArg,"mycorpse")) { + if (((PCHARINFO)pCharData)->pSpawn) { + sprintf(szFilter,"%s's Corpse",((PCHARINFO)pCharData)->pSpawn->Name); + _strlwr(szFilter); + } + } else if (!strcmp(szArg,"clear")) { + pTarget = NULL; + EnviroTarget.SpawnID = 0; + DoorEnviroTarget.SpawnID = 0; + if(pChar) + pChar->GroupMemberTargeted = 0xFFFFFFFF; + DebugSpew("Target cleared."); + WriteChatColor("Target cleared.",USERCOLOR_WHO); + return; + } else { + szFilter = ParseSearchSpawnArgs(szArg,szFilter,&SearchSpawn); + } + } + if (pTarget) SearchSpawn.FromSpawnID = ((PSPAWNINFO)pTarget)->SpawnID; + + if (!DidTarget) { + pSpawnClosest = SearchThroughSpawns(&SearchSpawn,pChar); + } + + if (!pSpawnClosest) { + CHAR szTemp[MAX_STRING] = {0}; + sprintf(szMsg,"There are no spawns matching: %s",FormatSearchSpawn(szTemp,&SearchSpawn)); + } else { + PSPAWNINFO *psTarget = NULL; + if (ppTarget) { + psTarget = (PSPAWNINFO*)ppTarget; + *psTarget = pSpawnClosest; + DebugSpew("Target - %s selected",pSpawnClosest->Name); + szMsg[0]=0; + } else { + sprintf(szMsg,"Unable to target, address = 0"); + } + } + if (szMsg[0]) + if (!gFilterTarget) WriteChatColor(szMsg,USERCOLOR_WHO); + return; +} + + +// *************************************************************************** +// Function: Skills +// Description: Our '/skills' command +// Displays what your current skill levels are +// Usage: /skills [skill name] +// *************************************************************************** +VOID Skills(PSPAWNINFO pChar, PCHAR szLine) +{ + DWORD Skill, SkillCount = 0; + CHAR szMsg[MAX_STRING] = {0}; + bRunNextCommand = TRUE; + PCHARINFO pCharInfo = NULL; + if (NULL == (pCharInfo = GetCharInfo())) return; + if (szLine[0] != 0) _strlwr(szLine); + WriteChatColor("Skills",USERCOLOR_DEFAULT); + WriteChatColor("-----------------------",USERCOLOR_DEFAULT); + for (Skill=0;szSkills[Skill];Skill++) { + if (szLine[0] != 0) { + CHAR szName[MAX_STRING] = {0}; + strcpy(szName,szSkills[Skill]); + _strlwr(szName); + if (!strstr(szName,szLine)) continue; + } + SkillCount++; + switch (GetCharInfo2()->Skill[Skill]) { + case 255: + //Untrainable + SkillCount--; + break; + case 254: + //Can train + sprintf(szMsg,"%s: Trainable",szSkills[Skill]); + WriteChatColor(szMsg,USERCOLOR_DEFAULT); + break; + case 253: + //Unknown + sprintf(szMsg,"%s: Unknown(253)",szSkills[Skill]); + WriteChatColor(szMsg,USERCOLOR_DEFAULT); + break; + default: + //Have skill + sprintf(szMsg,"%s: %d",szSkills[Skill],GetCharInfo2()->Skill[Skill]); + WriteChatColor(szMsg,USERCOLOR_DEFAULT); + } + } + if (SkillCount == 0) { + sprintf(szMsg,"No skills matched '%s'.",szLine); + WriteChatColor(szMsg,USERCOLOR_DEFAULT); + } else { + DebugSpew("Skills - %d skills listed",SkillCount); + sprintf(szMsg,"%d skills displayed.",SkillCount); + WriteChatColor(szMsg,USERCOLOR_DEFAULT); + } +} + +// *************************************************************************** +// Function: MacroPause +// Description: Our '/mqpause' command +// Pause/resume a macro +// Usage: /mqpause +// /mqpause chat [on|off] +// *************************************************************************** +VOID MacroPause(PSPAWNINFO pChar, PCHAR szLine) +{ + BOOL Pause = TRUE; + CHAR szBuffer[MAX_STRING] = {0}; + + DWORD Command; + CHAR szArg[MAX_STRING] = {0}; + CHAR szArg1[MAX_STRING] = {0}; + + PCHAR szPause[] = { + "off", + "on", + NULL + }; + + bRunNextCommand = TRUE; + + GetArg(szArg,szLine,1); + if (!stricmp(szArg,"chat")) { + GetArg(szArg1,szLine,2); + if (szLine[0]==0) { + + gMQPauseOnChat = !gMQPauseOnChat; + } else { + for (Command=0;szPause[Command];Command++) { + if (!stricmp(szArg1,szPause[Command])) { + gMQPauseOnChat = Command; + } + } + } + + WritePrivateProfileString("Edge","MQPauseOnChat",(gMQPauseOnChat)?"1":"0",gszINIFilename); + sprintf(szBuffer,"Macros will %spause while in chat mode.",(gMQPauseOnChat)?"":"not "); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + return; + } + + if (!gMacroBlock) { + MacroError("You cannot pause a macro when one isn't running."); + return; + } + + for (Command=0;szPause[Command];Command++) { + if (!stricmp(szArg,szPause[Command])) { + Pause = Command; + } + } + + if (szLine[0]!=0) { + WriteChatColor("Syntax: /mqpause [on|off] [chat [on|off]]",USERCOLOR_DEFAULT); + } else { + Pause = !gMacroPause; + } + if (gMacroPause == Pause) { + sprintf(szBuffer,"Macro is already %s.",(Pause)?"paused":"running"); + } else { + sprintf(szBuffer,"Macro is %s.",(Pause)?"paused":"running again"); + gMacroPause = Pause; + } + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); +} + + + +// *************************************************************************** +// Function: SetAutoRun +// Description: Our '/setautorun' command +// Set autorun value +// Usage: /setautorun [command] +// *************************************************************************** +VOID SetAutoRun(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szServerAndName[MAX_STRING] = {0}; + sprintf(szServerAndName,"%s.%s",EQADDR_SERVERNAME,((PCHARINFO)pCharData)->Name); + WritePrivateProfileStringA("AutoRun",szServerAndName,szLine,gszINIFilename); + sprintf(szServerAndName,"Set autorun to: '%s'",szLine); + WriteChatColor(szServerAndName,USERCOLOR_DEFAULT); +} + +// *************************************************************************** +// Function: Alias +// Description: Our '/alias' command +// Add command aliases +// Usage: /alias name [delete|command] +// *************************************************************************** + +VOID Alias(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szName[MAX_STRING] = {0}; + PCHAR szCommand = NULL; + GetArg(szName,szLine,1); + szCommand = GetNextArg(szLine); + if (!stricmp(szName,"list")) { + PALIAS pLoop = pAliases; + DWORD Count=0; + WriteChatColor("Aliases",USERCOLOR_WHO); + WriteChatColor("--------------------------",USERCOLOR_WHO); + while (pLoop) { + sprintf(szName,"%s: %s",pLoop->szName,pLoop->szCommand); + WriteChatColor(szName,USERCOLOR_WHO); + Count++; + pLoop = pLoop->pNext; + } + if (Count==0) { + WriteChatColor("No aliases defined.",USERCOLOR_WHO); + } else { + sprintf(szName,"%d alias%s displayed.",Count,(Count==1)?"":"es"); + WriteChatColor(szName,USERCOLOR_WHO); + } + return; + } + if ((szName[0]==0) || (szCommand[0]==0)) { + SyntaxError("Usage: /alias name [delete|command], or /alias list"); + return; + } + + if (!stricmp(szCommand,"delete")) { + if (RemoveAlias(szName)) + { + sprintf(szBuffer,"Alias '%s' deleted.",szName); + RewriteAliases(); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + else + { + sprintf(szBuffer,"Alias '%s' not found.",szName); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + } else { + BOOL New=1; + if (RemoveAlias(szName)) + New=0; + AddAlias(szName,szCommand); + sprintf(szBuffer,"Alias '%s' %sed.",szName,(New)?"add":"updat"); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + RewriteAliases(); + } +} + +// *************************************************************************** +// Function: Substitute +// Description: Our '/substitute' command +// Add substitutions +// Usage: /substitution +// /substitution list +// /substitition delete +// *************************************************************************** + +VOID Substitute(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szName[MAX_STRING] = {0}; + PCHAR szCommand = NULL; + GetArg(szName,szLine,1); + szCommand = GetNextArg(szLine); + if (!stricmp(szName,"list")) { + PSUB pLoop = pSubs; + DWORD Count=0; + WriteChatColor("Substitutions",USERCOLOR_WHO); + WriteChatColor("--------------------------",USERCOLOR_WHO); + while (pLoop) { + sprintf(szName,"%s\t----\t%s",pLoop->szOrig,pLoop->szSub); + WriteChatColor(szName,USERCOLOR_WHO); + Count++; + pLoop = pLoop->pNext; + } + if (Count==0) { + WriteChatColor("No Substitutions defined.",USERCOLOR_WHO); + } else { + sprintf(szName,"%d substitution%s displayed.",Count,(Count==1)?"":"s"); + WriteChatColor(szName,USERCOLOR_WHO); + } + return; + } + if ((szName[0]==0) || (szCommand[0]==0)) { + SyntaxError("Usage: /substitute , /substitute delete, or /substitute list"); + return; + } + + if (!stricmp(szCommand,"delete")) { + if (RemoveSubstitute(szName)) + { + sprintf(szBuffer,"Substitution for '%s' deleted.",szName); + RewriteSubstitutions(); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + else + { + sprintf(szBuffer,"Substitution for '%s' not found.",szName); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + } else { + BOOL New=1; + if (RemoveSubstitute(szName)) + New=0; + AddSubstitute(szName,szCommand); + sprintf(szBuffer,"Substitution for '%s' %sed.",szName,(New)?"add":"updat"); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + RewriteSubstitutions(); + } +} + +// *************************************************************************** +// Function: IniOutput +// Description: Outputs string data to an INI file using +// WritePrivateProfileString. +// Usage: /ini +// *************************************************************************** +VOID IniOutput(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szArg1[MAX_STRING] = {0}; //Filename + CHAR szArg2[MAX_STRING] = {0}; //Section + CHAR szArg3[MAX_STRING] = {0}; //Key + CHAR szArg4[MAX_STRING] = {0}; //Data to write + + CHAR szOutput[MAX_STRING] = {0}; //Success / Error Output + + GetArg(szArg1,szLine,1); + GetArg(szArg2,szLine,2); + GetArg(szArg3,szLine,3); + GetArg(szArg4,szLine,4); + + DebugSpew("/ini input -- %s %s %s %s",szArg1,szArg2,szArg3,szArg4); + PCHAR pTemp=szArg1; + while(pTemp[0]) + { + if (pTemp[0]=='/') + pTemp[0]='\\'; + pTemp++; + } + + + if (szArg1[0]!='\\' && !strchr(szArg1,':')) + { + sprintf(szOutput,"%s\\%s",gszMacroPath, szArg1); + strcpy(szArg1,szOutput); + } + if (!strstr(szArg1,".")) strcat(szArg1,".ini"); + ZeroMemory(szOutput,MAX_STRING); + + if (!WritePrivateProfileString(szArg2,szArg3,szArg4,szArg1)) { + sprintf(szOutput,"IniOutput ERROR -- during WritePrivateProfileString: %s",szLine); + DebugSpew(szOutput); + } else { + sprintf(szOutput,"IniOutput Write Successful!"); + DebugSpew("%s: %s",szOutput,szLine); + } +} + +// *************************************************************************** +// Function: BankList +// Description: Our /banklist command. Lists bank contents to chat buffer. +// 2003-08-30 Valerian +// *************************************************************************** +VOID BankList(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szTemp[MAX_STRING]={0}; + PCHARINFO pCharInfo = NULL; + PCONTENTS pContainer = NULL; + if (NULL == (pCharInfo = GetCharInfo())) { + MacroError("/banklist -- Bad offset: CharInfo"); + return; + } + WriteChatColor("Listing of Bank Inventory",USERCOLOR_DEFAULT); + WriteChatColor("-------------------------",USERCOLOR_DEFAULT); + char Link[256]; + for (int a=0;apBankArray->Bank[a]; + if (pContainer) { + GetItemLink(pContainer,&Link[0]); + sprintf(szTemp,"Slot %d: %dx %s (%s)",a,pContainer->StackCount ? pContainer->StackCount : 1,Link,GetItemFromContents(pContainer)->LoreName); + WriteChatColor(szTemp,USERCOLOR_DEFAULT); + if(pContainer->pContentsArray) + { + for (int b=0;bSlots;b++) { + if (pContainer->pContentsArray->Contents[b]) { + GetItemLink(pContainer->pContentsArray->Contents[b],&Link[0]); + sprintf(szTemp,"- Slot %d: %dx %s (%s)",b,pContainer->pContentsArray->Contents[b]->StackCount ? pContainer->pContentsArray->Contents[b]->StackCount : 1,Link,GetItemFromContents(pContainer->pContentsArray->Contents[b])->LoreName); + WriteChatColor(szTemp,USERCOLOR_DEFAULT); + } + } + } + } + } +} + +// *************************************************************************** +// Function: DisplayLoginName +// Description: Our /loginname command. +// *************************************************************************** +VOID DisplayLoginName(PSPAWNINFO pChar, PCHAR szLine) +{ + PCHAR szLogin = GetLoginName(); + if (!szLogin) { + MacroError("Unable to retrieve login name."); + } else { + WriteChatf("Login name: \ay%s\ax",szLogin); + free(szLogin); + } +} + +#ifndef ISXEQ_LEGACY +// *************************************************************************** +// Function: PluginCommand +// Description: Our /plugin command. +// *************************************************************************** +VOID PluginCommand(PSPAWNINFO pChar, PCHAR szLine) +{ +} +#endif + +VOID EQDestroyHeldItemOrMoney(PSPAWNINFO pChar, PCHAR szLine) +{ + (pPCData)->DestroyHeldItemOrMoney(); +} + +VOID Exec(PSPAWNINFO pChar,PCHAR szLine) { + CHAR exepath[MAX_STRING] = {0}; + CHAR szTemp1[MAX_STRING] = {0}; + CHAR szTemp2[MAX_STRING] = {0}; + CHAR szTemp3[MAX_STRING] = {0}; + GetArg(szTemp1,szLine,1); + GetArg(szTemp2,szLine,2); + GetArg(szTemp3,szLine,3); + + if (szTemp1[0]!=0 && szTemp2[0]!=0) { + WriteChatf("Opening %s %s %s",szTemp1,szTemp2,szTemp3); + + GetPrivateProfileString("Application Paths",szTemp1,szTemp1,exepath,MAX_STRING,gszINIFilename); + + if(!strcmp(szTemp2,"bg")) { + ShellExecute(NULL, "open", exepath, NULL, NULL, SW_SHOWMINNOACTIVE); + } else if(!strcmp(szTemp2,"fg")) { + ShellExecute(NULL, "open", exepath, NULL, NULL, SW_SHOWNOACTIVATE); + } else if(!strcmp(szTemp3,"bg")) { + ShellExecute(NULL, "open", exepath, szTemp2, NULL, SW_SHOWMINNOACTIVE); + } else if(!strcmp(szTemp3,"fg")) { + ShellExecute(NULL, "open", exepath, szTemp2, NULL, SW_SHOWNOACTIVATE); + } + } else { + WriteChatColor("/exec [application \"parameters\"] [fg | bg]",USERCOLOR_DEFAULT); + } +} + +// /keypress +VOID DoMappable(PSPAWNINFO pChar, PCHAR szLine) +{ +} + +// /popup +VOID PopupText(PSPAWNINFO pChar, PCHAR szLine) +{ + DisplayOverlayText(szLine, CONCOLOR_LIGHTBLUE, 100, 500,500,3000); +} + +// /multiline +VOID MultilineCommand(PSPAWNINFO pChar, PCHAR szLine) +{ + if (szLine[0]==0) + { + SyntaxError("Usage: /multiline [delimiter[delimiter[. . .]]]"); + return; + } + CHAR szArg[MAX_STRING] = {0}; // delimiter(s) + GetArg(szArg,szLine,1); + PCHAR szRest = GetNextArg(szLine); + if (!szRest[0]) + return; + CHAR Copy[MAX_STRING] = {0}; + strcpy(Copy,szRest);// dont destroy original... + szRest=strtok(Copy,szArg); + while(szRest) + { + DoCommand(pChar,szRest); + szRest=strtok(NULL,szArg); + } +} + +// /ranged +VOID do_ranged(PSPAWNINFO pChar, PCHAR szLine) +{ + EQPlayer *pRangedTarget=pTarget; + if (szLine[0]) + { + pRangedTarget=GetSpawnByID(atoi(szLine)); + if (!pRangedTarget) + { + MacroError("Invalid spawn ID. Use /ranged with no parameters, or with a spawn ID"); + return; + } + } + if (!pRangedTarget) + { + MacroError("No target for ranged attack"); + return; + } + AttackRanged(pRangedTarget); +} + +// /loadcfg +VOID LoadCfgCommand(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /loadcfg "); + return; + } + + if (LoadCfgFile(szLine,false)) + return; + MacroError("Could not /loadcfg '%s'",szLine); +} + +// /squelch +VOID SquelchCommand(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /squelch "); + return; + } + BOOL Temp=gFilterMQ; + gFilterMQ=true; + DoCommand(pChar,szLine); + gFilterMQ=Temp; +} + +// /docommand +VOID DoCommandCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /docommand "); + return; + } + DoCommand(pChar,szLine); +} + +// /alt +VOID DoAltCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /alt "); + return; + } + bool Old=((PCXWNDMGR)pWndMgr)->KeyboardFlags[2]; + ((PCXWNDMGR)pWndMgr)->KeyboardFlags[2]=1; + DoCommand(pChar,szLine); + ((PCXWNDMGR)pWndMgr)->KeyboardFlags[2]=Old; +} + +// /shift +VOID DoShiftCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /shift "); + return; + } + bool Old=((PCXWNDMGR)pWndMgr)->KeyboardFlags[0]; + ((PCXWNDMGR)pWndMgr)->KeyboardFlags[0]=1; + gShiftKeyDown=1; + DoCommand(pChar,szLine); + gShiftKeyDown=0; + ((PCXWNDMGR)pWndMgr)->KeyboardFlags[0]=Old; +} + +// /ctrl +VOID DoCtrlCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /ctrl "); + return; + } + bool Old=((PCXWNDMGR)pWndMgr)->KeyboardFlags[1]; + ((PCXWNDMGR)pWndMgr)->KeyboardFlags[1]=1; + DoCommand(pChar,szLine); + ((PCXWNDMGR)pWndMgr)->KeyboardFlags[1]=Old; +} + +VOID NoModKeyCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /nomodkey "); + return; + } + bool KeyboardFlags[4]; + *(DWORD*)&KeyboardFlags=*(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags; + *(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags=0; + DoCommand(pChar,szLine); + *(DWORD*)&((PCXWNDMGR)pWndMgr)->KeyboardFlags=*(DWORD*)&KeyboardFlags; +} + +// *************************************************************************** +// Function: DoSocial +// Description: '/dosocial' command +// Does (or lists) your programmed socials +// Usage: /dosocial [list|"social name"] +// *************************************************************************** +VOID DoSocial(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!pSocialList) return; + + DWORD SocialIndex = -1, LineIndex; + DWORD SocialPage = 0, SocialNum = 0; + CHAR szBuffer[MAX_STRING] = {0}; + BOOL displayUsage = FALSE; + + GetArg(szBuffer,szLine,1); + + if( !stricmp(szBuffer,"list") ) { + WriteChatColor("Socials: (page,number) name",USERCOLOR_DEFAULT); + for (SocialIndex=0; SocialIndex < 120; SocialIndex++) { + SocialPage = SocialIndex/12; + SocialNum = SocialIndex - (SocialPage*12); + if( strlen(pSocialList[SocialIndex].Name) ) { + sprintf(szBuffer,"(%2d,%2d) %s ", SocialPage+1, SocialNum+1, pSocialList[SocialIndex].Name); + WriteChatColor(szBuffer,USERCOLOR_ECHO_EMOTE); + for( LineIndex=0; LineIndex < 5; LineIndex++ ) { + if( strlen(pSocialList[SocialIndex].Line[LineIndex]) ) { + sprintf(szBuffer," %d: %s", LineIndex+1, pSocialList[SocialIndex].Line[LineIndex]); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + } + } + } + return; + } else if( strlen(szBuffer) ) { /* assume we have a social name to match */ + for( unsigned long N = 0; N < 120; N++ ) { + if( !stricmp(szBuffer,pSocialList[N].Name) ) + { + SocialIndex=N; + break; + } + } + } + + if (gCurrentSocial==-1) + { + gCurrentSocial=SocialIndex; + } + else + { + if( SocialIndex < 120 ) { + for( LineIndex = 0; LineIndex < 5; LineIndex++ ) { + if( strlen(pSocialList[SocialIndex].Line[LineIndex]) ) DoCommand(pChar,pSocialList[SocialIndex].Line[LineIndex]); + } + } else { + if( strlen(szLine) ) { + sprintf( szBuffer, "Invalid Argument(s): %s", szLine ); + WriteChatColor(szBuffer,USERCOLOR_DEFAULT); + } + SyntaxError("Usage: /dosocial ",USERCOLOR_DEFAULT ); + } + } +} + +// /timed +VOID DoTimedCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /timed "); + return; + } + CHAR szArg[MAX_STRING] = {0}; // delay + GetArg(szArg,szLine,1); + PCHAR szRest = GetNextArg(szLine); + if (!szRest[0]) + return; + TimedCommand(szRest,atoi(szArg)*100); +} + +VOID ClearErrorsCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + gszLastNormalError[0]=0; + gszLastSyntaxError[0]=0; + gszLastMQ2DataError[0]=0; +} + +VOID DropCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (GetCharInfo2()->pInventoryArray->Inventory.Cursor) + { + if (((EQ_Item*)GetCharInfo2()->pInventoryArray->Inventory.Cursor)->CanDrop(0,1)) + { + pEverQuest->DropHeldItemOnGround(1); + } + } +} + +VOID HudCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /hud "); + WriteChatColor("Note: 'always' forces 'underui' also. The Network Status indicator is not 'always' drawn and is toggled with F11."); + return; + } + else + if (!stricmp(szLine,"normal")) + { + WritePrivateProfileString("Edge","HUDMode","Normal",gszINIFilename); + gbAlwaysDrawMQHUD=false; + gbHUDUnderUI=false; + } + else + if (!stricmp(szLine,"underui")) + { + WritePrivateProfileString("Edge","HUDMode","UnderUI",gszINIFilename); + gbHUDUnderUI=true; + gbAlwaysDrawMQHUD=false; + } + else + if (!stricmp(szLine,"always")) + { + WritePrivateProfileString("Edge","HUDMode","Always",gszINIFilename); + gbHUDUnderUI=true; + gbAlwaysDrawMQHUD=true; + } +} + +VOID CaptionCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR Arg1[MAX_STRING]={0}; + GetArg(Arg1,szLine,1); + if (!Arg1[0]) + { + SyntaxError("Usage: /caption |update #|MQCaptions >"); + return; + } + if (!stricmp(Arg1,"list")) + { + WriteChatf("\ayPlayer1\ax: \ag%s\ax",gszSpawnPlayerName[1]); + WriteChatf("\ayPlayer2\ax: \ag%s\ax",gszSpawnPlayerName[2]); + WriteChatf("\ayPlayer3\ax: \ag%s\ax",gszSpawnPlayerName[3]); + WriteChatf("\ayPlayer4\ax: \ag%s\ax",gszSpawnPlayerName[4]); + WriteChatf("\ayPlayer5\ax: \ag%s\ax",gszSpawnPlayerName[5]); + WriteChatf("\ayPlayer6\ax: \ag%s\ax",gszSpawnPlayerName[6]); + + WriteChatf("\ayNPC\ax: \ag%s\ax",gszSpawnNPCName); + WriteChatf("\ayPet\ax: \ag%s\ax",gszSpawnPetName); + WriteChatf("\ayCorpse\ax: \ag%s\ax",gszSpawnCorpseName); + return; + } + PCHAR pCaption=0; + if (!stricmp(Arg1,"Player1")) + { + pCaption=gszSpawnPlayerName[1]; + } else if (!stricmp(Arg1,"Player2")) + { + pCaption=gszSpawnPlayerName[2]; + } else if (!stricmp(Arg1,"Player3")) + { + pCaption=gszSpawnPlayerName[3]; + } else if (!stricmp(Arg1,"Player4")) + { + pCaption=gszSpawnPlayerName[4]; + } else if (!stricmp(Arg1,"Player5")) + { + pCaption=gszSpawnPlayerName[5]; + } else if (!stricmp(Arg1,"Player6")) + { + pCaption=gszSpawnPlayerName[6]; + } else if (!stricmp(Arg1,"Pet")) + { + pCaption=gszSpawnPetName; + } else if (!stricmp(Arg1,"NPC")) + { + pCaption=gszSpawnNPCName; + } else if (!stricmp(Arg1,"Corpse")) + { + pCaption=gszSpawnCorpseName; + } else if (!stricmp(Arg1,"Update")) + { + gMaxSpawnCaptions=atoi(GetNextArg(szLine)); + if (gMaxSpawnCaptions<8) + gMaxSpawnCaptions=8; + if (gMaxSpawnCaptions>70) + gMaxSpawnCaptions=70; + WritePrivateProfileString("Captions","Update",itoa(gMaxSpawnCaptions,Arg1,10),gszINIFilename); + WriteChatf("\ay%d\ax nearest spawns will have their caption updated each pass.",gMaxSpawnCaptions); + return; + } else if (!stricmp(Arg1,"MQCaptions")) + { + gMQCaptions=(!stricmp(GetNextArg(szLine),"On")); + WritePrivateProfileString("Captions","MQCaptions",(gMQCaptions?"1":"0"),gszINIFilename); + WriteChatf("MQCaptions are now \ay%s\ax.",(gMQCaptions?"On":"Off")); + return; + } + else + { + MacroError("Invalid caption type '%s'",Arg1); + return; + } + strcpy(pCaption, GetNextArg(szLine)); + WritePrivateProfileString("Captions",Arg1,pCaption,gszINIFilename); + ConvertCR(pCaption); + WriteChatf("\ay%s\ax caption set.",Arg1); +} + +VOID NoParseCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /noparse "); + return; + } + bAllowCommandParse=false; + DoCommand(pChar,szLine); + bAllowCommandParse=true; +} + +VOID AltAbility(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szBuffer[MAX_STRING] = {0}; + CHAR szCommand[MAX_STRING] = {0}; + CHAR szSpellInfo[MAX_STRING] = {0}; + PCHAR szName = NULL; + GetArg(szCommand,szLine,1); + szName = GetNextArg(szLine); + unsigned long nAbility=0; + int i=0; + MQ2TicksType szTime; + + if ((szName[0]==0) || (szCommand[0]==0)) { + SyntaxError("Usage: /aa list [all|timers], /aa info [ability name], or /aa act [ability name]"); + return; + } + + if (!stricmp(szCommand,"list")) + { + if (!stricmp(szName,"all")) + { + WriteChatColor("Alternative Abilities (Complete List)", CONCOLOR_YELLOW ); + WriteChatColor("-------------------------------------", USERCOLOR_WHO); + for (nAbility=0 ; nAbilityGetAltAbility(pPCData->GetAltAbilityIndex(nAbility))) { + sprintf(szBuffer,"[ %d: %s ]", pAbility->ID, + pCDBStr->GetString(pAbility->nName, 1, NULL)); + WriteChatColor(szBuffer,USERCOLOR_WHO); + } + } + } + else if (!stricmp(szName,"timers")) + { + WriteChatColor("Alternative Abilities With Timers", CONCOLOR_YELLOW ); + WriteChatColor("---------------------------------", USERCOLOR_WHO); + for (nAbility=0 ; nAbilityGetAltAbility(pPCData->GetAltAbilityIndex(nAbility)) ) { + if ((pAltAdvManager->GetCalculatedTimer(pPCData,pAbility)) > 0) + { + if (pAltAdvManager->IsAbilityReady(pPCData,pAbility,0)) + { + sprintf(szBuffer,"[ %d: %s ] (Reuse Time: %d seconds) ", + pAbility->ID, pCDBStr->GetString(pAbility->nName, 1, NULL), + pAltAdvManager->GetCalculatedTimer(pPCData,pAbility) ); + WriteChatColor(szBuffer,USERCOLOR_WHO); + } + else + { + pAltAdvManager->IsAbilityReady(pPCData,pAbility,&i); + sprintf(szBuffer,"[ %d: %s ] (Reuse Time: %d seconds) ", + pAbility->ID, pCDBStr->GetString(pAbility->nName, 1, NULL), + pAltAdvManager->GetCalculatedTimer(pPCData,pAbility), i ); + WriteChatColor(szBuffer,USERCOLOR_WHO); + } + } + } + } + } + else + { + SyntaxError("Usage: /aa list [all|timers], /aa info [ability name], or /aa act [ability name]"); + return; + } + } + else if (!stricmp(szCommand,"info")) + { + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(nAbility)) + { + char *pName; + if (!stricmp(pName = pCDBStr->GetString(pAbility->nName, 1, NULL), szName)) + { + + WriteChatColor("Alternative Advancement Ability Information", CONCOLOR_YELLOW); + WriteChatColor("-------------------------------------------", USERCOLOR_WHO); + + if ((pAltAdvManager->GetCalculatedTimer(pPCData,pAbility)) > 0) + {//has a timer + if (!pAltAdvManager->IsAbilityReady(pPCData,pAbility,0)) + {//it's not ready + sprintf(szBuffer,"[ %d: %s ] %s", pAbility->ID, pName, pCDBStr->GetString(pAbility->nName, 4, NULL)); + WriteChatColor(szBuffer,USERCOLOR_WHO); + sprintf(szBuffer,"Min Level: %d, Cost: %d, Max Rank: %d, Type: %d, Reuse Time: %d seconds", + pAbility->MinLevel, pAbility->Cost, pAbility->MaxRank, pAbility->Type, pAltAdvManager->GetCalculatedTimer(pPCData,pAbility)); + WriteChatColor(szBuffer,USERCOLOR_WHO); + if (pAbility->SpellID > 0) + { + sprintf(szBuffer,"Casts Spell: %s", GetSpellNameByID(pAbility->SpellID) ); + WriteChatColor(szBuffer, USERCOLOR_WHO); + } + if (PlayerHasAAAbility(pAbility->Index)) + { + sprintf(szBuffer,"Ready: No (%d seconds until refresh)", i ); + WriteChatColor(szBuffer,USERCOLOR_WHO); + } + else + { + WriteChatColor("Ready: Not Purchased",USERCOLOR_WHO); + } + + } + else + { + sprintf(szBuffer,"[ %d: %s ] %s", pAbility->ID, pName, pCDBStr->GetString(pAbility->nName, 4, NULL) ); + WriteChatColor(szBuffer,USERCOLOR_WHO); + sprintf(szBuffer,"Min Level: %d, Cost: %d, Max Rank: %d, Type: %d, Reuse Time: %d seconds", + pAbility->MinLevel, pAbility->Cost, pAbility->MaxRank, pAbility->Type, pAltAdvManager->GetCalculatedTimer(pPCData,pAbility)); + WriteChatColor(szBuffer,USERCOLOR_WHO); + if (pAbility->SpellID > 0) + { + sprintf(szBuffer,"Casts Spell: %s", GetSpellNameByID(pAbility->SpellID)); + WriteChatColor(szBuffer, USERCOLOR_WHO); + } + sprintf(szBuffer,"Ready: Yes"); + WriteChatColor(szBuffer,USERCOLOR_WHO); + } + } + else + { + pAltAdvManager->IsAbilityReady(pPCData,pAbility,&i); + sprintf(szBuffer,"[ %d: %s ] %s", pAbility->ID, pName, pCDBStr->GetString(pAbility->nName, 4, NULL) ); + WriteChatColor(szBuffer,USERCOLOR_WHO); + sprintf(szBuffer,"Min Level: %d, Cost: %d, Max Rank: %d, Type: %d", + pAbility->MinLevel, pAbility->Cost, pAbility->MaxRank, pAbility->Type); + WriteChatColor(szBuffer,USERCOLOR_WHO); + if (pAbility->SpellID > 0) + { + sprintf(szBuffer,"Casts Spell: %s", GetSpellNameByID(pAbility->SpellID) ); + WriteChatColor(szBuffer, USERCOLOR_WHO); + } + } + } // name matches + } // if pability != null + } //for loop + } + else if (!stricmp(szCommand,"act")) + { + // only search through the ones we have.... + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(pPCData->GetAltAbilityIndex(nAbility)) ) { + if (PCHAR pName=pCDBStr->GetString(pAbility->nName, 1, NULL)) { + if (!stricmp(szName,pName)) { + sprintf(szBuffer,"/alt act %d", pAbility->ID); + DoCommand(pChar,szBuffer); + break; + } + } + } + } + } + else + { + SyntaxError("Usage: /aa list [all|timers|ready], /aa info [ability name], or /aa act [ability name]"); + return; + } + return; +} + +// *************************************************************************** +// Function: Echo +// Description: Our '/echo' command +// Echos text to the chatbox +// Usage: /echo +// *************************************************************************** +VOID Echo(PSPAWNINFO pChar, PCHAR szLine) +{ + CHAR szEcho[MAX_STRING] = {0}; + bRunNextCommand = TRUE; + strcpy(szEcho,DebugHeader); + strcat(szEcho," "); + strncat(szEcho,szLine, MAX_STRING-(strlen(DebugHeader)+2)); + DebugSpewNoFile("Echo - %s",szEcho); + WriteChatColor(szEcho,USERCOLOR_CHAT_CHANNEL); + +} + +// *************************************************************************** +// Function: LootAll +// Description: Our '/lootall' command +// Loots everything on the targeted corpse +// Usage: /lootall +// *************************************************************************** +VOID LootAll(PSPAWNINFO pChar, PCHAR szLine) +{ + pLootWnd->LootAll=1; + pEverQuest->doLoot(); +} +#endif diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2Commands.h b/client_files/native_autoloot/eq-core-dll/src/MQ2Commands.h new file mode 100644 index 0000000000..7bb940fa9d --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2Commands.h @@ -0,0 +1,91 @@ +#pragma once +#if defined(ISXEQ_LEGACY) || !defined(ISXDK_VERSION) +/* COMMANDS */ +LEGACY_API VOID NoModKeyCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID CaptionColorCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID NoParseCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID CaptionCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID HudCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID DropCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID CombineCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID ClearErrorsCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID DeleteVarCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID NewIf (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID DoTimedCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID DoShiftCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID DoCtrlCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID DoAltCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID DoCommandCmd (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID SquelchCommand (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID DumpBindsCommand (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID LoadCfgCommand (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID do_ranged (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID MultilineCommand (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID PluginCommand (PSPAWNINFO pChar, PCHAR szLine); +LEGACY_API VOID Alert (PSPAWNINFO,PCHAR); +LEGACY_API VOID Alias (PSPAWNINFO,PCHAR); +LEGACY_API VOID AltAbility (PSPAWNINFO,PCHAR); +LEGACY_API VOID BankList (PSPAWNINFO,PCHAR); +LEGACY_API VOID Breakin (PSPAWNINFO,PCHAR); +LEGACY_API VOID BuyItem (PSPAWNINFO,PCHAR); +LEGACY_API VOID Call (PSPAWNINFO,PCHAR); +LEGACY_API VOID CharInfo (PSPAWNINFO,PCHAR); +LEGACY_API VOID Cast (PSPAWNINFO,PCHAR); +LEGACY_API VOID Cleanup (PSPAWNINFO,PCHAR); +LEGACY_API VOID Click (PSPAWNINFO,PCHAR); +LEGACY_API VOID DebugSpewFile (PSPAWNINFO,PCHAR); +LEGACY_API VOID DeclareVar (PSPAWNINFO,PCHAR); +LEGACY_API VOID Delay (PSPAWNINFO,PCHAR); +LEGACY_API VOID EQDestroyHeldItemOrMoney (PSPAWNINFO,PCHAR); +LEGACY_API VOID DisplayLoginName (PSPAWNINFO,PCHAR); +LEGACY_API VOID DoAbility (PSPAWNINFO,PCHAR); +LEGACY_API VOID DoEvents (PSPAWNINFO,PCHAR); +LEGACY_API VOID DoSocial (PSPAWNINFO,PCHAR); +LEGACY_API VOID Doors (PSPAWNINFO,PCHAR); +LEGACY_API VOID DoorTarget (PSPAWNINFO,PCHAR); +LEGACY_API VOID DumpStack (PSPAWNINFO,PCHAR); +LEGACY_API VOID Echo (PSPAWNINFO,PCHAR); +LEGACY_API VOID EditMacro (PSPAWNINFO,PCHAR); +LEGACY_API VOID EndMacro (PSPAWNINFO,PCHAR); +LEGACY_API VOID Exec (PSPAWNINFO,PCHAR); +LEGACY_API VOID Face (PSPAWNINFO,PCHAR); +LEGACY_API VOID Filter (PSPAWNINFO,PCHAR); +LEGACY_API VOID For (PSPAWNINFO,PCHAR); +LEGACY_API VOID Goto (PSPAWNINFO,PCHAR); +LEGACY_API VOID Help (PSPAWNINFO,PCHAR); +LEGACY_API VOID Hotkey (PSPAWNINFO,PCHAR); +LEGACY_API VOID Identify (PSPAWNINFO,PCHAR); +LEGACY_API VOID IniOutput (PSPAWNINFO,PCHAR); +LEGACY_API VOID Items (PSPAWNINFO,PCHAR); +LEGACY_API VOID ItemTarget (PSPAWNINFO,PCHAR); +LEGACY_API VOID KeepKeys (PSPAWNINFO,PCHAR); +LEGACY_API VOID WindowState (PSPAWNINFO,PCHAR); +LEGACY_API VOID ListMacros (PSPAWNINFO,PCHAR); +LEGACY_API VOID LoadSpells (PSPAWNINFO,PCHAR); +LEGACY_API VOID Location (PSPAWNINFO,PCHAR); +LEGACY_API VOID Look (PSPAWNINFO,PCHAR); +LEGACY_API VOID LootAll (PSPAWNINFO,PCHAR); +LEGACY_API VOID Macro (PSPAWNINFO,PCHAR); +LEGACY_API VOID MacroBeep (PSPAWNINFO,PCHAR); +LEGACY_API VOID MacroLog (PSPAWNINFO,PCHAR); +LEGACY_API VOID MacroPause (PSPAWNINFO,PCHAR); +LEGACY_API VOID MemSpell (PSPAWNINFO,PCHAR); +LEGACY_API VOID MQMsgBox (PSPAWNINFO,PCHAR); +LEGACY_API VOID Next (PSPAWNINFO,PCHAR); +LEGACY_API VOID Return (PSPAWNINFO,PCHAR); +LEGACY_API VOID SellItem (PSPAWNINFO,PCHAR); +LEGACY_API VOID SetAutoRun (PSPAWNINFO,PCHAR); +LEGACY_API VOID SetError (PSPAWNINFO,PCHAR); +LEGACY_API VOID Skills (PSPAWNINFO,PCHAR); +LEGACY_API VOID Substitute (PSPAWNINFO,PCHAR); +LEGACY_API VOID SuperWho (PSPAWNINFO,PCHAR); +LEGACY_API VOID SuperWhoTarget (PSPAWNINFO,PCHAR); +LEGACY_API VOID SWhoFilter (PSPAWNINFO,PCHAR); +LEGACY_API VOID Target (PSPAWNINFO,PCHAR); +LEGACY_API VOID Unload (PSPAWNINFO,PCHAR); +LEGACY_API VOID UpdateItemInfo (PSPAWNINFO,PCHAR); +LEGACY_API VOID Where (PSPAWNINFO,PCHAR); +LEGACY_API VOID ZapVars (PSPAWNINFO,PCHAR); +LEGACY_API VOID PopupText (PSPAWNINFO,PCHAR); +LEGACY_API VOID PluginCmdSort (VOID); +#endif diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2DInput.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2DInput.cpp new file mode 100644 index 0000000000..8509110243 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2DInput.cpp @@ -0,0 +1,256 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif + +#ifndef ISXEQ +#define DBG_SPEW + +#include "MQ2Main.h" + +// *************************************************************************** +// Function: DInputDataDetour +// Description: Our DirectInput GetDeviceState Hook +// *************************************************************************** + +HRESULT (__stdcall *DInputDataTrampoline)(IDirectInputDevice8A* This, DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags); +HRESULT __stdcall DInputDataDetour(IDirectInputDevice8A* This, DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) +{ + gbInDInput = TRUE; + HRESULT hResult = 0; + PKEYPRESS pNext = NULL; + DWORD didAdd = 0; + BOOL bLoop; + BOOL bRemoveItem = FALSE; + DWORD dwInOutSave = *pdwInOut; + DWORD dwTimeStamp = 0; + DWORD dwSequence = 0; + + + if (!gbUnload) + { + if (EQADDR_DIMOUSE && (This == *EQADDR_DIMOUSE)) + { + // If we are waiting for a click-event to be confirmed by EQ, don't + // pull any data, just return DI_OK and set the pdwInOut value to 0 + if (IsMouseWaitingForButton()) + { + hResult = DI_OK; + *pdwInOut = 0; + gbInDInput = FALSE; + return hResult; + } + + if (EQADDR_MOUSE && gMouseData) { + *pdwInOut = 0; + bLoop = TRUE; + while ((bLoop == TRUE) && (gMouseData)) { + bRemoveItem = TRUE; + if (*pdwInOut < dwInOutSave) { + rgdod[*pdwInOut].dwSequence = dwSequence; + rgdod[*pdwInOut].dwTimeStamp = dwTimeStamp; + rgdod[0].uAppData = 0; + switch (gMouseData->mdType) { + case MD_Button0Click: + DebugSpew("Trying to click left button."); + rgdod[*pdwInOut].dwData = 0x80; + rgdod[*pdwInOut].dwOfs = DIMOFS_BUTTON0; + gMouseData->mdType = MD_Button0; + gMouseData->dwData = 0x00; + bRemoveItem = FALSE; + bLoop = FALSE; + (*pdwInOut)++; + break; + case MD_Button1Click: + DebugSpew("Trying to click right button."); + rgdod[*pdwInOut].dwData = 0x80; + rgdod[*pdwInOut].dwOfs = DIMOFS_BUTTON1; + gMouseData->mdType = MD_Button1; + gMouseData->dwData = 0x00; + bRemoveItem = FALSE; + bLoop = FALSE; + (*pdwInOut)++; + break; + case MD_Button0: + rgdod[*pdwInOut].dwData = gMouseData->dwData; + rgdod[*pdwInOut].dwOfs = DIMOFS_BUTTON0; + (*pdwInOut)++; + break; + case MD_Button1: + rgdod[*pdwInOut].dwData = gMouseData->dwData; + rgdod[*pdwInOut].dwOfs = DIMOFS_BUTTON1; + (*pdwInOut)++; + break; + case MD_Unknown: + break; + } + if (bRemoveItem==TRUE) { + PMOUSESPOOF pTemp = gMouseData; + gMouseData = gMouseData->pNext; + free(pTemp); + } + } else { + bLoop = FALSE; + } + } + gbInDInput = FALSE; + return (HRESULT)DI_OK; + } + } + } + // If we didn't add any keyboard data, and we aren't waiting for a click, + // and we didn't add any mouse data + hResult = DInputDataTrampoline(This, cbObjectData, rgdod, pdwInOut, dwFlags); + if (gbUnload) { + gbInDInput = FALSE; + return hResult; + } + + gbInDInput = FALSE; + return hResult; +} + +HRESULT (__stdcall *DInputStateTrampoline)(IDirectInputDevice8A* This, DWORD cbData, LPVOID lpvData); +HRESULT __stdcall DInputStateDetour(IDirectInputDevice8A* This, DWORD cbData, LPVOID lpvData) +{ + HRESULT hResult = S_OK; + DWORD dwBuffSize = 0; + BOOL bOneTime = FALSE; + + gbInDState = TRUE; + hResult = DInputStateTrampoline(This, cbData, lpvData); + // We could alter the return here if so desired, if a macro is executing that requires keyboard and mouse input. + // by setting hResult to DI_OK; + if (hResult == DIERR_INPUTLOST || hResult == DIERR_NOTACQUIRED) + { + bDetMouse = FALSE; + } + if (gbUnload) { + gbInDState = FALSE; + return hResult; + } + if ((cbData == sizeof(DIMOUSESTATE)) || (cbData == sizeof(DIMOUSESTATE2))) + { + if(IsMouseWaitingForButton() && (EQADDR_MOUSECLICK)) + { + ((LPDIMOUSESTATE)lpvData)->rgbButtons[0] = EQADDR_MOUSECLICK->Click[0]; + ((LPDIMOUSESTATE)lpvData)->rgbButtons[1] = EQADDR_MOUSECLICK->Click[1]; + } + } + + gbInDState = FALSE; + return hResult; +} + +HRESULT (__stdcall *DInputAcquireTrampoline)(IDirectInputDevice8A* This); +HRESULT __stdcall DInputAcquireDetour(IDirectInputDevice8A* This) +{ + HRESULT hResult = S_OK; + DWORD dwBuffSize = 0; + + gbInDAcquire = TRUE; + hResult = DInputAcquireTrampoline(This); + // Could alter the return here to allow background macro execution with keyboard and mouse input + if (hResult != DI_OK && hResult != S_FALSE) // Mouse wasn't acquired successfully + { + bDetMouse = FALSE; + } + if (gbUnload) { + gbInDAcquire = FALSE; + return hResult; + } + gbInDAcquire = FALSE; + return hResult; +} + + + +// externals from EQLib_Main.cpp +extern HRESULT (__stdcall *DInputDataTrampoline)(IDirectInputDevice8A* This, DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags); +extern HRESULT __stdcall DInputDataDetour(IDirectInputDevice8A* This, DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags); +extern HRESULT (__stdcall *DInputStateTrampoline)(IDirectInputDevice8A* This, DWORD cbData, LPVOID lpvData); +extern HRESULT __stdcall DInputStateDetour(IDirectInputDevice8A* This, DWORD cbData, LPVOID lpvData); +extern HRESULT (__stdcall *DInputAcquireTrampoline)(IDirectInputDevice8A* This); +extern HRESULT __stdcall DInputAcquireDetour(IDirectInputDevice8A* This); + +DWORD GetDeviceData=0; +DWORD GetDeviceState=0; +DWORD Acquire=0; + +VOID InitializeMQ2DInput() +{ + DebugSpew("Initializing DInput"); + IDirectInputDevice8A *IDIDevice = NULL; + IDirectInputDevice8A *IDIMouse = NULL; + // Keyboard patching + if ((EQADDR_DIKEYBOARD) && (*EQADDR_DIKEYBOARD) && (EQADDR_DIMOUSE) && (*EQADDR_DIMOUSE)) + { + IDIDevice = *EQADDR_DIKEYBOARD; + IDIMouse = *EQADDR_DIMOUSE; + if ((unsigned int)IDIDevice->lpVtbl->GetDeviceData == (unsigned int)IDIMouse->lpVtbl->GetDeviceData) + DebugSpew("Mouse and Keyboard have same GetDeviceData"); + if ((unsigned int)IDIDevice->lpVtbl->GetDeviceState == (unsigned int)IDIMouse->lpVtbl->GetDeviceState) + DebugSpew("Mouse and Keyboard have same GetDeviceState"); + if ((unsigned int)IDIDevice->lpVtbl->Acquire == (unsigned int)IDIMouse->lpVtbl->Acquire) + DebugSpew("Mouse and Keyboard have same Acquire"); + } + if ((EQADDR_DIKEYBOARD) && (*EQADDR_DIKEYBOARD)) { + IDIDevice = *EQADDR_DIKEYBOARD; + AddDetour(GetDeviceData=(unsigned int) IDIDevice->lpVtbl->GetDeviceData); + AddDetour(GetDeviceState=(unsigned int) IDIDevice->lpVtbl->GetDeviceState); + AddDetour(Acquire=(unsigned int) IDIDevice->lpVtbl->Acquire); + + //Grab GetDeviceData + (*(PBYTE*)&DInputDataTrampoline) = DetourFunction((PBYTE)GetDeviceData, + (PBYTE)DInputDataDetour); + //Grab GetDeviceState + (*(PBYTE*)&DInputStateTrampoline) = DetourFunction((PBYTE)GetDeviceState, + (PBYTE)DInputStateDetour); + //Grab Acquire + (*(PBYTE*)&DInputAcquireTrampoline) = DetourFunction((PBYTE)Acquire, + (PBYTE)DInputAcquireDetour); + } +} + +VOID ShutdownMQ2DInput() +{ + if (DetourRemove((PBYTE)DInputDataTrampoline, + (PBYTE)DInputDataDetour)) + { + RemoveDetour(GetDeviceData); + DInputDataTrampoline = NULL; + } + else + DebugSpewAlways("Failed to unhook DInputData"); + if (DetourRemove((PBYTE)DInputStateTrampoline, + (PBYTE)DInputStateDetour)) + { + RemoveDetour(GetDeviceState); + DInputStateTrampoline = NULL; + } + else + DebugSpewAlways("Failed to unhook DInputState"); + if (DetourRemove((PBYTE)DInputAcquireTrampoline, + (PBYTE)DInputAcquireDetour)) + { + RemoveDetour(Acquire); + DInputAcquireTrampoline = NULL; + } + else + DebugSpewAlways("Failed to unhook DInputAcquire"); +} + +#endif diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2Data.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2Data.cpp new file mode 100644 index 0000000000..f90363617c --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2Data.cpp @@ -0,0 +1,1521 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#define DBG_SPEW + +#ifdef ISXEQ +#define ISINDEX() (argc>0) +#define ISNUMBER() (IsNumber(argv[0])) +#define GETNUMBER() (atoi(argv[0])) +#define GETFIRST() argv[0] +#else +#define ISINDEX() (szIndex[0]) +#define ISNUMBER() (IsNumber(szIndex)) +#define GETNUMBER() (atoi(szIndex)) +#define GETFIRST() szIndex +#endif + +#include "MQ2Main.h" +#ifndef ISXEQ +#define TLO(funcname) BOOL funcname(PCHAR szIndex, MQ2TYPEVAR &Ret) +#else +#define TLO(funcname) bool funcname(int argc, char *argv[], LSTYPEVAR &Ret) +#endif + + +TLO(dataSpawn) +{ + if (ISINDEX()) + { + if (ISNUMBER()) + { + if (Ret.Ptr=GetSpawnByID(GETNUMBER())) + { + Ret.Type=pSpawnType; + return true; + } + } + else + { + // set up search spawn + SEARCHSPAWN ssSpawn; + ClearSearchSpawn(&ssSpawn); +#ifndef ISXEQ + ParseSearchSpawn(szIndex,&ssSpawn); +#else + ParseSearchSpawn(0,argc,argv,ssSpawn); +#endif + if (Ret.Ptr=SearchThroughSpawns(&ssSpawn,(PSPAWNINFO)pCharSpawn)) + { + Ret.Type=pSpawnType; + return true; + } + } + } + // No spawn + + return false; +} + +#ifndef ISXEQ +TLO(dataSelect) +{ + if (!szIndex[0]) + return false; + + // I hate this GetArg shit - Lax + CHAR szArg[MAX_STRING] = {0}; + CHAR szArg1[MAX_STRING] = {0}; + int N=2; + GetArg(szArg1,szIndex,1,FALSE,FALSE,TRUE); + while (1) + { + GetArg(szArg,szIndex,N,FALSE,FALSE,TRUE); + N++; + if (!szArg[0]) + { + Ret.DWord=0; + Ret.Type=pIntType; + return true; + } + if (!stricmp(szArg1,szArg)) + { + Ret.DWord=N-2; + Ret.Type=pIntType; + return true; + } + } +} +#endif + +TLO(dataTarget) +{ + if (pTarget) + { + Ret.Ptr=pTarget; + Ret.Type=pTargetType; + return true; + } + return false; +} + +TLO(dataCharacter) +{ + if (pCharData) + { + Ret.Ptr=pCharData; + Ret.Type=pCharacterType; + return true; + } + return false; +} + +TLO(dataSpell) +{ + if (ISINDEX()) + { + if (ISNUMBER()) + { + if (Ret.Ptr=GetSpellByID(GETNUMBER())) + { + Ret.Type=pSpellType; + return true; + } + } + else + { + if (Ret.Ptr=GetSpellByName(GETFIRST())) + { + Ret.Type=pSpellType; + return true; + } + } + } + return false; +} + +TLO(dataSwitch) +{ + if (pDoorTarget) + { + Ret.Ptr=pDoorTarget; + Ret.Type=pSwitchType; + return true; + } + return false; +} + +TLO(dataGroundItem) +{ + if (pGroundTarget) + { + Ret.Ptr=pGroundTarget; + Ret.Type=pGroundType; + return true; + } + return false; +} + +TLO(dataMerchant) +{ + if (pActiveMerchant) + { + Ret.Ptr=pActiveMerchant; + Ret.Type=pMerchantType; + return true; + } + return false; +} + +TLO(dataCorpse) +{ + if (pLootWnd) + { + Ret.Ptr=pLootWnd; + Ret.Type=pCorpseType; + return true; + } + return false; +} + +TLO(dataWindow) +{ + return false; +} + +#ifndef ISXEQ +TLO(dataMacro) +{ + if (gRunning) + { + Ret.Ptr=0; + Ret.Type=pMacroType; + return true; + } + return false; +} +#endif + +TLO(dataMacroQuest) +{ + Ret.Ptr=0; + Ret.Type=pMacroQuestType; + return true; +} +#ifndef ISXEQ +TLO(dataMath) +{ + Ret.Ptr=0; + Ret.Type=pMathType; + return true; +} +#endif + +TLO(dataZone) +{ + int nIndex=0; + PZONELIST pZone = NULL; + + if (!ISINDEX()) + { + Ret.DWord = instEQZoneInfo; + Ret.Type=pCurrentZoneType; + return true; + } + else if (ISNUMBER()) + { + if (nIndex = GETNUMBER()) + { + if (GetCharInfo()->zoneId==nIndex) + { + Ret.DWord = instEQZoneInfo; + Ret.Type=pCurrentZoneType; + } + else + { + Ret.Ptr = ((PWORLDDATA)pWorldData)->ZoneArray[nIndex]; + Ret.Type=pZoneType; + } + return true; + } + } + else if (-1 != (nIndex=GetZoneID(GETFIRST()))) + { + if (GetCharInfo()->zoneId==nIndex) + { + Ret.DWord = instEQZoneInfo; + Ret.Type=pCurrentZoneType; + } + else + { + Ret.Ptr = ((PWORLDDATA)pWorldData)->ZoneArray[nIndex]; + Ret.Type=pZoneType; + } + return true; + } + return false; +} + + +#ifndef ISXEQ +TLO(dataInt) +{ + if (!ISINDEX()) + return false; + Ret.DWord=atol(szIndex); + Ret.Type=pIntType; + return true; +} + +TLO(dataString) +{ + WriteChatf("Due to complete misuse of the String Top-Level Object, it has been removed."); + return false; + /* + if (!ISINDEX()) + return false; + strcpy(DataTypeTemp,szIndex); + Ret.Ptr=&DataTypeTemp[0]; + Ret.Type=pStringType; + return true; + /**/ +} + +TLO(dataFloat) +{ + if (!ISINDEX()) + return false; + Ret.Float=(FLOAT)atof(szIndex); + Ret.Type=pFloatType; + return true; +} +#endif + +TLO(dataHeading) +{ +#ifndef ISXEQ + if (!ISINDEX()) + return false; + if (PCHAR pComma=strchr(szIndex,',')) + { + *pComma=0; + FLOAT Y=(FLOAT)atof(szIndex); + *pComma=','; + FLOAT X=(FLOAT)atof(&pComma[1]); + Ret.Float=(FLOAT)(atan2f(((PSPAWNINFO)pCharSpawn)->Y - Y, X - ((PSPAWNINFO)pCharSpawn)->X) * 180.0f / PI + 90.0f); + if (Ret.Float<0.0f) + Ret.Float += 360.0f; + else if (Ret.Float>=360.0f) + Ret.Float -= 360.0f; + Ret.Type=pHeadingType; + return true; + } + + Ret.Float=(FLOAT)atof(szIndex); + Ret.Type=pHeadingType; + return true; +#else + if (!argc) + return false; + if (argc==2) + { + FLOAT Y=(FLOAT)atof(argv[0]); + FLOAT X=(FLOAT)atof(argv[1]); + Ret.Float=(FLOAT)(atan2f(((PSPAWNINFO)pCharSpawn)->Y - Y, X - ((PSPAWNINFO)pCharSpawn)->X) * 180.0f / PI + 90.0f); + if (Ret.Float<0.0f) + Ret.Float += 360.0f; + else if (Ret.Float>=360.0f) + Ret.Float -= 360.0f; + Ret.Type=pHeadingType; + return true; + } + + Ret.Float=(FLOAT)atof(argv[0]); + Ret.Type=pHeadingType; + return true; +#endif +} + + +#ifndef ISXEQ +TLO(dataBool) +{ + if (!ISINDEX()) + return false; + Ret.DWord=(stricmp(szIndex,"NULL") && + stricmp(szIndex,"FALSE") && + strcmp(szIndex,"0")); + Ret.Type=pBoolType; + return true; +} +#endif +/* +TLO(dataGroupLeader) +{ + if (!GroupLeader[0] || !stricmp(GroupLeader,GetCharInfo()->pSpawn->Name)) + { + Ret.Ptr=GetCharInfo()->pSpawn; + Ret.Type=pSpawnType; + return true; + } + for (unsigned long N = 0 ; N < 5 ; N++) + { + if (EQADDR_GROUPCOUNT[N]) + { + if (PSPAWNINFO pSpawn=(PSPAWNINFO)ppGroup[N]) + { + if (!stricmp(pSpawn->Name,GroupLeader)) + { + Ret.Ptr=pSpawn; + Ret.Type=pSpawnType; + return true; + } + } + } + } + return false; +} +/**/ +/* +TLO(dataGroupLeaderName) +{ + if (!GroupLeader[0]) + { + Ret.Ptr=GetCharInfo()->pSpawn->Name; + Ret.Type=pStringType; + return true; + } + Ret.Ptr=&GroupLeader[0]; + Ret.Type=pStringType; + return true; +} +/**/ + +TLO(dataGroup) +{ + Ret.DWord=1; + Ret.Type=pGroupType; + return true; +/* + if (ISINDEX()) + { + DWORD N=GETNUMBER(); + if (N==0) + { +#ifndef ISXEQ + return dataCharacter("",Ret); +#else + return dataCharacter(0,0,Ret); +#endif + } + if (N>5) + return false; + for (unsigned long i=0; i<5 ; i++) + { + if (EQADDR_GROUPCOUNT[i]) + { + N--; + if (N==0) + { + Ret.Ptr=ppGroup[i]; + Ret.Type=pSpawnType; + return true; + } + } + } + return false; + } + else + { + Ret.DWord=0; + for (int index=0;index<5;index++) + if (EQADDR_GROUPCOUNT[index]) + Ret.DWord++; + Ret.Type=pIntType; + return true; + } + return false; + /**/ +} +#ifndef ISXEQ +TLO(dataIf) +{ + if (ISINDEX()) + { + // condition, whentrue, whenfalse + if (PCHAR pTrue=strchr(szIndex,',')) + { + *pTrue=0; + pTrue++; + if (PCHAR pFalse=strchr(pTrue,',')) + { + *pFalse=0; + pFalse++; + DOUBLE CalcResult; + if (!Calculate(szIndex,CalcResult)) + return false; + + if (CalcResult!=0.0f) + { + strcpy(DataTypeTemp,pTrue); + Ret.Ptr=&DataTypeTemp[0]; + Ret.Type=pStringType; + return true; + } + else + { + strcpy(DataTypeTemp,pFalse); + Ret.Ptr=&DataTypeTemp[0]; + Ret.Type=pStringType; + return true; + } + } + } + } + return false; +} +#endif +TLO(dataCursor) +{ + if (Ret.Ptr=GetCharInfo2()->pInventoryArray->Inventory.Cursor) + { + Ret.Type=pItemType; + return true; + } + return false; +} + +TLO(dataLastSpawn) +{ + if (ISINDEX()) + { + if (GETFIRST()[0]=='-') + { + unsigned long N=atoi(&GETFIRST()[1])-1; + if (PSPAWNINFO pSpawn=(PSPAWNINFO)pLocalPlayer) + { + while(N) + { + pSpawn=pSpawn->pPrev; + if (!pSpawn) + return false; + N--; + } + Ret.Ptr=pSpawn; + Ret.Type=pSpawnType; + return true; + } + } + else if (ISNUMBER()) + { + unsigned long N=GETNUMBER()-1; + if (PSPAWNINFO pSpawn=(PSPAWNINFO)pSpawnList) + { + while(N) + { + pSpawn=pSpawn->pNext; + if (!pSpawn) + return false; + N--; + } + Ret.Ptr=pSpawn; + Ret.Type=pSpawnType; + return true; + } + } + } + else + { + Ret.Ptr=pSpawnList; + Ret.Type=pSpawnType; + return true; + } + return false; +} + +TLO(dataNearestSpawn) +{ + if (ISINDEX()) + { + unsigned long nth; + SEARCHSPAWN ssSpawn; + ClearSearchSpawn(&ssSpawn); + ssSpawn.FRadius=999999.0f; +#ifndef ISXEQ + PCHAR pSearch; + if (pSearch=strchr(szIndex,',')) + { + *pSearch=0; + ++pSearch; + ParseSearchSpawn(pSearch,&ssSpawn); + nth=GETNUMBER(); + } + else + { + if (IsNumberToComma(szIndex)) + { + nth=GETNUMBER(); + } + else + { + nth=1; + ParseSearchSpawn(szIndex,&ssSpawn); + } + } +#else + if (!ISNUMBER()) { + nth=1; + ParseSearchSpawn(0,argc,argv,ssSpawn); + } else { + nth=GETNUMBER(); + ParseSearchSpawn(1,argc,argv,ssSpawn); + } +#endif + for (unsigned long N = 0 ; N < gSpawnCount ; N++) + { + if (EQP_DistArray[N].Value.Float>ssSpawn.FRadius && !ssSpawn.bKnownLocation) + return false; + if (SpawnMatchesSearch(&ssSpawn,(PSPAWNINFO)pCharSpawn,(PSPAWNINFO)EQP_DistArray[N].VarPtr.Ptr)) + { + if (--nth==0) + { + Ret.Ptr=EQP_DistArray[N].VarPtr.Ptr; + Ret.Type=pSpawnType; + return true; + } + } + } + } + // No spawn + return false; +} + +TLO(dataSpawnCount) +{ + if (ISINDEX()) + { + SEARCHSPAWN ssSpawn; + ClearSearchSpawn(&ssSpawn); +#ifndef ISXEQ + ParseSearchSpawn(szIndex,&ssSpawn); +#else + ParseSearchSpawn(0,argc,argv,ssSpawn); +#endif + Ret.DWord=CountMatchingSpawns(&ssSpawn,GetCharInfo()->pSpawn,TRUE); + Ret.Type=pIntType; + return true; + } + else + { + Ret.DWord=gSpawnCount; + Ret.Type=pIntType; + return true; + } +} + +TLO(dataTime) +{ + time_t CurTime; + time(&CurTime); + Ret.Ptr= localtime( &CurTime ); + Ret.Type=pTimeType; + return true; +} +TLO(dataGameTime) +{ + struct tm* pTime=(struct tm*)&DataTypeTemp[0]; + ZeroMemory(pTime,sizeof(struct tm)); + pTime->tm_mday=((PWORLDDATA)pWorldData)->Day; + pTime->tm_hour=((PWORLDDATA)pWorldData)->Hour-1; + pTime->tm_min=((PWORLDDATA)pWorldData)->Minute; + pTime->tm_mon=((PWORLDDATA)pWorldData)->Month; + pTime->tm_year=((PWORLDDATA)pWorldData)->Year-1900; + Ret.Ptr=pTime; + Ret.Type=pTimeType; + return true; +} + +TLO(dataIni) +{ +#ifndef ISXEQ /* CONVERT */ + PCHAR pIniFile=0; + PCHAR pSection=0; + PCHAR pKey=0; + PCHAR pDefault=""; + if (pIniFile=strtok(szIndex,",")) + { + if (pSection=strtok(NULL,",")) + { + if (!strcmp(pSection,"-1")) + pSection=0; + if (pKey=strtok(NULL,",")) + { + if (!strcmp(pKey,"-1")) + pKey=0; + pDefault=strtok(NULL,"\xA6"); + if (!pDefault) + pDefault=""; + } + } + } + else + return false; + CHAR FileName[MAX_STRING]={0}; + + PCHAR pTemp=pIniFile; + while(pTemp[0]) + { + if (pTemp[0]=='/') + pTemp[0]='\\'; + pTemp++; + } + + if (pIniFile[0]!='\\' && !strchr(pIniFile,':')) + sprintf(FileName,"%s\\%s",gszMacroPath,pIniFile); + else + strcpy(FileName,pIniFile); + + if (!strchr(pIniFile,'.')) + strcat(FileName,".ini"); + + if (!_FileExists(FileName)) + { + if (pDefault[0]) + { + strcpy(DataTypeTemp,pDefault); + Ret.Ptr=&DataTypeTemp[0]; + Ret.Type=pStringType; + return true; + } + return false; + } + + if (DWORD nSize=GetPrivateProfileString(pSection,pKey,pDefault,DataTypeTemp,MAX_STRING,FileName)) + { + if (nSize>2) + for (unsigned long N = 0 ; N < nSize-2 ; N++) + if (DataTypeTemp[N]==0) + DataTypeTemp[N]='|'; + if ((!pSection || !pKey) && (nSizepSelectedItem && ((PEQINVSLOTMGR)pInvSlotMgr)->pSelectedItem->InvSlot) + { + class CInvSlot *pCIS = NULL; + struct _CONTENTS *pC = NULL; + + pCIS = (class CInvSlot *) ((PEQINVSLOTMGR)pInvSlotMgr)->pSelectedItem; + pCIS->GetItemBase(&pC); + + if (pC) { + Ret.Ptr = pC; + Ret.Type=pItemType; + return true; + } + } + return false; +} + +TLO(dataFindItemBank) +{ + if (!ISINDEX()) + return false; + DWORD N=1; + PCHAR pName=GETFIRST(); + BOOL bExact=false; + + if (*pName=='=') + { + bExact=true; + pName++; + } + CHAR Name[MAX_STRING]={0}; + CHAR Temp[MAX_STRING]={0}; + strlwr(strcpy(Name,pName)); + PCHARINFO pCharInfo=GetCharInfo(); + unsigned long nPack; + + + for (nPack=0 ; nPack < NUM_BANK_SLOTS ; nPack++) + { + PCHARINFO pCharInfo=GetCharInfo(); + PCONTENTS pPack; + + if (pCharInfo->pBankArray && (pPack=pCharInfo->pBankArray->Bank[nPack])) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pPack)->Name)) + { + Ret.Ptr=pPack; + Ret.Type=pItemType; + return true; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pPack)->Name)),Name)) + { + Ret.Ptr=pPack; + Ret.Type=pItemType; + return true; + } + } + if (GetItemFromContents(pPack)->Type==ITEMTYPE_PACK && pPack->pContentsArray) + { + for (unsigned long nItem=0 ; nItem < GetItemFromContents(pPack)->Slots ; nItem++) + { + PCONTENTS pItem; + if (pPack->pContentsArray && (pItem=pPack->pContentsArray->Contents[nItem])) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pItem)->Name)) + { + Ret.Ptr=pItem; + Ret.Type=pItemType; + return true; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pItem)->Name)),Name)) + { + Ret.Ptr=pItem; + Ret.Type=pItemType; + return true; + } + } + } + } + } + } + } + for (nPack=0 ; nPack < NUM_SHAREDBANK_SLOTS ; nPack++) + { + PCHARINFO pCharInfo=GetCharInfo(); + PCONTENTS pPack; + if (pCharInfo->pSharedBankArray && (pPack=pCharInfo->pSharedBankArray->SharedBank[nPack])) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pPack)->Name)) + { + Ret.Ptr=pPack; + Ret.Type=pItemType; + return true; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pPack)->Name)),Name)) + { + Ret.Ptr=pPack; + Ret.Type=pItemType; + return true; + } + } + if (GetItemFromContents(pPack)->Type==ITEMTYPE_PACK && pPack->pContentsArray) + { + for (unsigned long nItem=0 ; nItem < GetItemFromContents(pPack)->Slots ; nItem++) + { + PCONTENTS pItem; + if (pPack->pContentsArray && (pItem=pPack->pContentsArray->Contents[nItem])) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pItem)->Name)) + { + Ret.Ptr=pItem; + Ret.Type=pItemType; + return true; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pItem)->Name)),Name)) + { + Ret.Ptr=pItem; + Ret.Type=pItemType; + return true; + } + } + } + } + } + } + } + + + return false; +} + +TLO(dataFindItem) +{ + if (!ISINDEX()) + return false; + DWORD N=1; + PCHAR pName=GETFIRST(); + BOOL bExact=false; + + if (*pName=='=') + { + bExact=true; + pName++; + } + CHAR Name[MAX_STRING]={0}; + CHAR Temp[MAX_STRING]={0}; + strlwr(strcpy(Name,pName)); + PCHARINFO pCharInfo=GetCharInfo(); + + for (unsigned long nSlot=0 ; nSlot < NUM_INV_SLOTS ; nSlot++) + { + if (PCONTENTS pItem=GetCharInfo2()->pInventoryArray->InventoryArray[nSlot]) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pItem)->Name)) + { + Ret.Ptr=pItem; + Ret.Type=pItemType; + return true; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pItem)->Name)),Name)) + { + Ret.Ptr=pItem; + Ret.Type=pItemType; + return true; + } + } + } + } + + for (unsigned long nPack=0 ; nPack < 10 ; nPack++) + { + if (PCONTENTS pPack=GetCharInfo2()->pInventoryArray->Inventory.Pack[nPack]) + { + if (GetItemFromContents(pPack)->Type==ITEMTYPE_PACK && pPack->pContentsArray) + { + for (unsigned long nItem=0 ; nItem < GetItemFromContents(pPack)->Slots ; nItem++) + { + if (PCONTENTS pItem=pPack->pContentsArray->Contents[nItem]) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pItem)->Name)) + { + Ret.Ptr=pItem; + Ret.Type=pItemType; + return true; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pItem)->Name)),Name)) + { + Ret.Ptr=pItem; + Ret.Type=pItemType; + return true; + } + } + } + } + } + } + } + + return false; +} + +TLO(dataFindItemCount) +{ + if (!ISINDEX()) + return false; + DWORD N=1; + PCHAR pName=GETFIRST(); + BOOL bExact=false; + + if (*pName=='=') + { + bExact=true; + pName++; + } + CHAR Name[MAX_STRING]={0}; + CHAR Temp[MAX_STRING]={0}; + strlwr(strcpy(Name,pName)); + PCHARINFO pCharInfo=GetCharInfo(); + + unsigned long Count=0; + DWORD nAug = 0; + + for (unsigned long nSlot=0 ; nSlot < NUM_INV_SLOTS ; nSlot++) + { + if (PCONTENTS pItem=GetCharInfo2()->pInventoryArray->InventoryArray[nSlot]) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pItem)->Name)) + { + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pItem)->IsStackable() != 1)) + Count++; + else + Count+=pItem->StackCount; + } + else // for augs + { + if (pItem->pContentsArray && pItem->NumOfSlots2) + for(nAug = 0; nAug < pItem->NumOfSlots2; nAug++) + { + if(pItem->pContentsArray->Contents[nAug] && GetItemFromContents(pItem->pContentsArray->Contents[nAug])->Type == ITEMTYPE_NORMAL && GetItemFromContents(pItem->pContentsArray->Contents[nAug])->AugType && + !stricmp(Name, GetItemFromContents(pItem->pContentsArray->Contents[nAug])->Name)) + Count++; + } + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pItem)->Name)),Name)) + { + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pItem)->IsStackable() != 1)) + Count++; + else + Count+=pItem->StackCount; + } + else // for augs + { + if (pItem->pContentsArray && pItem->NumOfSlots2 ) + for(nAug = 0; nAug < pItem->NumOfSlots2; nAug++) + { + if(pItem->pContentsArray->Contents[nAug] && GetItemFromContents(pItem->pContentsArray->Contents[nAug])->Type == ITEMTYPE_NORMAL && GetItemFromContents(pItem->pContentsArray->Contents[nAug])->AugType && + strstr(strlwr(strcpy(Temp, GetItemFromContents(pItem->pContentsArray->Contents[nAug])->Name)), Name)) + Count++; + } + } + } + } + } + + for (unsigned long nPack=0 ; nPack < 10 ; nPack++) + { + if (PCONTENTS pPack=GetCharInfo2()->pInventoryArray->Inventory.Pack[nPack]) + { + if (GetItemFromContents(pPack)->Type==ITEMTYPE_PACK && pPack->pContentsArray) + { + for (unsigned long nItem=0 ; nItem < GetItemFromContents(pPack)->Slots ; nItem++) + { + if (PCONTENTS pItem=pPack->pContentsArray->Contents[nItem]) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pItem)->Name)) + { + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pItem)->IsStackable() != 1)) + Count++; + else + Count+=pItem->StackCount; + } + else // for augs + { + if (pItem->pContentsArray && pItem->NumOfSlots2) + for(nAug = 0; nAug < pItem->NumOfSlots2; nAug++) + { + if(pItem->pContentsArray->Contents[nAug] && GetItemFromContents(pItem->pContentsArray->Contents[nAug])->Type == ITEMTYPE_NORMAL && GetItemFromContents(pItem->pContentsArray->Contents[nAug])->AugType && + !stricmp(Name, GetItemFromContents(pItem->pContentsArray->Contents[nAug])->Name)) + Count++; + } + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pItem)->Name)),Name)) + { + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pItem)->IsStackable() != 1)) + Count++; + else + Count+=pItem->StackCount; + } + else // for augs + { + if (pItem->pContentsArray && pItem->NumOfSlots2) + for(nAug = 0; nAug < pItem->NumOfSlots2; nAug++) + { + if(pItem->pContentsArray->Contents[nAug] && GetItemFromContents(pItem->pContentsArray->Contents[nAug])->Type == ITEMTYPE_NORMAL && GetItemFromContents(pItem->pContentsArray->Contents[nAug])->AugType && + strstr(strlwr(strcpy(Temp, GetItemFromContents(pItem->pContentsArray->Contents[nAug])->Name)), Name)) + Count++; + } + } + } + } + } + } + } + } + + Ret.DWord=Count; + Ret.Type=pIntType; + + return true; +} + +TLO(dataFindItemBankCount) +{ + if (!ISINDEX()) + return false; + DWORD N=1; + PCHAR pName=GETFIRST(); + BOOL bExact=false; + + if (*pName=='=') + { + bExact=true; + pName++; + } + CHAR Name[MAX_STRING]={0}; + CHAR Temp[MAX_STRING]={0}; + strlwr(strcpy(Name,pName)); + PCHARINFO pCharInfo=GetCharInfo(); + + unsigned long Count=0; + unsigned long nPack=0; + + for (nPack=0 ; nPack < NUM_BANK_SLOTS ; nPack++) + { + PCHARINFO pCharInfo=GetCharInfo(); + if (PCONTENTS pPack=pCharInfo->pBankArray->Bank[nPack]) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pPack)->Name)) + { + if ((GetItemFromContents(pPack)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pPack)->IsStackable() != 1)) + Count++; + else + Count+=pPack->StackCount; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pPack)->Name)),Name)) + { + if ((GetItemFromContents(pPack)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pPack)->IsStackable() != 1)) + Count++; + else + Count+=pPack->StackCount; + } + } + if (GetItemFromContents(pPack)->Type==ITEMTYPE_PACK && pPack->pContentsArray) + { + for (unsigned long nItem=0 ; nItem < GetItemFromContents(pPack)->Slots ; nItem++) + { + if (PCONTENTS pItem=pPack->pContentsArray->Contents[nItem]) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pItem)->Name)) + { + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pItem)->IsStackable() != 1)) + Count++; + else + Count+=pItem->StackCount; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pItem)->Name)),Name)) + { + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pItem)->IsStackable() != 1)) + Count++; + else + Count+=pItem->StackCount; + } + } + } + } + } + } + } + for (nPack=0 ; nPack < NUM_SHAREDBANK_SLOTS ; nPack++) + { + PCHARINFO pCharInfo=GetCharInfo(); + if (PCONTENTS pPack=pCharInfo->pSharedBankArray->SharedBank[nPack]) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pPack)->Name)) + { + if ((GetItemFromContents(pPack)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pPack)->IsStackable() != 1)) + Count++; + else + Count+=pPack->StackCount; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pPack)->Name)),Name)) + { + if ((GetItemFromContents(pPack)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pPack)->IsStackable() != 1)) + Count++; + else + Count+=pPack->StackCount; + } + } + if (GetItemFromContents(pPack)->Type==ITEMTYPE_PACK && pPack->pContentsArray) + { + for (unsigned long nItem=0 ; nItem < GetItemFromContents(pPack)->Slots ; nItem++) + { + if (PCONTENTS pItem=pPack->pContentsArray->Contents[nItem]) + { + if (bExact) + { + if (!stricmp(Name,GetItemFromContents(pItem)->Name)) + { + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pItem)->IsStackable() != 1)) + Count++; + else + Count+=pItem->StackCount; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pItem)->Name)),Name)) + { + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || + (((EQ_Item*)pItem)->IsStackable() != 1)) + Count++; + else + Count+=pItem->StackCount; + } + } + } + } + } + } + } + + Ret.DWord=Count; + Ret.Type=pIntType; + + return true; +} + + +TLO(dataInvSlot) +{ + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + Ret.DWord=GETNUMBER(); + Ret.Type=pInvSlotType; + return true; + } + else + { + CHAR Temp[MAX_STRING]={0}; + strlwr(strcpy(Temp,GETFIRST())); + Ret.DWord=ItemSlotMap[Temp]; + if (Ret.DWord || !stricmp(Temp,"charm")) + { + Ret.Type=pInvSlotType; + return true; + } + } + return false; +} + +#ifndef ISXEQ +TLO(dataPlugin) +{ + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + unsigned long N = GETNUMBER()-1; + PMQPLUGIN pPlugin=pPlugins; + while(N) + { + pPlugin=pPlugin->pNext; + if (!pPlugin) + return false; + N--; + } + Ret.Ptr=pPlugin; + Ret.Type=pPluginType; + return true; + } + else + { + // name + PMQPLUGIN pPlugin=pPlugins; + while(pPlugin) + { + if (!stricmp(pPlugin->szFilename,szIndex)) + { + Ret.Ptr=pPlugin; + Ret.Type=pPluginType; + return true; + } + pPlugin=pPlugin->pNext; + } + } + return false; +} +#endif + +TLO(dataSkill) +{ + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + unsigned long nSkill=GETNUMBER()-1; + if (nSkill>=NUM_SKILLS) + return false; + if (Ret.Ptr=&pSkillMgr->pSkill[nSkill]) + { + Ret.Type=pSkillType; + return true; + } + } + else + { + for (unsigned long nSkill=0 ; nSkillpSkill[nSkill]) + { + if (PCHAR pName=pStringTable->getString(pSkill->nName,0)) + { + if (!stricmp(GETFIRST(),pName)) + { + Ret.Ptr=&pSkillMgr->pSkill[nSkill]; + Ret.Type=pSkillType; + return true; + } + } + } + } + } + + return false; +} + +TLO(dataAltAbility) +{ + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(nAbility)) + { + if (pAbility->ID == GETNUMBER() ) + { + Ret.Ptr=pAbility; + Ret.Type=pAltAbilityType; + return true; + } + } + } + } + else + { + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(nAbility)) + { + if (PCHAR pName=pCDBStr->GetString(pAbility->nName, 1, NULL)) + { + if (!stricmp(GETFIRST(),pName)) + { + Ret.Ptr=pAbility; + Ret.Type=pAltAbilityType; + return true; + } + } + } + } + } + + return false; +} + +TLO(dataRaid) +{ + Ret.DWord=0; + Ret.Type=pRaidType; + return true; +} + +TLO(dataNamingSpawn) +{ + if (Ret.Ptr=pNamingSpawn) + { + Ret.Type=pSpawnType; + return true; + } + return false; +} + +TLO(dataLineOfSight) +{ +#ifndef ISXEQ /* CONVERT */ + if (!GetCharInfo()->pSpawn) + return FALSE; + if (ISINDEX()) + { + FLOAT P1[3]; + FLOAT P2[3]; + P1[0]=P2[0]=((PSPAWNINFO)pCharSpawn)->Y; + P1[1]=P2[1]=((PSPAWNINFO)pCharSpawn)->X; + P1[2]=P2[2]=((PSPAWNINFO)pCharSpawn)->Z; + if (PCHAR pColon=strchr(szIndex,':')) + { + *pColon=0; + if (PCHAR pComma=strchr(&pColon[1],',')) + { + *pComma=0; + P2[0]=(FLOAT)atof(&pColon[1]); + *pComma=','; + if (PCHAR pComma2=strchr(&pComma[1],',')) + { + *pComma2=0; + P2[1]=(FLOAT)atof(&pComma[1]); + *pComma2=','; + P2[2]=(FLOAT)atof(&pComma2[1]); + } + else + { + P2[1]=(FLOAT)atof(&pComma[1]); + } + } + else + P2[0]=(FLOAT)atof(&pColon[1]); + } + + + if (PCHAR pComma=strchr(szIndex,',')) + { + *pComma=0; + P1[0]=(FLOAT)atof(szIndex); + *pComma=','; + if (PCHAR pComma2=strchr(&pComma[1],',')) + { + *pComma2=0; + P1[1]=(FLOAT)atof(&pComma[1]); + *pComma2=','; + P1[2]=(FLOAT)atof(&pComma2[1]); + } + else + { + P1[1]=(FLOAT)atof(&pComma[1]); + } + } + else + P1[0]=(FLOAT)atof(szIndex); + + + //DebugSpew("GetDistance3D(%1.0f,%1.0f,%1.0f,%1.0f,%1.0f,%1.0f)",P1[0],P1[1],P1[2],P2[0],P2[1],P2[2]); + SPAWNINFO Temp=*GetCharInfo()->pSpawn; + Temp.Y=P2[0]; + Temp.X=P2[1]; + Temp.Z=P2[2]; + Ret.DWord=CastRay(&Temp,P1[0],P1[1],P1[2]); + Ret.Type=pBoolType; + return true; + } +#endif + return false; +} + +TLO(dataDoorTarget) +{ + if (Ret.Ptr=&DoorEnviroTarget) + { + Ret.Type=pSpawnType; + return true; + } + return false; +} + +TLO(dataItemTarget) +{ + if (Ret.Ptr=&EnviroTarget) + { + Ret.Type=pSpawnType; + return true; + } + return false; +} + +TLO(dataDynamicZone) +{ + Ret.DWord=0; + Ret.Type=pDynamicZoneType; + return true; +} + +TLO(dataFriends) +{ + Ret.DWord=0; + Ret.Type=pFriendsType; + return true; +} + diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2DataAPI.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2DataAPI.cpp new file mode 100644 index 0000000000..0c42f940a7 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2DataAPI.cpp @@ -0,0 +1,580 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ +#ifndef ISXEQ + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#define DBG_SPEW + + +#include "MQ2Main.h" + + + +map MQ2DataTypeMap; +CIndex MQ2DataTypes; + +/*inline/**/ MQ2Type *FindMQ2DataType(PCHAR Name) +{ + unsigned long N=MQ2DataTypeMap[Name]; + if (!N) + return 0; + N--; + return MQ2DataTypes[N]; +} + +namespace MQ2Internal +{ + BOOL AddMQ2Type(MQ2Type &Type) + { + if (FindMQ2DataType(Type.GetName())) + return false; + unsigned long N=MQ2DataTypes.GetUnused(); + MQ2DataTypes[N]=&Type; + MQ2DataTypeMap[Type.GetName()]=N+1; + return true; + } + + BOOL RemoveMQ2Type(MQ2Type &Type) + { + unsigned long N=MQ2DataTypeMap[Type.GetName()]; + if (!N) + return 0; + N--; + if (MQ2Type *pType=MQ2DataTypes[N]) + { + MQ2DataTypes[N]=0; + return false; + } + MQ2DataTypeMap[Type.GetName()]=0; + return true; + } +}; + +map MQ2DataMap; +CIndex MQ2DataItems; + +inline PMQ2DATAITEM FindMQ2Data(PCHAR szName) +{ + unsigned long N=MQ2DataMap[szName]; + if (!N) + return 0; + N--; + return MQ2DataItems[N]; +} + +BOOL AddMQ2Data(PCHAR szName, fMQData Function) +{ + if (FindMQ2Data(szName)) + return false; + unsigned long N=MQ2DataItems.GetUnused(); + PMQ2DATAITEM pNew=new MQ2DATAITEM; + strcpy(pNew->Name,szName); + pNew->Function=Function; + MQ2DataItems[N]=pNew; + MQ2DataMap[szName]=N+1; + return true; +} + +BOOL RemoveMQ2Data(PCHAR szName) +{ + unsigned long N=MQ2DataMap[szName]; + if (!N) + return 0; + N--; + if (PMQ2DATAITEM pItem=MQ2DataItems[N]) + { + MQ2DataItems[N]=0; + delete pItem; + } + MQ2DataMap[szName]=0; + return true; +} + +BOOL dataType(PCHAR szIndex, MQ2TYPEVAR &Ret) +{ + if (MQ2Type* pType=FindMQ2DataType(szIndex)) + { + Ret.Ptr=pType; + Ret.Type=pTypeType; + return true; + } + return false; +} + +void InitializeMQ2Data() +{ + AddMQ2Data("Spawn",dataSpawn); + AddMQ2Data("Target",dataTarget); + AddMQ2Data("Me",dataCharacter); + AddMQ2Data("Spell",dataSpell); + AddMQ2Data("Switch",dataSwitch); + AddMQ2Data("Ground",dataGroundItem); + AddMQ2Data("Merchant",dataMerchant); + AddMQ2Data("Window",dataWindow); + AddMQ2Data("Macro",dataMacro); + AddMQ2Data("MacroQuest",dataMacroQuest); + AddMQ2Data("Math",dataMath); + AddMQ2Data("Zone",dataZone); + AddMQ2Data("Group",dataGroup); + AddMQ2Data("String",dataString); + AddMQ2Data("Int",dataInt); + AddMQ2Data("Bool",dataBool); + AddMQ2Data("Float",dataFloat); + AddMQ2Data("Corpse",dataCorpse); + AddMQ2Data("If",dataIf); + AddMQ2Data("Cursor",dataCursor); + AddMQ2Data("NearestSpawn",dataNearestSpawn); + AddMQ2Data("Type",dataType); + AddMQ2Data("Time",dataTime); + AddMQ2Data("GameTime",dataGameTime); + AddMQ2Data("Ini",dataIni); + AddMQ2Data("Heading",dataHeading); + AddMQ2Data("Defined",dataDefined); + AddMQ2Data("LastSpawn",dataLastSpawn); + AddMQ2Data("FindItem",dataFindItem); + AddMQ2Data("FindItemBank",dataFindItemBank); + AddMQ2Data("InvSlot",dataInvSlot); + AddMQ2Data("SelectedItem",dataSelectedItem); + AddMQ2Data("FindItemCount",dataFindItemCount); + AddMQ2Data("FindItemBankCount",dataFindItemBankCount); + //AddMQ2Data("GroupLeader",dataGroupLeader); + //AddMQ2Data("GroupLeaderName",dataGroupLeaderName); + AddMQ2Data("Skill",dataSkill); + AddMQ2Data("AltAbility",dataAltAbility); + AddMQ2Data("Raid",dataRaid); + AddMQ2Data("NamingSpawn",dataNamingSpawn); + AddMQ2Data("SpawnCount",dataSpawnCount); + AddMQ2Data("LineOfSight",dataLineOfSight); + AddMQ2Data("Plugin",dataPlugin); + AddMQ2Data("Select",dataSelect); + AddMQ2Data("DoorTarget",dataDoorTarget); + AddMQ2Data("ItemTarget",dataItemTarget); + AddMQ2Data("DynamicZone",dataDynamicZone); + AddMQ2Data("Friends",dataFriends); +} + + + +void ShutdownMQ2Data() +{ + MQ2DataItems.Cleanup(); +} + +BOOL ParseMQ2DataPortion(PCHAR szOriginal, MQ2TYPEVAR &Result) +{ + Result.Type=0; + Result.DWord=0; + // Find [] before a . or null + PCHAR pPos=&szOriginal[0]; + PCHAR pStart=pPos; + CHAR Index[MAX_STRING]={0}; + PCHAR pIndex=&Index[0]; + BOOL Quote=FALSE; + while(1) + { + if (*pPos==0) + { + // end completely. process + if (pStart==pPos) + { + if (!Result.Type) + { + MQ2DataError("Nothing to parse"); + return FALSE; + } + //Result.Type->ToString(Result.VarPtr,szCurrent); + return TRUE; + } + else + { + if (!Result.Type) + { + if (PMQ2DATAITEM DataItem=FindMQ2Data(pStart)) + { + if (!DataItem->Function(pIndex,Result)) + { + return FALSE; + } + } + else if (PDATAVAR DataVar=FindMQ2DataVariable(pStart)) + { + if (pIndex[0]) + { + if (DataVar->Var.Type==pArrayType) + { + if (!((CDataArray*)DataVar->Var.Ptr)->GetElement(pIndex,Result)) + { + return FALSE; + } + } + } + else + Result=DataVar->Var; + } + else + { + //MQ2DataError("No such Top-Level Object '%s'",pStart); + return FALSE; + } + } + else + { + if (!Result.Type->GetMember(Result.VarPtr,pStart,pIndex,Result)) + { + if (!Result.Type->FindMember(pStart) && !Result.Type->InheritedMember(pStart)) + { + MQ2DataError("No such '%s' member '%s'",Result.Type->GetName(),pStart); + } + return FALSE; + } + } + } + //Result.Type->ToString(Result.VarPtr,szCurrent); + + // done processing + return TRUE; + } + if (*pPos=='(') + { + *pPos=0; + if (pStart==pPos) + { + if (!Result.Type) + { + MQ2DataError("Encountered typecast without object to cast"); + return FALSE; + } + //Result.Type->ToString(Result.VarPtr,szCurrent); + return TRUE; + } + else + { + if (!Result.Type) + { + if (PMQ2DATAITEM DataItem=FindMQ2Data(pStart)) + { + if (!DataItem->Function(pIndex,Result)) + { + return FALSE; + } + } + else if (PDATAVAR DataVar=FindMQ2DataVariable(pStart)) + { + if (pIndex[0]) + { + if (DataVar->Var.Type==pArrayType) + { + if (!((CDataArray*)DataVar->Var.Ptr)->GetElement(pIndex,Result)) + { + return FALSE; + } + } + } + else + Result=DataVar->Var; + } + else + { + //MQ2DataError("No such Top-Level Object '%s'",pStart); + return FALSE; + } + + } + else + { + if (!Result.Type->GetMember(Result.VarPtr,pStart,pIndex,Result)) + { + if (!Result.Type->FindMember(pStart) && !Result.Type->InheritedMember(pStart)) + { + MQ2DataError("No such '%s' member '%s'",Result.Type->GetName(),pStart); + } + return FALSE; + } + } + } + if (!Result.Type) + { + // error + return FALSE; + } + *pPos=0; + ++pPos; + PCHAR pType=pPos; + while(*pPos!=')') + { + if (!*pPos) + { + // error + MQ2DataError("Encountered unmatched parenthesis"); + return FALSE; + } + ++pPos; + } + *pPos=0; + MQ2Type *pNewType=FindMQ2DataType(pType); + if (!pNewType) + { + // error + MQ2DataError("Unknown type '%s'",pType); + return FALSE; + } + if (pNewType==pTypeType) + { + Result.Ptr=Result.Type; + Result.Type=pTypeType; + } + else + Result.Type=pNewType; + + if (pPos[1]=='.') + { + ++pPos; + pStart=&pPos[1]; + } + else if (!pPos[1]) + { + //Result.Type->ToString(Result.VarPtr,szCurrent); + return TRUE; + } + else + { + MQ2DataError("Invalid character found after typecast ')%s'",&pPos[1]); + return FALSE; + } + } + else + if (*pPos=='[') + { + // index + *pPos=0; + ++pPos; + + Quote=false; + BOOL BeginParam=true; + while(1) + { + if (*pPos==0) + { + MQ2DataError("Unmatched bracket or invalid character following bracket found in index: '%s'",pIndex); + return FALSE; + } + + if (BeginParam) + { + BeginParam=false; + if (*pPos=='\"') + { + Quote=true; + ++pPos; + continue; + } + } + if (Quote) + { + if (*pPos=='\"') + { + if (pPos[1]==']' || pPos[1]==',') + { + Quote=false; + ++pPos; + continue; + } + } + } + else + { + if (*pPos==']') + { + if (pPos[1]=='.' || pPos[1]=='(' || pPos[1]==0) + break;// valid end + } + else if (*pPos==',') + BeginParam=true; + } + *pIndex=*pPos; + ++pIndex; + ++pPos; + } + + *pIndex=0; + pIndex=&Index[0]; + *pPos=0; + } + else + if (*pPos=='.') + { + // end of this one, but more to come! + *pPos=0; + if (pStart==pPos) + { + if (!Result.Type) + { + MQ2DataError("Encountered member access without object"); + return FALSE; + } + //Result.Type->ToString(Result.VarPtr,szCurrent); + return TRUE; + } + else + { + if (!Result.Type) + { + if (PMQ2DATAITEM DataItem=FindMQ2Data(pStart)) + { + if (!DataItem->Function(pIndex,Result)) + { + return FALSE; + } + } + else if (PDATAVAR DataVar=FindMQ2DataVariable(pStart)) + { + if (pIndex[0]) + { + if (DataVar->Var.Type==pArrayType) + { + if (!((CDataArray*)DataVar->Var.Ptr)->GetElement(pIndex,Result)) + { + return FALSE; + } + } + } + else + Result=DataVar->Var; + } + else + { + //MQ2DataError("No such Top-Level Object '%s'",pStart); + return FALSE; + } + + } + else + { + if (!Result.Type->GetMember(Result.VarPtr,pStart,pIndex,Result)) + { + if (!Result.Type->FindMember(pStart) && !Result.Type->InheritedMember(pStart)) + { + MQ2DataError("No such '%s' member '%s'",Result.Type->GetName(),pStart); + } + return FALSE; + } + } + } + pStart=&pPos[1]; + Index[0]=0; + } + ++pPos; + } + +} + +BOOL ParseMacroData(PCHAR szOriginal) +{ + // find each {} + PCHAR pBrace=strstr(szOriginal,"${"); + if (!pBrace) + return false; + unsigned long NewLength; + BOOL Changed=false; + //PCHAR pPos; + //PCHAR pStart; + //PCHAR pIndex; + CHAR szCurrent[MAX_STRING]={0}; + + do + { + // find this brace's end + PCHAR pEnd=&pBrace[1]; + BOOL Quote=false; + BOOL BeginParam=false; + int nBrace=1; + while(nBrace) + { + ++pEnd; + if (BeginParam) + { + BeginParam=false; + if (*pEnd=='\"') + { + Quote=true; + } + continue; + } + if (*pEnd==0) + {// unmatched brace or quote + goto pmdbottom; + } + if (Quote) + { + if (*pEnd=='\"') + { + if (pEnd[1]==']' || pEnd[1]==',') + { + Quote=false; + } + } + } + else + { + if (*pEnd=='}') + { + nBrace--; + } + else if (*pEnd=='{') + { + nBrace++; + } + else if (*pEnd=='[' || *pEnd==',') + BeginParam=true; + } + + } + *pEnd=0; + strcpy(szCurrent,&pBrace[2]); + if (szCurrent[0]==0) + { + goto pmdbottom; + } + if (ParseMacroData(szCurrent)) + { + unsigned long NewLength=strlen(szCurrent); + memmove(&pBrace[NewLength+1],&pEnd[1],strlen(&pEnd[1])+1); + strncpy(pBrace,szCurrent,NewLength); + pEnd=&pBrace[NewLength]; + *pEnd=0; + } + + MQ2TYPEVAR Result; + if (!ParseMQ2DataPortion(szCurrent,Result) || !Result.Type || !Result.Type->ToString(Result.VarPtr,szCurrent)) + strcpy(szCurrent,"NULL"); + + NewLength=strlen(szCurrent); + + memmove(&pBrace[NewLength],&pEnd[1],strlen(&pEnd[1])+1); + strncpy(pBrace,szCurrent,NewLength); + Changed=true; + +pmdbottom:; + } while (pBrace=strstr(&pBrace[1],"${")); + if (Changed) + while(ParseMacroData(szOriginal)) + { + } + return Changed; +} + +#endif diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2DataTypes.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2DataTypes.cpp new file mode 100644 index 0000000000..6dc5b38459 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2DataTypes.cpp @@ -0,0 +1,7593 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#define DBG_SPEW + + +#include "MQ2Main.h" + +#ifdef ISXEQ +#define ISINDEX() (argc>0) +#define ISNUMBER() (IsNumber(argv[0])) +#define GETNUMBER() (atoi(argv[0])) +#define GETFIRST() argv[0] +#else +#define ISINDEX() (Index[0]) +#define ISNUMBER() (IsNumber(Index)) +#define GETNUMBER() (atoi(Index)) +#define GETFIRST() Index +#endif + + +#ifndef ISXEQ +class MQ2FloatType *pFloatType=0; +class MQ2IntType *pIntType=0; +class MQ2ByteType *pByteType=0; +class MQ2BoolType *pBoolType=0; +class MQ2StringType *pStringType=0; +class MQ2MathType *pMathType=0; +class MQ2TimeType *pTimeType=0; +class MQ2ArrayType *pArrayType=0; +#endif +class MQ2SpawnType *pSpawnType=0; +class MQ2BuffType *pBuffType=0; +class MQ2SpellType *pSpellType=0; +class MQ2TicksType *pTicksType=0; +class MQ2CharacterType *pCharacterType=0; +class MQ2ClassType *pClassType=0; +class MQ2RaceType *pRaceType=0; +class MQ2BodyType *pBodyType=0; +class MQ2SkillType *pSkillType=0; +class MQ2AltAbilityType *pAltAbilityType=0; +class MQ2GroundType *pGroundType=0; +class MQ2SwitchType *pSwitchType=0; +class MQ2CorpseType *pCorpseType=0; +class MQ2MacroType *pMacroType=0; +class MQ2MacroQuestType *pMacroQuestType=0; +class MQ2WindowType *pWindowType=0; +class MQ2MerchantType *pMerchantType=0; +class MQ2ZoneType *pZoneType=0; +class MQ2CurrentZoneType *pCurrentZoneType=0; +class MQ2ItemType *pItemType=0; +class MQ2DeityType *pDeityType=0; +class MQ2ArgbType *pArgbType=0; +class MQ2TypeType *pTypeType=0; +class MQ2HeadingType *pHeadingType=0; +class MQ2InvSlotType *pInvSlotType=0; +class MQ2TimerType *pTimerType=0; +class MQ2PluginType *pPluginType=0; +class MQ2RaidType *pRaidType=0; +class MQ2RaidMemberType *pRaidMemberType=0; +class MQ2GroupType *pGroupType=0; +class MQ2GroupMemberType *pGroupMemberType=0; +class MQ2EvolvingItemType *pEvolvingItemType=0; +class MQ2DynamicZoneType *pDynamicZoneType=0; +class MQ2DZMemberType *pDZMemberType=0; +class MQ2FellowshipType *pFellowshipType=0; +class MQ2FellowshipMemberType *pFellowshipMemberType=0; +class MQ2FriendsType *pFriendsType=0; +class MQ2TargetType *pTargetType=0; +class MQ2XTargetType *pXTargetType=0; + +#ifndef ISXEQ + +void InitializeMQ2DataTypes() +{ + pFloatType = new MQ2FloatType; + pIntType = new MQ2IntType; + pByteType = new MQ2ByteType; + pStringType = new MQ2StringType; + pSpawnType = new MQ2SpawnType; + pSpellType = new MQ2SpellType; + pBuffType = new MQ2BuffType; + pTicksType = new MQ2TicksType; + pCharacterType = new MQ2CharacterType; + pClassType=new MQ2ClassType; + pRaceType=new MQ2RaceType; + pGroundType = new MQ2GroundType; + pSwitchType = new MQ2SwitchType; + pMacroType = new MQ2MacroType; + pMacroQuestType = new MQ2MacroQuestType; + pMathType = new MQ2MathType; + pWindowType = new MQ2WindowType; + pMerchantType = new MQ2MerchantType; + pZoneType = new MQ2ZoneType; + pItemType = new MQ2ItemType; + pBoolType = new MQ2BoolType; + pBodyType = new MQ2BodyType; + pDeityType = new MQ2DeityType; + pArgbType = new MQ2ArgbType; + pCorpseType = new MQ2CorpseType; + pCurrentZoneType = new MQ2CurrentZoneType; + pTypeType = new MQ2TypeType; + pTimeType = new MQ2TimeType; + pHeadingType = new MQ2HeadingType; + pInvSlotType = new MQ2InvSlotType; + pArrayType = new MQ2ArrayType; + pTimerType = new MQ2TimerType; + pPluginType = new MQ2PluginType; + pSkillType = new MQ2SkillType; + pAltAbilityType = new MQ2AltAbilityType; + pRaidType = new MQ2RaidType; + pRaidMemberType = new MQ2RaidMemberType; + pGroupType = new MQ2GroupType; + pGroupMemberType = new MQ2GroupMemberType; + pGroupMemberType->SetInheritance(pSpawnType); + pEvolvingItemType=new MQ2EvolvingItemType; + pDynamicZoneType=new MQ2DynamicZoneType; + pDZMemberType=new MQ2DZMemberType; + pFellowshipType=new MQ2FellowshipType; + pFellowshipMemberType=new MQ2FellowshipMemberType; + pFriendsType = new MQ2FriendsType; + pTargetType = new MQ2TargetType; + pXTargetType = new MQ2XTargetType; + + // NOTE: SetInheritance does NOT make it inherit, just notifies the syntax checker... + pCharacterType->SetInheritance(pSpawnType); + pBuffType->SetInheritance(pSpellType); + //pCurrentZoneType->SetInheritance(pZoneType); + pRaidMemberType->SetInheritance(pSpawnType); + pTargetType->SetInheritance(pSpawnType); +} + +void ShutdownMQ2DataTypes() +{ + delete pSpawnType; + delete pFloatType; + delete pIntType; + delete pByteType; + delete pStringType; + delete pBuffType; + delete pSpellType; + delete pTicksType; + delete pCharacterType; + delete pClassType; + delete pRaceType; + delete pGroundType; + delete pSwitchType; + delete pMacroType; + delete pMacroQuestType; + delete pMathType; + delete pWindowType; + delete pMerchantType; + delete pZoneType; + delete pItemType; + delete pBoolType; + delete pBodyType; + delete pDeityType; + delete pArgbType; + delete pCorpseType; + delete pCurrentZoneType; + delete pTypeType; + delete pTimeType; + delete pHeadingType; + delete pArrayType; + delete pTimerType; + delete pPluginType; + delete pSkillType; + delete pAltAbilityType; + delete pRaidType; + delete pRaidMemberType; + delete pGroupType; + delete pGroupMemberType; + delete pEvolvingItemType; + delete pDynamicZoneType; + delete pFriendsType; + delete pTargetType; + delete pXTargetType; +} + +bool MQ2TypeType::GETMEMBER() +{ +#define pType ((MQ2Type*)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2TypeType::FindMember(Member); + if (!pMember) + return false; + switch((TypeMembers)pMember->ID) + { + case Name: + Dest.Ptr=pType->GetName(); + Dest.Type=pStringType; + return true; + case TypeMember: + if (ISINDEX()) + { + if (ISNUMBER()) + { + // name by number + if (Dest.Ptr=pType->GetMemberName(GETNUMBER())) + { + Dest.Type=pStringType; + return true; + } + } + else + { + // number by name + if (pType->GetMemberID(Index,Dest.DWord)) + { + Dest.Type=pIntType; + return true; + } + } + } + return false; + } + return false; +#undef pType +} + +bool MQ2PluginType::GETMEMBER() +{ +#define pPlugin ((PMQPLUGIN)VarPtr.Ptr) + if (!pPlugin) + return false; + PMQ2TYPEMEMBER pMember=MQ2PluginType::FindMember(Member); + if (!pMember) + return false; + switch((PluginMembers)pMember->ID) + { + case Name: + Dest.Ptr=pPlugin->szFilename; + Dest.Type=pStringType; + return true; + case Version: + Dest.Float=pPlugin->fpVersion; + Dest.Type=pFloatType; + return true; + } + return false; +#undef pPlugin +} +bool MQ2FloatType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2FloatType::FindMember(Member); + if (!pMember) + { + return false; + } + + switch((FloatMembers)pMember->ID) + { + case Deci: + sprintf(DataTypeTemp,"%.1f",VarPtr.Float); + Dest.Type=pStringType; + Dest.Ptr=&DataTypeTemp[0]; + return true; + case Centi: + sprintf(DataTypeTemp,"%.2f",VarPtr.Float); + Dest.Type=pStringType; + Dest.Ptr=&DataTypeTemp[0]; + return true; + case Milli: + sprintf(DataTypeTemp,"%.3f",VarPtr.Float); + Dest.Type=pStringType; + Dest.Ptr=&DataTypeTemp[0]; + return true; + case Int: + Dest.Type=pIntType; + Dest.Int=(int)(VarPtr.Float); + return true; + case Precision: + if (ISNUMBER()) + { + sprintf(DataTypeTemp,"%.*f",GETNUMBER(),VarPtr.Float); + Dest.Type=pStringType; + Dest.Ptr=&DataTypeTemp[0]; + return true; + } + return false; + } + return false; +} + +bool MQ2IntType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2IntType::FindMember(Member); + if (!pMember) + { + return false; + } + + switch((IntMembers)pMember->ID) + { + case Float: + Dest.Float=(FLOAT)1.0f*(VarPtr.Int); + Dest.Type=pFloatType; + return true; + case Hex: + sprintf(DataTypeTemp,"%x",VarPtr.Int); + Dest.Ptr=&DataTypeTemp[0], + Dest.Type=pStringType; + return true; + case Reverse: + { + Dest.Array[0]=VarPtr.Array[3]; + Dest.Array[1]=VarPtr.Array[2]; + Dest.Array[2]=VarPtr.Array[1]; + Dest.Array[3]=VarPtr.Array[0]; + Dest.Type=pIntType; + } + return true; + } + return false; +} +bool MQ2StringType::GETMEMBER() +{ + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2StringType::FindMember(Member); + if (!pMember) + { + return false; + } + + switch((StringMembers)pMember->ID) + { + case Length: + Dest.DWord=strlen((const char *)VarPtr.Ptr); + Dest.Type=pIntType; + return true; + case Left: + if (!ISINDEX()) + return false; + { + int Len=GETNUMBER(); + if (Len==0) + return false; + if (Len>0) + { + unsigned long StrLen=strlen((char *)VarPtr.Ptr); + if ((unsigned long)Len>StrLen) + Len=StrLen; + memmove(DataTypeTemp,(char *)VarPtr.Ptr,Len); + DataTypeTemp[Len]=0; + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + } + else + { + Len=-Len; + unsigned long StrLen=strlen((char *)VarPtr.Ptr); + if ((unsigned long)Len>=StrLen) + { + Dest.Ptr=""; + Dest.Type=pStringType; + return true; + } + memmove(DataTypeTemp,(char *)VarPtr.Ptr,StrLen-Len); + DataTypeTemp[StrLen-Len]=0; + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + } + } + return true; + case Right: + if (!ISINDEX()) + return false; + { + int Len=GETNUMBER(); + if (Len==0) + return false; + if (Len<0) + { + Len=-Len; + unsigned long StrLen=strlen((char *)VarPtr.Ptr); + if ((unsigned long)Len>=StrLen) + { + Dest.Ptr=""; + Dest.Type=pStringType; + return true; + } + char *pStart=(char*)VarPtr.Ptr; + pStart=&pStart[Len]; + Len=StrLen-Len; + memmove(DataTypeTemp,pStart,Len+1); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + } + else + { + char *pStart=(char*)VarPtr.Ptr; + pStart=&pStart[strlen(pStart)-Len]; + if (pStart while */ + { + DataTypeTemp[0] = '\0' ; + strncat( DataTypeTemp , A , pos - A ) ; + strcat( DataTypeTemp , C ) ; + strcat( DataTypeTemp , pos + strlen( B ) ) ; + strcpy( A, DataTypeTemp); /* added */ + } + if (Dest.Ptr = DataTypeTemp) + { + Dest.Type = pStringType; + return true; + } + } + } + case Upper: + strcpy(DataTypeTemp,(char*)VarPtr.Ptr); + strupr(DataTypeTemp); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + case Lower: + strcpy(DataTypeTemp,(char*)VarPtr.Ptr); + strlwr(DataTypeTemp); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + case Compare: + if (ISINDEX()) + { + Dest.Int=stricmp((char*)VarPtr.Ptr,Index); + Dest.Type=pIntType; + return true; + } + return false; + case CompareCS: + if (ISINDEX()) + { + Dest.Int=strcmp((char*)VarPtr.Ptr,Index); + Dest.Type=pIntType; + return true; + } + return false; + case Mid: + { + if (PCHAR pComma=strchr(Index,',')) + { + *pComma=0; + pComma++; + PCHAR pStr=(char *)VarPtr.Ptr; + unsigned long nStart=GETNUMBER()-1; + unsigned long Len=atoi(pComma); + if (nStart>=strlen(pStr)) + { + Dest.Ptr=""; + Dest.Type=pStringType; + return true; + } + pStr+=nStart; + unsigned long StrLen=strlen(pStr); + if (Len>StrLen) + Len=StrLen; + memmove(DataTypeTemp,pStr,Len); + DataTypeTemp[Len]=0; + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + } + return false; + case Equal: + if (ISINDEX()) + { + Dest.DWord=(stricmp((char*)VarPtr.Ptr,Index)==0); + Dest.Type=pBoolType; + return true; + } + return false; + case NotEqual: + if (ISINDEX()) + { + Dest.DWord=(stricmp((char*)VarPtr.Ptr,Index)!=0); + Dest.Type=pBoolType; + return true; + } + return false; + case EqualCS: + if (ISINDEX()) + { + Dest.DWord=(strcmp((char*)VarPtr.Ptr,Index)==0); + Dest.Type=pBoolType; + return true; + } + return false; + case NotEqualCS: + if (ISINDEX()) + { + Dest.DWord=(strcmp((char*)VarPtr.Ptr,Index)!=0); + Dest.Type=pBoolType; + return true; + } + return false; + case Count: + if (ISINDEX()) + { + Dest.DWord=0; + PCHAR pLast=(PCHAR)VarPtr.Ptr-1; + while(pLast=strchr(&pLast[1],Index[0])) + Dest.DWord++; + Dest.Type=pIntType; + return true; + } + return false; + case Arg: + if (IsNumberToComma(Index)) + { + CHAR Temp[MAX_STRING]={0}; + strcpy(Temp,(char *)VarPtr.Ptr); + if (PCHAR pComma=strchr(Index,',')) + { + *pComma=0; + GetArg(DataTypeTemp,Temp,GETNUMBER(),FALSE,FALSE,FALSE,pComma[1]); + *pComma=','; + if (DataTypeTemp[0]) + { + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + } + else + { + GetArg(DataTypeTemp,Temp,GETNUMBER()); + if (DataTypeTemp[0]) + { + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + } + } + return false; + case Token: + if (IsNumberToComma(Index)) + { + DWORD N=GETNUMBER(); + if (!N) + return false; + //CHAR Temp[MAX_STRING]={0}; + //strcpy(Temp,(char *)VarPtr.Ptr); + if (PCHAR pComma=strchr(Index,',')) + { + *pComma=0; + PCHAR pPos=(PCHAR)VarPtr.Ptr;//strchr((char *)VarPtr.Ptr,pComma[1]); + N--; + while(N && pPos) + { + pPos=strchr(&pPos[1],pComma[1]); + N--; + } + *pComma=','; + if (pPos) + { + if (pPos!=(PCHAR)VarPtr.Ptr) + pPos++; + PCHAR pEnd=strchr(&pPos[0],pComma[1]); + if (pEnd) + { + if (pEnd!=pPos) + { + strncpy(DataTypeTemp,pPos,pEnd-pPos); + DataTypeTemp[pEnd-pPos]=0; + } + else + DataTypeTemp[0]=0; + } + else + strcpy(DataTypeTemp,pPos); + // allows empty returned strings + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + } + } + return false; + } + return false; +} +bool MQ2ArrayType::GETMEMBER() +{ +#define pArray ((CDataArray*)VarPtr.Ptr) + if (!pArray) + return false; + PMQ2TYPEMEMBER pMember=MQ2ArrayType::FindMember(Member); + if (!pMember) + return false; + switch((ArrayMembers)pMember->ID) + { + case Dimensions: + Dest.DWord=pArray->nExtents; + Dest.Type=pIntType; + return true; + case Size: + if (ISINDEX()) + { + DWORD N=GETNUMBER()-1; + if (NnExtents) + { + Dest.DWord=pArray->pExtents[N]; + Dest.Type=pIntType; + return true; + } + } + else + { + Dest.DWord=pArray->TotalElements; + Dest.Type=pIntType; + return true; + } + return false; + } + return false; +#undef pArray +} +bool MQ2MathType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2MathType::FindMember(Member); + if (!pMember) + return false; + + if (!ISINDEX()) + return false; + DOUBLE CalcResult; + switch((MathMembers)pMember->ID) + { + case Abs: + if (Calculate(Index,CalcResult)) + { + Dest.Float=(FLOAT)CalcResult; + if (Dest.Float<0) + Dest.Float*=-1; + Dest.Type=pFloatType; + return true; + } + return false; + case Rand: + Dest.DWord=atol(Index); + if (Dest.DWord==0 || Dest.DWord==0xFFFFFFFF) + return false; + Dest.DWord=rand() % Dest.DWord; + Dest.Type=pIntType; + return true; + case Sqrt: + if (Calculate(Index,CalcResult)) + { + Dest.Float=(FLOAT)sqrt(CalcResult); + Dest.Type=pFloatType; + return true; + } + return false; + case Calc: + if (Calculate(Index,CalcResult)) + { + Dest.Float=(FLOAT)CalcResult; + Dest.Type=pFloatType; + return true; + } + return false; + case Sin: + if (Calculate(Index,CalcResult)) + { + Dest.Float=(float)sin(CalcResult/DegToRad); + Dest.Type=pFloatType; + return true; + } + return false; + case Cos: + if (Calculate(Index,CalcResult)) + { + Dest.Float=(float)cos(CalcResult/DegToRad); + Dest.Type=pFloatType; + return true; + } + return false; + case Tan: + if (Calculate(Index,CalcResult)) + { + Dest.Float=(float)tan(CalcResult/DegToRad); + Dest.Type=pFloatType; + return true; + } + return false; + case Asin: + if (Calculate(Index,CalcResult)) + { + Dest.Float=(float)(asin(CalcResult)*DegToRad); + Dest.Type=pFloatType; + return true; + } + return false; + case Acos: + if (Calculate(Index,CalcResult)) + { + Dest.Float=(float)(acos(CalcResult)*DegToRad); + Dest.Type=pFloatType; + return true; + } + return false; + case Atan: + if (Calculate(Index,CalcResult)) + { + Dest.Float=(float)(atan(CalcResult)*DegToRad); + Dest.Type=pFloatType; + return true; + } + return false; + case Not: + Dest.DWord=~atol(Index); + Dest.Type=pIntType; + return true; + case Hex: + sprintf(DataTypeTemp,"%x",atol(Index)); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + case Dec: + sscanf(Index,"%x",&Dest.DWord); + Dest.Type=pIntType; + return true; + case Distance: + if (ISINDEX()) + { + FLOAT P1[3]; + FLOAT P2[3]; + P1[0]=P2[0]=((PSPAWNINFO)pCharSpawn)->Y; + P1[1]=P2[1]=((PSPAWNINFO)pCharSpawn)->X; + P1[2]=P2[2]=((PSPAWNINFO)pCharSpawn)->Z; + if (PCHAR pColon=strchr(Index,':')) + { + *pColon=0; + if (PCHAR pComma=strchr(&pColon[1],',')) + { + *pComma=0; + P2[0]=(FLOAT)atof(&pColon[1]); + *pComma=','; + if (PCHAR pComma2=strchr(&pComma[1],',')) + { + *pComma2=0; + P2[1]=(FLOAT)atof(&pComma[1]); + *pComma2=','; + P2[2]=(FLOAT)atof(&pComma2[1]); + } + else + { + P2[1]=(FLOAT)atof(&pComma[1]); + } + } + else + P2[0]=(FLOAT)atof(&pColon[1]); + } + + + if (PCHAR pComma=strchr(Index,',')) + { + *pComma=0; + P1[0]=(FLOAT)atof(Index); + *pComma=','; + if (PCHAR pComma2=strchr(&pComma[1],',')) + { + *pComma2=0; + P1[1]=(FLOAT)atof(&pComma[1]); + *pComma2=','; + P1[2]=(FLOAT)atof(&pComma2[1]); + } + else + { + P1[1]=(FLOAT)atof(&pComma[1]); + } + } + else + P1[0]=(FLOAT)atof(Index); + + DebugSpew("GetDistance3D(%1.0f,%1.0f,%1.0f,%1.0f,%1.0f,%1.0f)",P1[0],P1[1],P1[2],P2[0],P2[1],P2[2]); + Dest.Float=(FLOAT)GetDistance3D(P1[0],P1[1],P1[2],P2[0],P2[1],P2[2]); + Dest.Type=pFloatType; + return true; + } + return false; + } + return false; +} +bool MQ2MacroType::GETMEMBER() +{ + if (!gMacroStack) + return false; + PMQ2TYPEMEMBER pMember=MQ2MacroType::FindMember(Member); + if (!pMember) + return false; + switch((MacroMembers)pMember->ID) + { + case Name: + Dest.Ptr=&gszMacroName[0]; + Dest.Type=pStringType; + return true; + case RunTime: + Dest.DWord=(DWORD)((GetTickCount()-gRunning)/1000); + Dest.Type=pIntType; + return true; + case Paused: + Dest.DWord=gMacroPause; + Dest.Type=pBoolType; + return true; + case Return: + Dest.Ptr=&DataTypeTemp[0]; + strcpy(DataTypeTemp,gMacroStack->Return); + Dest.Type=pStringType; + return true; + case Params: + Dest.DWord=0; + { + PDATAVAR pVar=gMacroStack->Parameters; + while(pVar) + { + Dest.DWord++; + pVar=pVar->pNext; + } + } + Dest.Type=pIntType; + return true; + /* + TypeMember(Param); + /**/ + } + return false; +} + +#endif + +bool MQ2TicksType::GETMEMBER() +{ +#define nTicks (VarPtr.DWord) + unsigned long N=MemberMap[Member]; + if (!N) + return false; + N--; + PMQ2TYPEMEMBER pMember=Members[N]; + if (!pMember) + return false; + switch((TicksMembers)pMember->ID) + { + case Hours: + Dest.DWord=nTicks/600; + Dest.Type=pIntType; + return true; + case Minutes: + Dest.DWord=(nTicks/10)%60; + Dest.Type=pIntType; + return true; + case Seconds: + Dest.DWord=(nTicks*6)%60; + Dest.Type=pIntType; + return true; + case TimeHMS: + { + int Secs=nTicks*6; + int Mins=(Secs/60)%60; + int Hrs=(Secs/3600); + Secs=Secs%60; + if (Secs<0) + sprintf(DataTypeTemp,"Perm"); + else if (Hrs) + sprintf(DataTypeTemp,"%d:%02d:%02d",Hrs,Mins,Secs); + else + sprintf(DataTypeTemp,"%d:%02d",Mins,Secs); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + } + return true; + case Time: + { + int Secs=nTicks*6; + int Mins=(Secs/60); + Secs=Secs%60; + if (Secs<0) + sprintf(DataTypeTemp,"Perm"); + else + sprintf(DataTypeTemp,"%d:%02d",Mins,Secs); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + } + return true; + case TotalMinutes: + Dest.DWord=nTicks/10; + Dest.Type=pIntType; + return true; + case TotalSeconds: + Dest.DWord=nTicks*6; + Dest.Type=pIntType; + return true; + case Ticks: + Dest.DWord=nTicks; + Dest.Type=pIntType; + return true; + } + return false; +#undef nTicks +} + +bool MQ2ArgbType::GETMEMBER() +{ + unsigned long N=MemberMap[Member]; + if (!N) + return false; + N--; + PMQ2TYPEMEMBER pMember=Members[N]; + if (!pMember) + return false; + switch((ArgbMembers)pMember->ID) + { + case A: + Dest.DWord=VarPtr.Argb.A; + Dest.Type=pIntType; + return true; + case R: + Dest.DWord=VarPtr.Argb.R; + Dest.Type=pIntType; + return true; + case G: + Dest.DWord=VarPtr.Argb.G; + Dest.Type=pIntType; + return true; + case B: + Dest.DWord=VarPtr.Argb.B; + Dest.Type=pIntType; + return true; + case Int: + Dest.DWord=VarPtr.DWord; + Dest.Type=pIntType; + return true; + } + return false; +} + +bool MQ2SpawnType::GETMEMBER() +{ + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2SpawnType::FindMember(Member); + if (!pMember) + { + return false; + } + PSPAWNINFO pSpawn=(PSPAWNINFO)VarPtr.Ptr; + switch((SpawnMembers)pMember->ID) + { + case Level: + Dest.DWord=pSpawn->Level; + Dest.Type=pIntType; + return true; + case ID: + Dest.Type=pIntPtrType; + INTPTR(pSpawn->SpawnID); + return true; + case Name: + Dest.Type=pStringType; + Dest.Ptr=&pSpawn->Name[0]; + return true; + case Surname: + Dest.Type=pStringType; + Dest.Ptr=&pSpawn->Lastname[0]; + return true; + case CleanName: + strcpy(DataTypeTemp,pSpawn->Name); + CleanupName(DataTypeTemp,FALSE,FALSE); + Dest.Type=pStringType; + Dest.Ptr=&DataTypeTemp[0]; + return true; + case DisplayName: + Dest.Ptr=&pSpawn->DisplayedName[0]; + Dest.Type=pStringType; + return true; + case E: + Dest.Type=pFloatType; + Dest.Float=-pSpawn->X; + return true; + case W: + case X: + Dest.Type=pFloatPtrType; + FLOATPTR(pSpawn->X); + return true; + case S: + Dest.Type=pFloatType; + Dest.Float=-pSpawn->Y; + return true; + case N: + case Y: + Dest.Type=pFloatPtrType; + FLOATPTR(pSpawn->Y); + return true; + case D: + Dest.Type=pFloatType; + Dest.Float=-pSpawn->Z; + return true; + case U: + case Z: + Dest.Type=pFloatPtrType; + FLOATPTR(pSpawn->Z); + return true; + case Next: + if (Dest.Ptr=pSpawn->pNext) + { + Dest.Type=pSpawnType; + return true; + } + return false; + case Prev: + if (Dest.Ptr=pSpawn->pPrev) + { + Dest.Type=pSpawnType; + return true; + } + return false; + case CurrentHPs: + Dest.Type=pIntType; + Dest.Int=pSpawn->HPCurrent; + return true; + case MaxHPs: + Dest.Type=pIntType; + Dest.Int=pSpawn->HPMax; + return true; + case PctHPs: + Dest.Type=pIntType; + Dest.Int=pSpawn->HPCurrent*100/pSpawn->HPMax; + return true; + case AARank: + if (pSpawn->AARank!=0xFF) + Dest.Int=pSpawn->AARank; + else + Dest.Int=0; + Dest.Type=pIntType; + return true; + case Speed: + Dest.Float=FindSpeed(pSpawn); + Dest.Type=pFloatType; + return true; + case Heading: + Dest.Float=pSpawn->Heading*0.703125f; + Dest.Type=pHeadingType; + return true; + case Pet: + if (Dest.Ptr=GetSpawnByID(pSpawn->PetID)) + { + Dest.Type=pSpawnType; + return true; + } + return false; + case Master: + if (Dest.Ptr=GetSpawnByID(pSpawn->MasterID)) + { + Dest.Type=pSpawnType; + return true; + } + return false; + case Gender: + Dest.Ptr=szGender[pSpawn->Gender]; + Dest.Type=pStringType; + return true; + case Race: + Dest.DWord=pSpawn->Race; + Dest.Type=pRaceType; + return true; + case Class: + if (GetSpawnType(pSpawn)!=AURA && GetSpawnType(pSpawn)!=BANNER && GetSpawnType(pSpawn)!=CAMPFIRE) + Dest.DWord=pSpawn->Class; + else + if (GetSpawnType(pSpawn)==AURA) + Dest.DWord=0xFF; + else if (GetSpawnType(pSpawn)==BANNER) + Dest.DWord=0xFE; + else + Dest.DWord=0xFD; + Dest.Type=pClassType; + return true; + case Body: + Dest.DWord=GetBodyType(pSpawn); + Dest.Type=pBodyType; + return true; + case GM: + Dest.DWord=pSpawn->GM; + Dest.Type=pBoolType; + return true; + case Levitating: + Dest.DWord=(pSpawn->Levitate==2); + Dest.Type=pBoolType; + return true; + case Sneaking: + Dest.DWord=pSpawn->Sneak; + Dest.Type=pBoolType; + return true; + case Invis: + Dest.DWord=pSpawn->HideMode; + Dest.Type=pBoolType; + return true; + case Height: + Dest.Float=pSpawn->AvatarHeight; + Dest.Type=pFloatType; + return true; + case MaxRange: + if (GetSpawnType(pSpawn)!=ITEM) + { + Dest.Float=get_melee_range((EQPlayer*)pSpawn,(EQPlayer*)pSpawn); + Dest.Type=pFloatType; + return true; + } + return false; + case MaxRangeTo: + if (GetSpawnType(pSpawn)!=ITEM) + { + Dest.Float=get_melee_range(pLocalPlayer,(EQPlayer*)pSpawn); + Dest.Type=pFloatType; + return true; + } + return false; + case Guild: + if (pSpawn->GuildID != 0xFFFFFFFF) + { + if(char *szGuild = GetGuildByID(pSpawn->GuildID)) + { + Dest.Ptr=szGuild; + Dest.Type=pStringType; + return true; + } + } + return false; + case GuildStatus: + if (pSpawn->GuildID != 0xFFFFFFFF) + { + Dest.Ptr=szGuildStatus[pSpawn->GuildStatus]; + Dest.Type=pStringType; + return true; + } + return false; + case Type: + switch(GetSpawnType(pSpawn)) + { + case MOUNT: + Dest.Ptr="Mount"; + Dest.Type=pStringType; + return true; + case UNTARGETABLE: + Dest.Ptr="Untargetable"; + Dest.Type=pStringType; + return true; + case NPC: + Dest.Ptr="NPC"; + Dest.Type=pStringType; + return true; + case PC: + Dest.Ptr="PC"; + Dest.Type=pStringType; + return true; + case CHEST: + Dest.Ptr="Chest"; + Dest.Type=pStringType; + return true; + case TRAP: + Dest.Ptr="Trap"; + Dest.Type=pStringType; + return true; + case TRIGGER: + Dest.Ptr="Trigger"; + Dest.Type=pStringType; + return true; + case TIMER: + Dest.Ptr="Timer"; + Dest.Type=pStringType; + return true; + case PET: + Dest.Ptr="Pet"; + Dest.Type=pStringType; + return true; + case ITEM: + Dest.Ptr="Item"; + Dest.Type=pStringType; + return true; + case CORPSE: + Dest.Ptr="Corpse"; + Dest.Type=pStringType; + return true; + case AURA: + Dest.Ptr="Aura"; + Dest.Type=pStringType; + return true; + case OBJECT: + Dest.Ptr="Object"; + Dest.Type=pStringType; + return true; + case BANNER: + Dest.Ptr="Banner"; + Dest.Type=pStringType; + return true; + case CAMPFIRE: + Dest.Ptr="Campfire"; + Dest.Type=pStringType; + return true; + case MERCENARY: + Dest.Ptr="Mercenary"; + Dest.Type=pStringType; + return true; + case FLYER: + Dest.Ptr="Flyer"; + Dest.Type=pStringType; + return true; + } + return false; + case Light: + Dest.Ptr=GetLightForSpawn(pSpawn); + Dest.Type=pStringType; + return true; + case StandState: + Dest.Int=pSpawn->StandState; + Dest.Type=pIntType; + return true; + case State: + if (GetCharInfo() && GetCharInfo()->Stunned==1) + { + Dest.Ptr="STUN"; + } + else if(pSpawn == (PSPAWNINFO)pLocalPlayer && pSpawn->RespawnTimer) + { + Dest.Ptr="HOVER"; + } + else if(pSpawn->Mount) + { + Dest.Ptr="MOUNT"; + } + else + switch (pSpawn->StandState) + { + case STANDSTATE_STAND: + Dest.Ptr="STAND"; + break; + case STANDSTATE_SIT: + Dest.Ptr="SIT"; + break; + case STANDSTATE_DUCK: + Dest.Ptr="DUCK"; + break; + case STANDSTATE_BIND: + Dest.Ptr="BIND"; + break; + case STANDSTATE_FEIGN: + Dest.Ptr="FEIGN"; + break; + case STANDSTATE_DEAD: + Dest.Ptr="DEAD"; + break; + default: + Dest.Ptr="UNKNOWN"; + break; + } + Dest.Type=pStringType; + return true; + case Standing: + Dest.DWord=pSpawn->StandState==STANDSTATE_STAND; + Dest.Type=pBoolType; + return true; + case Sitting: + Dest.DWord=pSpawn->StandState==STANDSTATE_SIT; + Dest.Type=pBoolType; + return true; + case Ducking: + Dest.DWord=pSpawn->StandState==STANDSTATE_DUCK; + Dest.Type=pBoolType; + return true; + case Feigning: + Dest.DWord=pSpawn->StandState==STANDSTATE_FEIGN; + Dest.Type=pBoolType; + return true; + case Binding: + Dest.DWord=pSpawn->StandState==STANDSTATE_BIND; + Dest.Type=pBoolType; + return true; + case Dead: + Dest.DWord=pSpawn->StandState==STANDSTATE_DEAD; + Dest.Type=pBoolType; + return true; + case Stunned: + Dest.DWord=(GetCharInfo() && GetCharInfo()->Stunned==1); + Dest.Type=pBoolType; + return true; + case Hovering: + Dest.DWord=(pSpawn->RespawnTimer); + Dest.Type=pBoolType; + return true; + case Deity: + Dest.DWord=pSpawn->Deity; + Dest.Type=pDeityType; + return true; + case Distance: + Dest.Float=GetDistance(pSpawn->X,pSpawn->Y); + Dest.Type=pFloatType; + return true; + case Distance3D: + Dest.Float=DistanceToSpawn3D((PSPAWNINFO)pCharSpawn,pSpawn); + Dest.Type=pFloatType; + return true; + case DistancePredict: + Dest.Float=EstimatedDistanceToSpawn((PSPAWNINFO)pCharSpawn,pSpawn); + Dest.Type=pFloatType; + return true; + case DistanceW: + case DistanceX: + Dest.Float=(FLOAT)fabs(((PSPAWNINFO)pCharSpawn)->X-pSpawn->X); + Dest.Type=pFloatType; + return true; + case DistanceN: + case DistanceY: + Dest.Float=(FLOAT)fabs(((PSPAWNINFO)pCharSpawn)->Y-pSpawn->Y); + Dest.Type=pFloatType; + return true; + case DistanceU: + case DistanceZ: + Dest.Float=(FLOAT)fabs(((PSPAWNINFO)pCharSpawn)->Z-pSpawn->Z); + Dest.Type=pFloatType; + return true; + case HeadingTo: + Dest.Float=(FLOAT)(atan2f(((PSPAWNINFO)pCharSpawn)->Y - pSpawn->Y, pSpawn->X - ((PSPAWNINFO)pCharSpawn)->X) * 180.0f / PI + 90.0f); + if (Dest.Float<0.0f) + Dest.Float += 360.0f; + else if (Dest.Float>=360.0f) + Dest.Float -= 360.0f; + Dest.Type=pHeadingType; + return true; + case Casting: + if (Dest.Ptr=GetSpellByID(pSpawn->CastingData.SpellID)) + { + Dest.Type=pSpellType; + return true; + } + return false; + case Mount: + if (Dest.Ptr=pSpawn->Mount) + { + Dest.Type=pSpawnType; + return true; + } + return false; + case Underwater: + Dest.DWord=(pSpawn->UnderWater==5); + Dest.Type=pBoolType; + return true; + case FeetWet: + Dest.DWord=(pSpawn->FeetWet==5); + Dest.Type=pBoolType; + return true; + case Animation: + Dest.DWord=pSpawn->Animation; + Dest.Type=pIntType; + return true; + case Holding: + Dest.DWord=pSpawn->Holding; + Dest.Type=pIntType; + return true; + case Look: + Dest.Float=pSpawn->CameraAngle; + Dest.Type=pFloatType; + return true; + case xConColor: + switch(ConColor(pSpawn)) + { + case CONCOLOR_GREY: + Dest.Ptr="GREY"; + break; + case CONCOLOR_GREEN: + Dest.Ptr="GREEN"; + break; + case CONCOLOR_LIGHTBLUE: + Dest.Ptr="LIGHT BLUE"; + break; + case CONCOLOR_BLUE: + Dest.Ptr="BLUE"; + break; + case CONCOLOR_WHITE: + Dest.Ptr="WHITE"; + break; + case CONCOLOR_YELLOW: + Dest.Ptr="YELLOW"; + break; + case CONCOLOR_RED: + default: + Dest.Ptr="RED"; + break; + } + Dest.Type=pStringType; + return true; + case Invited: + Dest.DWord=(pSpawn->InvitedToGroup); + Dest.Type=pBoolType; + return true; +#ifndef ISXEQ + case NearestSpawn: + if (pSpawn==(PSPAWNINFO)pCharSpawn) + { + return (dataNearestSpawn(Index,Dest)!=0);// use top-level object if it's you + } + if (ISINDEX()) + { + PCHAR pSearch; + unsigned long nth; + SEARCHSPAWN ssSpawn; + ClearSearchSpawn(&ssSpawn); + ssSpawn.FRadius=999999.0f; + if (pSearch=strchr(Index,',')) + { + *pSearch=0; + ++pSearch; + ParseSearchSpawn(pSearch,&ssSpawn); + nth=GETNUMBER(); + } + else + { + if (ISNUMBER()) + { + nth=GETNUMBER(); + } + else + { + nth=1; + ParseSearchSpawn(Index,&ssSpawn); + } + } + if (Dest.Ptr=NthNearestSpawn(&ssSpawn,nth,pSpawn)) + { + Dest.Type=pSpawnType; + return true; + } + } + return false; +#else + case NearestSpawn: + if (pSpawn==(PSPAWNINFO)pCharSpawn) + { + return (dataNearestSpawn(argc,argv,Dest)!=0);// use top-level object if it's you + } + if (argc) + { + unsigned long nth; + SEARCHSPAWN ssSpawn; + ClearSearchSpawn(&ssSpawn); + ssSpawn.FRadius=999999.0f; + if (argc>=2 || !IsNumber(argv[0])) + { + ParseSearchSpawn(1,argc,argv,ssSpawn); + nth=atoi(argv[0]); + } + else + { + nth=atoi(argv[0]); + } + if (Dest.Ptr=NthNearestSpawn(&ssSpawn,nth,pSpawn)) + { + Dest.Type=pSpawnType; + return true; + } + } + return false; +#endif + case Trader: + Dest.DWord=pSpawn->Trader; + Dest.Type=pBoolType; + return true; + case AFK: + Dest.DWord=pSpawn->AFK; + Dest.Type=pBoolType; + return true; + case LFG: + Dest.DWord=pSpawn->LFG; + Dest.Type=pBoolType; + return true; + case Linkdead: + Dest.DWord=pSpawn->Linkdead; + Dest.Type=pBoolType; + return true; + case AATitle: // Leaving this in for older macros/etc.."Title" should be used instead. + Dest.Type=pStringType; + Dest.Ptr=&pSpawn->Title[0]; + return true; + case Title: + Dest.Type=pStringType; + Dest.Ptr=&pSpawn->Title[0]; + return true; + case Suffix: + Dest.Type=pStringType; + Dest.Ptr=&pSpawn->Suffix[0]; + return true; + case xGroupLeader: + if (GetCharInfo()->pGroupInfo && GetCharInfo()->pGroupInfo->pLeader) + { + CHAR Name[MAX_STRING]={0}; + GetCXStr(GetCharInfo()->pGroupInfo->pLeader->pName,Name,MAX_STRING); + Dest.DWord=(pSpawn->Type==SPAWN_PLAYER && !stricmp(Name,pSpawn->Name)); + Dest.Type=pBoolType; + return true; + } + return false; + case Assist: + if (gGameState==GAMESTATE_INGAME && GetCharInfo()->pSpawn && pSpawn) + { + DWORD nAssist; + { + if (GetCharInfo()->pSpawn->GroupAssistNPC[0]==pSpawn->SpawnID) + { + Dest.DWord=1; + Dest.Type=pBoolType; + return true; + } + } + for (nAssist=0 ; nAssist < 3 ; nAssist++) + { + if (GetCharInfo()->pSpawn->RaidAssistNPC[nAssist]==pSpawn->SpawnID) + { + Dest.DWord=1; + Dest.Type=pBoolType; + return true; + } + } + } + Dest.DWord=0; + Dest.Type=pBoolType; + return true; + case Mark: + if (gGameState==GAMESTATE_INGAME && GetCharInfo()->pSpawn && pSpawn) + { + DWORD nMark; + for (nMark=0 ; nMark < 3 ; nMark++) + { + if (GetCharInfo()->pSpawn->RaidMarkNPC[nMark]==pSpawn->SpawnID) + { + Dest.DWord=nMark+1; + Dest.Type=pIntType; + return true; + } + } + for (nMark=0 ; nMark < 3 ; nMark++) + { + if (GetCharInfo()->pSpawn->GroupMarkNPC[nMark]==pSpawn->SpawnID) + { + Dest.DWord=nMark+1; + Dest.Type=pIntType; + return true; + } + } + } + return false; + case Anonymous: + Dest.DWord=(pSpawn->Anon==1); + Dest.Type=pBoolType; + return true; + case Roleplaying: + Dest.DWord=(pSpawn->Anon==2); + Dest.Type=pBoolType; + return true; + case xLineOfSight: + Dest.DWord=(LineOfSight(GetCharInfo()->pSpawn,pSpawn)); + Dest.Type=pBoolType; + return true; + case HeadingToLoc: +#ifndef ISXEQ + if (!ISINDEX()) + return false; + if (PCHAR pComma=strchr(Index,',')) + { + *pComma=0; + FLOAT Y=(FLOAT)atof(Index); + *pComma=','; + FLOAT X=(FLOAT)atof(&pComma[1]); +#else + if (!argc) + return false; + if (argc==2) + { + FLOAT Y=(FLOAT)atof(argv[0]); + FLOAT X=(FLOAT)atof(argv[1]); +#endif + Dest.Float=(FLOAT)(atan2f(pSpawn->Y - Y, X - pSpawn->X) * 180.0f / PI + 90.0f); + if (Dest.Float<0.0f) + Dest.Float += 360.0f; + else if (Dest.Float>=360.0f) + Dest.Float -= 360.0f; + Dest.Type=pHeadingType; + return true; + } + return false; + case Fleeing: + Dest.DWord=IsMobFleeing(GetCharInfo()->pSpawn,pSpawn); + Dest.Type=pBoolType; + return true; + case Named: + Dest.DWord=IsNamed(pSpawn); + Dest.Type=pBoolType; + return true; + case Buyer: + Dest.DWord=pSpawn->Buyer; + Dest.Type=pBoolType; + return true; + case Moving: + Dest.DWord=fabs(pSpawn->SpeedRun)>0.0f; + Dest.Type=pBoolType; + return true; + case CurrentMana: + Dest.DWord=pSpawn->ManaCurrent; + Dest.Type=pIntType; + return true; + case MaxMana: + Dest.DWord=pSpawn->ManaMax; + Dest.Type=pIntType; + return true; + case CurrentEndurance: + Dest.DWord=pSpawn->EnduranceCurrent; + Dest.Type=pIntType; + return true; + case MaxEndurance: + Dest.DWord=pSpawn->EnduranceMax; + Dest.Type=pIntType; + return true; + case Loc: + sprintf(DataTypeTemp,"%.2f, %.2f",pSpawn->Y,pSpawn->X); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + case LocYX: + sprintf(DataTypeTemp,"%.0f, %.0f",pSpawn->Y,pSpawn->X); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + case Owner: + if(pSpawn->Mercenary) + { + unsigned int pos = strchr(pSpawn->Lastname, '\'') - &pSpawn->Lastname[0]; + strncpy(DataTypeTemp, pSpawn->Lastname, pos); + DataTypeTemp[pos] = 0; + if(PSPAWNINFO pOwner = (PSPAWNINFO)GetSpawnByName(DataTypeTemp)) + { + Dest.Ptr = pOwner; + Dest.Type = pSpawnType; + return true; + } + return false; + } + return false; + case Following: + if(Dest.Ptr = pSpawn->WhoFollowing) + { + Dest.Type = pSpawnType; + return true; + } + } + return false; +} + + +bool MQ2BuffType::GETMEMBER() +{ +#define pBuff ((PSPELLBUFF)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + if ((int)pBuff->SpellID<=0) + return false; + PMQ2TYPEMEMBER pMember=MQ2BuffType::FindMember(Member); + if (!pMember) + { + if (PSPELL pSpell=GetSpellByID(pBuff->SpellID)) + { +#ifndef ISXEQ + return pSpellType->GetMember(*(MQ2VARPTR*)&pSpell,Member,Index,Dest); +#else + return pSpellType->GetMember(*(LSVARPTR*)&pSpell,Member,argc,argv,Dest); +#endif + } + return false; + } + + static CHAR Temp[128]; + switch((BuffMembers)pMember->ID) + { + case ID: + { + if (GetBuffID(pBuff,(DWORD&)Dest.DWord)) + { + Dest.Type=pIntType; + return true; + } + if (GetShortBuffID(pBuff,(DWORD&)Dest.DWord)) + { + Dest.Type=pIntType; + return true; + } + } + return false; + case Level: + Dest.DWord=pBuff->Level; + Dest.Type=pIntType; + return true; + case Spell: + if (Dest.Ptr=GetSpellByID(pBuff->SpellID)) + { + Dest.Type=pSpellType; + return true; + } + return false; + case Mod: + Dest.Float=(((float)pBuff->Modifier)/10.0f); + if (Dest.Float!=1.0f) + { + Dest.Type=pFloatType; + return true; + } + return false; + case Duration: + Dest.DWord=pBuff->Duration+1;// 0 is actually 6 seconds ;) + Dest.Type=pTicksType; + return true; + case Dar: +#if 0 + if(PSPELL pSpell = GetSpellByID(pBuff->SpellID)) + { + if(pSpell->SpellType != 0) + { + Dest.DWord=pBuff->DamageAbsorbRemaining; + Dest.Type=pIntType; + return true; + } + } +#endif + return false; + case Counters: +#if 0 + if(GetSpellByID(pBuff->SpellID)->SpellType == 0) + { + Dest.DWord=pBuff->Counters; + Dest.Type=pIntType; + return true; + } +#endif + return false; + } + return false; +#undef pBuff +} + + +bool MQ2CharacterType::GETMEMBER() +{ +#define pChar ((PCHARINFO)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2CharacterType::FindMember(Member); + if (!pMember) + { +#ifndef ISXEQ + return pSpawnType->GetMember(*(MQ2VARPTR*)&pChar->pSpawn,Member,Index,Dest); +#else + return pSpawnType->GetMember(*(LSVARPTR*)&pChar->pSpawn,Member,argc,argv,Dest); +#endif + } + + int nLang = 0; + char buf[MAX_STRING] = {0}; + unsigned long nBuff; + char buf2[MAX_STRING] = {0}; + + switch((CharacterMembers)pMember->ID) + { + case ID: + Dest.DWord=pChar->pSpawn->SpawnID; + Dest.Type=pIntType; + return true; + case Name: + Dest.Ptr=&pChar->Name[0]; + Dest.Type=pStringType; + return true; + case Surname: + Dest.Ptr=&pChar->Lastname[0]; + Dest.Type=pStringType; + return true; + case Level: + Dest.DWord=GetCharInfo2()->Level; + Dest.Type=pIntType; + return true; + case Exp: + Dest.DWord=pChar->Exp; + Dest.Type=pIntType; + return true; + case PctExp: + Dest.Float=(float)pChar->Exp/3.30f; + Dest.Type=pFloatType; + return true; + case PctAAExp: + Dest.Float=(float)pChar->AAExp/3.30f; + Dest.Type=pFloatType; + return true; + case Spawn: + Dest.Ptr=pChar->pSpawn; + Dest.Type=pSpawnType; + return true; + case CurrentHPs: + Dest.DWord=GetCurHPS(); + Dest.Type=pIntType; + return true; + case MaxHPs: + Dest.Type=pIntType; + Dest.Int=GetMaxHPS(); + return true; + case PctHPs: + Dest.Type=pIntType; + Dest.Int=GetCurHPS()*100/GetMaxHPS(); + return true; + case CurrentMana: + Dest.DWord=GetCharInfo2()->Mana; + Dest.Type=pIntType; + return true; + case MaxMana: + Dest.DWord=GetMaxMana(); + Dest.Type=pIntType; + return true; + case PctMana: + { + if (unsigned long Temp=GetMaxMana()) + Dest.DWord=GetCharInfo2()->Mana*100/Temp; + else + Dest.DWord=0; + Dest.Type=pIntType; + } + return true; + case CountBuffs: + Dest.DWord=0; + { + for (unsigned long nBuff=0 ; nBuffBuff[nBuff].SpellID>0) + Dest.DWord++; + } + Dest.Type=pIntType; + } + return true; + case Buff: + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + unsigned long nBuff=GETNUMBER()-1; + if (nBuff>=NUM_LONG_BUFFS) + return false; + if (GetCharInfo2()->Buff[nBuff].SpellID<=0) + return false; + Dest.Ptr=&GetCharInfo2()->Buff[nBuff]; + Dest.Type=pBuffType; + return true; + } + else + { + for (unsigned long nBuff=0 ; nBuff < NUM_LONG_BUFFS ; nBuff++) + { + if (PSPELL pSpell=GetSpellByID(GetCharInfo2()->Buff[nBuff].SpellID)) + { + if (!stricmp(GETFIRST(),pSpell->Name)) + { + Dest.Ptr=&GetCharInfo2()->Buff[nBuff]; + Dest.Type=pBuffType; + return true; + } + } + } + } + return false; + case Song: + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + unsigned long nBuff=GETNUMBER()-1; + if (nBuff>=NUM_SHORT_BUFFS) + return false; + if (GetCharInfo2()->ShortBuff[nBuff].SpellID<=0) + return false; + + Dest.Ptr=&GetCharInfo2()->ShortBuff[nBuff]; + Dest.Type=pBuffType; + return true; + } + else + { + for (unsigned long nBuff=0 ; nBuff < 35 ; nBuff++) + { + if (PSPELL pSpell=GetSpellByID(GetCharInfo2()->ShortBuff[nBuff].SpellID)) + { + if (!stricmp(GETFIRST(),pSpell->Name)) + { + Dest.Ptr=&GetCharInfo2()->ShortBuff[nBuff]; + Dest.Type=pBuffType; + return true; + } + } + } + } + return false; + case HPBonus: + Dest.DWord=pChar->HPBonus; + Dest.Type=pIntType; + return true; + case ManaBonus: + Dest.DWord=pChar->ManaBonus; + Dest.Type=pIntType; + return true; + case EnduranceBonus: + Dest.DWord=pChar->EnduranceBonus; + Dest.Type=pIntType; + return true; + case CombatEffectsBonus: + Dest.DWord=(pChar->CombatEffectsBonus > pChar->CombatEffectsCap ? pChar->CombatEffectsCap : pChar->CombatEffectsBonus); + Dest.Type=pIntType; + return true; + case ShieldingBonus: + Dest.DWord=(pChar->ShieldingBonus > pChar->ShieldingCap ? pChar->ShieldingCap : pChar->ShieldingBonus); + Dest.Type=pIntType; + return true; + case SpellShieldBonus: + Dest.DWord=(pChar->SpellShieldBonus > pChar->SpellShieldCap ? pChar->SpellShieldCap : pChar->SpellShieldBonus); + Dest.Type=pIntType; + return true; + case AvoidanceBonus: + Dest.DWord=(pChar->AvoidanceBonus > pChar->AvoidanceCap ? pChar->AvoidanceCap : pChar->AvoidanceBonus); + Dest.Type=pIntType; + return true; + case AccuracyBonus: + Dest.DWord=(pChar->AccuracyBonus > pChar->AccuracyCap ? pChar->AccuracyCap : pChar->AccuracyBonus); + Dest.Type=pIntType; + return true; + case StunResistBonus: + Dest.DWord=(pChar->StunResistBonus > pChar->StunResistCap ? pChar->StunResistCap : pChar->StunResistBonus); + Dest.Type=pIntType; + return true; + case StrikeThroughBonus: + Dest.DWord=(pChar->StrikeThroughBonus > pChar->StrikeThroughCap ? pChar->StrikeThroughCap : pChar->StrikeThroughBonus); + Dest.Type=pIntType; + return true; + case DoTShieldBonus: + Dest.DWord=(pChar->DoTShieldBonus > pChar->DoTShieldCap ? pChar->DoTShieldCap : pChar->DoTShieldBonus); + Dest.Type=pIntType; + return true; + case AttackBonus: + Dest.DWord=pChar->AttackBonus; + Dest.Type=pIntType; + return true; + case HPRegenBonus: + Dest.DWord=pChar->HPRegenBonus; + Dest.Type=pIntType; + return true; + case ManaRegenBonus: + Dest.DWord=pChar->ManaRegenBonus; + Dest.Type=pIntType; + return true; + case DamageShieldBonus: + Dest.DWord=(pChar->DamageShieldBonus > pChar->DamageShieldCap ? pChar->DamageShieldCap : pChar->DamageShieldBonus); + Dest.Type=pIntType; + return true; + case DamageShieldMitigationBonus: + Dest.DWord=(pChar->DamageShieldMitigationBonus > pChar->DamageShieldMitigationCap ? pChar->DamageShieldMitigationCap : pChar->DamageShieldMitigationBonus); + Dest.Type=pIntType; + return true; + case HeroicSTRBonus: + Dest.DWord=pChar->HeroicSTRBonus; + Dest.Type=pIntType; + return true; + case HeroicINTBonus: + Dest.DWord=pChar->HeroicINTBonus; + Dest.Type=pIntType; + return true; + case HeroicWISBonus: + Dest.DWord=pChar->HeroicWISBonus; + Dest.Type=pIntType; + return true; + case HeroicAGIBonus: + Dest.DWord=pChar->HeroicAGIBonus; + Dest.Type=pIntType; + return true; + case HeroicDEXBonus: + Dest.DWord=pChar->HeroicDEXBonus; + Dest.Type=pIntType; + return true; + case HeroicSTABonus: + Dest.DWord=pChar->HeroicSTABonus; + Dest.Type=pIntType; + return true; + case HeroicCHABonus: + Dest.DWord=pChar->HeroicCHABonus; + Dest.Type=pIntType; + return true; + case HealAmountBonus: + Dest.DWord=pChar->HealAmountBonus; + Dest.Type=pIntType; + return true; + case SpellDamageBonus: + Dest.DWord=pChar->SpellDamageBonus; + Dest.Type=pIntType; + return true; + case ClairvoyanceBonus: + Dest.DWord=pChar->ClairvoyanceBonus; + Dest.Type=pIntType; + return true; + case EnduranceRegenBonus: + Dest.DWord=pChar->EnduranceRegenBonus; + Dest.Type=pIntType; + return true; + case AttackSpeed: + Dest.DWord=pChar->AttackSpeed; + Dest.Type=pIntType; + return true; + case Endurance: //Grandfathered, CurrentEndurance should be used instead. + Dest.DWord=GetCharInfo2()->Endurance; + Dest.Type=pIntType; + return true; + case CurrentEndurance: + Dest.DWord=GetCharInfo2()->Endurance; + Dest.Type=pIntType; + return true; + case MaxEndurance: + Dest.DWord=GetMaxEndurance(); + Dest.Type=pIntType; + return true; + case PctEndurance: + { + if (unsigned long Temp=GetMaxEndurance()) + Dest.DWord=(GetCharInfo2()->Endurance*100)/Temp; + else + Dest.DWord=0; + Dest.Type=pIntType; + } + return true; + case GukEarned: + return false;//TODO + //Dest.DWord=pChar->GukEarned; + Dest.Type=pIntType; + return true; + case MMEarned: + return false;//TODO + //Dest.DWord=pChar->MMEarned; + Dest.Type=pIntType; + return true; + case RujEarned: + return false;//TODO + //Dest.DWord=pChar->RujEarned; + Dest.Type=pIntType; + return true; + case TakEarned: + return false;//TODO + //Dest.DWord=pChar->TakEarned; + Dest.Type=pIntType; + return true; + case MirEarned: + return false;//TODO + //Dest.DWord=pChar->MirEarned; + Dest.Type=pIntType; + return true; + case LDoNPoints: + return false;//TODO + //Dest.DWord=pChar->LDoNPoints; + Dest.Type=pIntType; + return true; + case CurrentFavor: + Dest.DWord=pChar->CurrFavor; + Dest.Type=pIntType; + return true; + case CareerFavor: + Dest.DWord=pChar->CareerFavor; + Dest.Type=pIntType; + return true; + case Inventory: + if (ISINDEX()) + { + if (ISNUMBER()) + { + unsigned long nSlot=GETNUMBER(); + if (nSlot<0x800) + { + if (Dest.Ptr=GetCharInfo2()->pInventoryArray->InventoryArray[nSlot]) + { + Dest.Type=pItemType; + return true; + } + } + } + else + { + for (unsigned long nSlot=0 ; szItemSlot[nSlot] ; nSlot++) + { + if (!stricmp(GETFIRST(),szItemSlot[nSlot])) + { + if (Dest.Ptr=GetCharInfo2()->pInventoryArray->InventoryArray[nSlot]) + { + Dest.Type=pItemType; + return true; + } + } + } + } + } + return false; + case Bank: + if (ISINDEX()) + { + if (ISNUMBER()) + { + unsigned long nSlot=GETNUMBER()-1; + if (nSlotpBankArray->Bank[nSlot]) + { + Dest.Type=pItemType; + return true; + } + } else { + nSlot -= NUM_BANK_SLOTS; + if (nSlotpSharedBankArray->SharedBank[nSlot]) + { + Dest.Type=pItemType; + return true; + } + } + } + } + } + return false; + case PlatinumShared: + Dest.DWord=pChar->BankSharedPlat; + Dest.Type=pIntType; + return true; + case Cash: + Dest.DWord=GetCharInfo2()->Plat*1000+GetCharInfo2()->Gold*100+GetCharInfo2()->Silver*10+GetCharInfo2()->Copper; + Dest.Type=pIntType; + return true; + case Platinum: + Dest.DWord=GetCharInfo2()->Plat; + Dest.Type=pIntType; + return true; + case Gold: + Dest.DWord=GetCharInfo2()->Gold; + Dest.Type=pIntType; + return true; + case Silver: + Dest.DWord=GetCharInfo2()->Silver; + Dest.Type=pIntType; + return true; + case Copper: + Dest.DWord=GetCharInfo2()->Copper; + Dest.Type=pIntType; + return true; + case CashBank: + Dest.DWord=pChar->BankPlat*1000+pChar->BankGold*100+pChar->BankSilver*10+pChar->BankCopper; + Dest.Type=pIntType; + return true; + case PlatinumBank: + Dest.DWord=pChar->BankPlat; + Dest.Type=pIntType; + return true; + case GoldBank: + Dest.DWord=pChar->BankGold; + Dest.Type=pIntType; + return true; + case SilverBank: + Dest.DWord=pChar->BankSilver; + Dest.Type=pIntType; + return true; + case CopperBank: + Dest.DWord=pChar->BankCopper; + Dest.Type=pIntType; + return true; + case AAExp: + Dest.DWord=pChar->AAExp; + Dest.Type=pIntType; + return true; + case AAPoints: + Dest.DWord=GetCharInfo2()->AAPoints; + Dest.Type=pIntType; + return true; + case Combat: + Dest.DWord=*EQADDR_ATTACK; + Dest.Type=pBoolType; + return true; + case HPRegen: + Dest.DWord=HealthGained; + Dest.Type=pIntType; + return true; + case ManaRegen: + Dest.DWord=ManaGained; + Dest.Type=pIntType; + return true; + case EnduranceRegen: + Dest.DWord=EnduranceGained; + Dest.Type=pIntType; + return true; + case Dar: +#if 0 + Dest.DWord=0; + { + for (unsigned long k=0; kBuff[k].SpellID)) + if(pSpell->SpellType != 0) + if(GetCharInfo2()->Buff[k].DamageAbsorbRemaining) + Dest.DWord+=GetCharInfo2()->Buff[k].DamageAbsorbRemaining; + else if(GetCharInfo2()->Buff[k].DamageAbsorbRemaining2) + Dest.DWord+=GetCharInfo2()->Buff[k].DamageAbsorbRemaining2; + else if(GetCharInfo2()->Buff[k].DamageAbsorbRemaining3) + Dest.DWord+=GetCharInfo2()->Buff[k].DamageAbsorbRemaining3; + } + Dest.Type=pIntType; + return true; +#endif + return false; + case Grouped: + if(!pChar->pGroupInfo) return false; + Dest.DWord= pChar->pGroupInfo->pMember[1] || + pChar->pGroupInfo->pMember[2] || + pChar->pGroupInfo->pMember[3] || + pChar->pGroupInfo->pMember[4] || + pChar->pGroupInfo->pMember[5]; + Dest.Type=pBoolType; + return true; + case GroupList: // This isn't really working as intended just yet + { + if(!pChar->pGroupInfo) return false; + for(int i=1; i<6; i++) + if(pChar->pGroupInfo->pMember[i]) + { + char tmp[MAX_STRING]; + GetCXStr(pChar->pGroupInfo->pMember[i]->pName, tmp, sizeof(tmp)); + strcat(buf, tmp); + if(i<5 && pChar->pGroupInfo->pMember[i+1]) + strcat(buf, " "); + } + } + Dest.Ptr=&buf[0]; + Dest.Type=pStringType; + return true; + case AmIGroupLeader: + if (!pChar->pGroupInfo) return false; + if (!pChar->pGroupInfo->pLeader) return false; + GetCXStr(pChar->pGroupInfo->pLeader->pName, buf, sizeof(buf)); + if(!stricmp(buf, pChar->Name)) + Dest.Ptr="TRUE"; + else + Dest.Ptr="FALSE"; + Dest.Type=pStringType; + return true; + case FreeBuffSlots: + Dest.DWord=GetAAIndexByName("mystical attuning"); + if (PlayerHasAAAbility(Dest.DWord)) + { + for (unsigned int j=0; j < AA_CHAR_MAX_REAL; j++) + { + if ( pPCData->GetAltAbilityIndex(j) == Dest.DWord) + { + Dest.DWord=15+(GetCharInfo2()->AAList[j].PointsSpent/5); + break; + } + } + } else Dest.DWord = 15; + if(GetAAIndexByName("Embrace of the Dark Reign")) Dest.DWord++; + if(GetAAIndexByName("Embrace of the Keepers")) Dest.DWord++; + if(GetCharInfo()->pSpawn->Level > 71) Dest.DWord++; + if(GetCharInfo()->pSpawn->Level > 74) Dest.DWord++; + + for (nBuff=0 ; nBuffBuff[nBuff].SpellID>0) + Dest.DWord--; + } + Dest.Type = pIntType; + return true; + case Gem: + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + // number + unsigned long nGem=GETNUMBER()-1; + if (nGemMemorizedSpells[nGem])) + { + Dest.Type=pSpellType; + return true; + } + } + } + else + { + // name + for (unsigned long nGem=0 ; nGem < NUM_SPELL_GEMS ; nGem++) + { + if (PSPELL pSpell=GetSpellByID(GetCharInfo2()->MemorizedSpells[nGem])) + { + if (!stricmp(GETFIRST(),pSpell->Name)) + { + Dest.DWord=nGem+1; + Dest.Type=pIntType; + return true; + } + } + } + } + return false; + case LanguageSkill: + if (!ISINDEX()) + return false; + + if (ISNUMBER()) + nLang=GETNUMBER()-1; + else + nLang=GetLanguageIDByName(GETFIRST())-1; + + if (nLang < 0 || nLang >= 25 ) + return false; + + Dest.DWord=pChar->languages[nLang]; + Dest.Type=pIntType; + return true; + case CombatAbility: + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + // number + unsigned long nCombatAbility=GETNUMBER()-1; + if ( PSPELL pSpell = GetSpellByID(pPCData->GetCombatAbility(nCombatAbility)) ) + { + Dest.Ptr=pSpell; + Dest.Type=pSpellType; + return true; + } + } + else + { + // name + for (unsigned long nCombatAbility=0 ; nCombatAbility < NUM_COMBAT_ABILITIES ; nCombatAbility++) + { + if ( PSPELL pSpell = GetSpellByID(pPCData->GetCombatAbility(nCombatAbility)) ) + { + if (!stricmp(GETFIRST(),pSpell->Name)) + { + Dest.DWord=nCombatAbility+1; + Dest.Type=pIntType; + return true; + } + } + } + } + return false; + case CombatAbilityTimer: + if (ISINDEX()) + { + if (ISNUMBER()) + { + // number + unsigned long nCombatAbility=GETNUMBER()-1; + if ( PSPELL pSpell = GetSpellByID(pPCData->GetCombatAbility(nCombatAbility)) ) + { + DWORD timeNow = (DWORD)time(NULL); + if (pSpell->CARecastTimerID != -1 && pPCData->GetCombatAbilityTimer(pSpell->CARecastTimerID) > timeNow) + { + Dest.Int=pPCData->GetCombatAbilityTimer(pSpell->CARecastTimerID)-timeNow+6; + Dest.Int/=6; + } + else Dest.Int=0; + Dest.Type=pTicksType; + return true; + } + } + else + { + // by name + for (unsigned long nCombatAbility=0 ; nCombatAbility < NUM_COMBAT_ABILITIES ; nCombatAbility++) + { + if ( PSPELL pSpell = GetSpellByID(pPCData->GetCombatAbility(nCombatAbility)) ) + { + if (!stricmp(GETFIRST(),pSpell->Name)) + { + DWORD timeNow = (DWORD)time(NULL); + if (pSpell->CARecastTimerID != -1 && pPCData->GetCombatAbilityTimer(pSpell->CARecastTimerID) > timeNow) + { + Dest.Int=pPCData->GetCombatAbilityTimer(pSpell->CARecastTimerID)-timeNow+6; + Dest.Int/=6; + } + else Dest.Int=0; + Dest.Type=pTicksType; + return true; + } + } + } + } + } + return false; + case CombatAbilityReady: + Dest.DWord=0; + Dest.Type=pBoolType; + if (ISINDEX()) + { + if (ISNUMBER() && GETNUMBER()-1 < NUM_COMBAT_ABILITIES) + { + // number + unsigned long nCombatAbility=GETNUMBER()-1; + if ( PSPELL pSpell = GetSpellByID(pPCData->GetCombatAbility(nCombatAbility)) ) + { + DWORD timeNow = (DWORD)time(NULL); + if (pSpell->CARecastTimerID != -1 && pPCData->GetCombatAbilityTimer(pSpell->CARecastTimerID) < timeNow) + { + Dest.DWord=1; + return true; + } + } + } + else + { + // by name + for (unsigned long nCombatAbility=0 ; nCombatAbility < NUM_COMBAT_ABILITIES ; nCombatAbility++) + { + if ( PSPELL pSpell = GetSpellByID(pPCData->GetCombatAbility(nCombatAbility)) ) + { + if (!stricmp(GETFIRST(),pSpell->Name)) + { + DWORD timeNow = (DWORD)time(NULL); + if (pSpell->CARecastTimerID != -1 && pPCData->GetCombatAbilityTimer(pSpell->CARecastTimerID) < timeNow) + { + Dest.DWord=1; + return true; + } + } + } + } + } + } + return true; + case Moving: + Dest.DWord=((((gbMoving) && ((PSPAWNINFO)pCharSpawn)->SpeedRun==0.0f) && (pChar->pSpawn->Mount == NULL )) || (fabs(FindSpeed((PSPAWNINFO)pCharSpawn)) > 0.0f )); + Dest.Type=pBoolType; + return true; + case Hunger: + Dest.DWord=GetCharInfo2()->hungerlevel; + Dest.Type=pIntType; + return true; + case Thirst: + Dest.DWord=GetCharInfo2()->thirstlevel; + Dest.Type=pIntType; + return true; + case AltAbilityTimer: + if (ISINDEX()) { + if (ISNUMBER()) { + //numeric + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(pPCData->GetAltAbilityIndex(nAbility)) ) { + if (pAbility->ID == GETNUMBER() ) { + pAltAdvManager->IsAbilityReady(pPCData,pAbility,&Dest.Int); + if (Dest.Int<0) + return false; + Dest.Int/=6; + Dest.Type=pTicksType; + return true; + } + } + } + } else { + // by name + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(pPCData->GetAltAbilityIndex(nAbility)) ) { + if (PCHAR pName=pCDBStr->GetString(pAbility->nName, 1, NULL)) { + if (!stricmp(GETFIRST(),pName)) { + pAltAdvManager->IsAbilityReady(pPCData,pAbility,&Dest.Int); + if (Dest.Int<0) + return false; + Dest.Int/=6; + Dest.Type=pTicksType; + return true; + } + } + } + } + } + } + return false; + case AltAbilityReady: + if (ISINDEX()) { + if (ISNUMBER()) { + //numeric + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(pPCData->GetAltAbilityIndex(nAbility)) ) { + if (pAbility->ID == GETNUMBER()) { + Dest.DWord=pAltAdvManager->IsAbilityReady(pPCData,pAbility,0); + Dest.Type=pBoolType; + return true; + } + } + } + } else { + // by name + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(pPCData->GetAltAbilityIndex(nAbility)) ) { + if (PCHAR pName=pCDBStr->GetString(pAbility->nName, 1, NULL)) { + if (!stricmp(GETFIRST(),pName)) { + Dest.DWord=pAltAdvManager->IsAbilityReady(pPCData,pAbility,0); + Dest.Type=pBoolType; + return true; + } + } + } + } + } + } + return false; + case AltAbility: + if (ISINDEX()) { + if (ISNUMBER()) { + //numeric + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(pPCData->GetAltAbilityIndex(nAbility)) ) { + if (pAbility->ID == GETNUMBER()) { + Dest.Ptr = pAbility; + Dest.Type = pAltAbilityType; + return true; + } + } + } + } else { + // by name + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(pPCData->GetAltAbilityIndex(nAbility)) ) { + if (PCHAR pName=pCDBStr->GetString(pAbility->nName, 1, NULL)) { + if (!stricmp(GETFIRST(),pName)) { + Dest.Ptr = pAbility; + Dest.Type = pAltAbilityType; + return true; + } + } + } + } + } + } + return false; + case Skill: + if (ISINDEX()) + { + if (ISNUMBER()) + { + // numeric + unsigned long nSkill=GETNUMBER()-1; + if (nSkillSkill[nSkill]; + Dest.Type=pIntType; + if (!Dest.DWord) { + if(pSkillMgr->pSkill[nSkill]->Activated) { + for(int btn=0; !Dest.DWord && btn<10; btn++) { + if(EQADDR_DOABILITYLIST[btn]==nSkill) Dest.DWord=1; + } + } + } + return true; + } + } + else + { + // name + for (DWORD nSkill=0;nSkillSkill[nSkill]; + Dest.Type=pIntType; + // note: this change fixes the problem where ${Me.Skill[Forage]} returns + // 0 even if you have bought the aa for cultural forage... + if (!Dest.DWord) { + if(pSkillMgr->pSkill[nSkill]->Activated) { + for(int btn=0; !Dest.DWord && btn<10; btn++) { + if(EQADDR_DOABILITYLIST[btn]==nSkill) Dest.DWord=1; + } + } + } + return true; + } + } + } + return false; + + case SkillCap: + if (ISINDEX()) { + class PcZoneClient *p = (PcZoneClient *)GetCharInfo(); + unsigned long nSkill = 0; + + if (ISNUMBER()) { + // numeric + nSkill=GETNUMBER()-1; + } else { + for (nSkill=0;nSkillGetPcSkillLimit(nSkill); + return true; + } + } + return false; + + case Ability: + if (ISINDEX()) + { + if (ISNUMBER()) + { + // numeric + if (unsigned long nSkill=GETNUMBER()) + { + if (nSkill<7) + { + nSkill+=3; + } + else if (nSkill<11) + { + nSkill-=7; + } + else + return false; + if (EQADDR_DOABILITYLIST[nSkill]!=0xFFFFFFFF) + { + Dest.Ptr=szSkills[EQADDR_DOABILITYLIST[nSkill]]; + Dest.Type=pStringType; + return true; + } + } + } + else + { + // name + for (DWORD nSkill=0;szSkills[nSkill];nSkill++) + if (!stricmp(GETFIRST(),szSkills[nSkill])) + { + // found name + for (DWORD nAbility=0;nAbility<10;nAbility++) + if (EQADDR_DOABILITYLIST[nAbility] == nSkill) + { + if (nAbility<4) + nAbility+=7; + else + nAbility-=3; + Dest.DWord=nAbility; + Dest.Type=pIntType; + return true; + } + } + } + } + return false; + case AbilityReady: + if (ISINDEX()) + { + if (ISNUMBER()) + { + // numeric + if (unsigned long nSkill=GETNUMBER()) + { + if (nSkill<7) + { + nSkill+=3; + } + else if (nSkill<11) + { + nSkill-=7; + } + else + return false; + /**/ + if (EQADDR_DOABILITYLIST[nSkill]!=0xFFFFFFFF) + { + //if (pSkillMgr->pSkill[EQADDR_DOABILITYLIST[nSkill]]->AltTimer==2) + // Dest.DWord=gbAltTimerReady; + //else + Dest.DWord=pCSkillMgr->IsAvailable(EQADDR_DOABILITYLIST[nSkill]); + Dest.Type=pBoolType; + return true; + } + } + } + else + { + // name + for (DWORD nSkill=0;szSkills[nSkill];nSkill++) + { + if (!stricmp(GETFIRST(),szSkills[nSkill])) + { + // found name + for (DWORD nAbility=0;nAbility<10;nAbility++) + { + if (EQADDR_DOABILITYLIST[nAbility] == nSkill) + { + // thanks s0rcier! + if (nSkill<100 || nSkill == 111 || nSkill == 114 || nSkill == 115 || nSkill == 116) + { + //if (pSkillMgr->pSkill[nSkill]->AltTimer==2) // this check is included in CSkillMgr::IsAvailable + // Dest.DWord=gbAltTimerReady; + //else + Dest.DWord=pCSkillMgr->IsAvailable(EQADDR_DOABILITYLIST[nAbility]); + Dest.Type=pBoolType; + return true; + } + //if (nSkill==111) { // this check is included in CSkillMgr::IsAvailable + // Dest.DWord=gbAltTimerReady; + // Dest.Type=pBoolType; + // return true; + //} + if (nSkill==105 || nSkill==107) { + Dest.DWord=LoH_HT_Ready(); + Dest.Type=pBoolType; + return true; + } + return false; + } + } + } + } + } + } + return false; + case RangedReady: + Dest.DWord=gbRangedAttackReady; + Dest.Type=pBoolType; + return true; + case AltTimerReady: + Dest.DWord=gbAltTimerReady; + Dest.Type=pBoolType; + return true; + case Book: + if (ISINDEX()) + { + if (ISNUMBER()) + { + // numeric + unsigned long nSpell=GETNUMBER()-1; + if (nSpellSpellBook[nSpell])) + { + Dest.Type=pSpellType; + return true; + } + } + else + { + // name + for (DWORD nSpell=0 ; nSpell < NUM_BOOK_SLOTS ; nSpell++) + if (GetCharInfo2()->SpellBook[nSpell] != 0xFFFFFFFF) + { + if (!stricmp(GetSpellNameByID(GetCharInfo2()->SpellBook[nSpell]),GETFIRST())) + { + Dest.DWord=nSpell+1; + Dest.Type=pIntType; + return true; + } + } + } + } + return false; + case SpellReady: + if (pCastSpellWnd && ISINDEX()) + { + if (ISNUMBER()) + { + // numeric + unsigned long nGem=GETNUMBER()-1; + if (nGemSpellSlots[nGem]) + Dest.DWord=0; + else + Dest.DWord = (((PEQCASTSPELLWINDOW)pCastSpellWnd)->SpellSlots[nGem]->spellstate!=1); + Dest.Type=pBoolType; + return true; + } + } + else + { + for (unsigned long nGem=0 ; nGem < NUM_SPELL_GEMS ; nGem++) + { + if (PSPELL pSpell=GetSpellByID(GetCharInfo2()->MemorizedSpells[nGem])) + { + if (!stricmp(GETFIRST(),pSpell->Name)) + { + if (!((PEQCASTSPELLWINDOW)pCastSpellWnd)->SpellSlots[nGem]) + Dest.DWord=0; + else + Dest.DWord = (((PEQCASTSPELLWINDOW)pCastSpellWnd)->SpellSlots[nGem]->spellstate!=1); + Dest.Type=pBoolType; + return true; + } + } + } + } + } + return false; + case PetBuff: + if (!ISINDEX() || !pPetInfoWnd) + return false; +#define pPetInfoWindow ((PEQPETINFOWINDOW)pPetInfoWnd) + if (ISNUMBER()) + { + unsigned long nBuff=GETNUMBER()-1; + if (nBuff>NUM_BUFF_SLOTS) + return false; + if (pPetInfoWindow->Buff[nBuff]==0xFFFFFFFF || pPetInfoWindow->Buff[nBuff]==0) + return false; + if (Dest.Ptr=GetSpellByID(pPetInfoWindow->Buff[nBuff])) + { + Dest.Type=pSpellType; + return true; + } + } + else + { + for (unsigned long nBuff=0 ; nBuff < NUM_BUFF_SLOTS ; nBuff++) + { + if (PSPELL pSpell=GetSpellByID(pPetInfoWindow->Buff[nBuff])) + { + if (!stricmp(GETFIRST(),pSpell->Name)) + { + Dest.DWord=nBuff+1; + Dest.Type=pIntType; + return true; + } + } + } + } +#undef pPetInfoWindow + return false; + case GroupLeaderExp: + Dest.Float=(FLOAT)pChar->GroupLeadershipExp; + Dest.Type=pFloatType; + return true; + case RaidLeaderExp: + Dest.Float=(FLOAT)pChar->RaidLeadershipExp; + Dest.Type=pFloatType; + return true; + case PctGroupLeaderExp: + Dest.Float=(float)pChar->GroupLeadershipExp/10.0f; + Dest.Type=pFloatType; + return true; + case PctRaidLeaderExp: + Dest.Float=(float)pChar->RaidLeadershipExp/10.0f; + Dest.Type=pFloatType; + return true; + case GroupLeaderPoints: + Dest.DWord=pChar->GroupLeadershipPoints; + Dest.Type=pIntType; + return true; + case RaidLeaderPoints: + Dest.DWord=pChar->RaidLeadershipPoints; + Dest.Type=pIntType; + return true; + case Stunned: + Dest.DWord=(pChar->Stunned==1); + Dest.Type=pBoolType; + return true; + case LargestFreeInventory: + { + Dest.DWord=0; + Dest.Type=pIntType; + for (DWORD slot=BAG_SLOT_START;slotpInventoryArray->InventoryArray[slot]) + { + if (GetItemFromContents(pItem)->Type==ITEMTYPE_PACK && GetItemFromContents(pItem)->SizeCapacity>Dest.DWord) + { + for (DWORD pslot=0;pslot<(GetItemFromContents(pItem)->Slots);pslot++) + { + if (!pItem->pContentsArray || !pItem->pContentsArray->Contents[pslot]) + { + Dest.DWord=GetItemFromContents(pItem)->SizeCapacity; + break;// break the loop for this pack + } + } + } + } + else + { + Dest.DWord=4; + return true; + } + } + } + return true; + case FreeInventory: + if (ISINDEX()) + { + DWORD nSize=GETNUMBER(); + if (nSize>4) + nSize=4; + Dest.DWord=0; + for (DWORD slot=BAG_SLOT_START;slotpInventoryArray->InventoryArray[slot]) + { + if (GetItemFromContents(pItem)->Type==ITEMTYPE_PACK && GetItemFromContents(pItem)->SizeCapacity>=nSize) + { + if (!pItem->pContentsArray) { + Dest.DWord+= GetItemFromContents(pItem)->Slots; + } else { + for (DWORD pslot=0;pslot<(GetItemFromContents(pItem)->Slots);pslot++) + { + if (!pItem->pContentsArray->Contents[pslot]) + Dest.DWord++; + } + } + } + } + else + { + Dest.DWord++; + } + } + Dest.Type=pIntType; + return true; + } + else + { + Dest.DWord=0; + for (DWORD slot=BAG_SLOT_START;slot 30) + break; + if (PCONTENTS pItem = GetCharInfo2()->pInventoryArray->InventoryArray[slot]) + { + if (GetItemFromContents(pItem)->Type==ITEMTYPE_PACK) + { + if (!pItem->pContentsArray) { + Dest.DWord+= GetItemFromContents(pItem)->Slots; + } else { + for (DWORD pslot=0;pslot<(GetItemFromContents(pItem)->Slots);pslot++) + { + if (!pItem->pContentsArray->Contents[pslot]) + Dest.DWord++; + } + } + } + } + else + { + Dest.DWord++; + } + } + Dest.Type=pIntType; + return true; + } + case Drunk: + Dest.DWord=GetCharInfo2()->Drunkenness; + Dest.Type=pIntType; + return true; + case TargetOfTarget: + if (gGameState==GAMESTATE_INGAME && GetCharInfo()->pSpawn) + if (Dest.Ptr=GetSpawnByID(pChar->pSpawn->TargetOfTarget)) + { + Dest.Type=pSpawnType; + return true; + } + return false; + case RaidAssistTarget: + if (gGameState==GAMESTATE_INGAME && GetCharInfo()->pSpawn) + if (ISINDEX() && ISNUMBER()) + { + DWORD N=GETNUMBER()-1; + if (N>=3) + return false; + if (Dest.Ptr=GetSpawnByID(pChar->pSpawn->RaidAssistNPC[N])) + { + Dest.Type=pSpawnType; + return true; + } + } + return false; + case GroupAssistTarget: + if (gGameState==GAMESTATE_INGAME && GetCharInfo()->pSpawn) + { + if (Dest.Ptr=GetSpawnByID(pChar->pSpawn->GroupAssistNPC[0])) + { + Dest.Type=pSpawnType; + return true; + } + } + return false; + case RaidMarkNPC: + if (gGameState==GAMESTATE_INGAME && GetCharInfo()->pSpawn) + if (ISINDEX() && ISNUMBER()) + { + DWORD N=GETNUMBER()-1; + if (N>=3) + return false; + if (Dest.Ptr=GetSpawnByID(pChar->pSpawn->RaidMarkNPC[N])) + { + Dest.Type=pSpawnType; + return true; + } + } + return false; + case GroupMarkNPC: + if (gGameState==GAMESTATE_INGAME && GetCharInfo()->pSpawn) + if (ISINDEX() && ISNUMBER()) + { + DWORD N=GETNUMBER()-1; + if (N>=3) + return false; + if (Dest.Ptr=GetSpawnByID(pChar->pSpawn->GroupMarkNPC[N])) + { + Dest.Type=pSpawnType; + return true; + } + } + return false; + case STR: + Dest.DWord=pChar->STR; + Dest.Type=pIntType; + return true; + case STA: + Dest.DWord=pChar->STA; + Dest.Type=pIntType; + return true; + case AGI: + Dest.DWord=pChar->AGI; + Dest.Type=pIntType; + return true; + case DEX: + Dest.DWord=pChar->DEX; + Dest.Type=pIntType; + return true; + case WIS: + Dest.DWord=pChar->WIS; + Dest.Type=pIntType; + return true; + case INT: + Dest.DWord=pChar->INT; + Dest.Type=pIntType; + return true; + case CHA: + Dest.DWord=pChar->CHA; + Dest.Type=pIntType; + return true; + case svMagic: + Dest.DWord=pChar->SaveMagic; + Dest.Type=pIntType; + return true; + case svFire: + Dest.DWord=pChar->SaveFire; + Dest.Type=pIntType; + return true; + case svCold: + Dest.DWord=pChar->SaveCold; + Dest.Type=pIntType; + return true; + case svPoison: + Dest.DWord=pChar->SavePoison; + Dest.Type=pIntType; + return true; + case svDisease: + Dest.DWord=pChar->SaveDisease; + Dest.Type=pIntType; + return true; + case CurrentWeight: + Dest.DWord=pChar->CurrWeight; + Dest.Type=pIntType; + return true; + case AAPointsSpent: + Dest.DWord=GetCharInfo2()->AAPointsSpent; + Dest.Type=pIntType; + return true; + case AAPointsTotal: + Dest.DWord=GetCharInfo2()->AAPointsSpent+GetCharInfo2()->AAPoints; + Dest.Type=pIntType; + return true; + case TributeActive: + Dest.DWord=*pTributeActive; + Dest.Type=pBoolType; + return true; + case Running: + Dest.DWord=(*EQADDR_RUNWALKSTATE); + Dest.Type=pBoolType; + return true; + case GroupSize: + Dest.DWord= 0; + { + if(!pChar->pGroupInfo) return false; + for(int i=1; i<6; i++) + if (pChar->pGroupInfo->pMember[i]) Dest.DWord++; + if (Dest.DWord) Dest.DWord++; + } + Dest.Type=pIntType; + return true; + case TributeTimer: + Dest.DWord=pChar->TributeTimer/60/100; + Dest.Type=pTicksType; + return true; + case RadiantCrystals: + Dest.DWord=pChar->RadiantCrystals; + Dest.Type=pIntType; + return true; + case EbonCrystals: + Dest.DWord=pChar->EbonCrystals; + Dest.Type=pIntType; + return true; + case Shrouded: + Dest.DWord=GetCharInfo2()->Shrouded; + Dest.Type=pBoolType; + return true; + case AutoFire: + Dest.DWord=gAutoFire; + Dest.Type=pBoolType; + return true; + case Language: + if(!ISINDEX()) + return false; + if(ISNUMBER()) + { + nLang=GETNUMBER()-1; + Dest.Ptr=pEverQuest->GetLangDesc(nLang); + Dest.Type=pStringType; + return true; + } + else + nLang=GetLanguageIDByName(GETFIRST())-1; + if(nLang<0 || nLang>=25) + return false; + Dest.DWord=nLang; + Dest.Type=pIntType; + return true; + case Aura: + if(PAURAMGR pAura=(PAURAMGR)pAuraMgr) + { + if(pAura->NumAuras) + { + DataTypeTemp[0] = 0; + PAURAS pAuras = (PAURAS)(*pAura->pAuraInfo); + if(ISINDEX()) + { + DWORD n = 0; + if(ISNUMBER()) + { + n = GETNUMBER(); + if(n > pAura->NumAuras) + return false; + n--; + strcpy(DataTypeTemp, pAuras->Aura[n].Name); + } + else + { + for(n = 0; n < pAura->NumAuras; n++) + { + if(!stricmp(GETFIRST(), pAuras->Aura[n].Name)) + { + strcpy(DataTypeTemp, pAuras->Aura[n].Name); + } + } + } + } + else + { + strcpy(DataTypeTemp, pAuras->Aura[0].Name); + } + if(DataTypeTemp[0]) + { + Dest.Ptr = DataTypeTemp; + Dest.Type = pStringType; + return true; + } + } + } + return false; + case LAMarkNPC: + Dest.DWord=GetCharInfo()->ActiveAbilities.MarkNPC; + Dest.Type=pIntType; + return true; + case LANPCHealth: + Dest.DWord=GetCharInfo()->ActiveAbilities.NPCHealth; + Dest.Type=pIntType; + return true; + case LADelegateMA: + Dest.DWord=GetCharInfo()->ActiveAbilities.DelegateMA; + Dest.Type=pIntType; + return true; + case LADelegateMarkNPC: + Dest.DWord=GetCharInfo()->ActiveAbilities.DelegateMarkNPC; + Dest.Type=pIntType; + return true; + case LAInspectBuffs: + Dest.DWord=GetCharInfo()->ActiveAbilities.InspectBuffs; + Dest.Type=pIntType; + return true; + case LASpellAwareness: + Dest.DWord=GetCharInfo()->ActiveAbilities.SpellAwareness; + Dest.Type=pIntType; + return true; + case LAOffenseEnhancement: + Dest.DWord=GetCharInfo()->ActiveAbilities.OffenseEnhancement; + Dest.Type=pIntType; + return true; + case LAManaEnhancement: + Dest.DWord=GetCharInfo()->ActiveAbilities.ManaEnhancement; + Dest.Type=pIntType; + return true; + case LAHealthEnhancement: + Dest.DWord=GetCharInfo()->ActiveAbilities.HealthEnhancement; + Dest.Type=pIntType; + return true; + case LAHealthRegen: + Dest.DWord=GetCharInfo()->ActiveAbilities.HealthRegen; + Dest.Type=pIntType; + return true; + case LAFindPathPC: + Dest.DWord=GetCharInfo()->ActiveAbilities.FindPathPC; + Dest.Type=pIntType; + return true; + case LAHoTT: + Dest.DWord=GetCharInfo()->ActiveAbilities.HoTT; + Dest.Type=pIntType; + return true; + case ActiveFavorCost: + if(*pTributeActive) + { + Dest.Int=pEQMisc->GetActiveFavorCost(); + Dest.Type=pIntType; + return true; + } + return false; + case CombatState: + switch(((PCPLAYERWND)pPlayerWnd)->CombatState) + { + case 0: + if(((CXWnd*)pPlayerWnd)->GetChildItem("PW_CombatStateAnim")) + { + Dest.Ptr="COMBAT"; + break; + } + Dest.Ptr="NULL"; + break; + case 1: + Dest.Ptr="DEBUFFED"; + break; + case 2: + Dest.Ptr="COOLDOWN"; + break; + case 3: + Dest.Ptr="ACTIVE"; + break; + case 4: + Dest.Ptr="RESTING"; + break; + default: + Dest.Ptr="UNKNOWN"; + break; + } + Dest.Type=pStringType; + return true; + case svCorruption: + Dest.DWord=pChar->SaveCorruption; + Dest.Type=pIntType; + return true; + case svPrismatic: + Dest.DWord=(pChar->SaveMagic + pChar->SaveFire + pChar->SaveCold + pChar->SavePoison + pChar->SaveDisease)/5; + Dest.Type=pIntType; + return true; + case svChromatic: + { + unsigned int lowSave; + lowSave = pChar->SaveMagic; + if(lowSave > pChar->SaveFire) + lowSave = pChar->SaveFire; + if(lowSave > pChar->SaveCold) + lowSave = pChar->SaveCold; + if(lowSave > pChar->SavePoison) + lowSave = pChar->SavePoison; + if(lowSave > pChar->SaveDisease) + lowSave = pChar->SaveDisease; + Dest.DWord=lowSave; + Dest.Type=pIntType; + return true; + } + case Doubloons: + Dest.DWord=pPlayerPointManager->GetAltCurrency(ALTCURRENCY_DOUBLOONS); + Dest.Type=pIntType; + return true; + case Orux: + Dest.DWord=pPlayerPointManager->GetAltCurrency(ALTCURRENCY_ORUX); + Dest.Type=pIntType; + return true; + case Phosphenes: + Dest.DWord=pPlayerPointManager->GetAltCurrency(ALTCURRENCY_PHOSPHENES); + Dest.Type=pIntType; + return true; + case Phosphites: + Dest.DWord=pPlayerPointManager->GetAltCurrency(ALTCURRENCY_PHOSPHITES); + Dest.Type=pIntType; + return true; + case Faycites: + Dest.DWord=pPlayerPointManager->GetAltCurrency(ALTCURRENCY_FAYCITES); + Dest.Type=pIntType; + return true; + case Chronobines: + Dest.DWord=pPlayerPointManager->GetAltCurrency(ALTCURRENCY_CHRONOBINES); + Dest.Type=pIntType; + return true; + case Fellowship: + Dest.Ptr=&pChar->pSpawn->Fellowship; + Dest.Type=pFellowshipType; + return true; + case Downtime: + if(pChar->DowntimeStamp) + Dest.DWord=((pChar->Downtime-(GetFastTime()-pChar->DowntimeStamp))/6)+1; + else + Dest.DWord=0; + Dest.Type=pTicksType; + return true; + case Counters: +#if 0 + Dest.DWord=0; + { + for (unsigned long k=0; kBuff[k].SpellID)) + if(pSpell->SpellType == 0 && GetCharInfo2()->Buff[k].DamageAbsorbRemaining) + Dest.DWord += GetCharInfo2()->Buff[k].DamageAbsorbRemaining; + } + Dest.Type=pIntType; + return true; +#endif + return false; + case Mercenary: + if(pMercInfo->HaveMerc) + { + if(pMercInfo->MercState == 1) + Dest.Ptr = "SUSPENDED"; + else if(pMercInfo->MercState == 5) + Dest.Ptr = "ACTIVE"; + else + Dest.Ptr = "UNKNOWN"; + } + else + Dest.Ptr = "NULL"; + Dest.Type = pStringType; + return true; + case XTarget: + if(PXTARGETMGR xtm = pChar->pXTargetMgr) + { + DWORD n = 0; + if(PXTARGETARRAY xta = xtm->pXTargetArray) + { + if(ISINDEX()) + { + if(ISNUMBER()) + { + if(GETNUMBER() > 0 && GETNUMBER() <= (int)xtm->TargetSlots) + { + Dest.DWord = GETNUMBER() - 1; + Dest.Type = pXTargetType; + return true; + } + } + else + { + for(n = 0; n < xtm->TargetSlots; n++) + { + if(xta->pXTargetData[n].xTargetType && xta->pXTargetData[n].Unknown0x4 && !stricmp(GETFIRST(), xta->pXTargetData[n].Name)) + { + Dest.DWord = n; + Dest.Type = pXTargetType; + return true; + } + } + } + } + else + { + DWORD x = 0; + for(n = 0; n < xtm->TargetSlots; n++) + { + if(xta->pXTargetData[n].xTargetType && xta->pXTargetData[n].Unknown0x4) + { + x++; + } + } + Dest.DWord = x; + Dest.Type = pIntType; + return true; + } + } + } + return false; + case Haste: + Dest.DWord = pCharData1->TotalEffect(0xb, 1, 0, 1, 1); + Dest.Type = pIntType; + return true; + case MercenaryStance: + Dest.Ptr = "NULL"; + if(pMercInfo->HaveMerc) + { + for(DWORD n = 0; n < pMercInfo->NumStances; n++) + { + if(pMercInfo->pMercStanceData[n]->nStance == pMercInfo->ActiveStance) + { + Dest.Ptr = pCDBStr->GetString(pMercInfo->pMercStanceData[n]->nDbStance, 24, 0); + break; + } + } + } + Dest.Type = pStringType; + return true; + case GemTimer: + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + // number + unsigned long nGem=GETNUMBER()-1; + if (nGemMemorizedSpells[nGem] != 0xFFFFFFFF) + { + Dest.DWord = (((GetSpellGemTimer(nGem) / 1000) + 5) / 6); + Dest.Type = pTicksType; + return true; + } + } + } + else + { + // name + for (unsigned long nGem=0 ; nGem < NUM_SPELL_GEMS ; nGem++) + { + if (PSPELL pSpell=GetSpellByID(GetCharInfo2()->MemorizedSpells[nGem])) + { + if (!stricmp(GETFIRST(),pSpell->Name)) + { + Dest.DWord = (((GetSpellGemTimer(nGem) / 1000) + 5) / 6); + Dest.Type = pTicksType; + return true; + } + } + } + } + return false; + case HaveExpansion: + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + DWORD nExpansion = GETNUMBER(); + if (nExpansion > NUM_EXPANSIONS) + return false; + Dest.DWord = GetCharInfo()->ExpansionFlags & EQ_EXPANSION(nExpansion); + Dest.Type = pBoolType; + return true; + } + else + { + for (DWORD n = 0; n < NUM_EXPANSIONS; n++) + { + if (!stricmp(GETFIRST(), szExpansions[n])) + { + Dest.DWord = GetCharInfo()->ExpansionFlags & EQ_EXPANSION(n + 1); + Dest.Type = pBoolType; + return true; + } + } + } + return false; + case PctAggro: + if(pAggroInfo) + { + Dest.DWord = pAggroInfo->aggroData[AD_Player].AggroPct; + Dest.Type = pIntType; + return true; + } + return false; + case SecondaryPctAggro: + if(pAggroInfo) + { + Dest.DWord = pAggroInfo->aggroData[AD_Secondary].AggroPct; + Dest.Type = pIntType; + return true; + } + return false; + case SecondaryAggroPlayer: + if(pAggroInfo && pAggroInfo->AggroSecondaryID) + { + Dest.Ptr = GetSpawnByID(pAggroInfo->AggroSecondaryID); + Dest.Type = pSpawnType; + return true; + } + return false; + case AggroLock: + if(pAggroInfo && pAggroInfo->AggroLockID) + { + Dest.Ptr = GetSpawnByID(pAggroInfo->AggroLockID); + Dest.Type = pSpawnType; + return true; + } + } + return false; +#undef pChar +} + +bool MQ2SpellType::GETMEMBER() +{ +#define pSpell ((PSPELL)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2SpellType::FindMember(Member); + if (!pMember) + return false; + + switch((SpellMembers)pMember->ID) + { + case ID: + Dest.DWord=pSpell->ID; + Dest.Type=pIntType; + return true; + case Name: + Dest.Ptr=&pSpell->Name[0]; + Dest.Type=pStringType; + return true; + case Level: + if (!ISINDEX() && GetCharInfo()->pSpawn) + { + Dest.DWord=pSpell->Level[GetCharInfo()->pSpawn->Class-1]; + Dest.Type=pIntType; + return true; + } + else + { + if (ISNUMBER()) + { + unsigned long nIndex=GETNUMBER()-1; + Dest.DWord=pSpell->Level[nIndex]; + Dest.Type=pIntType; + return true; + } + } + return false; + case Mana: + Dest.DWord=pSpell->Mana; + Dest.Type=pIntType; + return true; + case ResistAdj: + Dest.DWord=pSpell->ResistAdj; + Dest.Type=pIntType; + return true; + case Range: + Dest.Float=pSpell->Range; + Dest.Type=pFloatType; + return true; + case AERange: + Dest.Float=pSpell->AERange; + Dest.Type=pFloatType; + return true; + case PushBack: + Dest.Float=pSpell->PushBack; + Dest.Type=pFloatType; + return true; + case CastTime: + Dest.Float=(FLOAT)pSpell->CastTime/1000; + Dest.Type=pFloatType; + return true; + case RecoveryTime: + case FizzleTime: + Dest.Float=(FLOAT)pSpell->FizzleTime/1000; + Dest.Type=pFloatType; + return true; + case RecastTime: + Dest.Float=(FLOAT)pSpell->RecastTime/1000; + Dest.Type=pFloatType; + return true; + case ResistType: + switch(pSpell->Resist) + { + case 9: Dest.Ptr="Corruption"; break; + case 7: Dest.Ptr="Prismatic"; break; + case 6: Dest.Ptr="Chromatic"; break; + case 5: Dest.Ptr="Disease"; break; + case 4: Dest.Ptr="Poison"; break; + case 3: Dest.Ptr="Cold"; break; + case 2: Dest.Ptr="Fire"; break; + case 1: Dest.Ptr="Magic"; break; + case 0: Dest.Ptr="Unresistable"; break; + default: Dest.Ptr="Unknown"; break; + } + Dest.Type=pStringType; + return true; + case SpellType: + switch(pSpell->SpellType) + { + case 2: Dest.Ptr="Beneficial(Group)"; break; + case 1: Dest.Ptr="Beneficial"; break; + case 0: Dest.Ptr="Detrimental"; break; + default: Dest.Ptr="Unknown"; break; + } + Dest.Type=pStringType; + return true; + case TargetType: + switch(pSpell->TargetType) + { + case 41: Dest.Ptr="Group v2"; break; + case 40: Dest.Ptr="AE PC v2"; break; + case 25: Dest.Ptr="AE Summoned"; break; + case 24: Dest.Ptr="AE Undead"; break; + case 20: Dest.Ptr="Targeted AE Tap"; break; + case 18: Dest.Ptr="Uber Dragons"; break; + case 17: Dest.Ptr="Uber Giants"; break; + case 16: Dest.Ptr="Plant"; break; + case 15: Dest.Ptr="Corpse"; break; + case 14: Dest.Ptr="Pet"; break; + case 13: Dest.Ptr="LifeTap"; break; + case 11: Dest.Ptr="Summoned"; break; + case 10: Dest.Ptr="Undead"; break; + case 9: Dest.Ptr="Animal"; break; + case 8: Dest.Ptr="Targeted AE"; break; + case 6: Dest.Ptr="Self"; break; + case 5: Dest.Ptr="Single"; break; + case 4: Dest.Ptr="PB AE"; break; + case 3: Dest.Ptr="Group v1"; break; + case 2: Dest.Ptr="AE PC v1"; break; + case 1: Dest.Ptr="Line of Sight"; break; + default: Dest.Ptr="Unknown"; break; + } + Dest.Type=pStringType; + return true; + case Skill: + Dest.Ptr=szSkills[pSpell->Skill]; + Dest.Type=pStringType; + return true; + case MyCastTime: + { + DWORD n = 0; + float mct = (FLOAT)(pCharData1->GetAACastingTimeModifier((EQ_Spell*)pSpell)+pCharData1->GetFocusCastingTimeModifier((EQ_Spell*)pSpell,(EQ_Equipment**)&n,0)+pSpell->CastTime)/1000.0f; + if (mct < 0.50 * pSpell->CastTime/1000.0f) + Dest.Float=(FLOAT)0.50 * (pSpell->CastTime/1000.0f); + else + Dest.Float=(FLOAT) mct; + } + Dest.Type=pFloatType; + return true; + case Duration: + Dest.DWord=GetSpellDuration(pSpell,(PSPAWNINFO)pCharSpawn); + Dest.Type=pTicksType; + return true; + case CastOnYou: + Dest.Ptr=pSpell->CastOnYou; + Dest.Type=pStringType; + return true; + case CastOnAnother: + Dest.Ptr=pSpell->CastOnAnother; + Dest.Type=pStringType; + return true; + case WearOff: + Dest.Ptr=pSpell->WearOff; + Dest.Type=pStringType; + return true; + case CounterType: + { + Dest.Type=pStringType; + int i; + for (i=0; i<=11; i++){ + switch(pSpell->Attrib[i]) + { + case 35: + Dest.Ptr="Disease"; + return true; + case 36: + Dest.Ptr="Poison"; + return true; + case 116: + Dest.Ptr="Curse"; + return true; + case 369: + Dest.Ptr="Corruption"; + return true; + } + } + Dest.Ptr="None"; + return true; + } + case CounterNumber: + { + Dest.Type=pIntType; + int i; + for (i=0; i<=11; i++){ + if ((pSpell->Attrib[i] == 35) || (pSpell->Attrib[i] == 36) || (pSpell->Attrib[i] == 116) || (pSpell->Attrib[i] == 369)){ + Dest.DWord = (int)pSpell->Base[i]; + return true; + } + } + Dest.DWord = 0; + return true; + } + case Stacks: + { + unsigned long buffduration; + unsigned long duration=99999; + if (ISNUMBER()) + duration=GETNUMBER(); + unsigned long nBuff; + PCHARINFO2 pChar = GetCharInfo2(); + Dest.DWord = true; + Dest.Type = pBoolType; + for (nBuff=0; nBuffBuff[nBuff].SpellID>0) { + PSPELL tmpSpell = GetSpellByID(pChar->Buff[nBuff].SpellID); + buffduration = pChar->Buff[nBuff].Duration; + if (GetSpellDuration(tmpSpell,(PSPAWNINFO)pCharSpawn)>=0xFFFFFFFE) buffduration = 99999+1; + if (!BuffStackTest(pSpell, tmpSpell) || ((pSpell==tmpSpell) && (buffduration>duration))){ + Dest.DWord = false; + return true; + } + } + } + return true; + } + case StacksPet: + { + unsigned long petbuffduration; + unsigned long duration=99999; + if (ISNUMBER()) + duration=GETNUMBER(); + unsigned long nBuff; + Dest.DWord = true; + Dest.Type = pBoolType; + PEQPETINFOWINDOW pPet = ((PEQPETINFOWINDOW)pPetInfoWnd); + for (nBuff=0; nBuffBuff[nBuff]>0 && !(pPet->Buff[nBuff]==0xFFFFFFFF || pPet->Buff[nBuff]==0)) { + PSPELL tmpSpell = GetSpellByID(pPet->Buff[nBuff]); + petbuffduration = ((pPet->BuffFadeETA[nBuff]+5999)/1000)/6; + if (GetSpellDuration(tmpSpell,(PSPAWNINFO)pCharSpawn)>=0xFFFFFFFE) petbuffduration = 99999+1; + if (!BuffStackTest(pSpell, tmpSpell) || ((pSpell==tmpSpell) && (petbuffduration>duration))){ + Dest.DWord = false; + return true; + } + } + } + return true; + } + case WillStack: + { + if (!ISINDEX()) + return false; + PSPELL tmpSpell = NULL; + if (ISNUMBER()) + tmpSpell = GetSpellByID(GETNUMBER()); + else + tmpSpell = GetSpellByName(GETFIRST()); + if (!tmpSpell) + return false; + Dest.Type = pBoolType; + Dest.DWord = BuffStackTest(pSpell, tmpSpell); + return true; + } + case MyRange: + DWORD n = 0; + Dest.Float=pSpell->Range+(float)pCharData1->GetFocusRangeModifier((EQ_Spell*)pSpell,(EQ_Equipment**)&n); + Dest.Type=pFloatType; + return true; + } + return false; +#undef pSpell +} + +bool MQ2ItemType::GETMEMBER() +{ + DWORD N, cmp, tmp; +#define pItem ((PCONTENTS)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2ItemType::FindMember(Member); + if (!pMember) + return false; + + switch((ItemMembers)pMember->ID) + { + case ID: + Dest.DWord=GetItemFromContents(pItem)->ItemNumber; + Dest.Type=pIntType; + return true; + case Name: + Dest.Ptr=&GetItemFromContents(pItem)->Name[0]; + Dest.Type=pStringType; + return true; + case Lore: + Dest.DWord=GetItemFromContents(pItem)->Lore; + Dest.Type=pBoolType; + return true; + case NoDrop: + Dest.DWord=!((EQ_Item*)pItem)->CanDrop(0,1); + Dest.Type=pBoolType; + return true; + case NoRent: + Dest.DWord=!GetItemFromContents(pItem)->NoRent; + Dest.Type=pBoolType; + return true; + case Magic: + Dest.DWord=((GetItemFromContents(pItem)->Type == ITEMTYPE_NORMAL) && (GetItemFromContents(pItem)->Magic)); + Dest.Type=pBoolType; + return true; + case Value: + Dest.DWord=GetItemFromContents(pItem)->Cost; + Dest.Type=pIntType; + return true; + case Size: + Dest.DWord=GetItemFromContents(pItem)->Size; + Dest.Type=pIntType; + return true; + case SizeCapacity: + Dest.DWord=GetItemFromContents(pItem)->SizeCapacity; + Dest.Type=pIntType; + return true; + case Weight: + Dest.DWord=GetItemFromContents(pItem)->Weight; + Dest.Type=pIntType; + return true; + case Stack: + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || (((EQ_Item*)pItem)->IsStackable()!=1)) + Dest.DWord=1; + else + Dest.DWord=pItem->StackCount; + Dest.Type=pIntType; + return true; + case Type: + if (GetItemFromContents(pItem)->Type == ITEMTYPE_NORMAL) + { + if ((GetItemFromContents(pItem)->ItemType < MAX_ITEMTYPES) && (szItemTypes[GetItemFromContents(pItem)->ItemType] != NULL)) + { + Dest.Ptr=szItemTypes[GetItemFromContents(pItem)->ItemType]; + } + else + { + Dest.Ptr=&DataTypeTemp[0]; + sprintf(DataTypeTemp,"*UnknownType%d",GetItemFromContents(pItem)->ItemType); + } + } + else if (GetItemFromContents(pItem)->Type == ITEMTYPE_PACK) + { + if ((GetItemFromContents(pItem)->Combine < MAX_COMBINES) && (szCombineTypes[GetItemFromContents(pItem)->Combine] != NULL)) + { + Dest.Ptr=szCombineTypes[GetItemFromContents(pItem)->Combine]; + } + else + { + Dest.Ptr=&DataTypeTemp[0]; + sprintf(DataTypeTemp,"*UnknownCombine%d",GetItemFromContents(pItem)->Combine); + } + } + else if (GetItemFromContents(pItem)->Type == ITEMTYPE_BOOK) + Dest.Ptr="Book"; + Dest.Type=pStringType; + return true; + case Charges: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=pItem->Charges; + Dest.Type=pIntType; + return true; + case LDoNTheme: + Dest.Ptr=GetLDoNTheme(GetItemFromContents(pItem)->LDTheme); + Dest.Type=pStringType; + return true; + case DMGBonusType: + Dest.Ptr=szDmgBonusType[GetItemFromContents(pItem)->DmgBonusType]; + Dest.Type=pStringType; + return true; + case Container: + if (GetItemFromContents(pItem)->Type == ITEMTYPE_PACK) + { + Dest.DWord=GetItemFromContents(pItem)->Slots; + } + else + Dest.DWord=0; + Dest.Type=pIntType; + return true; + case Items: + if (GetItemFromContents(pItem)->Type == ITEMTYPE_PACK) + { + Dest.DWord=0; + if (pItem->pContentsArray) { + for (unsigned long N=0 ; N < GetItemFromContents(pItem)->Slots ; N++) { + if (pItem->pContentsArray->Contents[N]) + Dest.DWord++; + } + } + Dest.Type=pIntType; + return true; + } + return false; + case Item: + if (GetItemFromContents(pItem)->Type == ITEMTYPE_PACK && ISNUMBER()) + { + unsigned long N=GETNUMBER(); + N--; + if (NSlots) + { + if (pItem->pContentsArray) + if (Dest.Ptr=pItem->pContentsArray->Contents[N]) + { + Dest.Type=pItemType; + return true; + } + } + } else if (GetItemFromContents(pItem)->Type == ITEMTYPE_NORMAL && ISNUMBER()) { + unsigned long N=GETNUMBER(); + N--; + Dest.Ptr=NULL; + if (pItem->pContentsArray) + switch (N) + { + case 0: + if (GetItemFromContents(pItem)->AugSlot1) Dest.Ptr=pItem->pContentsArray->Contents[N]; + break; + case 1: + if (GetItemFromContents(pItem)->AugSlot2) Dest.Ptr=pItem->pContentsArray->Contents[N]; + break; + case 2: + if (GetItemFromContents(pItem)->AugSlot3) Dest.Ptr=pItem->pContentsArray->Contents[N]; + break; + case 3: + if (GetItemFromContents(pItem)->AugSlot4) Dest.Ptr=pItem->pContentsArray->Contents[N]; + break; + case 4: + if (GetItemFromContents(pItem)->AugSlot5) Dest.Ptr=pItem->pContentsArray->Contents[N]; + break; + } + if (Dest.Ptr) return true; + } + return false; + case Stackable: + Dest.DWord=((EQ_Item*)pItem)->IsStackable(); + Dest.Type=pBoolType; + return true; + case InvSlot: + Dest.Int=FindInvSlotForContents(pItem); + if (Dest.Int>=0) + { + Dest.Type=pInvSlotType; + return true; + } + return false; + case BuyPrice: + if (pActiveMerchant && pItem->MerchantSlot) + { + Dest.DWord=pItem->Price; + Dest.Type=pIntType; + return true; + } + return false; + case SellPrice: + if (pActiveMerchant) + { + Dest.DWord=(DWORD)((FLOAT)GetItemFromContents(pItem)->Cost*(1.0f/((PEQMERCHWINDOW)pMerchantWnd)->Markup)); + Dest.Type=pIntType; + return true; + } + return false; + case WornSlot: + if (ISINDEX()) + { + if (ISNUMBER()) + { + DWORD Count=GETNUMBER(); + if (!Count) + return false; + cmp=GetItemFromContents(pItem)->EquipSlots; + for (N = 0 ; N < 32 ; N++) + { + if (cmp&(1<EquipSlots&(1<EquipSlots; + for (N = 0 ; N < 32 ; N++) + { + if (cmp&(1<Clicky.CastTime/1000; + Dest.Type=pFloatType; + return true; + case Spell: + if (Dest.Ptr=GetSpellByID(GetItemFromContents(pItem)->Clicky.SpellID)) + { + Dest.Type=pSpellType; + return true; + } + if (Dest.Ptr=GetSpellByID(GetItemFromContents(pItem)->Scroll.SpellID)) + { + Dest.Type=pSpellType; + return true; + } + if (Dest.Ptr=GetSpellByID(GetItemFromContents(pItem)->Proc.SpellID)) + { + Dest.Type=pSpellType; + return true; + } + if (Dest.Ptr=GetSpellByID(GetItemFromContents(pItem)->Focus.SpellID)) + { + Dest.Type=pSpellType; + return true; + } + if (Dest.Ptr=GetSpellByID(GetItemFromContents(pItem)->Worn.SpellID)) + { + Dest.Type=pSpellType; + return true; + } + return false; + case EffectType: + //0 Proc + //1 Clickable from inventory (any class) + //2 Worn effect (haste, cleave) + //3 Unknown + //4 Clickable must be worn + //5 Clickable from inventory (class restricted) + //6 Focus effect + //7 Memmable spell scroll + // This used to return an int type with a case statment, items could have + // only one effect. For backwards compatibility we return based on a hierarchy. + // A zero in any field indicates no effect (others will also be zero) + if (!GetItemFromContents(pItem)->Clicky.SpellID) + { + return false; + } + else if (GetItemFromContents(pItem)->Scroll.SpellID!=-1) + { + Dest.Ptr="Spell Scroll"; + } + else if (GetItemFromContents(pItem)->Clicky.SpellID!=-1) + { + // code to detect must-be-worn etc here + switch (GetItemFromContents(pItem)->Clicky.EffectType) + { + case 4: + Dest.Ptr="Click Worn"; + break; + case 1: + case 5: + Dest.Ptr="Click Inventory"; + break; + default: + Dest.Ptr="Click Unknown"; + } + } + else if (GetItemFromContents(pItem)->Focus.SpellID!=-1 || GetItemFromContents(pItem)->Worn.SpellID!=-1) + { + Dest.Ptr="Worn"; + } + else if (GetItemFromContents(pItem)->Proc.SpellID!=-1) + { + Dest.Ptr="Combat"; + } + else + { + return false; + } + Dest.Type=pStringType; + return true; + case InstrumentMod: + Dest.Float=((FLOAT)GetItemFromContents(pItem)->InstrumentMod)/10.0f; + Dest.Type=pFloatType; + return true; + case Tribute: + Dest.DWord=GetItemFromContents(pItem)->Favor; + Dest.Type=pIntType; + return true; + case Attuneable: + Dest.DWord=GetItemFromContents(pItem)->Attuneable; + Dest.Type=pBoolType; + return true; + case Timer: + if(GetItemFromContents(pItem)->Clicky.TimerID!=0xFFFFFFFF) + { + Dest.DWord=(GetItemTimer(pItem)+5)/6; + Dest.Type=pTicksType; + return true; + } + if (GetItemFromContents(pItem)->Clicky.SpellID!=-1) + { + Dest.DWord=0; // insta-clicky + Dest.Type=pTicksType; + return true; + } + return false; + case ItemDelay: + Dest.DWord=GetItemFromContents(pItem)->Delay; + Dest.Type=pIntType; + return true; + case TimerReady: + if(GetItemFromContents(pItem)->Clicky.TimerID!=0xFFFFFFFF) + { + Dest.DWord=GetItemTimer(pItem); + Dest.Type=pIntType; + return true; + } + if (GetItemFromContents(pItem)->Clicky.SpellID!=-1) + { + Dest.DWord=0; // insta-click or instant recast + Dest.Type=pIntType; + return true; + } + return false; + case StackSize: + if ((GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) || (((EQ_Item*)pItem)->IsStackable()!=1)) + Dest.DWord=1; + else + Dest.DWord=GetItemFromContents(pItem)->StackSize; + Dest.Type=pIntType; + return true; + case Stacks: + { + Dest.DWord=0; + Dest.Type=pIntType; + if (!((EQ_Item*)pItem)->IsStackable()) return true; + for (DWORD slot=BAG_SLOT_START;slotpInventoryArray->InventoryArray[slot]) + { + if (GetItemFromContents(pTempItem)->Type==ITEMTYPE_PACK && pTempItem->pContentsArray) + { + for (DWORD pslot=0;pslot<(GetItemFromContents(pTempItem)->Slots);pslot++) + { + if (pTempItem->pContentsArray->Contents[pslot]) + { + if (PCONTENTS pSlotItem = pTempItem->pContentsArray->Contents[pslot]) + { + if (GetItemFromContents(pSlotItem)->ItemNumber==GetItemFromContents(pItem)->ItemNumber) + { + Dest.DWord++; + } + } + } + } + } + else { + if (GetItemFromContents(pTempItem)->ItemNumber==GetItemFromContents(pItem)->ItemNumber) + { + Dest.DWord++; + } + } + } + } + return true; + } + case StackCount: + { + Dest.DWord=0; + Dest.Type=pIntType; + if (!((EQ_Item*)pItem)->IsStackable()) return true; + for (DWORD slot=BAG_SLOT_START;slotpInventoryArray->InventoryArray[slot]) + { + if (GetItemFromContents(pTempItem)->Type==ITEMTYPE_PACK && pTempItem->pContentsArray) + { + for (DWORD pslot=0;pslot<(GetItemFromContents(pTempItem)->Slots);pslot++) + { + if (pTempItem->pContentsArray->Contents[pslot]) + { + if (PCONTENTS pSlotItem = pTempItem->pContentsArray->Contents[pslot]) + { + if (GetItemFromContents(pSlotItem)->ItemNumber==GetItemFromContents(pItem)->ItemNumber) + { + Dest.DWord+=pSlotItem->StackCount; + } + } + } + } + } + else { + if (GetItemFromContents(pTempItem)->ItemNumber==GetItemFromContents(pItem)->ItemNumber) + { + Dest.DWord+=pTempItem->StackCount; + } + } + } + } + return true; + } + case FreeStack: + { + Dest.DWord=0; + Dest.Type=pIntType; + if (!((EQ_Item*)pItem)->IsStackable()) return true; + for (DWORD slot=BAG_SLOT_START;slotpInventoryArray->InventoryArray[slot]) + { + if (GetItemFromContents(pTempItem)->Type==ITEMTYPE_PACK && pTempItem->pContentsArray) + { + for (DWORD pslot=0;pslot<(GetItemFromContents(pTempItem)->Slots);pslot++) + { + if (pTempItem->pContentsArray->Contents[pslot]) + { + if (PCONTENTS pSlotItem = pTempItem->pContentsArray->Contents[pslot]) + { + if (GetItemFromContents(pSlotItem)->ItemNumber==GetItemFromContents(pItem)->ItemNumber) + { + Dest.DWord+=(GetItemFromContents(pSlotItem)->StackSize-pSlotItem->StackCount); + } + } + } + } + } + else { + if (GetItemFromContents(pTempItem)->ItemNumber==GetItemFromContents(pItem)->ItemNumber) + { + Dest.DWord+=(GetItemFromContents(pTempItem)->StackSize-pTempItem->StackCount); + } + } + } + } + return true; + } + case MerchQuantity: + if (pActiveMerchant && pItem->MerchantSlot) { + Dest.DWord=pItem->MerchantQuantity; + Dest.Type=pIntType; + return true; + } + return false; + + case Classes: + Dest.DWord=0; + // count bits + cmp=GetItemFromContents(pItem)->Classes; + for (N = 0 ; N < 16 ; N++) + { + if (cmp&(1<Classes; + for (N = 0 ; N < 16 ; N++) + { + if (cmp&(1<Classes; + for (N = 0 ; N < 16 ; N++) { + if (cmp&(1<GetClassThreeLetterCode(N+1))) { + Dest.DWord=N+1; + Dest.Type=pClassType; + return true; + } + } + } + return false; + } + } + return false; + case Races: + Dest.DWord=0; + // count bits + cmp=GetItemFromContents(pItem)->Races; + for (N = 0 ; N < 17 ; N++) + { + if (cmp&(1<Races; + for (N = 0 ; N < 17 ; N++) + { + if (cmp&(1<Races; + for (N = 0 ; N < 17 ; N++) { + if (cmp&(1<GetRaceDesc(tmp))) { + Dest.DWord=tmp; + Dest.Type=pRaceType; + return true; + } + } + } + return false; + } + } + return false; + case Deities: + Dest.DWord=0; + // count bits + cmp=GetItemFromContents(pItem)->Diety; + for (N = 0 ; N < 15 ; N++) + { + if (cmp&(1<Diety; + for (N = 0 ; N < 15 ; N++) + { + if (cmp&(1<Diety; + for (N = 0 ; N < 16 ; N++) { + if (cmp&(1<GetDeityDesc(N+200))) { + Dest.DWord=N+200; + Dest.Type=pDeityType; + return true; + } + } + } + return false; + } + } + return false; + case RequiredLevel: + Dest.DWord=GetItemFromContents(pItem)->RequiredLevel; + Dest.Type=pIntType; + return true; + case Evolving: + Dest.Ptr=pItem; + Dest.Type=pEvolvingItemType; + return true; + case AC: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->AC; + Dest.Type=pIntType; + return true; + case HP: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HP; + Dest.Type=pIntType; + return true; + case STR: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->STR; + Dest.Type=pIntType; + return true; + case STA: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->STA; + Dest.Type=pIntType; + return true; + case AGI: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->AGI; + Dest.Type=pIntType; + return true; + case DEX: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->DEX; + Dest.Type=pIntType; + return true; + case CHA: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->CHA; + Dest.Type=pIntType; + return true; + case INT: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->INT; + Dest.Type=pIntType; + return true; + case WIS: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->WIS; + Dest.Type=pIntType; + return true; + case Mana: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->Mana; + Dest.Type=pIntType; + return true; + case ManaRegen: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->ManaRegen; + Dest.Type=pIntType; + return true; + case HPRegen: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HPRegen; + Dest.Type=pIntType; + return true; + case Attack: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->Attack; + Dest.Type=pIntType; + return true; + case svCold: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->SvCold; + Dest.Type=pIntType; + return true; + case svFire: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->SvFire; + Dest.Type=pIntType; + return true; + case svMagic: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->SvMagic; + Dest.Type=pIntType; + return true; + case svDisease: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->SvDisease; + Dest.Type=pIntType; + return true; + case svPoison: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->SvPoison; + Dest.Type=pIntType; + return true; + case svCorruption: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->SvCorruption; + Dest.Type=pIntType; + return true; + case Haste: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->Haste; + Dest.Type=pIntType; + return true; + case DamShield: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->DamShield; + Dest.Type=pIntType; + return true; + case AugType: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->AugType; + Dest.Type=pIntType; + return true; + case AugRestrictions: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->AugRestrictions; + Dest.Type=pIntType; + return true; + case AugSlot1: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->AugSlot1; + Dest.Type=pIntType; + return true; + case AugSlot2: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->AugSlot2; + Dest.Type=pIntType; + return true; + case AugSlot3: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->AugSlot3; + Dest.Type=pIntType; + return true; + case AugSlot4: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->AugSlot4; + Dest.Type=pIntType; + return true; + case AugSlot5: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->AugSlot5; + Dest.Type=pIntType; + return true; + case Power: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=pItem->Power; + Dest.Type=pIntType; + return true; + case MaxPower: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->MaxPower; + Dest.Type=pIntType; + return true; + case Purity: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->Purity; + Dest.Type=pIntType; + return true; + case Avoidance: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->Avoidance; + Dest.Type=pIntType; + return true; + case SpellShield: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->SpellShield; + Dest.Type=pIntType; + return true; + case StrikeThrough: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->StrikeThrough; + Dest.Type=pIntType; + return true; + case StunResist: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->StunResist; + Dest.Type=pIntType; + return true; + case Shielding: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->Shielding; + Dest.Type=pIntType; + return true; + case Accuracy: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->Accuracy; + Dest.Type=pIntType; + return true; + case CombatEffects: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->CombatEffects; + Dest.Type=pIntType; + return true; + case DoTShielding: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=(char)GetItemFromContents(pItem)->DoTShielding; + Dest.Type=pIntType; + return true; + case HeroicSTR: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicSTR; + Dest.Type=pIntType; + return true; + case HeroicINT: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicINT; + Dest.Type=pIntType; + return true; + case HeroicWIS: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicWIS; + Dest.Type=pIntType; + return true; + case HeroicAGI: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicAGI; + Dest.Type=pIntType; + return true; + case HeroicDEX: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicDEX; + Dest.Type=pIntType; + return true; + case HeroicSTA: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicSTA; + Dest.Type=pIntType; + return true; + case HeroicCHA: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicCHA; + Dest.Type=pIntType; + return true; + case HeroicSvMagic: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicSvMagic; + Dest.Type=pIntType; + return true; + case HeroicSvFire: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicSvFire; + Dest.Type=pIntType; + return true; + case HeroicSvCold: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicSvCold; + Dest.Type=pIntType; + return true; + case HeroicSvDisease: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicSvDisease; + Dest.Type=pIntType; + return true; + case HeroicSvPoison: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicSvPoison; + Dest.Type=pIntType; + return true; + case HeroicSvCorruption: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HeroicSvCorruption; + Dest.Type=pIntType; + return true; + case EnduranceRegen: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->EnduranceRegen; + Dest.Type=pIntType; + return true; + case HealAmount: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->HealAmount; + Dest.Type=pIntType; + return true; + case Clairvoyance: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->Clairvoyance; + Dest.Type=pIntType; + return true; + case DamageShieldMitigation: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->DamageShieldMitigation; + Dest.Type=pIntType; + return true; + case SpellDamage: + if (GetItemFromContents(pItem)->Type != ITEMTYPE_NORMAL) + Dest.DWord=0; + else + Dest.DWord=GetItemFromContents(pItem)->SpellDamage; + Dest.Type=pIntType; + return true; + case Augs: + Dest.DWord = 0; + Dest.Type=pIntType; + if (GetItemFromContents(pItem)->Type == ITEMTYPE_NORMAL) { + if (GetItemFromContents(pItem)->AugSlot5) Dest.DWord++; + if (GetItemFromContents(pItem)->AugSlot4) Dest.DWord++; + if (GetItemFromContents(pItem)->AugSlot3) Dest.DWord++; + if (GetItemFromContents(pItem)->AugSlot2) Dest.DWord++; + if (GetItemFromContents(pItem)->AugSlot1) Dest.DWord++; + Dest.Type=pIntType; + } + return true; + case Tradeskills: + Dest.DWord=GetItemFromContents(pItem)->TradeSkills; + Dest.Type=pBoolType; + return true; + + } + return false; +#undef pItem +} + +bool MQ2WindowType::GETMEMBER() +{ +#define pWnd ((PCSIDLWND)VarPtr.Ptr) + PMQ2TYPEMEMBER pMember=MQ2WindowType::FindMember(Member); + if (!pMember) + return false; + + switch((WindowMembers)pMember->ID) + { + case Open: + Dest.DWord=pWnd->dShow; + Dest.Type=pBoolType; + return true; + case Child: + if (Dest.Ptr=((CSidlScreenWnd*)VarPtr.Ptr)->GetChildItem(GETFIRST())) + { + Dest.Type=pWindowType; + return true; + } + Dest.DWord=0; + Dest.Type=pIntType; + return true; + case Parent: + if (Dest.Ptr=pWnd->pParentWindow) + { + Dest.Type=pWindowType; + return true; + } + Dest.DWord=0; + Dest.Type=pIntType; + return true; + case FirstChild: + if (Dest.Ptr=pWnd->pFirstChildWnd) + { + Dest.Type=pWindowType; + return true; + } + Dest.DWord=0; + Dest.Type=pIntType; + return true; + case Next: + if (Dest.Ptr=pWnd->pNextSiblingWnd) + { + Dest.Type=pWindowType; + return true; + } + Dest.DWord=0; + Dest.Type=pIntType; + return true; + case VScrollMax: + Dest.DWord=pWnd->VScrollMax; + Dest.Type=pIntType; + return true; + case VScrollPos: + Dest.DWord=pWnd->VScrollPos; + Dest.Type=pIntType; + return true; + case VScrollPct: + Dest.DWord=(pWnd->VScrollPos*100)/pWnd->VScrollMax; + Dest.Type=pIntType; + return true; + case HScrollMax: + Dest.DWord=pWnd->HScrollMax; + Dest.Type=pIntType; + return true; + case HScrollPos: + Dest.DWord=pWnd->HScrollPos; + Dest.Type=pIntType; + return true; + case HScrollPct: + Dest.DWord=(pWnd->HScrollPos*100)/pWnd->HScrollMax; + Dest.Type=pIntType; + return true; + case Children: + Dest.DWord=(DWORD)pWnd->pFirstChildWnd; + Dest.Type=pBoolType; + return true; + case Siblings: + Dest.DWord=(DWORD)pWnd->pNextSiblingWnd; + Dest.Type=pBoolType; + return true; + case Minimized: + Dest.DWord=pWnd->Minimized; + Dest.Type=pBoolType; + return true; + case MouseOver: + Dest.DWord=pWnd->MouseOver; + Dest.Type=pBoolType; + return true; + case X: + Dest.DWord=pWnd->Location.left; + Dest.Type=pIntType; + return true; + case Y: + Dest.DWord=pWnd->Location.top; + Dest.Type=pIntType; + return true; + case Width: + Dest.DWord=pWnd->Location.right-pWnd->Location.left; + Dest.Type=pIntType; + return true; + case Height: + Dest.DWord=pWnd->Location.bottom-pWnd->Location.top; + Dest.Type=pIntType; + return true; + case BGColor: + Dest.DWord=pWnd->BGColor.ARGB; + Dest.Type=pArgbType; + return true; + case Text: + if(((CXWnd*)pWnd)->GetType()==UI_STMLBox) + GetCXStr(pWnd->SidlText,DataTypeTemp,MAX_STRING-1); + else + GetCXStr(pWnd->WindowText,DataTypeTemp,MAX_STRING-1); + DataTypeTemp[MAX_STRING-1]='\0'; + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + case Tooltip: + GetCXStr(pWnd->Tooltip,DataTypeTemp,MAX_STRING); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + case Checked: + Dest.Int=pWnd->Checked; + Dest.Type=pBoolType; + return true; + case Highlighted: + Dest.Int=pWnd->Highlighted; + Dest.Type=pBoolType; + return true; + case Enabled: + Dest.Int=(pWnd->Enabled!=0); + Dest.Type=pBoolType; + return true; + case Style: + Dest.DWord=pWnd->WindowStyle; + Dest.Type=pIntType; + return true; + case List: + { + int n = 0; + if (((CXWnd*)pWnd)->GetType()==UI_Combobox) + VarPtr.Ptr=pWnd->SidlText; + else if (((CXWnd*)pWnd)->GetType()!=UI_Listbox) + return false; +#ifndef ISXEQ + if (PCHAR pComma=strchr(Index,',')) { + n = atoi(pComma+1) - 1; + if (n < 0) n=0; + DebugSpew("List: index is %d\n", n); + *pComma = '\0'; + } +#else + if (argc==2) + n=atoi(argv[1]); + if (n<0) + n=0; +#endif + if (ISNUMBER()) + { + unsigned long nIndex=GETNUMBER(); + if (!nIndex) + return false; + nIndex--; + CXStr Str; + ((CListWnd*)pWnd)->GetItemText(&Str, nIndex, n); + GetCXStr(Str.Ptr,DataTypeTemp,MAX_STRING); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + else + { + // name + BOOL bEqual=false; + CHAR Name[MAX_STRING]={0}; + if (GETFIRST()[0]=='=') + { + bEqual=true; + strcpy(Name,&GETFIRST()[1]); + } + else + strcpy(Name,GETFIRST()); + strlwr(Name); + unsigned long nIndex=0; + while(1) + { + CXStr Str; + ((CListWnd*)pWnd)->GetItemText(&Str, nIndex,n); + GetCXStr(Str.Ptr,DataTypeTemp,MAX_STRING); + if (DataTypeTemp[0]==0) + return false; + + if (bEqual) + { + if (!stricmp(DataTypeTemp,Name)) + { + Dest.DWord=nIndex+1; + Dest.Type=pIntType; + return true; + } + } + else + { + strlwr(DataTypeTemp); + if (strstr(DataTypeTemp,Name)) + { + Dest.DWord=nIndex+1; + Dest.Type=pIntType; + return true; + } + } + nIndex++; + } + } + return false; + } + case Name: + { + if (CXMLData *pXMLData=((CXWnd*)pWnd)->GetXMLData()) + { + if (GetCXStr(pXMLData->Name.Ptr,DataTypeTemp,MAX_STRING)) + { + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + } + } + return false; + case ScreenID: + { + if (CXMLData *pXMLData=((CXWnd*)pWnd)->GetXMLData()) + { + if (GetCXStr(pXMLData->ScreenID.Ptr,DataTypeTemp,MAX_STRING)) + { + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + } + } + return false; + case Type: + { + if (CXMLData *pXMLData=((CXWnd*)pWnd)->GetXMLData()) + { + if (GetCXStr(pXMLData->TypeName.Ptr,DataTypeTemp,MAX_STRING)) + { + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + } + } + return false; + case Items: + if (((CXWnd*)pWnd)->GetType()==UI_Listbox) + { + Dest.DWord=((CSidlScreenWnd*)pWnd)->Items; + Dest.Type=pIntType; + } + else if (((CXWnd*)pWnd)->GetType()==UI_Combobox) + { + Dest.DWord=((CSidlScreenWnd*)pWnd->SidlText)->Items; + Dest.Type=pIntType; + } + return true; + case HisTradeReady: + if(PTRADEWINDOW pTrade=(PTRADEWINDOW)pTradeWnd) { + Dest.Int=pTrade->HisTradeReady; + Dest.Type=pBoolType; + return true; + } + case MyTradeReady: + if(PTRADEWINDOW pTrade=(PTRADEWINDOW)pTradeWnd) { + Dest.Int=pTrade->MyTradeReady; + Dest.Type=pBoolType; + return true; + } + } + + return false; +#undef pWnd +} +bool MQ2CurrentZoneType::GETMEMBER() +{ +#define pZone ((PZONEINFO)pZoneInfo) + PMQ2TYPEMEMBER pMember=MQ2CurrentZoneType::FindMember(Member); + if (!pMember) + return false; + + //return pZoneType->GetMember(*(MQ2VARPTR*)&((PWORLDDATA)pWorldData)->ZoneArray[GetCharInfo()->zoneId],Member,Index,Dest); + switch((CurrentZoneMembers)pMember->ID) + { + case ID: + Dest.Int = GetCharInfo()->zoneId; + Dest.Type=pIntType; + return true; + case Name: + Dest.Ptr=&pZone->LongName[0]; + Dest.Type=pStringType; + return true; + case ShortName: + Dest.Ptr=&pZone->ShortName[0]; + Dest.Type=pStringType; + return true; + case Type: + Dest.DWord=pZone->ZoneType; + Dest.Type=pIntType; + return true; + case Gravity: + Dest.Float=pZone->ZoneGravity; + Dest.Type=pFloatType; + return true; + case SkyType: + Dest.DWord=pZone->SkyType; + Dest.Type=pIntType; + return true; +#if 0 + case SafeN: + case SafeY: + Dest.Float=pZone->SafeYLoc; + Dest.Type=pFloatType; + return true; + case SafeW: + case SafeX: + Dest.Float=pZone->SafeXLoc; + Dest.Type=pFloatType; + return true; + case SafeU: + case SafeZ: + Dest.Float=pZone->SafeZLoc; + Dest.Type=pFloatType; + return true; +#endif + case MinClip: + Dest.Float=pZone->MinClip; + Dest.Type=pFloatType; + return true; + case MaxClip: + Dest.Float=pZone->MaxClip; + Dest.Type=pFloatType; + return true; + } + return false; +#undef pZone +} + +bool MQ2ZoneType::GETMEMBER() +{ +#define pZone ((PZONELIST)VarPtr.Ptr) + PMQ2TYPEMEMBER pMember=MQ2ZoneType::FindMember(Member); + if (!pMember) + return false; + switch((ZoneMembers)pMember->ID) + { + case Name: + Dest.Ptr=&pZone->LongName[0]; + Dest.Type=pStringType; + return true; + case ShortName: + Dest.Ptr=&pZone->ShortName[0]; + Dest.Type=pStringType; + return true; + case ID: + Dest.Int=pZone->Id; + Dest.Type=pIntType; + return true; + } + return false; +#undef pZone +} + +bool MQ2BodyType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2BodyType::FindMember(Member); + if (!pMember) + return false; + switch((BodyMembers)pMember->ID) + { + case ID: + Dest.Ptr=VarPtr.Ptr; + Dest.Type=pIntType; + return true; + case Name: + Dest.Ptr=GetBodyTypeDesc(VarPtr.DWord); + Dest.Type=pStringType; + return true; + } + return false; +} +bool MQ2DeityType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2DeityType::FindMember(Member); + if (!pMember) + return false; + switch((DeityMembers)pMember->ID) + { + case ID: + Dest.Ptr=VarPtr.Ptr; + Dest.Type=pIntType; + return true; + case Name: + Dest.Ptr=pEverQuest->GetDeityDesc(VarPtr.DWord); + Dest.Type=pStringType; + return true; + case Team: + Dest.Ptr=szDeityTeam[GetDeityTeamByID(VarPtr.DWord)]; + Dest.Type=pStringType; + return true; + } + return false; +} +bool MQ2ClassType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2ClassType::FindMember(Member); + if (!pMember) + return false; + switch((ClassMembers)pMember->ID) + { + case ID: + Dest.Ptr=VarPtr.Ptr; + Dest.Type=pIntType; + return true; + case Name: + Dest.Ptr=GetClassDesc(VarPtr.DWord); + Dest.Type=pStringType; + return true; + case ShortName: + Dest.Ptr=pEverQuest->GetClassThreeLetterCode(VarPtr.DWord); + Dest.Type=pStringType; + return true; + case CanCast: + if (VarPtr.DWord<=16) + { + Dest.DWord=ClassInfo[VarPtr.DWord].CanCast; + Dest.Type=pBoolType; + return true; + } + return false; + case PureCaster: + if (VarPtr.DWord<=16) + { + Dest.DWord=ClassInfo[VarPtr.DWord].PureCaster; + Dest.Type=pBoolType; + return true; + } + return false; + case PetClass: + if (VarPtr.DWord<=16) + { + Dest.DWord=ClassInfo[VarPtr.DWord].PetClass; + Dest.Type=pBoolType; + return true; + } + return false; + case DruidType: + if (VarPtr.DWord<=16) + { + Dest.DWord=ClassInfo[VarPtr.DWord].DruidType; + Dest.Type=pBoolType; + return true; + } + return false; + case ShamanType: + if (VarPtr.DWord<=16) + { + Dest.DWord=ClassInfo[VarPtr.DWord].ShamanType; + Dest.Type=pBoolType; + return true; + } + return false; + case NecromancerType: + if (VarPtr.DWord<=16) + { + Dest.DWord=ClassInfo[VarPtr.DWord].NecroType; + Dest.Type=pBoolType; + return true; + } + return false; + case ClericType: + if (VarPtr.DWord<=16) + { + Dest.DWord=ClassInfo[VarPtr.DWord].ClericType; + Dest.Type=pBoolType; + return true; + } + return false; + case HealerType: + Dest.DWord=(VarPtr.DWord==2 || VarPtr.DWord==6 || VarPtr.DWord==10); + Dest.Type=pBoolType; + return true; + } + return false; +} +bool MQ2RaceType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2RaceType::FindMember(Member); + if (!pMember) + return false; + switch((RaceMembers)pMember->ID) + { + case ID: + Dest.Ptr=VarPtr.Ptr; + Dest.Type=pIntType; + return true; + case Name: + Dest.Ptr=pEverQuest->GetRaceDesc(VarPtr.DWord); + Dest.Type=pStringType; + return true; + } + return false; +} + + +bool MQ2SwitchType::GETMEMBER() +{ +#define pSwitch ((PDOOR)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2SwitchType::FindMember(Member); + if (!pMember) + return false; + switch((SwitchMembers)pMember->ID) + { + case ID: + Dest.DWord=pSwitch->ID; + Dest.Type=pIntType; + return true; + case W: + case X: + Dest.Float=pSwitch->X; + Dest.Type=pFloatType; + return true; + case N: + case Y: + Dest.Float=pSwitch->Y; + Dest.Type=pFloatType; + return true; + case U: + case Z: + Dest.Float=pSwitch->Z; + Dest.Type=pFloatType; + return true; + case DefaultW: + case DefaultX: + Dest.Float=pSwitch->DefaultX; + Dest.Type=pFloatType; + return true; + case DefaultN: + case DefaultY: + Dest.Float=pSwitch->DefaultY; + Dest.Type=pFloatType; + return true; + case DefaultU: + case DefaultZ: + Dest.Float=pSwitch->DefaultZ; + Dest.Type=pFloatType; + return true; + case Heading: + Dest.Float=pSwitch->Heading*0.703125f; + Dest.Type=pHeadingType; + return true; + case DefaultHeading: + Dest.Float=pSwitch->DefaultHeading*0.703125f; + Dest.Type=pHeadingType; + return true; + case Open: + Dest.DWord=((pSwitch->DefaultHeading != pSwitch->Heading) || + (pSwitch->DefaultZ != pSwitch->Z)); + Dest.Type=pBoolType; + return true; + case HeadingTo: + Dest.Float=(FLOAT)(atan2f(((PSPAWNINFO)pCharSpawn)->Y - pSwitch->Y, pSwitch->X - ((PSPAWNINFO)pCharSpawn)->X) * 180.0f / PI + 90.0f); + if (Dest.Float<0.0f) + Dest.Float += 360.0f; + else if (Dest.Float>=360.0f) + Dest.Float -= 360.0f; + Dest.Type=pHeadingType; + return true; + case Name: + Dest.Ptr=&pSwitch->Name[0]; + Dest.Type=pStringType; + return true; + case Distance: + Dest.Float=GetDistance(pSwitch->X,pSwitch->Y); + Dest.Type=pFloatType; + return true; + case xLineOfSight: + Dest.DWord=(CastRay(GetCharInfo()->pSpawn,pSwitch->Y,pSwitch->X,pSwitch->Z)); + Dest.Type=pBoolType; + return true; + } + return false; +#undef pSwitch +} + +bool MQ2GroundType::GETMEMBER() +{ +#define pGround ((PGROUNDITEM)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2GroundType::FindMember(Member); + if (!pMember) + return false; + switch((GroundMembers)pMember->ID) + { + case ID: + Dest.DWord=pGround->DropID; + Dest.Type=pIntType; + return true; + case W: + case X: + Dest.Float=pGround->X; + Dest.Type=pFloatType; + return true; + case N: + case Y: + Dest.Float=pGround->Y; + Dest.Type=pFloatType; + return true; + case U: + case Z: + Dest.Float=pGround->Z; + Dest.Type=pFloatType; + return true; + case Name: + Dest.Ptr=&pGround->Name[0]; + Dest.Type=pStringType; + return true; + case Heading: + Dest.Float=pGround->Heading*0.703125f; + Dest.Type=pHeadingType; + return true; + case Distance: + Dest.Float=GetDistance(pGround->X,pGround->Y); + Dest.Type=pFloatType; + return true; + case HeadingTo: + Dest.Float=(FLOAT)(atan2f(((PSPAWNINFO)pCharSpawn)->Y - pGround->Y, pGround->X - ((PSPAWNINFO)pCharSpawn)->X) * 180.0f / PI + 90.0f); + if (Dest.Float<0.0f) + Dest.Float += 360.0f; + else if (Dest.Float>=360.0f) + Dest.Float -= 360.0f; + Dest.Type=pHeadingType; + return true; + case xLineOfSight: + Dest.DWord=(CastRay(GetCharInfo()->pSpawn,pGround->Y,pGround->X,pGround->Z)); + Dest.Type=pBoolType; + return true; + } + return false; +#undef pGround +} +bool MQ2MacroQuestType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2MacroQuestType::FindMember(Member); + if (!pMember) + return false; + switch((MacroQuestMembers)pMember->ID) + { + case GameState: + if (gGameState==GAMESTATE_CHARSELECT) + Dest.Ptr="CHARSELECT"; + else if (gGameState==GAMESTATE_INGAME) + Dest.Ptr="INGAME"; + else + Dest.Ptr="UNKNOWN"; + Dest.Type=pStringType; + return true; + case LoginName: + { + if (PCHAR pTemp=GetLoginName()) + { + strcpy(DataTypeTemp,pTemp); + free(pTemp); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + } + return false; + case Server: + if (EQADDR_SERVERNAME[0]) + { + Dest.Ptr=EQADDR_SERVERNAME; + Dest.Type=pStringType; + return true; + } + return false; + case LastCommand: + if (szLastCommand[0]) + { + Dest.Ptr=&szLastCommand[0]; + Dest.Type=pStringType; + return true; + } + return false; + case LastTell: + if (EQADDR_LASTTELL[0]) + { + Dest.Ptr=&EQADDR_LASTTELL[0]; + Dest.Type=pStringType; + return true; + } + return false; + case Error: + if (gszLastNormalError[0])// QUIT SETTING THIS MANUALLY, USE MacroError, FatalError, ETC + { + Dest.Ptr=&gszLastNormalError[0]; + Dest.Type=pStringType; + return true; + } + return false; + case SyntaxError: + if (gszLastSyntaxError[0]) + { + Dest.Ptr=&gszLastSyntaxError[0]; + Dest.Type=pStringType; + return true; + } + return false; + case MQ2DataError: + if (gszLastMQ2DataError[0]) + { + Dest.Ptr=&gszLastMQ2DataError[0]; + Dest.Type=pStringType; + return true; + } + return false; + case Running: + Dest.DWord=(DWORD)clock(); + Dest.Type=pIntType; + return true; + case MouseX: + Dest.DWord=((PMOUSEINFO)EQADDR_MOUSE)->X; + Dest.Type=pIntType; + return true; + case MouseY: + Dest.DWord=((PMOUSEINFO)EQADDR_MOUSE)->Y; + Dest.Type=pIntType; + return true; + case BuildDate: + SYSTEMTIME st; + HANDLE hFile; + WIN32_FIND_DATA FileData; + CHAR szBuffer[MAX_STRING]; + sprintf(szBuffer,"%s\\MQ2Main.dll", gszINIPath); + hFile = FindFirstFile(szBuffer, &FileData); + // Convert the creation time time to local time. + FileTimeToSystemTime(&FileData.ftLastWriteTime, &st); + FindClose(hFile); + sprintf(DataTypeTemp, "%d%d%d",st.wYear,st.wMonth,st.wDay); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + case Ping: + Dest.DWord=pConnection->Last; + Dest.Type=pIntType; + return true; + case ChatChannels: + if(((PEVERQUEST)pEverQuest)->ChatService) + { + Dest.DWord=((PEVERQUEST)pEverQuest)->ChatService->ActiveChannels; + Dest.Type=pIntType; + return true; + } + case ChatChannel: + if(((PEVERQUEST)pEverQuest)->ChatService) + { + PCHATSERVICE pChat=((PEVERQUEST)pEverQuest)->ChatService; + if(ISNUMBER()) + { + DWORD index=GETNUMBER(); + if(pChat->ActiveChannels && index && index<=pChat->ActiveChannels) + { + strcpy(DataTypeTemp,pChat->ChannelList->ChannelName[index-1]); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + } + else + { + CHAR Name[MAX_STRING]={0}; + strcpy(Name,GETFIRST()); + for(unsigned int i=0; iActiveChannels; i++) + { + if(!stricmp(Name,pChat->ChannelList->ChannelName[i])) + { + Dest.DWord=1; + Dest.Type=pBoolType; + return true; + } + } + } + } + case ViewportX: + Dest.DWord=ScreenX; + Dest.Type=pIntType; + return true; + case ViewportY: + Dest.DWord=ScreenY; + Dest.Type=pIntType; + return true; + case ViewportXMax: + Dest.DWord=ScreenXMax; + Dest.Type=pIntType; + return true; + case ViewportYMax: + Dest.DWord=ScreenYMax; + Dest.Type=pIntType; + return true; + case ViewportXCenter: + Dest.DWord=ScreenXMax/2; + Dest.Type=pIntType; + return true; + case ViewportYCenter: + Dest.DWord=ScreenYMax/2; + Dest.Type=pIntType; + return true; + case LClickedObject: + Dest.DWord=gLClickedObject; + Dest.Type=pBoolType; + return true; + } + return false; +} +#ifndef ISXEQ +bool MQ2TimeType::GETMEMBER() +{ +#define pTime ((struct tm *)VarPtr.Ptr) + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2TimeType::FindMember(Member); + if (!pMember) + return false; + switch((TimeMembers)pMember->ID) + { + case Hour: + Dest.DWord=pTime->tm_hour; + Dest.Type=pIntType; + return true; + case Minute: + Dest.DWord=pTime->tm_min; + Dest.Type=pIntType; + return true; + case Second: + Dest.DWord=pTime->tm_sec; + Dest.Type=pIntType; + return true; + case DayOfWeek: + Dest.DWord=pTime->tm_wday+1; + Dest.Type=pIntType; + return true; + case Day: + Dest.DWord=pTime->tm_mday; + Dest.Type=pIntType; + return true; + case Month: + Dest.DWord=pTime->tm_mon+1; + Dest.Type=pIntType; + return true; + case Year: + Dest.DWord=pTime->tm_year+1900; + Dest.Type=pIntType; + return true; + case Time12: + { + unsigned long Hour=pTime->tm_hour%12; + if (!Hour) + Hour=12; + sprintf(DataTypeTemp,"%02d:%02d:%02d",Hour,pTime->tm_min, pTime->tm_sec); + Dest.Ptr=&DataTypeTemp[0], + Dest.Type=pStringType; + } + return true; + case Time24: + sprintf(DataTypeTemp,"%02d:%02d:%02d",pTime->tm_hour,pTime->tm_min, pTime->tm_sec); + Dest.Ptr=&DataTypeTemp[0], + Dest.Type=pStringType; + return true; + case Date: + sprintf(DataTypeTemp,"%02d/%02d/%04d",pTime->tm_mon+1,pTime->tm_mday, pTime->tm_year+1900); + Dest.Ptr=&DataTypeTemp[0], + Dest.Type=pStringType; + return true; + case Night: + Dest.DWord=((pTime->tm_hour<7) || (pTime->tm_hour>18)); + Dest.Type=pBoolType; + return true; + case SecondsSinceMidnight: + Dest.DWord=pTime->tm_hour*3600+pTime->tm_min*60+pTime->tm_sec; + Dest.Type=pIntType; + return true; + } + return false; +#undef pTime +} +#endif + +bool MQ2HeadingType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2HeadingType::FindMember(Member); + if (!pMember) + return false; + FLOAT Heading=360.0f-VarPtr.Float; + switch((HeadingMembers)pMember->ID) + { + case Clock: + { + Dest.Int=((int)Heading)+15; + Dest.DWord=((int)Dest.Int/30)%12; + if (Dest.DWord==0) + Dest.DWord=12; + Dest.Type=pIntType; + return true; + } + case Degrees: + Dest.Float=Heading; + Dest.Type=pFloatType; + return true; + case DegreesCCW: + Dest.Float=VarPtr.Float; + Dest.Type=pFloatType; + return true; + case ShortName: + Dest.Ptr=szHeadingNormalShort[(INT)(Heading/ 22.5f + 0.5f)%16]; + Dest.Type=pStringType; + return true; + case Name: + Dest.Ptr=szHeadingNormal[(INT)(Heading/ 22.5f + 0.5f)%16]; + Dest.Type=pStringType; + return true; + } + return false; +} + +bool MQ2CorpseType::GETMEMBER() +{ + if (!pActiveCorpse || !pLootWnd) + return false; +#define pLoot ((PEQLOOTWINDOW)pLootWnd) + PMQ2TYPEMEMBER pMember=MQ2CorpseType::FindMember(Member); + if (!pMember) + { +#ifndef ISXEQ + return pSpawnType->GetMember(*(MQ2VARPTR*)&pActiveCorpse,Member,Index,Dest); +#else + return pSpawnType->GetMember(*(LSVARPTR*)&pActiveCorpse,Member,argc,argv,Dest); +#endif + } + + switch((CorpseMembers)pMember->ID) + { + case Open: + Dest.DWord=1; // obviously, since we're this far + Dest.Type=pBoolType; + return true; + case Item: + if (ISINDEX()) + { + if (ISNUMBER()) + { + unsigned long nIndex=GETNUMBER()-1; + if (nIndex<34 && pLoot->pInventoryArray) + { + if (Dest.Ptr=pLoot->pInventoryArray->InventoryArray[nIndex]) + { + Dest.Type=pItemType; + return true; + } + } + } + else + { + // name + BOOL bExact=FALSE; + PCHAR pName=GETFIRST(); + if (*pName=='=') + { + bExact=TRUE; + pName++; + } + strlwr(pName); + CHAR Temp[MAX_STRING]={0}; + if (pLoot->pInventoryArray) + for (unsigned long nIndex = 0 ; nIndex < 34 ; nIndex++) + { + if (PCONTENTS pContents=pLoot->pInventoryArray->InventoryArray[nIndex]) + { + if (bExact) + { + if (!stricmp(pName,GetItemFromContents(pContents)->Name)) + { + Dest.Ptr=pContents; + Dest.Type=pItemType; + return true; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pContents)->Name)),pName)) + { + Dest.Ptr=pContents; + Dest.Type=pItemType; + return true; + } + } + } + } + + } + } + return false; + case Items: + { + Dest.DWord=0; + if (pLoot->pInventoryArray) + for (unsigned long N = 0 ; N < 31 ; N++) + { + if (pLoot->pInventoryArray->InventoryArray[N]) + Dest.DWord++; + } + Dest.Type=pIntType; + return true; + } + } + return false; +#undef pLoot +} + +bool MQ2MerchantType::GETMEMBER() +{ + if (!pActiveMerchant || !pMerchantWnd) + return false; +#define pMerch ((PEQMERCHWINDOW)pMerchantWnd) + PMQ2TYPEMEMBER pMember=MQ2MerchantType::FindMember(Member); + if (!pMember) + { +#ifndef ISXEQ + return pSpawnType->GetMember(*(MQ2VARPTR*)&pActiveMerchant,Member,Index,Dest); +#else + return pSpawnType->GetMember(*(LSVARPTR*)&pActiveMerchant,Member,argc,argv,Dest); +#endif + } + + switch((MerchantMembers)pMember->ID) + { + case Open: + Dest.DWord=1; // obviously, since we're this far ;) + Dest.Type=pBoolType; + return true; + case Item: + if (ISINDEX()) + { + if (ISNUMBER()) + { + unsigned long nIndex=GETNUMBER()-1; + if(!pMerch->pMerchOther->pMerchData->pMerchArray) + return false; + if (nIndex < pMerch->pMerchOther->pMerchData->MerchSlots) + { + if (Dest.Ptr=pMerch->pMerchOther->pMerchData->pMerchArray->Array[nIndex]) + { + Dest.Type=pItemType; + return true; + } + } + } + else + { + // name + BOOL bExact=FALSE; + PCHAR pName=GETFIRST(); + if (*pName=='=') + { + bExact=TRUE; + pName++; + } + strlwr(pName); + CHAR Temp[MAX_STRING]={0}; + if(!pMerch->pMerchOther->pMerchData->pMerchArray) + return false; + for (unsigned long nIndex = 0 ; nIndex < pMerch->pMerchOther->pMerchData->MerchSlots ; nIndex++) + { + if (PCONTENTS pContents=pMerch->pMerchOther->pMerchData->pMerchArray->Array[nIndex]) + { + if (bExact) + { + if (!stricmp(pName,GetItemFromContents(pContents)->Name)) + { + Dest.Ptr=pContents; + Dest.Type=pItemType; + return true; + } + } + else + { + if(strstr(strlwr(strcpy(Temp,GetItemFromContents(pContents)->Name)),pName)) + { + Dest.Ptr=pContents; + Dest.Type=pItemType; + return true; + } + } + } + } + } + } + return false; + case Items: + { + Dest.DWord=0; + if(!pMerch->pMerchOther->pMerchData->pMerchArray) + return false; + for (unsigned long nIndex = 0 ; nIndex < pMerch->pMerchOther->pMerchData->MerchSlots ; nIndex++) + if (pMerch->pMerchOther->pMerchData->pMerchArray->Array[nIndex]) + Dest.DWord++; + + Dest.Type=pIntType; + return true; + } + case Markup: + Dest.Float=pMerch->Markup; + Dest.Type=pFloatType; + return true; + case Full: + { + if(!pMerch->pMerchOther->pMerchData->pMerchArray) + return false; + Dest.DWord=1; + if (pMerch->pMerchOther->pMerchData->MerchSlots < 0x80) { + Dest.DWord=0; + Dest.Type=pBoolType; + return true; + } + for (unsigned long N = 0 ; N < pMerch->pMerchOther->pMerchData->MerchSlots ; N++) + { + if (!pMerch->pMerchOther->pMerchData->pMerchArray->Array[N]) + { + Dest.DWord=0; + break; + } + } + Dest.Type=pBoolType; + return true; + } + } + return false; +#undef pMerch +} + +bool MQ2InvSlotType::GETMEMBER() +{ +#define nInvSlot (VarPtr.Int) + PMQ2TYPEMEMBER pMember=MQ2InvSlotType::FindMember(Member); + if (!pMember) + return false; + switch((InvSlotMembers)pMember->ID) + { + case ID: + Dest.DWord=VarPtr.Int; + Dest.Type=pIntType; + return true; + case Item: +#if 0 + if (CInvSlot *pSlot=pInvSlotMgr->FindInvSlot(nInvSlot)) + { + if (((PEQINVSLOT)pSlot)->ppContents) + { + if (Dest.Ptr=*((PEQINVSLOT)pSlot)->ppContents) + { + Dest.Type=pItemType; + return true; + } + } + } +#endif + if(Dest.Ptr = GetCharInfo2()->pInventoryArray->InventoryArray[nInvSlot]) + { + Dest.Type = pItemType; + return true; + } + else + { + PCHARINFO pCharInfo=(PCHARINFO)pCharData; + if (nInvSlot>=262 && nInvSlot<342) + { + unsigned long nPack=(nInvSlot-262)/10; + unsigned long nSlot=(nInvSlot-262)%10; + if (PCONTENTS pPack=GetCharInfo2()->pInventoryArray->Inventory.Pack[nPack]) + if (GetItemFromContents(pPack)->Type==ITEMTYPE_PACK && nSlotSlots) + { + if (pPack->pContentsArray) + if (Dest.Ptr=pPack->pContentsArray->Contents[nSlot]) + { + Dest.Type=pItemType; + return true; + } + } + } + else if (nInvSlot>=2032 && nInvSlot<2272) + { + unsigned long nPack=(nInvSlot-2032)/10; + unsigned long nSlot=(nInvSlot-2)%10; + if (PCONTENTS pPack=pCharInfo->pBankArray->Bank[nPack]) + if (GetItemFromContents(pPack)->Type==ITEMTYPE_PACK && nSlotSlots) + { + if (pPack->pContentsArray) + if (Dest.Ptr=pPack->pContentsArray->Contents[nSlot]) + { + Dest.Type=pItemType; + return true; + } + } + } + else if (nInvSlot>=2532 && nInvSlot<2552) + { + unsigned long nPack=24+((nInvSlot-2532)/10); + unsigned long nSlot=(nInvSlot-2)%10; + if (PCONTENTS pPack=pCharInfo->pBankArray->Bank[nPack]) + if (GetItemFromContents(pPack)->Type==ITEMTYPE_PACK && nSlotSlots) + { + if (pPack->pContentsArray) + if (Dest.Ptr=pPack->pContentsArray->Contents[nSlot]) + { + Dest.Type=pItemType; + return true; + } + } + } + else if (nInvSlot>=2000 && nInvSlot<2024) + { + if (Dest.Ptr=pCharInfo->pBankArray->Bank[nInvSlot-2000]) + { + Dest.Type=pItemType; + return true; + } + } + else if (nInvSlot==2500 || nInvSlot==2501) + { + if (Dest.Ptr=pCharInfo->pBankArray->Bank[nInvSlot-2500+24]) + { + Dest.Type=pItemType; + return true; + } + } + } + return false; + case Pack: + if (nInvSlot>=262 && nInvSlot<342) + { + Dest.DWord=((nInvSlot-262)/10)+BAG_SLOT_START; + Dest.Type=pInvSlotType; + return true; + } + else if (nInvSlot>=2032 && nInvSlot<2272) + { + Dest.DWord=((nInvSlot-2032)/10)+2000; + Dest.Type=pInvSlotType; + return true; + } + else if (nInvSlot>=2532 && nInvSlot<2552) + { + Dest.DWord=((nInvSlot-2532)/10)+2500; + Dest.Type=pInvSlotType; + return true; + } + return false; + case Slot: + { + if (nInvSlot>=262 && nInvSlot<342) + { + Dest.DWord=(nInvSlot-262)%10; + Dest.Type=pIntType; + return true; + } + else if (nInvSlot>=2032 && nInvSlot<2272) + { + Dest.DWord=(nInvSlot-2032)%10; + Dest.Type=pIntType; + return true; + } + else if (nInvSlot>=2532 && nInvSlot<2552) + { + Dest.DWord=(nInvSlot-2532)%10; + Dest.Type=pIntType; + return true; + } + } + return false; + case Name: + if (nInvSlot>=0 && nInvSlot=BAG_SLOT_START && nInvSlot=2000 && nInvSlot<2024) + { + sprintf(DataTypeTemp,"bank%d",nInvSlot-1999); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + else if (nInvSlot>=2500 && nInvSlot<2502) + { + sprintf(DataTypeTemp,"sharedbank%d",nInvSlot-2499); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + else if (nInvSlot>=5000 && nInvSlot<5032) + { + sprintf(DataTypeTemp,"loot%d",nInvSlot-4999); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + else if (nInvSlot>=3000 && nInvSlot<3009) + { + sprintf(DataTypeTemp,"trade%d",nInvSlot-2999); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + else if (nInvSlot>=4000 && nInvSlot<4009) + { + sprintf(DataTypeTemp,"enviro%d",nInvSlot-3999); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + else if (nInvSlot>=6000 && nInvSlot<6080) + { + sprintf(DataTypeTemp,"merchant%d",nInvSlot-5999); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + else if (nInvSlot>=7000 && nInvSlot<7089) + { + sprintf(DataTypeTemp,"bazaar%d",nInvSlot-6999); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + else if (nInvSlot>=8000 && nInvSlot<8031) + { + sprintf(DataTypeTemp,"inspect%d",nInvSlot-7999); + Dest.Ptr=&DataTypeTemp[0]; + Dest.Type=pStringType; + return true; + } + return false; + } + + return false; +#undef nInvSlot +} + + + +bool MQ2TimerType::GETMEMBER() +{ +#define pTimer ((PMQTIMER)VarPtr.Ptr) + if (!pTimer) + return false; + PMQ2TYPEMEMBER pMember=MQ2TimerType::FindMember(Member); + if (!pMember) + return false; + switch((TimerMembers)pMember->ID) + { + case Value: + Dest.DWord=pTimer->Current; + Dest.Type=pIntType; + return true; + case OriginalValue: + Dest.DWord=pTimer->Original; + Dest.Type=pIntType; + return true; + } + return false; +#undef pTimer +} + + +bool MQ2SkillType::GETMEMBER() +{ + if (!VarPtr.Ptr) + return false; + PSKILL pSkill=*(PSKILL*)VarPtr.Ptr; + if (!pSkill) + return false; + PMQ2TYPEMEMBER pMember=MQ2SkillType::FindMember(Member); + if (!pMember) + return false; + unsigned long nIndex=GetCharInfo2()->Class; + if(ISINDEX()) + { + if(ISNUMBER()) + { + // class by number + nIndex=GETNUMBER(); + } + else + { + // class by name or shortname + for (int N=1 ; N<17 ; N++) + { + if( + !stricmp(GETFIRST(), GetClassDesc(N)) || + !stricmp(GETFIRST(), pEverQuest->GetClassThreeLetterCode(N)) + ) + { + nIndex=N; + break; + } + } + } + } + + switch((SkillMembers)pMember->ID) + { + case Name: + if (Dest.Ptr=pStringTable->getString(pSkill->nName,0)) + { + Dest.Type=pStringType; + return true; + } + return false; + case ID: + Dest.DWord=GetSkillIDFromName(pStringTable->getString(pSkill->nName,0)); + Dest.Type=pIntType; + return true; + case ReuseTime: + Dest.DWord=pSkill->ReuseTimer; + Dest.Type=pIntType; + return true; + case MinLevel: + Dest.DWord=pSkill->MinLevel[nIndex]; + Dest.Type=pIntType; + return true; + case SkillCap: + { + DWORD i=GetSkillIDFromName(pStringTable->getString(pSkill->nName,0)); + Dest.DWord=pCSkillMgr->GetSkillCap((EQ_Character*)GetCharInfo(),GetCharInfo2()->Level,GetCharInfo2()->Class,i,true,true,true); + Dest.Type=pIntType; + return true; + } + case AltTimer: + Dest.DWord=pSkill->AltTimer; + Dest.Type=pIntType; + return true; + case Activated: + Dest.DWord=pSkill->Activated; + Dest.Type=pBoolType; + return true; + } + return false; +} + +bool MQ2AltAbilityType::ToString(MQ2VARPTR VarPtr, PCHAR Destination) +{ + if (!VarPtr.Ptr) + return false; + PALTABILITY pAbility=(PALTABILITY)VarPtr.Ptr; + itoa(pAbility->PointsSpent, Destination,10); + return true; +} + +bool MQ2AltAbilityType::GETMEMBER() +{ + if (!VarPtr.Ptr) + return false; + PALTABILITY pAbility=(PALTABILITY)VarPtr.Ptr; + + PMQ2TYPEMEMBER pMember=MQ2AltAbilityType::FindMember(Member); + if (!pMember) + return false; + switch((AltAbilityMembers)pMember->ID) + { + case Name: + if (Dest.Ptr= pCDBStr->GetString(pAbility->nName, 1, NULL)) + { + Dest.Type=pStringType; + return true; + } + return false; + case ShortName: + if (Dest.Ptr=pStringTable->getString(pAbility->nShortName,0)) + { + Dest.Type=pStringType; + return true; + } + return false; + case Description: + if (Dest.Ptr= pCDBStr->GetString(pAbility->nName, 4, NULL)) + { + Dest.Type=pStringType; + return true; + } + return false; + case ID: + Dest.DWord=pAbility->ID; + Dest.Type=pIntType; + return true; + case ReuseTime: + Dest.DWord=pAbility->ReuseTimer; + Dest.Type=pIntType; + return true; + case MyReuseTime: + Dest.DWord=pAltAdvManager->GetCalculatedTimer(pPCData,pAbility); + Dest.Type=pIntType; + return true; + case MinLevel: + Dest.DWord=pAbility->MinLevel; + Dest.Type=pIntType; + return true; + case Cost: + Dest.DWord=pAbility->Cost; + Dest.Type=pIntType; + return true; + case Spell: + if (Dest.Ptr=GetSpellByID(pAbility->SpellID)) + { + Dest.Type=pSpellType; + return true; + } + return false; + case RequiresAbility: + if (pAbility->RequiresAbility && *pAbility->RequiresAbility>0) + { + for (unsigned long nAbility=0 ; nAbilityGetAltAbility(nAbility)) + { + if (tmppAbility->ID == *pAbility->RequiresAbility ) + { + Dest.Ptr=tmppAbility; + Dest.Type=pAltAbilityType; + return true; + } + } + } + } + DebugSpew("ability %d not found\n", *pAbility->RequiresAbility); + return false; + case RequiresAbilityPoints: + if (pAbility->RequiresAbilityPoints) { + Dest.DWord=*pAbility->RequiresAbilityPoints; + Dest.Type=pIntType; + return true; + } + return false; + case MaxRank: + Dest.DWord=pAbility->MaxRank; + Dest.Type=pIntType; + return true; + case AARankRequired: + Dest.DWord=pAbility->AARankRequired; + Dest.Type=pIntType; + return true; + case Type: + Dest.DWord=pAbility->Type; + Dest.Type=pIntType; + return true; + } + return false; +} + +bool MQ2GroupType::ToString(MQ2VARPTR VarPtr, PCHAR Destination) +{ + int nMembers=0; + PCHARINFO pChar=GetCharInfo(); + if (!pChar->pGroupInfo) return false; + for (int index=1;index<6;index++) + { + if (pChar->pGroupInfo->pMember[index]) + nMembers++; + } + itoa(nMembers,Destination,10); + return true; +} + +bool MQ2GroupType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2GroupType::FindMember(Member); + PCHARINFO pChar=GetCharInfo(); + int i; + if (!pMember || !pChar->pGroupInfo) + return false; + switch((GroupMembers)pMember->ID) + { + case xMember: + if (!ISINDEX()) + return false; + if (ISNUMBER()) + { + // by number + Dest.DWord=GETNUMBER(); + Dest.Type=pGroupMemberType; + return true; + } + else + { + Dest.DWord=0; + for (i=1;i<6;i++) + if (pChar->pGroupInfo->pMember[i]) + { + Dest.DWord++; + CHAR Name[MAX_STRING]={0}; + GetCXStr(pChar->pGroupInfo->pMember[i]->pName,Name,MAX_STRING); + if (!stricmp(Name,GETFIRST())) + { + Dest.Type=pIntType; + return true; + } + } + if (!stricmp(pChar->pSpawn->Name,GETFIRST())) { + Dest.DWord=0; + Dest.Type=pIntType; + return true; + } + return false; + } + break; + case Members: + { + Dest.DWord=0; + for (i=1;i<6;i++) + if (pChar->pGroupInfo->pMember[i]) + Dest.DWord++; + Dest.Type=pIntType; + } + return true; + case Leader: + { + if (!pChar->pGroupInfo->pLeader) return false; + CHAR LeaderName[MAX_STRING]={0}; + GetCXStr(pChar->pGroupInfo->pLeader->pName,LeaderName,MAX_STRING); + Dest.DWord=0; + if (!stricmp(pChar->pSpawn->Name,LeaderName)) + { + Dest.Type=pGroupMemberType; + return true; + } + for (i=1;i<6;i++) + { + if (pChar->pGroupInfo->pMember[i]) + { + Dest.DWord++; + CHAR Name[MAX_STRING]={0}; + GetCXStr(pChar->pGroupInfo->pMember[i]->pName,Name,MAX_STRING); + if (!stricmp(Name,LeaderName)) + { + Dest.Type=pGroupMemberType; + return true; + } + } + } + if (!Dest.DWord) + { + // group has no members + Dest.Type=pGroupMemberType; + return true; + } + } + break; + case GroupSize: + { + Dest.DWord=0; + for (i=1;i<6;i++) + if (pChar->pGroupInfo->pMember[i]) + Dest.DWord++; + if (Dest.DWord) Dest.DWord++; + Dest.Type=pIntType; + } + return true; + case MainTank: + { + Dest.DWord = 0; + if(pChar->pGroupInfo->pMember[0]->MainTank) + { + Dest.Type = pGroupMemberType; + return true; + } + for(i = 1; i < 6; i++) + { + if(pChar->pGroupInfo->pMember[i]) + { + Dest.DWord++; + if(pChar->pGroupInfo->pMember[i]->MainTank) + { + Dest.Type = pGroupMemberType; + return true; + } + } + } + } + return false; + case MainAssist: + { + Dest.DWord = 0; + if(pChar->pGroupInfo->pMember[0]->MainAssist) + { + Dest.Type = pGroupMemberType; + return true; + } + for(i = 1; i < 6; i++) + { + if(pChar->pGroupInfo->pMember[i]) + { + Dest.DWord++; + if(pChar->pGroupInfo->pMember[i]->MainAssist) + { + Dest.Type = pGroupMemberType; + return true; + } + } + } + } + return false; + case Puller: + { + Dest.DWord = 0; + if(pChar->pGroupInfo->pMember[0]->Puller) + { + Dest.Type = pGroupMemberType; + return true; + } + for(i = 1; i < 6; i++) + { + if(pChar->pGroupInfo->pMember[i]) + { + Dest.DWord++; + if(pChar->pGroupInfo->pMember[i]->Puller) + { + Dest.Type = pGroupMemberType; + return true; + } + } + } + } + } + return false; +} + +bool MQ2GroupMemberType::ToString(MQ2VARPTR VarPtr, PCHAR Destination) +{ + int i; + if (unsigned long N=VarPtr.DWord) + { + if (N>5) + return false; + PCHARINFO pChar=GetCharInfo(); + if (!pChar->pGroupInfo) return false; + for (i=1; i<6 ; i++) + { + if (pChar->pGroupInfo->pMember[i]) + { + N--; + if (N==0) + { + CHAR Name[MAX_STRING]={0}; + GetCXStr(pChar->pGroupInfo->pMember[i]->pName,Name,MAX_STRING); + strcpy(Destination,CleanupName(Name)); + return true; + } + } + } + } + else + { + strcpy(Destination,CleanupName(GetCharInfo()->pSpawn->Name)); + return true; + } + return false; +} + +bool MQ2GroupMemberType::GETMEMBER() +{ + CHAR MemberName[MAX_STRING]={0}; + CHAR LeaderName[MAX_STRING]={0}; + PSPAWNINFO pGroupMember=0; + PCHARINFO pChar=GetCharInfo(); + PGROUPMEMBER pGroupMemberData=0; + int i; + DWORD nMember = VarPtr.DWord; + if (!pChar->pGroupInfo) return false; + if (unsigned long N=nMember) + { + if (N>5) + return false; + for (i=1; i<6 ; i++) + { + if (pChar->pGroupInfo->pMember[i]) + { + N--; + if (N==0) + { + GetCXStr(pChar->pGroupInfo->pMember[i]->pName,MemberName,MAX_STRING); + pGroupMember=pChar->pGroupInfo->pMember[i]->pSpawn; + pGroupMemberData=pChar->pGroupInfo->pMember[i]; + break; + } + } + } + if (!MemberName) + return false; + } + else + { + pGroupMember=pChar->pSpawn; + strcpy(MemberName,pGroupMember->Name); + pGroupMemberData=pChar->pGroupInfo->pMember[0]; + } + PMQ2TYPEMEMBER pMember=MQ2GroupMemberType::FindMember(Member); + if (!pMember) + { + if (!pGroupMember) + return false; +#ifndef ISXEQ + return pSpawnType->GetMember(*(MQ2VARPTR*)&pGroupMember,Member,Index,Dest); +#else + return pSpawnType->GetMember(*(LSVARPTR*)&pGroupMember,Member,argc,argv,Dest); +#endif + } + + switch((GroupMemberMembers)pMember->ID) + { + case Name: + Dest.Ptr=CleanupName(MemberName); + Dest.Type=pStringType; + return true; + case Leader: + if (!pChar->pGroupInfo->pLeader) return false; + GetCXStr(pChar->pGroupInfo->pLeader->pName,LeaderName,MAX_STRING); + Dest.DWord=!stricmp(MemberName,LeaderName); + Dest.Type=pBoolType; + return true; + case Spawn: + if (Dest.Ptr=pGroupMember) + { + Dest.Type=pSpawnType; + return true; + } + return false; + case Level: + if (pGroupMember) + { + Dest.DWord=pGroupMember->Level; + Dest.Type=pIntType; + return true; + } + else if (pGroupMemberData) + { + Dest.DWord=pGroupMemberData->Level; + Dest.Type=pIntType; + return true; + } + return false; + case MainTank: + if(pGroupMemberData) + { + Dest.DWord=pGroupMemberData->MainTank; + Dest.Type=pBoolType; + return true; + } + return false; + case MainAssist: + if(pGroupMemberData) + { + Dest.DWord=pGroupMemberData->MainAssist; + Dest.Type=pBoolType; + return true; + } + return false; + case Puller: + if(pGroupMemberData) + { + Dest.DWord=pGroupMemberData->Puller; + Dest.Type=pBoolType; + return true; + } + return false; + case Mercenary: + if(pGroupMemberData) + { + Dest.DWord=pGroupMemberData->Mercenary; + Dest.Type=pBoolType; + return true; + } + return false; + case PctAggro: + if(pAggroInfo) + { + Dest.DWord = pAggroInfo->aggroData[nMember + 1].AggroPct; + Dest.Type = pIntType; + return true; + } + } + return false; +} + +bool MQ2RaidType::GETMEMBER() +{ + int i; + if (!pRaid) + return false; + PMQ2TYPEMEMBER pMember=MQ2RaidType::FindMember(Member); + if (!pMember) + return false; + switch((RaidMembers)pMember->ID) + { + case Locked: + Dest.DWord=pRaid->Locked; + Dest.Type=pBoolType; + return true; + case Invited: + Dest.DWord=pRaid->Invited == 2; + Dest.Type=pBoolType; + return true; + case xMember: + if (ISINDEX()) + { + if (ISNUMBER()) + { + DWORD Count=GETNUMBER(); + if (!Count || Count>pRaid->RaidMemberCount) + return false; + for (DWORD nMember = 0 ; nMember < 72 ; nMember++) + { + if (pRaid->RaidMemberUsed[nMember]) + { + Count--; + if (!Count) + { + Dest.DWord=nMember+1; + Dest.Type=pRaidMemberType; + return true; + } + } + } + } + else + { + // by name + for (DWORD nMember=0 ; nMember < 72 ; nMember++) + { + if (pRaid->RaidMemberUsed[nMember] && !stricmp(pRaid->RaidMember[nMember].Name,GETFIRST())) + { + Dest.DWord=nMember+1; + Dest.Type=pRaidMemberType; + return true; + } + } + } + } + return false; + case Members: + Dest.DWord=pRaid->RaidMemberCount; + Dest.Type=pIntType; + return true; + case Target: + Dest.DWord=pRaid->RaidTarget+1; + Dest.Type=pRaidMemberType; + return true; + case Leader: + { + for (DWORD nMember=0 ; nMember < 72 ; nMember++) + { + if (pRaid->RaidMemberUsed[nMember] && !stricmp(pRaid->RaidMember[nMember].Name,pRaid->RaidLeaderName)) + { + Dest.DWord=nMember+1; + Dest.Type=pRaidMemberType; + return true; + } + } + } + return false; + case TotalLevels: + Dest.DWord=pRaid->TotalRaidMemberLevels; + Dest.Type=pIntType; + return true; + case AverageLevel: + Dest.Float=(FLOAT)pRaid->TotalRaidMemberLevels/(FLOAT)pRaid->RaidMemberCount; + Dest.Type=pFloatType; + return true; + case LootType: + Dest.DWord=pRaid->LootType; + Dest.Type=pIntType; + return true; + case Looters: + { + Dest.DWord=0; + for (unsigned long N = 0 ; N < 0x13 ; N++) + { + if (pRaid->RaidLooters[N][0]) + Dest.DWord++; + } + Dest.Type=pIntType; + return true; + } + case Looter: + if (ISINDEX()) + { + if (ISNUMBER()) + { + DWORD Count=GETNUMBER(); + if (!Count) + return 0; + for (DWORD nLooter=0; nLooter<0x13 ; nLooter++) + { + if (pRaid->RaidLooters[nLooter][0]) + { + Count--; + if (Count==0) + { + Dest.Ptr=&pRaid->RaidLooters[nLooter][0]; + Dest.Type=pStringType; + return true; + } + } + } + } + // by name? + } + return false; + case MainAssist: + { + for (i=0; i < 72; i++) + { + if (pRaid->RaidMemberUsed[i] && pRaid->RaidMember[i].RaidMainAssist) + { + Dest.DWord=i+1; + Dest.Type=pRaidMemberType; + return true; + } + } + } + return false; + } + /**/ + return false; +} + +bool MQ2RaidMemberType::GETMEMBER() +{ + DWORD nRaidMember=VarPtr.DWord-1; + if (VarPtr.DWord>=72) + return false; + if (!pRaid->RaidMemberUsed[nRaidMember]) + return false; + PEQRAIDMEMBER pRaidMember=&pRaid->RaidMember[nRaidMember]; + PMQ2TYPEMEMBER pMember=MQ2RaidMemberType::FindMember(Member); + if (!pMember) + { + if(!GetSpawnByName(pRaidMember->Name)) + return false; +#ifndef ISXEQ + return pSpawnType->GetMember(*(MQ2VARPTR*)GetSpawnByName(pRaidMember->Name),Member,Index,Dest); +#else + return pSpawnType->GetMember(*(LSVARPTR*)GetSpawnByName(pRaidMember->Name),Member,argc,argv,Dest); +#endif + } + + switch((RaidMemberMembers)pMember->ID) + { + case Name: + Dest.Ptr=pRaidMember->Name; + Dest.Type=pStringType; + return true; + case Group: + Dest.DWord=pRaidMember->GroupNumber+1; + Dest.Type=pIntType; + return true; + case GroupLeader: + Dest.DWord=pRaidMember->GroupLeader; + Dest.Type=pBoolType; + return true; + case RaidLeader: + Dest.DWord=pRaidMember->RaidLeader; + Dest.Type=pBoolType; + return true; + case Looter: + if (pRaidMember->RaidLeader) + { + Dest.DWord=1; + Dest.Type=pBoolType; + return true; + } + if (pRaid->LootType==2) + { + Dest.DWord=pRaidMember->GroupLeader; + Dest.Type=pBoolType; + return true; + } + if (pRaid->LootType==3) + { + for (DWORD N = 0 ; N < 0x13 ; N++) + { + if (!stricmp(pRaid->RaidLooters[N],pRaidMember->Name)) + { + Dest.DWord=1; + Dest.Type=pBoolType; + return true; + } + } + } + Dest.DWord=0; + Dest.Type=pBoolType; + return true; + case Spawn: + if (Dest.Ptr=(PSPAWNINFO)GetSpawnByName(pRaidMember->Name)) + { + Dest.Type=pSpawnType; + return true; + } + return false; + case Level: + Dest.DWord=pRaidMember->nLevel; + Dest.Type=pIntType; + return true; + case Class: + Dest.DWord=pRaidMember->nClass; + Dest.Type=pClassType; + return true; + /* + { + if (PSPAWNINFO pSpawn=(PSPAWNINFO)GetSpawnByName(pRaidMember->Name)) + { + Dest.DWord=pSpawn->Class; + Dest.Type=pIntType; + return true; + } + pCharData->KunarkClass(0,0,0x18C,1); + } + return false; + /**/ + } + return false; +} + +bool MQ2EvolvingItemType::GETMEMBER() +{ + if (!VarPtr.Ptr) + return false; + PCONTENTS pItem=(PCONTENTS)VarPtr.Ptr; + PMQ2TYPEMEMBER pMember=MQ2EvolvingItemType::FindMember(Member); + if (!pMember) + return false; + switch((EvolvingItemMembers)pMember->ID) + { + case ExpPct: + Dest.Float=(FLOAT)pItem->EvolvingExpPct; + Dest.Type=pFloatType; + return true; + case ExpOn: + Dest.DWord=pItem->EvolvingExpOn; + Dest.Type=pBoolType; + return true; + case Level: + Dest.DWord=pItem->EvolvingCurrentLevel; + Dest.Type=pIntType; + return true; + case MaxLevel: + Dest.DWord=pItem->EvolvingMaxLevel; + Dest.Type=pIntType; + return true; + } + return false; +} + +bool MQ2DynamicZoneType::GETMEMBER() +{ + if(!pDZMember) + return false; + PMQ2TYPEMEMBER pMember=MQ2DynamicZoneType::FindMember(Member); + if(!pMember) + return false; + switch((DynamicZoneMembers)pMember->ID) + { + case Name: + Dest.Ptr=pDynamicZone->ExpeditionName; + Dest.Type=pStringType; + return true; + case Members: + { + Dest.DWord=0; + PDZMEMBER pDynamicZoneMember=pDynamicZone->pMemberList; + while(pDynamicZoneMember) + { + Dest.DWord++; + pDynamicZoneMember=pDynamicZoneMember->pNext; + } + } + Dest.Type=pIntType; + return true; + case MaxMembers: + Dest.DWord=pDynamicZone->MaxPlayers; + Dest.Type=pIntType; + return true; + case xMember: + if(ISINDEX()) + { + PDZMEMBER pDynamicZoneMember=pDynamicZone->pMemberList; + if(ISNUMBER()) + { + DWORD Count=GETNUMBER(); + if (!Count || Count>pDynamicZone->MaxPlayers) + return false; + Count--; + for(DWORD i=0; pDynamicZoneMember!=0; i++) + { + if(i==Count) + { + Dest.Ptr=pDynamicZoneMember; + Dest.Type=pDZMemberType; + return true; + } + pDynamicZoneMember=pDynamicZoneMember->pNext; + } + } + else + { + while(pDynamicZoneMember) + { + if(!stricmp(pDynamicZoneMember->Name,GETFIRST())) + { + Dest.Ptr=pDynamicZoneMember; + Dest.Type=pDZMemberType; + return true; + } + pDynamicZoneMember=pDynamicZoneMember->pNext; + } + } + } + return false; + case Leader: + { + PDZMEMBER pDynamicZoneMember=pDynamicZone->pMemberList; + for(DWORD i=0; iMaxPlayers; i++) + { + if(!strcmp(pDynamicZoneMember->Name,(char*)instExpeditionLeader)) + { + Dest.Ptr=pDynamicZoneMember; + Dest.Type=pDZMemberType; + return true; + } + pDynamicZoneMember=pDynamicZoneMember->pNext; + } + } + } + return false; +} + +bool MQ2DZMemberType::GETMEMBER() +{ + if(!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2DZMemberType::FindMember(Member); + if(!pMember) + return false; + PDZMEMBER pDynamicZoneMember=(PDZMEMBER)VarPtr.Ptr; + switch((DZMemberTypeMembers)pMember->ID) + { + case Name: + Dest.Ptr=pDynamicZoneMember->Name; + Dest.Type=pStringType; + return true; + case Status: + switch(pDynamicZoneMember->Status) + { + case 0: + Dest.Ptr="Unknown"; + break; + case 1: + Dest.Ptr="Online"; + break; + case 2: + Dest.Ptr="Offline"; + break; + case 3: + Dest.Ptr="In Dynamic Zone"; + break; + case 4: + Dest.Ptr="Link Dead"; + break; + } + Dest.Type=pStringType; + return true; + } + return false; +} + +bool MQ2FellowshipType::GETMEMBER() +{ + if(!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2FellowshipType::FindMember(Member); + if(!pMember) + return false; + PFELLOWSHIPINFO pFellowship=(PFELLOWSHIPINFO)VarPtr.Ptr; + switch((FellowshipTypeMembers)pMember->ID) + { + case ID: + Dest.DWord=pFellowship->FellowshipID; + Dest.Type=pIntType; + return true; + case Leader: + Dest.Ptr=pFellowship->Leader; + Dest.Type=pStringType; + return true; + case MotD: + Dest.Ptr=pFellowship->MotD; + Dest.Type=pStringType; + return true; + case Members: + Dest.DWord=pFellowship->Members; + Dest.Type=pIntType; + return true; + case xMember: + if(ISINDEX()) + { + if(ISNUMBER()) + { + DWORD i=GETNUMBER(); + if(!i || i>pFellowship->Members) + return false; + Dest.Ptr=&pFellowship->FellowshipMember[--i]; + Dest.Type=pFellowshipMemberType; + return true; + } + else + { + for(DWORD i=0; iMembers; i++) + { + if(!stricmp(pFellowship->FellowshipMember[i].Name,GETFIRST())) + { + Dest.Ptr=&pFellowship->FellowshipMember[i]; + Dest.Type=pFellowshipMemberType; + return true; + } + } + } + } + return false; + case CampfireDuration: + if(((PSPAWNINFO)pCharSpawn)->CampfireTimestamp) + { + Dest.DWord=(((PSPAWNINFO)pCharSpawn)->CampfireTimestamp-GetFastTime())/6; + Dest.Type=pTicksType; + return true; + } + return false; + case CampfireY: + Dest.Float=((PSPAWNINFO)pCharSpawn)->CampfireY; + Dest.Type=pFloatType; + return true; + case CampfireX: + Dest.Float=((PSPAWNINFO)pCharSpawn)->CampfireX; + Dest.Type=pFloatType; + return true; + case CampfireZ: + Dest.Float=((PSPAWNINFO)pCharSpawn)->CampfireZ; + Dest.Type=pFloatType; + return true; + case CampfireZone: + if(((PSPAWNINFO)pCharSpawn)->CampfireZoneID) + { + Dest.Ptr=((PWORLDDATA)pWorldData)->ZoneArray[((PSPAWNINFO)pCharSpawn)->CampfireZoneID]; + Dest.Type=pZoneType; + return true; + } + return false; + case Campfire: + Dest.Int=((PSPAWNINFO)pCharSpawn)->Campfire; + Dest.Type=pBoolType; + return true; + } + return false; +} + +bool MQ2FellowshipMemberType::GETMEMBER() +{ + if(!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2FellowshipMemberType::FindMember(Member); + if(!pMember) + return false; + PFELLOWSHIPMEMBER pFellowshipMember=(PFELLOWSHIPMEMBER)VarPtr.Ptr; + switch((FMTypeMembers)pMember->ID) + { + case Zone: + if(pFellowshipMember->ZoneID) + { + Dest.Ptr=((PWORLDDATA)pWorldData)->ZoneArray[pFellowshipMember->ZoneID]; + Dest.Type=pZoneType; + return true; + } + return false; + case Level: + Dest.DWord=pFellowshipMember->Level; + Dest.Type=pIntType; + return true; + case Class: + Dest.DWord=pFellowshipMember->Class; + Dest.Type=pClassType; + return true; + case LastOn: + if(pFellowshipMember->LastOn) + { + Dest.DWord=(GetFastTime()-pFellowshipMember->LastOn)/6; + Dest.Type=pTicksType; + return true; + } + return false; + case Name: + Dest.Ptr=pFellowshipMember->Name; + Dest.Type=pStringType; + return true; + } + return false; +} + +bool MQ2FriendsType::GETMEMBER() +{ + PMQ2TYPEMEMBER pMember=MQ2FriendsType::FindMember(Member); + if (!pMember) + return false; + switch((FriendsMembers)pMember->ID) + { + case xFriend: + if(ISINDEX() && ((PEVERQUEST)pEverQuest)->ChatService) { + class CChatService *pChat=(class CChatService *) ((PEVERQUEST)pEverQuest)->ChatService; + int i; + if(ISNUMBER()) { + i=GETNUMBER(); + if (i > pChat->GetNumberOfFriends()) + return false; + + if (Dest.Ptr=pChat->GetFriendName(i-1)) { + Dest.Type=pStringType; + return true; + } + } else { + for(i=0; iGetNumberOfFriends(); i++) { + if(!stricmp(pChat->GetFriendName(i),GETFIRST())) { + Dest.DWord=1; + Dest.Type=pBoolType; + return true; + } + } + return false; + } + } + return false; + default: + return false; + }; +} + +bool MQ2TargetType::GETMEMBER() +{ + int buffID = 0; + DWORD i,j; + if (!VarPtr.Ptr) + return false; + PMQ2TYPEMEMBER pMember=MQ2TargetType::FindMember(Member); + if (!pMember) + { +#ifndef ISXEQ + return pSpawnType->GetMember(*(MQ2VARPTR*)&VarPtr.Ptr,Member,Index,Dest); +#else + return pSpawnType->GetMember(*(LSVARPTR*)&VarPtr.Ptr,Member,argc,argv,Dest); +#endif + } + switch((TargetMembers)pMember->ID) + { + case Buff: + if(!(((PCTARGETWND)pTargetWnd)->Type > 0)) + return false; + if(ISINDEX()) + { + if(ISNUMBER()) + { + DWORD nBuff = GETNUMBER(); + if (!nBuff || nBuff >= NUM_BUFF_SLOTS) + return false; + j = 0; + for(i = 0; i < NUM_BUFF_SLOTS; i++) + { + buffID = ((PCTARGETWND)pTargetWnd)->BuffSpellID[i]; + if(buffID && nBuff == ++j) + { + Dest.Ptr = GetSpellByID((DWORD)buffID); + Dest.Type = pSpellType; + return true; + } + } + } + else + { + for(i = 0; i < NUM_BUFF_SLOTS; i++) + { + buffID = ((PCTARGETWND)pTargetWnd)->BuffSpellID[i]; + if(buffID && !stricmp(GETFIRST(), GetSpellNameByID(buffID))) + { + Dest.Ptr = GetSpellByID((DWORD)buffID); + Dest.Type = pSpellType; + return true; + } + } + } + } + else + { + // return first buff + for(i = 0; i < NUM_BUFF_SLOTS; i++) + { + buffID = ((PCTARGETWND)pTargetWnd)->BuffSpellID[i]; + if(buffID) + { + if(PSPELL pSpell = GetSpellByID(buffID)) + { + strcpy(DataTypeTemp, pSpell->Name); + Dest.Ptr = &DataTypeTemp[0]; + Dest.Type = pStringType; + return true; + } + } + } + } + return false; + case BuffCount: + if(!(((PCTARGETWND)pTargetWnd)->Type > 0)) + return false; + Dest.DWord = 0; + for(i = 0; i < NUM_BUFF_SLOTS; i++) + if(((PCTARGETWND)pTargetWnd)->BuffSpellID[i]) + Dest.DWord++; + Dest.Type = pIntType; + return true; + case BuffDuration: + if(!(((PCTARGETWND)pTargetWnd)->Type > 0)) + return false; + if(ISINDEX()) + { + if(ISNUMBER()) + { + DWORD nBuff = GETNUMBER(); + if (!nBuff || nBuff >= NUM_BUFF_SLOTS) + return false; + j = 0; + for(i = 0; i < NUM_BUFF_SLOTS; i++) + { + buffID = ((PCTARGETWND)pTargetWnd)->BuffSpellID[i]; + if(buffID && nBuff == ++j) + { + Dest.DWord = ((((PCTARGETWND)pTargetWnd)->BuffTimer[i] / 1000) + 6) / 6; + Dest.Type = pTicksType; + return true; + } + } + } + else + { + for(i = 0; i < NUM_BUFF_SLOTS; i++) + { + buffID = ((PCTARGETWND)pTargetWnd)->BuffSpellID[i]; + if(buffID && !stricmp(GETFIRST(), GetSpellNameByID(buffID))) + { + Dest.DWord = ((((PCTARGETWND)pTargetWnd)->BuffTimer[i] / 1000) + 6) / 6; + Dest.Type = pTicksType; + return true; + } + } + } + } + else + { + // return first buff + for(i = 0; i < NUM_BUFF_SLOTS; i++) + { + buffID = ((PCTARGETWND)pTargetWnd)->BuffSpellID[i]; + if(buffID) + { + Dest.DWord = ((((PCTARGETWND)pTargetWnd)->BuffTimer[i] / 1000) + 6) / 6; + Dest.Type = pTicksType; + return true; + } + } + } + return false; + case PctAggro: + if(pAggroInfo) + { + Dest.DWord = pAggroInfo->aggroData[AD_Player].AggroPct; + Dest.Type = pIntType; + return true; + } + return false; + case SecondaryPctAggro: + if(pAggroInfo) + { + Dest.DWord = pAggroInfo->aggroData[AD_Secondary].AggroPct; + Dest.Type = pIntType; + return true; + } + return false; + case SecondaryAggroPlayer: + if(pAggroInfo && pAggroInfo->AggroSecondaryID) + { + Dest.Ptr = GetSpawnByID(pAggroInfo->AggroSecondaryID); + Dest.Type = pSpawnType; + return true; + } + } + return false; +} + +bool MQ2XTargetType::GETMEMBER() +{ + if(!GetCharInfo() || !GetCharInfo()->pXTargetMgr) + return false; + if(PMQ2TYPEMEMBER pMember=MQ2XTargetType::FindMember(Member)) + { + XTARGETDATA xtd = GetCharInfo()->pXTargetMgr->pXTargetArray->pXTargetData[VarPtr.DWord]; + switch((xTargetMembers)pMember->ID) + { + case Type: + { + char *pType = GetXtargetType(xtd.xTargetType); + Dest.Ptr = pType ? pType : "UNKNOWN"; + Dest.Type = pStringType; + return true; + } + case ID: + Dest.DWord = xtd.SpawnID; + Dest.Type = pIntType; + return true; + case Name: + Dest.Ptr = xtd.Name[0] ? xtd.Name : "NULL"; + Dest.Type = pStringType; + return true; + case PctAggro: + if(pAggroInfo) + { + Dest.DWord = pAggroInfo->aggroData[AD_xTarget1 + VarPtr.DWord].AggroPct; + Dest.Type = pIntType; + return true; + } + } + } + return false; +}; + diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2DataTypes.h b/client_files/native_autoloot/eq-core-dll/src/MQ2DataTypes.h new file mode 100644 index 0000000000..5154db6bb8 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2DataTypes.h @@ -0,0 +1,3686 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +// non-mq2data TODO +// command to clear macro return value +// networking +// macro line continuation e.g. \ +// command to set raid class colors +// /cast list +// #chat tell +// +// mq2data todo: +// ------------- +// "bind" type (key binds) +// Friend TLO +// Ignore TLO +// key state (ctrl/shift/alt) +// spawn count + +#ifdef ISXEQ +#pragma warning(disable:4996) +#endif +#ifdef ISXEQ_LEGACY +#pragma warning(disable:4996) +#endif + +#ifndef ISXEQ +LEGACY_API class MQ2FloatType *pFloatType; +LEGACY_API class MQ2StringType *pStringType; +LEGACY_API class MQ2IntType *pIntType; +LEGACY_API class MQ2ByteType *pByteType; +LEGACY_API class MQ2BoolType *pBoolType; +LEGACY_API class MQ2TimeType *pTimeType; +LEGACY_API class MQ2MathType *pMathType; +LEGACY_API class MQ2MacroType *pMacroType; +LEGACY_API class MQ2PluginType *pPluginType; + +#define pIntPtrType pIntType +#define pBytePtrType pByteType +#define pBoolPtrType pBoolType +#define pFloatPtrType pFloatType + +#define INTPTR(x) Dest.DWord=x +#define BYTEPTR(x) Dest.Byte=x +#define BOOLPTR(x) Dest.DWord=x +#define FLOATPTR(x) Dest.Float=x + +#define TypeMethod(x) +#define AddMethod(x,y) +#else +#define INTPTR(x) Dest.Ptr=&x +#define BYTEPTR(x) Dest.Ptr=&x +#define BOOLPTR(x) Dest.Ptr=&x +#define FLOATPTR(x) Dest.Ptr=&x + +#define Argb RGB +#define MQ2VARPTR LSVARPTR +#endif +LEGACY_VAR class MQ2SpawnType *pSpawnType; +LEGACY_VAR class MQ2CharacterType *pCharacterType; +LEGACY_VAR class MQ2BuffType *pBuffType; +LEGACY_VAR class MQ2SpellType *pSpellType; +LEGACY_VAR class MQ2TicksType *pTicksType; + +LEGACY_VAR class MQ2SkillType *pSkillType; +LEGACY_VAR class MQ2AltAbilityType *pAltAbilityType; + +LEGACY_VAR class MQ2ClassType *pClassType; +LEGACY_VAR class MQ2RaceType *pRaceType; +LEGACY_VAR class MQ2BodyType *pBodyType; + +LEGACY_VAR class MQ2GroundType *pGroundType; +LEGACY_VAR class MQ2SwitchType *pSwitchType; + +LEGACY_VAR class MQ2MacroQuestType *pMacroQuestType; + +LEGACY_VAR class MQ2CorpseType *pCorpseType; +LEGACY_VAR class MQ2WindowType *pWindowType; +LEGACY_VAR class MQ2MerchantType *pMerchantType; +LEGACY_VAR class MQ2ZoneType *pZoneType; +LEGACY_VAR class MQ2CurrentZoneType *pCurrentZoneType; +LEGACY_VAR class MQ2ItemType *pItemType; +LEGACY_VAR class MQ2DeityType *pDeityType; +LEGACY_VAR class MQ2ArgbType *pArgbType; +LEGACY_VAR class MQ2TypeType *pTypeType; + +LEGACY_VAR class MQ2HeadingType *pHeadingType; + +LEGACY_VAR class MQ2InvSlotType *pInvSlotType; + +LEGACY_VAR class MQ2ArrayType *pArrayType; +LEGACY_VAR class MQ2TimerType *pTimerType; + +LEGACY_VAR class MQ2RaidType *pRaidType; +LEGACY_VAR class MQ2RaidMemberType *pRaidMemberType; + +LEGACY_VAR class MQ2GroupType *pGroupType; +LEGACY_VAR class MQ2GroupMemberType *pGroupMemberType; +LEGACY_VAR class MQ2EvolvingItemType *pEvolvingItemType; +LEGACY_VAR class MQ2DynamicZoneType *pDynamicZoneType; +LEGACY_VAR class MQ2DZMemberType *pDZMemberType; +LEGACY_VAR class MQ2FellowshipType *pFellowshipType; +LEGACY_VAR class MQ2FellowshipMemberType *pFellowshipMemberType; +LEGACY_VAR class MQ2FriendsType *pFriendsType; +LEGACY_VAR class MQ2TargetType *pTargetType; +LEGACY_VAR class MQ2XTargetType *pXTargetType; + +#define UseTemp(mystring) strcpy(DataTypeTemp,mystring) +#define TypeMember(name) AddMember((DWORD)name,""#name) + +#ifndef ISXEQ +class MQ2BoolType : public MQ2Type +{ +public: + MQ2BoolType():MQ2Type("bool") + { + } + + ~MQ2BoolType() + { + } + + // pure type, no members + bool GETMEMBER() + { + return false; + } + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (VarPtr.DWord) + strcpy(Destination,"TRUE"); + else + strcpy(Destination,"FALSE"); + return true; + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.DWord=0; + if (!stricmp(Source,"TRUE")) + VarPtr.DWord=1; + else if (atof(Source)!=0.0f) + VarPtr.DWord=1; + return true; + } +}; +class MQ2IntType : public MQ2Type +{ +public: + static enum IntMembers + { + Float=1, + Hex=2, + Reverse=3, + }; + MQ2IntType():MQ2Type("int") + { + TypeMember(Float); + TypeMember(Hex); + TypeMember(Reverse); + } + + ~MQ2IntType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + itoa(VarPtr.Int,Destination,10); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.Int=Source.Int; + return true; + } + + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.Int=atoi(Source); + return true; + } +}; +#endif +class MQ2ArgbType : public MQ2Type +{ +public: + static enum ArgbMembers + { + A=0, + R=1, + G=2, + B=3, + Int=4, + }; + MQ2ArgbType():MQ2Type("argb") + { + TypeMember(A); + TypeMember(R); + TypeMember(G); + TypeMember(B); + TypeMember(Int); + } + + ~MQ2ArgbType() + { + } + + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + sprintf(Destination,"%x",VarPtr.Int); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + sscanf(Source,"%x",&VarPtr.Int); + return true; + } +}; +#ifndef ISXEQ +class MQ2ByteType : public MQ2Type +{ +public: + MQ2ByteType():MQ2Type("byte") + { + } + + ~MQ2ByteType() + { + } + + // pure type, no members + bool GETMEMBER() + { + return false; + } + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + itoa(VarPtr.Int,Destination,10); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord%0xFF; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.DWord=atoi(Source)%0xFF; + return true; + } +}; +class MQ2StringType : public MQ2Type +{ +public: + static enum StringMembers + { + Arg=1, + Mid=2, + Left=3, + Right=4, + Find=5, + Length=6, + Upper=7, + Lower=8, + Compare=9, + CompareCS=10, + Equal=11, + NotEqual=12, + EqualCS=13, + NotEqualCS=14, + Count=15, + Token=16, + Replace=17 + }; + + MQ2StringType():MQ2Type("string") + { + TypeMember(Arg); + TypeMember(Mid); + TypeMember(Left); + TypeMember(Right); + TypeMember(Find); + TypeMember(Length); + TypeMember(Upper); + TypeMember(Lower); + TypeMember(Compare); + TypeMember(CompareCS); + TypeMember(Equal); + TypeMember(NotEqual); + TypeMember(EqualCS); + TypeMember(NotEqualCS); + TypeMember(Count); + TypeMember(Token); + TypeMember(Replace); + } + + ~MQ2StringType() + { + } + bool MQ2StringType::GetMember(MQ2VARPTR VarPtr, PCHAR Member, PCHAR Index, MQ2TYPEVAR &Dest); + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + strcpy(Destination,(const char *)VarPtr.Ptr); + return true; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(MAX_STRING); + ZeroMemory(VarPtr.Ptr,MAX_STRING); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pStringType) + return false; + strcpy((char*)VarPtr.Ptr,(char*)Source.Ptr); + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + strcpy((char*)VarPtr.Ptr,Source); + return true; + } +}; +class MQ2FloatType : public MQ2Type +{ +public: + static enum FloatMembers + { + Deci=1, + Centi=2, + Milli=3, + Int=4, + Precision=5, + }; + + MQ2FloatType():MQ2Type("float") + { + TypeMember(Deci); + TypeMember(Centi); + TypeMember(Milli); + TypeMember(Int); + TypeMember(Precision); + } + + ~MQ2FloatType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + sprintf(Destination,"%.2f",VarPtr.Float); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pFloatType && Source.Type!=(MQ2Type*)pHeadingType) + VarPtr.Float=(FLOAT)Source.DWord; + else + VarPtr.Float=Source.Float; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.Float=(FLOAT)atof(Source); + return true; + } +}; +#endif + +class MQ2TicksType : public MQ2Type +{ +public: + static enum TicksMembers + { + Hours=1, + Minutes=2, + Seconds=3, + Time=4, + TotalMinutes=5, + TotalSeconds=6, + Ticks=7, + TimeHMS=8, + }; + MQ2TicksType():MQ2Type("ticks") + { + TypeMember(Hours); + TypeMember(Minutes); + TypeMember(Seconds); + TypeMember(Time); + TypeMember(TotalMinutes); + TypeMember(TotalSeconds); + TypeMember(Ticks); + TypeMember(TimeHMS); + } + + ~MQ2TicksType() + { + } + + bool GETMEMBER(); + + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + itoa(VarPtr.DWord,Destination,10); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.DWord=atoi(Source); + return true; + } +}; + + +class MQ2SpawnType : public MQ2Type +{ +public: + static enum SpawnMembers + { + ID=1, + Name=2, + Level=3, + X=4, + Y=5, + Z=6, + DistanceX=7, + DistanceY=8, + DistanceZ=9, + Distance=10, + Distance3D=11, + DistancePredict=12, + Next=13, + Prev=14, + Heading=15, + Speed=16, + Levitating=17, + Sneaking=18, + HeadingTo=19, + Light=20, + Body=21, + State=22, + CurrentHPs=23, + MaxHPs=24, + PctHPs=25, + Deity=26, + Type=28, + CleanName=29, + Surname=30, + Guild=31, + GuildStatus=32, + Master=33, + Pet=34, + Race=35, + Class=36, + Gender=38, + GM=39, + Height=40, + MaxRange=41, + AARank=42, + Casting=43, + Mount=44, + FeetWet=45, + Underwater=46, + Animation=48, + Holding=49, + Look=50, + N=51, + W=52, + U=53, + S=54, + E=55, + D=56, + DistanceN=57, + DistanceW=58, + DistanceU=59, + Invis=60, + Linkdead=61, + LFG=62, + Trader=63, + AFK=64, + xConColor=65, + Standing=67, + Sitting=68, + Ducking=69, + Feigning=70, + Binding=71, + Invited=72, + NearestSpawn=73, + MaxRangeTo=74, + DisplayName=75, + AATitle=76, + xGroupLeader=77, + Mark=78, + Assist=79, + Anonymous=80, + Roleplaying=81, + xLineOfSight=82, + HeadingToLoc=83, + Title=84, + Suffix=85, + Fleeing=86, + Named=87, + Buyer=88, + Moving=89, + StandState=90, + Dead=91, + Stunned=92, + Hovering=93, + CurrentMana=94, + MaxMana=95, + CurrentEndurance=96, + MaxEndurance=97, + Loc=98, + LocYX=99, + Owner=100, + Following=101, + }; + static enum SpawnMethods + { + Target=1, + Face=2, + xAssist=4, + LeftClick=5, + RightClick=6, + }; + MQ2SpawnType():MQ2Type("spawn") + { + TypeMember(ID);//1, + TypeMember(Name);//2, + TypeMember(Level);//3, + TypeMember(X);//4, + TypeMember(Y);//5, + TypeMember(Z);//6, + TypeMember(DistanceX);//7, + TypeMember(DistanceY);//8, + TypeMember(DistanceZ);//9, + TypeMember(Distance);//10, + TypeMember(Distance3D);//11, + TypeMember(DistancePredict);//12, + TypeMember(Next);//13, + TypeMember(Prev);//14, + TypeMember(Heading);//15, + TypeMember(Speed);//16, + TypeMember(Levitating);//17, + TypeMember(Sneaking);//18, + TypeMember(HeadingTo);//19, + TypeMember(Light);//20, + TypeMember(Body);//21, + TypeMember(State);//22, + TypeMember(CurrentHPs);//23, + TypeMember(MaxHPs);//24, + TypeMember(PctHPs);//25, + TypeMember(Deity);//26, + TypeMember(Type);//28, + TypeMember(CleanName);//29, + TypeMember(Surname);//30, + TypeMember(Guild);//31, + TypeMember(GuildStatus);//32, + TypeMember(Master);//33, + TypeMember(Pet);//34, + TypeMember(Race);//35, + TypeMember(Class);//36, + TypeMember(Gender);//38, + TypeMember(GM);//39, + TypeMember(Height);//40, + TypeMember(MaxRange);//41, + TypeMember(AARank); + TypeMember(Casting); + TypeMember(Mount); + TypeMember(FeetWet); + TypeMember(Underwater); + TypeMember(Animation); + TypeMember(Holding); + TypeMember(Look); + TypeMember(N); + TypeMember(W); + TypeMember(U); + TypeMember(S); + TypeMember(E); + TypeMember(D); + TypeMember(DistanceN);//7, + TypeMember(DistanceW);//8, + TypeMember(DistanceU);//9, + TypeMember(Invis); + TypeMember(Linkdead); + TypeMember(LFG); + TypeMember(Trader); + TypeMember(AFK); + AddMember(xConColor,"ConColor"); + TypeMember(Standing);//=67, + TypeMember(Sitting);//68, + TypeMember(Ducking);//=69, + TypeMember(Feigning);//=70, + TypeMember(Binding);//=71, + TypeMember(Invited); + TypeMember(NearestSpawn); + TypeMember(MaxRangeTo); + TypeMember(DisplayName); + TypeMember(AATitle); + AddMember(xGroupLeader,"GroupLeader"); + TypeMember(Mark); + TypeMember(Assist); + TypeMember(Anonymous); + TypeMember(Roleplaying); + AddMember(xLineOfSight,"LineOfSight"); + TypeMember(HeadingToLoc); + TypeMember(Title); //84 + TypeMember(Suffix); //85 + TypeMember(Fleeing); + TypeMember(Named); + TypeMember(Buyer); + TypeMember(Moving); + TypeMember(StandState); + TypeMember(Dead); + TypeMember(Stunned); + TypeMember(Hovering); + TypeMember(CurrentMana); + TypeMember(MaxMana); + TypeMember(CurrentEndurance); + TypeMember(MaxEndurance); + TypeMember(Loc); + TypeMember(LocYX); + TypeMember(Owner); + TypeMember(Following); + + TypeMethod(Target); + TypeMethod(Face); + TypeMethod(LeftClick); + TypeMethod(RightClick); + AddMethod(xAssist,"Assist"); + } + + ~MQ2SpawnType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (!VarPtr.Ptr) + return false; + strcpy(Destination,((PSPAWNINFO)VarPtr.Ptr)->Name); + return true; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(sizeof(SPAWNINFO)); + ZeroMemory(VarPtr.Ptr,sizeof(SPAWNINFO)); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + + virtual bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type==pSpawnType) + { + memcpy(VarPtr.Ptr,Source.Ptr,sizeof(SPAWNINFO)); + return true; + } + else + { + if (PSPAWNINFO pOther=(PSPAWNINFO)GetSpawnByID(Source.DWord)) + { + memcpy(VarPtr.Ptr,pOther,sizeof(SPAWNINFO)); + return true; + } + } + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + if (PSPAWNINFO pOther=(PSPAWNINFO)GetSpawnByID(atoi(Source))) + { + memcpy(VarPtr.Ptr,pOther,sizeof(SPAWNINFO)); + return true; + } + return false; + } +}; + +class MQ2CharacterType : public MQ2Type +{ +public: + static enum CharacterMembers + { + ID=1, + Name=2, + Level=3, + Exp=4, + Spawn=5, + Dar=6, + AAExp=7, + AAPoints=8, + CurrentHPs=10, + MaxHPs=11, + HPRegen=12, + PctHPs=13, + CurrentMana=14, + MaxMana=15, + ManaRegen=16, + PctMana=17, + Buff=18, + Song=19, + Book=20, + Skill=21, + Ability=22, + Surname=23, + Cash=24, + CashBank=25, + PlatinumShared=26, + Grouped=27, + HPBonus=28, + ManaBonus=29, + GukEarned=30, + MMEarned=31, + RujEarned=32, + TakEarned=33, + MirEarned=34, + LDoNPoints=35, + CurrentFavor=36, + CareerFavor=37, + Endurance=38, + Inventory=39, + Bank=40, + Combat=42, + FreeInventory=43, + Gem=44, + SpellReady=45, + GroupLeaderExp=46, + RaidLeaderExp=47, + GroupLeaderPoints=48, + RaidLeaderPoints=49, + Drunk=50, + STR=51, + STA=52, + CHA=53, + DEX=54, + INT=55, + AGI=56, + WIS=57, + svMagic=58, + svFire=59, + svCold=60, + svPoison=61, + svDisease=62, + Hunger=63, + Thirst=64, + BaseSTR=65, + BaseSTA=66, + BaseCHA=67, + BaseDEX=68, + BaseINT=69, + BaseAGI=70, + BaseWIS=71, + PracticePoints=72, + PctExp=73, + PctAAExp=74, + Moving=75, + AbilityReady=76, + PetBuff=77, + Platinum=78, + Gold=79, + Silver=80, + Copper=81, + PlatinumBank=82, + GoldBank=83, + SilverBank=84, + CopperBank=85, + PctGroupLeaderExp=86, + PctRaidLeaderExp=87, + Stunned=88, + RangedReady=89, + AltTimerReady=90, + MaxEndurance=91, + PctEndurance=92, + AltAbility=93, + AltAbilityReady=94, + AltAbilityTimer=95, + CombatAbility=96, + CombatAbilityTimer=97, + LargestFreeInventory=98, + TargetOfTarget=99, + RaidAssistTarget=100, + GroupAssistTarget=101, + RaidMarkNPC=102, + GroupMarkNPC=103, + CountBuffs=104, + LanguageSkill=105, + EnduranceBonus=106, + CombatEffectsBonus=107, + ShieldingBonus=108, + SpellShieldBonus=109, + AvoidanceBonus=110, + AccuracyBonus=111, + StunResistBonus=112, + StrikeThroughBonus=113, + AttackBonus=114, + HPRegenBonus=115, + ManaRegenBonus=116, + DamageShieldBonus=117, + DoTShieldBonus=118, + AttackSpeed=119, + GroupList=120, + AmIGroupLeader=121, + CurrentEndurance=122, + EnduranceRegen=123, + FreeBuffSlots=124, + CurrentWeight=125, + AAPointsSpent=126, + AAPointsTotal=127, + TributeActive=128, + CombatAbilityReady=129, + Running=130, + GroupSize=131, + TributeTimer=132, + RadiantCrystals=133, + EbonCrystals=134, + Shrouded=135, + AutoFire=136, + Language=137, + Aura=138, + LAMarkNPC=139, + LANPCHealth=140, + LADelegateMA=141, + LADelegateMarkNPC=142, + LAInspectBuffs=143, + LASpellAwareness=144, + LAOffenseEnhancement=145, + LAManaEnhancement=146, + LAHealthEnhancement=147, + LAHealthRegen=148, + LAFindPathPC=149, + LAHoTT=150, + ActiveFavorCost=151, + CombatState=152, + svCorruption=153, + svPrismatic=154, + svChromatic=155, + Doubloons=156, + Orux=157, + Phosphenes=158, + Phosphites=159, + Fellowship=160, + Downtime=161, + DamageShieldMitigationBonus=162, + HeroicSTRBonus=163, + HeroicINTBonus=164, + HeroicWISBonus=165, + HeroicAGIBonus=166, + HeroicDEXBonus=167, + HeroicSTABonus=168, + HeroicCHABonus=169, + HealAmountBonus=170, + SpellDamageBonus=171, + ClairvoyanceBonus=172, + EnduranceRegenBonus=173, + Counters=174, + Faycites=175, + Chronobines=176, + Mercenary=177, + XTarget=178, + Haste=179, + MercenaryStance=180, + SkillCap=181, + GemTimer=182, + HaveExpansion=183, + PctAggro=184, + SecondaryPctAggro=185, + SecondaryAggroPlayer=186, + AggroLock=187, + }; + static enum CharacterMethods + { + Stand, + Sit, + Dismount, + }; + MQ2CharacterType():MQ2Type("character") + { + TypeMember(ID);//1, + TypeMember(Name);//2, + TypeMember(Level);//3, + TypeMember(Exp);//4, + TypeMember(Spawn);//5, + TypeMember(Dar);//6, + TypeMember(AAExp);//7, + TypeMember(AAPoints);//8, + TypeMember(CurrentHPs);//10, + TypeMember(MaxHPs);//11, + TypeMember(HPRegen);//12, + TypeMember(PctHPs);//13, + TypeMember(CurrentMana);//14, + TypeMember(MaxMana);//15, + TypeMember(ManaRegen);//16, + TypeMember(PctMana);//17, + TypeMember(Buff);//18, + TypeMember(Song);//19, + TypeMember(Book);//20, + TypeMember(Skill);//21, + TypeMember(Ability);//22, + TypeMember(Surname);//23, + TypeMember(Cash);//24, + TypeMember(CashBank);//25, + TypeMember(PlatinumShared);//26, + TypeMember(Grouped);//27, + TypeMember(HPBonus);//28, + TypeMember(ManaBonus);//29, + TypeMember(GukEarned);//30, + TypeMember(MMEarned);//31, + TypeMember(RujEarned);//32, + TypeMember(TakEarned);//33, + TypeMember(MirEarned);//34, + TypeMember(LDoNPoints);//35, + TypeMember(CurrentFavor);//36, + TypeMember(CareerFavor);//37, + TypeMember(Endurance);//38, + TypeMember(Inventory); + TypeMember(Bank); + TypeMember(Combat); + TypeMember(FreeInventory); + TypeMember(Gem); + TypeMember(SpellReady); + TypeMember(GroupLeaderExp); + TypeMember(RaidLeaderExp); + TypeMember(GroupLeaderPoints); + TypeMember(RaidLeaderPoints); + TypeMember(Drunk); + TypeMember(STR);//51, + TypeMember(STA);//52, + TypeMember(CHA);//53, + TypeMember(DEX);//54, + TypeMember(INT);//55, + TypeMember(AGI);//56, + TypeMember(WIS);//57, + TypeMember(svMagic);//58, + TypeMember(svFire);//59, + TypeMember(svCold);//60, + TypeMember(svPoison);//61, + TypeMember(svDisease);//62 + TypeMember(Hunger); + TypeMember(Thirst); + TypeMember(BaseSTR);//51, + TypeMember(BaseSTA);//52, + TypeMember(BaseCHA);//53, + TypeMember(BaseDEX);//54, + TypeMember(BaseINT);//55, + TypeMember(BaseAGI);//56, + TypeMember(BaseWIS);//57, + TypeMember(PracticePoints); + TypeMember(PctExp); + TypeMember(PctAAExp); + TypeMember(Moving); + TypeMember(AbilityReady); + TypeMember(PetBuff); + TypeMember(Platinum); + TypeMember(Gold); + TypeMember(Silver); + TypeMember(Copper); + TypeMember(PlatinumBank); + TypeMember(GoldBank); + TypeMember(SilverBank); + TypeMember(CopperBank); + TypeMember(PctGroupLeaderExp); + TypeMember(PctRaidLeaderExp); + TypeMember(Stunned); + TypeMember(RangedReady); + TypeMember(AltTimerReady); + TypeMember(MaxEndurance); + TypeMember(PctEndurance); + TypeMember(AltAbility); + TypeMember(AltAbilityReady); + TypeMember(AltAbilityTimer); + TypeMember(CombatAbility); + TypeMember(CombatAbilityTimer); + TypeMember(LargestFreeInventory); + TypeMember(TargetOfTarget); + TypeMember(RaidAssistTarget);//=100, + TypeMember(GroupAssistTarget);//=101, + TypeMember(RaidMarkNPC);//=102, + TypeMember(GroupMarkNPC);//=103 + TypeMember(CountBuffs); + TypeMember(LanguageSkill); //105 + TypeMember(EnduranceBonus); + TypeMember(CombatEffectsBonus); + TypeMember(ShieldingBonus); + TypeMember(SpellShieldBonus); + TypeMember(AvoidanceBonus); + TypeMember(AccuracyBonus); + TypeMember(StunResistBonus); + TypeMember(StrikeThroughBonus); + TypeMember(AttackBonus); + TypeMember(HPRegenBonus); + TypeMember(ManaRegenBonus); + TypeMember(DamageShieldBonus); + TypeMember(DoTShieldBonus); + TypeMember(AttackSpeed); //119 + TypeMember(GroupList); + TypeMember(AmIGroupLeader); //121 + TypeMember(CurrentEndurance); + TypeMember(EnduranceRegen); + TypeMember(FreeBuffSlots); //124 + TypeMember(CurrentWeight); + TypeMember(AAPointsSpent); + TypeMember(AAPointsTotal); + TypeMember(TributeActive); + TypeMember(CombatAbilityReady); + TypeMember(Running); + TypeMember(GroupSize); + TypeMember(TributeTimer); + TypeMember(RadiantCrystals); + TypeMember(EbonCrystals); + TypeMember(Shrouded); + TypeMember(AutoFire); + TypeMember(Language); + TypeMember(Aura); + TypeMember(LAMarkNPC); + TypeMember(LANPCHealth); + TypeMember(LADelegateMA); + TypeMember(LADelegateMarkNPC); + TypeMember(LAInspectBuffs); + TypeMember(LASpellAwareness); + TypeMember(LAOffenseEnhancement); + TypeMember(LAManaEnhancement); + TypeMember(LAHealthEnhancement); + TypeMember(LAHealthRegen); + TypeMember(LAFindPathPC); + TypeMember(LAHoTT); + TypeMember(ActiveFavorCost); + TypeMember(CombatState); + TypeMember(svCorruption); + TypeMember(svPrismatic); + TypeMember(svChromatic); + TypeMember(Doubloons); + TypeMember(Orux); + TypeMember(Phosphenes); + TypeMember(Phosphites); + TypeMember(Fellowship); + TypeMember(Downtime); + TypeMember(DamageShieldMitigationBonus); + TypeMember(HeroicSTRBonus); + TypeMember(HeroicINTBonus); + TypeMember(HeroicWISBonus); + TypeMember(HeroicAGIBonus); + TypeMember(HeroicDEXBonus); + TypeMember(HeroicSTABonus); + TypeMember(HeroicCHABonus); + TypeMember(HealAmountBonus); + TypeMember(SpellDamageBonus); + TypeMember(ClairvoyanceBonus); + TypeMember(EnduranceRegenBonus); + TypeMember(Counters); + TypeMember(Faycites); + TypeMember(Chronobines); + TypeMember(Mercenary); + TypeMember(XTarget); + TypeMember(Haste); + TypeMember(MercenaryStance); + TypeMember(SkillCap); // 181 + TypeMember(GemTimer); + TypeMember(HaveExpansion); + TypeMember(PctAggro); + TypeMember(SecondaryPctAggro); + TypeMember(SecondaryAggroPlayer); + TypeMember(AggroLock); + + TypeMethod(Stand); + TypeMethod(Sit); + TypeMethod(Dismount); + } + + ~MQ2CharacterType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + INHERITINDIRECT(pSpawnType,Temp.Ptr=((PCHARINFO)ObjectData.Ptr)->pSpawn,0); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (!VarPtr.Ptr) + return false; + strcpy(Destination,((PCHARINFO)VarPtr.Ptr)->Name); + return true; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(sizeof(CHARINFO)); + ZeroMemory(VarPtr.Ptr,sizeof(CHARINFO)); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pCharacterType) + return false; + memcpy(VarPtr.Ptr,Source.Ptr,sizeof(CHARINFO)); + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + + +class MQ2SpellType : public MQ2Type +{ +public: + static enum SpellMembers + { + ID=1, + Name=2, + Level=3, + Skill=4, + Mana=5, + ResistAdj=6, + Range=7, + AERange=8, + PushBack=9, + CastTime=10, + FizzleTime=11, + MyCastTime=12, + RecoveryTime=13, + RecastTime=14, + Duration=15, + SpellType=16, + TargetType=17, + ResistType=18, + CastOnYou=19, + CastOnAnother=20, + WearOff=21, + CounterType=22, + CounterNumber=23, + Stacks=24, + StacksPet=25, + WillStack=26, + MyRange=27, + }; + static enum SpellMethods + { + }; + MQ2SpellType():MQ2Type("spell") + { + TypeMember(ID);//1, + TypeMember(Name);//2, + TypeMember(Level);//3, + TypeMember(Skill);//4, + TypeMember(Mana);//5, + TypeMember(ResistAdj);//6, + TypeMember(Range);//7, + TypeMember(AERange);//8, + TypeMember(PushBack);//9, + TypeMember(CastTime);//10, + TypeMember(FizzleTime);//11, + TypeMember(MyCastTime);//12, + TypeMember(RecoveryTime);//13, + TypeMember(RecastTime);//14, + TypeMember(Duration);//15, + TypeMember(SpellType);//16, + TypeMember(TargetType);//17, + TypeMember(ResistType);//18, + TypeMember(CastOnYou);//19, + TypeMember(CastOnAnother);//20, + TypeMember(WearOff);//21, + TypeMember(CounterType);//22, + TypeMember(CounterNumber);//23, + TypeMember(Stacks);//24, + TypeMember(StacksPet);//25, + TypeMember(WillStack);//26, + TypeMember(MyRange);//27 + } + + ~MQ2SpellType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (!VarPtr.Ptr) + return false; + strcpy(Destination,((PSPELL)VarPtr.Ptr)->Name); + return true; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(sizeof(SPELL)); + ZeroMemory(VarPtr.Ptr,sizeof(SPELL)); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pSpellType) + return false; + memcpy(VarPtr.Ptr,Source.Ptr,sizeof(SPELL)); + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2BuffType : public MQ2Type +{ +public: + static enum BuffMembers + { + ID=1, + Level=2, + Spell=3, + Mod=4, + Duration=5, + Dar=6, + Counters=7 + }; + static enum BuffMethods + { + Remove=1, + }; + MQ2BuffType():MQ2Type("buff") + { + TypeMember(ID); + TypeMember(Level); + TypeMember(Spell); + TypeMember(Mod); + TypeMember(Duration); + TypeMember(Dar); + TypeMember(Counters); + + TypeMethod(Remove); + } + + ~MQ2BuffType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + INHERITINDIRECT(pSpellType,Temp.Ptr=GetSpellByID(((PSPELLBUFF)ObjectData.Ptr)->SpellID),0); + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (!VarPtr.Ptr) + return false; + if ((int)((PSPELLBUFF)VarPtr.Ptr)->SpellID>0) + { + if (PSPELL pSpell=GetSpellByID(((PSPELLBUFF)VarPtr.Ptr)->SpellID)) + { + strcpy(Destination,pSpell->Name); + return true; + } + } + return false; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(sizeof(SPELLBUFF)); + ZeroMemory(VarPtr.Ptr,sizeof(SPELLBUFF)); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pBuffType) + return false; + memcpy(VarPtr.Ptr,Source.Ptr,sizeof(SPELLBUFF)); + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2ItemType : public MQ2Type +{ +public: + static enum ItemMembers + { + ID=1, + Name=2, + Lore=3, + NoDrop=4, + NoRent=5, + Magic=6, + Value=7, + Size=8, + Weight=9, + Stack=10, + Type=11, + Charges=12, + LDoNTheme=13, + DMGBonusType=14, + BuyPrice=15, + Haste=16, + Endurance=17, + Attack=18, + HPRegen=19, + ManaRegen=20, + DamShield=21, + WeightReduction=22, + SizeCapacity=23, + Combinable=24, + Skill=25, + Avoidance=26, + SpellShield=27, + StrikeThrough=28, + StunResist=29, + Shielding=30, + FocusID=31, + ProcRate=32, + Quality=33, + LDoNCost=34, + AugRestrictions=35, + AugType=36, + AugSlot1=37, + AugSlot2=38, + AugSlot3=39, + AugSlot4=40, + AugSlot5=41, + Damage=42, + Range=43, + DMGBonus=44, + RecommendedLevel=45, + RecommendedSkill=46, + Delay=47, + Light=48, + Level=49, + BaneDMG=50, + Proc=51, + SkillModValue=52, + InstrumentType=53, + InstrumentMod=54, + RequiredLevel=55, + BaneDMGType=56, + AC=57, + HP=58, + Mana=59, + STR=60, + STA=61, + AGI=62, + DEX=63, + CHA=64, + INT=65, + WIS=66, + svCold=67, + svFire=68, + svMagic=69, + svDisease=70, + svPoison=71, + Summoned=72, + Artifact=73, + PendingLore=74, + LoreText=75, + Items=76, + Item=77, + Container=78, + Stackable=79, + InvSlot=80, + SellPrice=81, + WornSlot=82, + WornSlots=83, + CastTime=84, + Spell=85, + EffectType=86, + Tribute=87, + Attuneable=88, + Timer=89, + ItemDelay=90, + TimerReady=91, + StackSize=92, + Stacks=93, + StackCount=94, + FreeStack=95, + MerchQuantity=96, + Classes=97, + Class=98, + Races=99, + Race=100, + Deities=101, + Deity=102, + Evolving=103, + svCorruption=104, + Power=105, + MaxPower=106, + Purity=107, + Accuracy=108, + CombatEffects=109, + DoTShielding=110, + HeroicSTR=111, + HeroicINT=112, + HeroicWIS=113, + HeroicAGI=114, + HeroicDEX=115, + HeroicSTA=116, + HeroicCHA=117, + HeroicSvMagic=118, + HeroicSvFire=119, + HeroicSvCold=120, + HeroicSvDisease=121, + HeroicSvPoison=122, + HeroicSvCorruption=123, + EnduranceRegen=124, + HealAmount=125, + Clairvoyance=126, + DamageShieldMitigation=127, + SpellDamage=128, + Augs=129, + Tradeskills=130, + }; + static enum ItemMethods + { + }; + MQ2ItemType():MQ2Type("item") + { + TypeMember(ID);//1, + TypeMember(Name);//2, + TypeMember(Lore);//3, + TypeMember(NoDrop);//4, + TypeMember(NoRent);//5, + TypeMember(Magic);//6, + TypeMember(Value);//7, + TypeMember(Size);//8, + TypeMember(Weight);//9, + TypeMember(Stack);//10, + TypeMember(Type);//11, + TypeMember(Charges);//12, + TypeMember(LDoNTheme);//13, + TypeMember(DMGBonusType);//14, + TypeMember(BuyPrice);//15, + TypeMember(Haste);//16, + TypeMember(Endurance);//17, + TypeMember(Attack);//18, + TypeMember(HPRegen);//19, + TypeMember(ManaRegen);//20, + TypeMember(DamShield);//21, + TypeMember(WeightReduction);//22, + TypeMember(SizeCapacity);//23, + TypeMember(Combinable);//24, + TypeMember(Skill);//25, + TypeMember(Avoidance);//26, + TypeMember(SpellShield);//27, + TypeMember(StrikeThrough);//28, + TypeMember(StunResist);//29, + TypeMember(Shielding);//30, + TypeMember(FocusID);//31, + TypeMember(ProcRate);//32, + TypeMember(Quality);//33, + TypeMember(LDoNCost);//34, + TypeMember(AugRestrictions);//35, + TypeMember(AugType);//36, + TypeMember(AugSlot1);//37, + TypeMember(AugSlot2);//38, + TypeMember(AugSlot3);//39, + TypeMember(AugSlot4);//40, + TypeMember(AugSlot5);//41, + TypeMember(Damage);//42, + TypeMember(Range);//43, + TypeMember(DMGBonus);//44, + TypeMember(RecommendedLevel);//45, + TypeMember(RecommendedSkill);//46, + TypeMember(Delay);//47, + TypeMember(Light);//48, + TypeMember(Level);//49, + TypeMember(BaneDMG);//50, + TypeMember(Proc);//51, + TypeMember(SkillModValue);//52, + TypeMember(InstrumentType);//53, + TypeMember(InstrumentMod);//54, + TypeMember(RequiredLevel);//55, + TypeMember(BaneDMGType);//56, + TypeMember(AC);//57, + TypeMember(HP);//58, + TypeMember(Mana);//59, + TypeMember(STR);//60, + TypeMember(STA);//61, + TypeMember(AGI);//62, + TypeMember(DEX);//63, + TypeMember(CHA);//64, + TypeMember(INT);//65, + TypeMember(WIS);//66, + TypeMember(svCold);//67, + TypeMember(svFire);//68, + TypeMember(svMagic);//69, + TypeMember(svDisease);//70, + TypeMember(svPoison);//71, + TypeMember(Summoned);//72, + TypeMember(Artifact);//73, + TypeMember(PendingLore);//74, + TypeMember(LoreText);//75, + TypeMember(Items); + TypeMember(Item); + TypeMember(Container); + TypeMember(Stackable); + TypeMember(InvSlot); + TypeMember(SellPrice); + TypeMember(WornSlot); + TypeMember(WornSlots); + TypeMember(CastTime); + TypeMember(Spell); + TypeMember(EffectType); + TypeMember(Tribute); + TypeMember(Attuneable); + TypeMember(Timer);//89, + TypeMember(ItemDelay); + TypeMember(TimerReady); + TypeMember(StackSize); + TypeMember(Stacks); + TypeMember(StackCount); + TypeMember(FreeStack); + TypeMember(MerchQuantity); + TypeMember(Classes); + TypeMember(Class); + TypeMember(Races); + TypeMember(Race); + TypeMember(Deities); + TypeMember(Deity); + TypeMember(Evolving); + TypeMember(svCorruption); + TypeMember(Power); + TypeMember(MaxPower); + TypeMember(Purity); + TypeMember(Accuracy); + TypeMember(CombatEffects); + TypeMember(DoTShielding); + TypeMember(HeroicSTR); + TypeMember(HeroicINT); + TypeMember(HeroicWIS); + TypeMember(HeroicAGI); + TypeMember(HeroicDEX); + TypeMember(HeroicSTA); + TypeMember(HeroicCHA); + TypeMember(HeroicSvMagic); + TypeMember(HeroicSvFire); + TypeMember(HeroicSvCold); + TypeMember(HeroicSvDisease); + TypeMember(HeroicSvPoison); + TypeMember(HeroicSvCorruption); + TypeMember(EnduranceRegen); + TypeMember(HealAmount); + TypeMember(Clairvoyance); + TypeMember(DamageShieldMitigation); + TypeMember(SpellDamage); + TypeMember(Augs); + TypeMember(Tradeskills); + } + + ~MQ2ItemType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (!VarPtr.Ptr) + return false; + strcpy(Destination,GetItemFromContents((PCONTENTS)VarPtr.Ptr)->Name); + return true; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(sizeof(CONTENTS)); + ZeroMemory(VarPtr.Ptr,sizeof(CONTENTS)); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pItemType) + return false; + memcpy(VarPtr.Ptr,Source.Ptr,sizeof(CONTENTS)); + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + + +class MQ2SwitchType : public MQ2Type +{ +public: + static enum SwitchMembers + { + ID=1, + Distance=2, + X=3, + Y=4, + Z=5, + Heading=6, + DefaultX=7, + DefaultY=8, + DefaultZ=9, + DefaultHeading=10, + Open=11, + HeadingTo=12, + Name=13, + N=14, + W=15, + U=16, + DefaultN=17, + DefaultW=18, + DefaultU=19, + xLineOfSight=20, + }; + static enum SwitchMethods + { + Toggle=1, + }; + MQ2SwitchType():MQ2Type("switch") + { + TypeMember(ID);//1, + TypeMember(Distance);//2, + TypeMember(X);//3, + TypeMember(Y);//4, + TypeMember(Z);//5, + TypeMember(Heading);//6, + TypeMember(DefaultX);//7, + TypeMember(DefaultY);//8, + TypeMember(DefaultZ);//9, + TypeMember(DefaultHeading);//10, + TypeMember(Open);//11, + TypeMember(HeadingTo);//12, + TypeMember(Name);//13, + AddMember(xLineOfSight,"LineOfSight"); + } + + ~MQ2SwitchType() + { + TypeMethod(Toggle); + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (VarPtr.Ptr) + { + itoa(((PDOOR)VarPtr.Ptr)->ID,Destination,10); + return true; + } + return false; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(sizeof(DOOR)); + ZeroMemory(VarPtr.Ptr,sizeof(DOOR)); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pSwitchType) + return false; + memcpy(VarPtr.Ptr,Source.Ptr,sizeof(DOOR)); + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2GroundType : public MQ2Type +{ +public: + static enum GroundMembers + { + ID=1, + Distance=2, + X=3, + Y=4, + Z=5, + Heading=6, + Name=7, + HeadingTo=8, + N=9, + W=10, + U=11, + xLineOfSight=12, + }; + static enum GroundMethods + { + Grab=1, + }; + MQ2GroundType():MQ2Type("ground") + { + TypeMember(ID);//1, + TypeMember(Distance);//2, + TypeMember(X);//3, + TypeMember(Y);//4, + TypeMember(Z);//5, + TypeMember(Heading);//6, + TypeMember(Name);//7, + TypeMember(HeadingTo); + AddMember(xLineOfSight,"LineOfSight"); + TypeMethod(Grab); + } + + ~MQ2GroundType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (VarPtr.Ptr) + { + itoa(((PGROUNDITEM)VarPtr.Ptr)->DropID,Destination,10); + return true; + } + return false; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(sizeof(GROUNDITEM)); + ZeroMemory(VarPtr.Ptr,sizeof(GROUNDITEM)); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pGroundType) + return false; + memcpy(VarPtr.Ptr,Source.Ptr,sizeof(GROUNDITEM)); + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + + +class MQ2CorpseType : public MQ2Type +{ +public: + static enum CorpseMembers + { + Open=1, + Item=2, + Items=3, + }; + static enum CorpseMethods + { + }; + MQ2CorpseType():MQ2Type("corpse") + { + TypeMember(Open); + TypeMember(Item); + TypeMember(Items); + } + + ~MQ2CorpseType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (pActiveCorpse && pLootWnd) + { + strcpy(Destination,"TRUE"); + } + else + { + strcpy(Destination,"FALSE"); + } + return true; + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2MerchantType : public MQ2Type +{ +public: + static enum MerchantMembers + { + Markup=1, + Item=2, + Items=3, + Open=4, + Full=5, + }; + static enum MerchantMethods + { + }; + MQ2MerchantType():MQ2Type("merchant") + { + TypeMember(Markup); + TypeMember(Item); + TypeMember(Items); + TypeMember(Open); + TypeMember(Full); + } + + ~MQ2MerchantType() + { + + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (pActiveMerchant && pMerchantWnd) + { + strcpy(Destination,"TRUE"); + } + else + { + strcpy(Destination,"FALSE"); + } + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2WindowType : public MQ2Type +{ +public: + static enum WindowMembers + { + Open=1, + Child=2, + VScrollMax=3, + VScrollPos=4, + VScrollPct=5, + HScrollMax=6, + HScrollPos=7, + HScrollPct=8, + Children=9, + Siblings=10, + Parent=11, + FirstChild=12, + Next=13, + Minimized=14, + X=15, + Y=16, + Height=17, + Width=18, + MouseOver=19, + BGColor=20, + Text=21, + Tooltip=22, + List=23, + Checked=24, + Style=25, + Enabled=26, + Highlighted=27, + Name=28, + ScreenID=29, + Type=30, + Items=31, + HisTradeReady=32, + MyTradeReady=33, + }; + static enum WindowMethods + { + LeftMouseDown=1, + LeftMouseUp=2, + LeftMouseHeldDown=3, + LeftMouseHeldUp=4, + RightMouseDown=5, + RightMouseUp=6, + RightMouseHeldDown=7, + RightMouseHeldUp=8, + ListSelect=9, + }; +#ifdef ISBOXER_COMPAT + MQ2WindowType():MQ2Type("eqwindow") +#else + MQ2WindowType():MQ2Type("window") +#endif + { + TypeMember(Open); + TypeMember(Child); + TypeMember(VScrollMax); + TypeMember(VScrollPos); + TypeMember(VScrollPct); + TypeMember(HScrollMax); + TypeMember(HScrollPos); + TypeMember(HScrollPct); + TypeMember(Children); + TypeMember(Siblings); + TypeMember(FirstChild); + TypeMember(Next); + TypeMember(Minimized);//14, + TypeMember(X);//15, + TypeMember(Y);//16, + TypeMember(Height);//17, + TypeMember(Width);//18, + TypeMember(MouseOver);//19, + TypeMember(BGColor);//20, + TypeMember(Text);//21, + TypeMember(Tooltip);//22, + TypeMember(List); + TypeMember(Checked); + TypeMember(Style); + TypeMember(Enabled); + TypeMember(Highlighted); + TypeMember(Name); + TypeMember(ScreenID); + TypeMember(Type); + TypeMember(Items); + TypeMember(HisTradeReady); + TypeMember(MyTradeReady); + + + TypeMethod(LeftMouseDown); + TypeMethod(LeftMouseUp); + TypeMethod(LeftMouseHeldDown); + TypeMethod(LeftMouseHeldUp); + TypeMethod(RightMouseDown); + TypeMethod(RightMouseUp); + TypeMethod(RightMouseHeldDown); + TypeMethod(RightMouseHeldUp); + TypeMethod(ListSelect); + + } + + ~MQ2WindowType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (VarPtr.Ptr && ((PCSIDLWND)VarPtr.Ptr)->dShow) + strcpy(Destination,"TRUE"); + else + strcpy(Destination,"FALSE"); + return true; + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pWindowType) + return false; + VarPtr.Ptr=Source.Ptr; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +#ifndef ISXEQ +class MQ2MacroType : public MQ2Type +{ +public: + static enum MacroMembers + { + Name=1, + RunTime=2, + Paused=3, + Return=4, + Params=5, + Param=6, + }; + MQ2MacroType():MQ2Type("macro") + { + TypeMember(Name); + TypeMember(RunTime); + TypeMember(Paused); + TypeMember(Return); + TypeMember(Params); + TypeMember(Param); + } + + ~MQ2MacroType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (gRunning) + { + strcpy(Destination,gszMacroName); + return true; + } + return false; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; +#endif + +class MQ2ZoneType : public MQ2Type +{ +public: + static enum ZoneMembers + { + Name=1, + ShortName=2, + ID=3, + }; + MQ2ZoneType():MQ2Type("zone") + { + TypeMember(Name); + TypeMember(ShortName);//2, + TypeMember(ID);//3, + } + + ~MQ2ZoneType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + strcpy(Destination,&((PZONELIST)VarPtr.Int)->LongName[0]); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type==pZoneType) + { + VarPtr.Ptr=Source.Ptr; + return true; + } + if (Source.Type==(MQ2Type*)pCurrentZoneType) + { + VarPtr.Ptr=&((PWORLDDATA)pWorldData)->ZoneArray[GetCharInfo()->zoneId]; + return true; + } + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2CurrentZoneType : public MQ2Type +{ +public: + static enum CurrentZoneMembers + { + Name=1, + ShortName=2, + Type=3, + Gravity=4, + SkyType=5, + SafeY=6, + SafeX=7, + SafeZ=8, + MinClip=9, + MaxClip=10, + ID=11, + SafeN=12, + SafeW=13, + SafeU=14, + }; + MQ2CurrentZoneType():MQ2Type("currentzone") + { + TypeMember(Name); + TypeMember(ShortName);//2, + TypeMember(Type);//3, + TypeMember(Gravity);//4, + TypeMember(SkyType);//5, + TypeMember(SafeY);//6, + TypeMember(SafeX);//7, + TypeMember(SafeZ);//8, + TypeMember(MinClip);//9, + TypeMember(MaxClip);//10, + TypeMember(ID); + TypeMember(SafeN); + TypeMember(SafeW); + TypeMember(SafeU); + } + + ~MQ2CurrentZoneType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + strcpy(Destination,&((PZONEINFO)pZoneInfo)->LongName[0]); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pCurrentZoneType) + return false; + VarPtr.Ptr=Source.Ptr; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2MacroQuestType : public MQ2Type +{ +public: + static enum MacroQuestMembers + { + GameState=1, + LoginName=2, + Server=3, + LastCommand=4, + LastTell=5, + Error=6, + SyntaxError=7, + MQ2DataError=8, + Running=9, + MouseX=10, + MouseY=11, + BuildDate=12, + Ping=13, + ChatChannels=14, + ChatChannel=15, + ViewportX=16, + ViewportY=17, + ViewportXMax=18, + ViewportYMax=19, + ViewportXCenter=20, + ViewportYCenter=21, + LClickedObject=22, + }; + static enum MacroQuestMethods + { + }; + MQ2MacroQuestType():MQ2Type("macroquest") + { + TypeMember(GameState); + TypeMember(LoginName); + TypeMember(Server); + TypeMember(LastCommand); + TypeMember(LastTell); + TypeMember(Error); + TypeMember(SyntaxError); + TypeMember(MQ2DataError); + TypeMember(Running); + TypeMember(MouseX); + TypeMember(MouseY); + TypeMember(BuildDate); + TypeMember(Ping); + TypeMember(ChatChannels); + TypeMember(ChatChannel); + TypeMember(ViewportX); + TypeMember(ViewportY); + TypeMember(ViewportXMax); + TypeMember(ViewportYMax); + TypeMember(ViewportXCenter); + TypeMember(ViewportYCenter); + TypeMember(LClickedObject); + } + + ~MQ2MacroQuestType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + return false; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; +#ifndef ISXEQ +class MQ2MathType : public MQ2Type +{ +public: + static enum MathMembers + { + Abs=1, + Rand=2, + Calc=3, + Sin=4, + Cos=5, + Tan=6, + Asin=7, + Acos=8, + Atan=9, + Hex=10, + Dec=11, + Not=12, + Distance=13, + Sqrt=14, + }; + MQ2MathType():MQ2Type("math") + { + TypeMember(Abs); + TypeMember(Rand);//2, + TypeMember(Calc);//3, + TypeMember(Sin);//4, + TypeMember(Cos);//5, + TypeMember(Tan);//6, + TypeMember(Asin);//7, + TypeMember(Acos);//8, + TypeMember(Atan);//9, + TypeMember(Hex);//10, + TypeMember(Dec);//11, + TypeMember(Not);//12, + TypeMember(Distance); + TypeMember(Sqrt); + } + + ~MQ2MathType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + return false; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; +#endif +class MQ2RaceType : public MQ2Type +{ +public: + static enum RaceMembers + { + Name=1, + ID=2, + }; + MQ2RaceType():MQ2Type("race") + { + TypeMember(Name); + TypeMember(ID); + } + + ~MQ2RaceType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + PCHAR pDesc=pEverQuest->GetRaceDesc(VarPtr.DWord); + strcpy(Destination,pDesc); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.DWord=atoi(Source); + return true; + } +}; + +class MQ2ClassType : public MQ2Type +{ +public: + static enum ClassMembers + { + Name=1, + ShortName=2, + ID=3, + PureCaster=4, + CanCast=5, + DruidType=6, + NecromancerType=7, + ShamanType=8, + ClericType=9, + PetClass=10, + HealerType=11, + }; + MQ2ClassType():MQ2Type("class") + { + TypeMember(Name); + TypeMember(ShortName); + TypeMember(ID); + TypeMember(PureCaster); + TypeMember(CanCast); + TypeMember(DruidType); + TypeMember(NecromancerType); + TypeMember(ShamanType); + TypeMember(ClericType); + TypeMember(PetClass); + TypeMember(HealerType); + } + + ~MQ2ClassType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + PCHAR pDesc=GetClassDesc(VarPtr.DWord); + strcpy(Destination,pDesc); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.DWord=atoi(Source); + return true; + } +}; +class MQ2BodyType : public MQ2Type +{ +public: + static enum BodyMembers + { + Name=1, + ID=2 + }; + MQ2BodyType():MQ2Type("body") + { + TypeMember(Name); + TypeMember(ID); + } + + ~MQ2BodyType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + PCHAR pDesc=GetBodyTypeDesc(VarPtr.DWord); + strcpy(Destination,pDesc); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.DWord=atoi(Source); + return true; + } +}; +class MQ2DeityType : public MQ2Type +{ +public: + static enum DeityMembers + { + Name=1, + Team=2, + ID=3 + }; + MQ2DeityType():MQ2Type("Deity") + { + TypeMember(Name); + TypeMember(Team); + TypeMember(ID); + } + + ~MQ2DeityType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + PCHAR pDesc=pEverQuest->GetDeityDesc(VarPtr.DWord); + strcpy(Destination,pDesc); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.DWord=atoi(Source); + return true; + } +}; +#ifndef ISXEQ +class MQ2TimeType : public MQ2Type +{ +public: + static enum TimeMembers + { + Hour=1, + Minute=2, + Second=3, + DayOfWeek=4, + Day=5, + Month=6, + Year=7, + Time12=8, + Time24=9, + Date=10, + Night=11, + SecondsSinceMidnight=12, + }; + MQ2TimeType():MQ2Type("time") + { + TypeMember(Hour); + TypeMember(Minute); + TypeMember(Second); + TypeMember(DayOfWeek); + TypeMember(Day); + TypeMember(Month); + TypeMember(Year); + TypeMember(Time12); + TypeMember(Time24); + TypeMember(Date); + TypeMember(Night); + TypeMember(SecondsSinceMidnight); + } + + ~MQ2TimeType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + struct tm *Now=(struct tm*)VarPtr.Ptr; + sprintf(Destination,"%02d:%02d:%02d",Now->tm_hour,Now->tm_min, Now->tm_sec); + return true; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(sizeof(struct tm)); + ZeroMemory(VarPtr.Ptr,sizeof(struct tm)); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + +#ifndef MQ2PLUGIN + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pTimeType) + return false; + memcpy(VarPtr.Ptr,Source.Ptr,sizeof(struct tm)); + return true; + } +#else + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source); +#endif + + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; +#endif +#ifndef ISXEQ +class MQ2TypeType : public MQ2Type +{ +public: + static enum TypeMembers + { + Name=1, + TypeMember=2, + }; + MQ2TypeType():MQ2Type("type") + { + TypeMember(Name); + AddMember((DWORD)TypeMember,"Member"); + } + + ~MQ2TypeType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + strcpy(Destination,((MQ2Type*)VarPtr.Ptr)->GetName()); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.Ptr=Source.Type; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + if (VarPtr.Ptr=FindMQ2DataType(Source)) + return true; + return false; + } +}; +#endif +class MQ2HeadingType : public MQ2Type +{ +public: + static enum HeadingMembers + { + Name=1, + ShortName=2, + Degrees=3, + Clock=4, + DegreesCCW=5, + }; + static enum HeadingMethods + { + }; + MQ2HeadingType():MQ2Type("heading") + { + TypeMember(Name); + TypeMember(ShortName); + TypeMember(Degrees); + TypeMember(Clock); + TypeMember(DegreesCCW); + } + + ~MQ2HeadingType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + strcpy(Destination,szHeadingNormalShort[(INT)((360.0f-VarPtr.Float)/ 22.5f + 0.5f)%16]); + return true; + } +#ifndef MQ2PLUGIN + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pHeadingType && Source.Type!=pFloatType) + VarPtr.Float=(FLOAT)Source.DWord; + else + VarPtr.Float=Source.Float; + return true; + } +#else + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source); +#endif + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + VarPtr.Float=(FLOAT)atof(Source); + return true; + } +}; + +class MQ2InvSlotType : public MQ2Type +{ +public: + static enum InvSlotMembers + { + Pack=1, + Slot=2, + ID=3, + Name=4, + Item=5, + }; + static enum InvSlotMethods + { + }; + MQ2InvSlotType():MQ2Type("invslot") + { + TypeMember(Pack); + TypeMember(Slot); + TypeMember(ID); + TypeMember(Name); + TypeMember(Item); + } + + ~MQ2InvSlotType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + itoa(VarPtr.Int,Destination,10); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + if (IsNumber(Source)) + { + VarPtr.DWord=atoi(Source); + return true; + } + else + { + CHAR Temp[MAX_STRING]={0}; + strlwr(strcpy(Temp,Source)); + VarPtr.DWord=ItemSlotMap[Temp]; + if (VarPtr.DWord || !stricmp(Temp,"charm")) + { + return true; + } + } + return false; + } +}; + +#ifndef ISXEQ +class MQ2PluginType : public MQ2Type +{ +public: + static enum PluginMembers + { + Name=1, + Version=2, + }; + MQ2PluginType():MQ2Type("plugin") + { + TypeMember(Name); + TypeMember(Version); + } + + ~MQ2PluginType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (VarPtr.Ptr) + { + strcpy(Destination,((PMQPLUGIN)VarPtr.Ptr)->szFilename); + return true; + } + return false; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pPluginType) + return false; + VarPtr.Ptr=Source.Ptr; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; +#endif +class MQ2BenchmarkType : public MQ2Type +{ +public: + static enum BenchmarkMembers + { + Name=1, + ID=2, + Iterations=3, + TimeSpent=4, + AvgTimeSpent=5, + }; + MQ2BenchmarkType():MQ2Type("benchmark") + { + TypeMember(Name); + TypeMember(ID); + TypeMember(Iterations); + TypeMember(TimeSpent); + TypeMember(AvgTimeSpent); + } + + ~MQ2BenchmarkType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + return false; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + VarPtr.DWord=Source.DWord; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + if (IsNumber(Source)) + { + VarPtr.DWord=atoi(Source); + return true; + } + return false; + } +}; + +class MQ2SkillType : public MQ2Type +{ +public: + static enum SkillMembers + { + Name=1, + ID=2, + ReuseTime=3, + MinLevel=4, + SkillCap=5, + AltTimer=6, + Activated=7, + }; + static enum SkillMethods + { + }; + MQ2SkillType():MQ2Type("skill") + { + TypeMember(Name); + TypeMember(ID); + TypeMember(ReuseTime); + TypeMember(MinLevel); + TypeMember(SkillCap); + TypeMember(AltTimer); + TypeMember(Activated); + } + + ~MQ2SkillType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (!VarPtr.Ptr) + return false; + if (PSKILL pSkill=*(PSKILL*)VarPtr.Ptr) + if (PCHAR pName=pStringTable->getString(pSkill->nName,0)) + { + strcpy(Destination,pName); + return true; + } + return false; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pSkillType) + return false; + VarPtr.Ptr=Source.Ptr; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2AltAbilityType : public MQ2Type +{ +public: + static enum AltAbilityMembers + { + Name=1, + ShortName=2, + Description=3, + MinLevel=4, + Cost=5, + RequiresAbility=6, + RequiresAbilityPoints=7, + MaxRank=8, + AARankRequired=9, + Spell=10, + Type=11, + ReuseTime=12, + ID=13, + MyReuseTime=14, + }; + static enum AltAbilityMethods + { + }; + MQ2AltAbilityType():MQ2Type("altability") + { + TypeMember(Name); + TypeMember(ShortName); + TypeMember(Description); + TypeMember(MinLevel); + TypeMember(Cost); + TypeMember(RequiresAbility); + TypeMember(RequiresAbilityPoints); + TypeMember(MaxRank); + TypeMember(AARankRequired); + TypeMember(Spell); + TypeMember(Type); + TypeMember(ReuseTime); + TypeMember(ID); + TypeMember(MyReuseTime); + } + + ~MQ2AltAbilityType() + { + } + bool MQ2AltAbilityType::ToString(MQ2VARPTR VarPtr, PCHAR Destination); + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pAltAbilityType) + return false; + VarPtr.Ptr=Source.Ptr; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2TimerType : public MQ2Type +{ +public: + static enum TimerMembers + { + Value=1, + OriginalValue=2, + }; + static enum TimerMethods + { + Reset=1, + Expire=2, + Set=3, + }; + MQ2TimerType():MQ2Type("timer") + { + TypeMember(Value); + TypeMember(OriginalValue); + + TypeMethod(Reset); + TypeMethod(Expire); + TypeMethod(Set); + } + + ~MQ2TimerType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + PMQTIMER pTimer=(PMQTIMER)VarPtr.Ptr; + itoa(pTimer->Current,Destination,10); + return true; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + PMQTIMER pVar = (PMQTIMER)malloc(sizeof(MQTIMER)); + pVar->szName[0]=0; + pVar->Current = 0; + pVar->Original= 0; + pVar->pNext = gTimer; + pVar->pPrev=0; + if (gTimer) + gTimer->pPrev=pVar; + gTimer=pVar; + VarPtr.Ptr=pVar; + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + PMQTIMER pVar=(PMQTIMER)VarPtr.Ptr; + if (pVar->pPrev) + pVar->pPrev->pNext=pVar->pNext; + else + gTimer=pVar->pNext; + if (pVar->pNext) + pVar->pNext->pPrev=pVar->pPrev; + free(VarPtr.Ptr); + } +#ifndef MQ2PLUGIN + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + PMQTIMER pTimer=(PMQTIMER)VarPtr.Ptr; + if (Source.Type==pFloatType) + { + pTimer->Current=(DWORD)Source.Float; + pTimer->Original=pTimer->Current; + } + else + { + pTimer->Current=Source.DWord; + pTimer->Original=pTimer->Current; + } + return true; + } +#else + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source); +#endif + + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + PMQTIMER pTimer=(PMQTIMER)VarPtr.Ptr; + + + FLOAT VarValue = (FLOAT)atof(Source); + switch (Source[strlen(Source)-1]) + { + case 'm': + case 'M': + VarValue *= 60; + case 's': + case 'S': + VarValue *= 10; + } + pTimer->Current = (DWORD)VarValue; + pTimer->Original = pTimer->Current; + return true; + } +}; +#ifndef ISXEQ +class MQ2ArrayType : public MQ2Type +{ +public: + static enum ArrayMembers + { + Dimensions=1, + Size=2, + }; + MQ2ArrayType():MQ2Type("array") + { + TypeMember(Dimensions); + TypeMember(Size); + } + + ~MQ2ArrayType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + return false; + } + + void InitVariable(MQ2VARPTR &VarPtr) + { + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + CDataArray *pArray=(CDataArray*)VarPtr.Ptr; + delete pArray; + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; +#endif + +class MQ2GroupType : public MQ2Type +{ +public: + static enum GroupMembers + { + xMember=1, + Members=2, + Leader=3, + GroupSize=4, + MainTank=5, + MainAssist=6, + Puller=7, + }; + static enum GroupMethods + { + }; + MQ2GroupType():MQ2Type("group") + { + AddMember(xMember,"Member"); + TypeMember(Members); + TypeMember(Leader); + TypeMember(GroupSize); + TypeMember(MainTank); + TypeMember(MainAssist); + TypeMember(Puller); + } + + ~MQ2GroupType() + { + } + + bool GETMEMBER(); + //DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination); + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2GroupMemberType : public MQ2Type +{ +public: + static enum GroupMemberMembers + { + Name=1, + Leader=2, + Spawn=3, + Level=4, + MainTank=5, + MainAssist=6, + Puller=7, + Mercenary=8, + PctAggro=9, + }; + static enum GroupMemberMethods + { + }; + MQ2GroupMemberType():MQ2Type("groupmember") + { + TypeMember(Name); + TypeMember(Leader); + TypeMember(Spawn); + TypeMember(Level); + TypeMember(MainTank); + TypeMember(MainAssist); + TypeMember(Puller); + TypeMember(Mercenary); + TypeMember(PctAggro); + } + + ~MQ2GroupMemberType() + { + } + + bool GETMEMBER(); + //DECLAREGETMETHOD(); + + INHERITINDIRECT(pSpawnType,Temp.Ptr=GetGroupMember(ObjectData.DWord),0); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination); + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pGroupMemberType) + return false; + VarPtr.Ptr=Source.Ptr; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2RaidType : public MQ2Type +{ +public: + static enum RaidMembers + { + xMember=1, + Members=2, + Target=3, + Leader=4, + TotalLevels=5, + AverageLevel=6, + LootType=7, + Looter=8, + Looters=9, + Locked=10, + Invited=11, + MainAssist=12, + }; + static enum RaidMethods + { + }; + MQ2RaidType():MQ2Type("raid") + { + AddMember(xMember,"Member"); + TypeMember(Members); + TypeMember(Target); + TypeMember(Leader); + TypeMember(TotalLevels); + TypeMember(AverageLevel); + TypeMember(LootType); + TypeMember(Looter); + TypeMember(Looters); + TypeMember(Locked); + TypeMember(Invited); + TypeMember(MainAssist); + } + + ~MQ2RaidType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + INHERITINDIRECT(pSpawnType,Temp.Ptr=GetRaidMember(ObjectData.DWord-1),0); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + return false; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2RaidMemberType : public MQ2Type +{ +public: + static enum RaidMemberMembers + { + Name=1, + Group=3, + GroupLeader=4, + RaidLeader=5, + Spawn=6, + Looter=7, + Class=8, + Level=9, + }; + static enum RaidMemberMethods + { + }; + MQ2RaidMemberType():MQ2Type("raidmember") + { + TypeMember(Name); + TypeMember(Group); + TypeMember(GroupLeader); + TypeMember(RaidLeader); + TypeMember(Spawn); + TypeMember(Looter); + TypeMember(Class); + TypeMember(Level); + } + + ~MQ2RaidMemberType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + DWORD nRaidMember=VarPtr.DWord-1; + if (VarPtr.DWord>=72) + return false; + if (!pRaid->RaidMemberUsed[nRaidMember]) + return false; + PEQRAIDMEMBER pRaidMember=&pRaid->RaidMember[nRaidMember]; + strcpy(Destination,pRaidMember->Name); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type!=pRaidMemberType) + return false; + VarPtr.Ptr=Source.Ptr; + return true; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2EvolvingItemType : public MQ2Type +{ +public: + static enum EvolvingItemMembers + { + ExpPct=1, + ExpOn=2, + Level=3, + MaxLevel=4, + }; + MQ2EvolvingItemType():MQ2Type("Evolving") + { + TypeMember(ExpPct); + TypeMember(ExpOn); + TypeMember(Level); + TypeMember(MaxLevel); + } + + ~MQ2EvolvingItemType() + { + } + + bool GETMEMBER(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if(VarPtr.Ptr && ((PCONTENTS)VarPtr.Ptr)->IsEvolvingItem) + strcpy(Destination,"TRUE"); + else + strcpy(Destination,"FALSE"); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2DynamicZoneType : public MQ2Type +{ +public: + static enum DynamicZoneMembers + { + Name=1, + Members=2, + MaxMembers=3, + xMember=4, + Leader=5, + }; + MQ2DynamicZoneType():MQ2Type("dynamiczone") + { + TypeMember(Name); + TypeMember(Members); + TypeMember(MaxMembers); + AddMember(xMember,"Member"); + TypeMember(Leader); + } + ~MQ2DynamicZoneType() + { + } + bool GETMEMBER(); + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if(pDZMember) + { + strcpy(Destination,pDynamicZone->ExpeditionName); + return true; + } + return false; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2DZMemberType : public MQ2Type +{ +public: + static enum DZMemberTypeMembers + { + Name=1, + Status=2, + }; + MQ2DZMemberType():MQ2Type("dzmember") + { + TypeMember(Name); + TypeMember(Status); + } + ~MQ2DZMemberType() + { + } + bool GETMEMBER(); + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + strcpy(Destination,((PDZMEMBER)VarPtr.Ptr)->Name); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2FellowshipType : public MQ2Type +{ +public: + static enum FellowshipTypeMembers + { + ID=1, + Leader=2, + MotD=3, + Members=4, + xMember=5, + CampfireDuration=6, + CampfireY=7, + CampfireX=8, + CampfireZ=9, + CampfireZone=10, + Campfire=11, + }; + MQ2FellowshipType():MQ2Type("fellowship") + { + TypeMember(ID); + TypeMember(Leader); + TypeMember(MotD); + TypeMember(Members); + AddMember(xMember,"Member"); + TypeMember(CampfireDuration); + TypeMember(CampfireY); + TypeMember(CampfireX); + TypeMember(CampfireZ); + TypeMember(CampfireZone); + TypeMember(Campfire); + } + ~MQ2FellowshipType() + { + } + bool GETMEMBER(); + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if(VarPtr.Ptr && ((PFELLOWSHIPINFO)VarPtr.Ptr)->FellowshipID) + strcpy(Destination,"TRUE"); + else + strcpy(Destination,"FALSE"); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2FellowshipMemberType : public MQ2Type +{ +public: + static enum FMTypeMembers + { + Zone=1, + Level=2, + Class=3, + LastOn=4, + Name=5, + }; + MQ2FellowshipMemberType():MQ2Type("fellowshipmember") + { + TypeMember(Zone); + TypeMember(Level); + TypeMember(Class); + TypeMember(LastOn); + TypeMember(Name); + } + ~MQ2FellowshipMemberType() + { + } + bool GETMEMBER(); + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + strcpy(Destination,((PFELLOWSHIPMEMBER)VarPtr.Ptr)->Name); + return true; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2FriendsType : public MQ2Type +{ +public: + static enum FriendsMembers + { + xFriend=1 + }; + static enum FriendsMethods + { + }; + + MQ2FriendsType():MQ2Type("friend") + { + AddMember(xFriend,"Friend"); + } + + ~MQ2FriendsType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + // return the number of friends here... + if(((PEVERQUEST)pEverQuest)->ChatService) { + class CChatService *pChat=(class CChatService *) ((PEVERQUEST)pEverQuest)->ChatService; + sprintf(Destination, "%d", pChat->GetNumberOfFriends()); + return true; + } + return false; + } + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; + +class MQ2TargetType : public MQ2Type +{ +public: + static enum TargetMembers + { + Buff = 1, + BuffCount = 2, + BuffDuration = 3, + PctAggro = 4, + SecondaryPctAggro = 5, + SecondaryAggroPlayer = 6, + }; + +#ifdef ISBOXER_COMPAT + MQ2TargetType():MQ2Type("eqtarget") +#else + MQ2TargetType():MQ2Type("target") +#endif + { + TypeMember(Buff); + TypeMember(BuffCount); + TypeMember(BuffDuration); + TypeMember(PctAggro); + TypeMember(SecondaryPctAggro); + TypeMember(SecondaryAggroPlayer); + } + + ~MQ2TargetType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + INHERITDIRECT(pSpawnType); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if (!VarPtr.Ptr) + return false; + strcpy(Destination,((PSPAWNINFO)VarPtr.Ptr)->Name); + return true; + } + void InitVariable(MQ2VARPTR &VarPtr) + { + VarPtr.Ptr=malloc(sizeof(SPAWNINFO)); + ZeroMemory(VarPtr.Ptr,sizeof(SPAWNINFO)); + } + void FreeVariable(MQ2VARPTR &VarPtr) + { + free(VarPtr.Ptr); + } + + virtual bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + if (Source.Type==pSpawnType) + { + memcpy(VarPtr.Ptr,Source.Ptr,sizeof(SPAWNINFO)); + return true; + } + else + { + if (PSPAWNINFO pOther=(PSPAWNINFO)GetSpawnByID(Source.DWord)) + { + memcpy(VarPtr.Ptr,pOther,sizeof(SPAWNINFO)); + return true; + } + } + return false; + } + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + if (PSPAWNINFO pOther=(PSPAWNINFO)GetSpawnByID(atoi(Source))) + { + memcpy(VarPtr.Ptr,pOther,sizeof(SPAWNINFO)); + return true; + } + return false; + } +}; + +class MQ2XTargetType : public MQ2Type +{ +public: + static enum xTargetMembers + { + Type = 1, + ID = 2, + Name = 3, + PctAggro = 4, + }; + + MQ2XTargetType():MQ2Type("xtarget") + { + TypeMember(Type); + TypeMember(ID); + TypeMember(Name); + TypeMember(PctAggro); + } + + ~MQ2XTargetType() + { + } + + bool GETMEMBER(); + DECLAREGETMETHOD(); + + bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + if(GetCharInfo() && GetCharInfo()->pXTargetMgr) + { + XTARGETDATA xtd = GetCharInfo()->pXTargetMgr->pXTargetArray->pXTargetData[VarPtr.DWord]; + strcpy(Destination, xtd.Name); + } + else + strcpy(Destination, "NULL"); + return true; + } + + bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source) + { + return false; + } + + bool FromString(MQ2VARPTR &VarPtr, PCHAR Source) + { + return false; + } +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2DataVars.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2DataVars.cpp new file mode 100644 index 0000000000..ea5d56a267 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2DataVars.cpp @@ -0,0 +1,541 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ +#ifndef ISXEQ + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#define DBG_SPEW + + +#include "MQ2Main.h" + + + + + + +map VariableMap; + +inline VOID DeleteMQ2DataVariable(PDATAVAR pVar) +{ + if (pVar->ppHead==&pMacroVariables || pVar->ppHead==&pGlobalVariables) + VariableMap[pVar->szName]=0; + if (pVar->pNext) + pVar->pNext->pPrev=pVar->pPrev; + if (pVar->pPrev) + pVar->pPrev->pNext=pVar->pNext; + else + *pVar->ppHead=pVar->pNext; + pVar->Var.Type->FreeVariable(pVar->Var.VarPtr); + delete pVar; +} + +inline PDATAVAR FindMQ2DataVariable(PCHAR Name) +{ + PDATAVAR pFind=VariableMap[Name]; + if (pFind) + return pFind; + // local? + if (gMacroStack) + { + PDATAVAR pVar=gMacroStack->Parameters; + while(pVar) + { + if (!strcmp(pVar->szName,Name)) + return pVar; + pVar=pVar->pNext; + } + pVar=gMacroStack->LocalVariables; + while(pVar) + { + if (!strcmp(pVar->szName,Name)) + return pVar; + pVar=pVar->pNext; + } + } + return 0; +} + +BOOL AddMQ2DataEventVariable(PCHAR Name, PCHAR Index, MQ2Type *pType, PDATAVAR *ppHead, PCHAR Default) +{ + if (!ppHead || !Name[0]) + return FALSE; + if (!Index) + Index=""; + if (!Default) + Default=""; + if (FindMQ2Data(Name) || FindMQ2DataType(Name)) + return FALSE; // name in use + if (!pType) + return FALSE; + + // create variable + PDATAVAR pVar = new DATAVAR; + pVar->ppHead=ppHead; + pVar->pNext=*ppHead; + *ppHead=pVar; + pVar->pPrev=0; + if (pVar->pNext) + pVar->pNext->pPrev=pVar; + strcpy(pVar->szName,Name); + if (Index[0]) + { + CDataArray *pArray=new CDataArray(pType,Index,Default); + pVar->Var.Ptr=pArray; + + } + else + { + pVar->Var.Type=pType; + pType->InitVariable(pVar->Var.VarPtr); + pType->FromString(pVar->Var.VarPtr,Default); + } + if (pVar->ppHead==&pMacroVariables || pVar->ppHead==&pGlobalVariables) + { + VariableMap[Name]=pVar; + } + return TRUE; +} + + +BOOL AddMQ2DataVariableBy(PCHAR Name, PCHAR Index, MQ2Type *pType, PDATAVAR *ppHead, PCHAR Default, BOOL ByData) +{ + if (!ppHead || !Name[0]) + return FALSE; + if (!Index) + Index=""; + if (!Default) + Default=""; + if (FindMQ2DataVariable(Name) || FindMQ2Data(Name) || FindMQ2DataType(Name)) + return FALSE; // name in use + if (!pType) + return FALSE; + + // create variable + PDATAVAR pVar = new DATAVAR; + pVar->ppHead=ppHead; + pVar->pNext=*ppHead; + *ppHead=pVar; + pVar->pPrev=0; + if (pVar->pNext) + pVar->pNext->pPrev=pVar; + strcpy(pVar->szName,Name); + if (Index[0]) + { + CDataArray *pArray=new CDataArray(pType,Index,Default); + pVar->Var.Ptr=pArray; + pVar->Var.Type=pArrayType; + } + else + { + pVar->Var.Type=pType; + pType->InitVariable(pVar->Var.VarPtr); + if (ByData) + pType->FromData(pVar->Var.VarPtr,*(MQ2TYPEVAR *)Default); + else + pType->FromString(pVar->Var.VarPtr,Default); + } + if (!(gMacroStack && (ppHead==&gMacroStack->LocalVariables || ppHead==&gMacroStack->Parameters))) + { + VariableMap[Name]=pVar; + } + return TRUE; +} + +BOOL AddMQ2DataVariable(PCHAR Name, PCHAR Index, MQ2Type *pType, PDATAVAR *ppHead, PCHAR Default) +{ + return AddMQ2DataVariableBy(Name, Index, pType, ppHead, Default, 0); +} + + +BOOL AddMQ2DataVariableFromData(PCHAR Name, PCHAR Index, MQ2Type *pType, PDATAVAR *ppHead, MQ2TYPEVAR Default) +{ + return AddMQ2DataVariableBy(Name, Index, pType, ppHead, (PCHAR)&Default, 1); +} + + + +PDATAVAR *FindVariableScope(PCHAR Name) +{ + if (!stricmp(Name,"global")) + return &pGlobalVariables; + if (!stricmp(Name,"outer")) + return &pMacroVariables; + if (gMacroStack && !stricmp(Name,"local")) + return &gMacroStack->LocalVariables; + return 0; +} + +BOOL DeleteMQ2DataVariable(PCHAR Name) +{ + if (PDATAVAR pVar=FindMQ2DataVariable(Name)) + { + DeleteMQ2DataVariable(pVar); + return TRUE; + } + return FALSE; +} + +VOID ClearMQ2DataVariables(PDATAVAR *ppHead) +{ + PDATAVAR pVar=*ppHead; + while(pVar) + { + PDATAVAR pNext=pVar->pNext; + DeleteMQ2DataVariable(pVar); + pVar=pNext; + } + *ppHead=0; +} + +VOID NewDeclareVar(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /declare [type] [global|outer|local] [default value]"); + return; + } + PDATAVAR *pScope=0; + MQ2Type *pType=0; + CHAR szIndex[MAX_STRING]={0}; + CHAR szName[MAX_STRING]={0}; + GetArg(szName,szLine,1); + CHAR Arg[MAX_STRING]={0}; + GetArg(Arg,szLine,2); + PCHAR pDefault; + if (pScope=FindVariableScope(Arg)) + { + // scope comes AFTER type, so next must be default + pDefault=GetNextArg(szLine,2); + } + else if (pType=FindMQ2DataType(Arg)) + { + // next is either scope or default + GetArg(Arg,szLine,3); + if (pScope=FindVariableScope(Arg)) + { + // next is default + pDefault=GetNextArg(szLine,3); + } + else + { + // this is default + pDefault=GetNextArg(szLine,2); + } + } + else + { + // this is default + pDefault=GetNextArg(szLine); + } + if (!pScope) + { + if (gMacroStack) + pScope=&gMacroStack->LocalVariables; + else + { + MacroError("/declare '%s' failed. No macro in execution and no variable scope given",szName); + return; + } + } + if (!pType) + pType=pStringType; + if (pType==pArrayType) + { + MacroError("/declare array failed. To declare an array use: /declare name[size] "); + MacroError("Example: /declare MyStringArray[25] string local ARRAY-UNDEFINED-ELEMENT"); + return; + } + + if (PCHAR pBracket=strchr(szName,'[')) + { + *pBracket=0; + strcpy(szIndex,&pBracket[1]); + szIndex[strlen(szIndex)-1]=0; + } + if (pType==pTimerType && szIndex[0]) + { + MacroError("Cannot /declare an array of timers"); + return; + } + + if (!AddMQ2DataVariable(szName,szIndex,pType,pScope,pDefault)) + { + MacroError("/declare '%s' failed. Name already in use.",szName); + } + else + { + if (pType==pTimerType) + { + PMQTIMER pTimer=(PMQTIMER)((*pScope)->Var.Ptr); + strcpy(pTimer->szName,szName); + } + } +} + +VOID NewDeleteVarCmd(PSPAWNINFO pChar, PCHAR szLine) +{ + if (szLine[0]==0) { + SyntaxError("Usage: /deletevar "); + } + else + { + // destroy old variable + if (!DeleteMQ2DataVariable(szLine)) + { + if (!strnicmp(szLine,"* global",8)) + { + ClearMQ2DataVariables(&pGlobalVariables); + } + else + MacroError("Variable '%s' does not exist",szLine); + } + } +} + +VOID NewVarset(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /varset "); + return; + } + CHAR szName[MAX_STRING]={0}; + GetArg(szName,szLine,1); + PCHAR szRest=GetNextArg(szLine); + CHAR szIndex[MAX_STRING]={0}; + if (PCHAR pBracket=strchr(szName,'[')) + { + *pBracket=0; + strcpy(szIndex,&pBracket[1]); + } + PDATAVAR pVar=FindMQ2DataVariable(szName); + if (!pVar) + { + MacroError("/varset failed, variable '%s' not found",szName); + return; + } + if (szIndex[0]) + { + if (pVar->Var.Type!=pArrayType) + { + MacroError("/varset '%s' failed, array form on non-array",szName); + return; + } + CDataArray *pArray=(CDataArray*)pVar->Var.Ptr; + int N=pArray->GetElement(szIndex); + if (N==-1) + { + MacroError("/varset '%s[%d]' failed, out of bounds on array",szName,N); + return; + } + if (!pArray->pType->FromString(pArray->pData[N],szRest)) + { + MacroError("/varset '%s[%d]' failed, array element type rejected new value",szName,N); + } + } + else + { + if (!pVar->Var.Type->FromString(pVar->Var.VarPtr,szRest)) + { + MacroError("/varset '%s' failed, variable type rejected new value",szName); + } + } +} + +VOID NewVarcalc(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /varcalc "); + return; + } + CHAR szName[MAX_STRING]={0}; + GetArg(szName,szLine,1); + PCHAR szRest=GetNextArg(szLine); + if (!szRest || !szRest[0]) + { + SyntaxError("Usage: /varcalc "); + return; + } + + DOUBLE Result; + if (!Calculate(szRest,Result)) + { + MacroError("/varcalc '%s' failed. Could not calculate '%s'",szName,szRest); + return; + } + sprintf(szRest,"%f",Result); + + + CHAR szIndex[MAX_STRING]={0}; + if (PCHAR pBracket=strchr(szName,'[')) + { + *pBracket=0; + strcpy(szIndex,&pBracket[1]); + } + PDATAVAR pVar=FindMQ2DataVariable(szName); + if (!pVar) + { + MacroError("/varcalc failed, variable '%s' not found",szName); + return; + } + if (szIndex[0]) + { + if (pVar->Var.Type!=pArrayType) + { + MacroError("/varcalc '%s' failed, array form on non-array",szName); + return; + } + CDataArray *pArray=(CDataArray*)pVar->Var.Ptr; + int N=pArray->GetElement(szIndex); + if (N==-1) + { + MacroError("/varcalc '%s[%d]' failed, out of bounds on array",szName,N); + return; + } + if (!pArray->pType->FromString(pArray->pData[N],szRest)) + { + MacroError("/varcalc '%s[%d]' failed, array element type rejected new value",szName,N); + } + } + else + { + if (!pVar->Var.Type->FromString(pVar->Var.VarPtr,szRest)) + { + MacroError("/varcalc '%s' failed, variable type rejected new value",szName); + } + } +} + +VOID NewVardata(PSPAWNINFO pChar, PCHAR szLine) +{ + if (!szLine[0]) + { + SyntaxError("Usage: /vardata "); + return; + } + CHAR szName[MAX_STRING]={0}; + GetArg(szName,szLine,1); + PCHAR szRest=GetNextArg(szLine); + if (!szRest || !szRest[0]) + { + SyntaxError("Usage: /vardata "); + return; + } + CHAR szIndex[MAX_STRING]={0}; + if (PCHAR pBracket=strchr(szName,'[')) + { + *pBracket=0; + strcpy(szIndex,&pBracket[1]); + } + PDATAVAR pVar=FindMQ2DataVariable(szName); + if (!pVar) + { + MacroError("/vardata '%s' failed, variable not found",szName); + return; + } + MQ2TYPEVAR Result; + if (!ParseMQ2DataPortion(szRest,Result)) + { + MacroError("/vardata '%s' failed, MQ2Data portion '%s' unparsable",szName,szRest); + return; + } + + if (szIndex[0]) + { + if (pVar->Var.Type!=pArrayType) + { + MacroError("/vardata '%s' failed, array form on non-array",szName); + return; + } + CDataArray *pArray=(CDataArray*)pVar->Var.Ptr; + int N=pArray->GetElement(szIndex); + if (N==-1) + { + MacroError("/vardata '%s[%d]' failed, out of bounds on array",szName,N); + return; + } + if (!pVar->Var.Type->FromData(pVar->Var.VarPtr,Result)) + { + MacroError("/vardata '%s[%d]'failed, array element type rejected new value",szName,N); + } + } + else + { + if (!pVar->Var.Type->FromData(pVar->Var.VarPtr,Result)) + { + MacroError("/vardata '%s' failed, variable type rejected new value",szName); + } + } +} + +#else +VOID AddCustomEvent(PEVENTLIST pEList, PCHAR szLine) +{ + PEVENTQUEUE pEvent = NULL; + if (!pEList->pEventFunc) return; + pEvent = (PEVENTQUEUE)malloc(sizeof(EVENTQUEUE)); + if (!pEvent) return; + ZeroMemory(pEvent,sizeof(EVENTQUEUE)); + pEvent->Type = EVENT_CUSTOM; + pEvent->pEventList = pEList; + CHAR szParamName[MAX_STRING] = {0}; + CHAR szParamType[MAX_STRING] = {0}; + GetFuncParam(pEList->pEventFunc->Line,0,szParamName,szParamType); + MQ2Type *pType = FindMQ2DataType(szParamType); + if (!pType) + pType=pStringType; + + AddMQ2DataEventVariable(szParamName,"",pType,&pEvent->Parameters,szLine); + + if (!gEventQueue) + { + gEventQueue = pEvent; + } + else + { + PEVENTQUEUE pTemp; + for (pTemp = gEventQueue;pTemp->pNext;pTemp=pTemp->pNext); + pTemp->pNext = pEvent; + pEvent->pPrev=pTemp; + } +} +#endif +#ifndef SafeXLoc +#error 1 +#endif +VOID CheckChatForEvent(PCHAR szMsg) +{ +} + +VOID DropTimers(VOID) +{ + PMQTIMER pTimer=gTimer; + CHAR szOrig[MAX_STRING] = {0}; + while(pTimer) + { + if (pTimer->Current) + { + pTimer->Current--; + if (!pTimer->Current) + { + itoa(pTimer->Original,szOrig,10); + } + } + pTimer=pTimer->pNext; + } +} diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2DetourAPI.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2DetourAPI.cpp new file mode 100644 index 0000000000..fe706676a7 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2DetourAPI.cpp @@ -0,0 +1,1003 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +// Exclude rarely-used stuff from Windows headers +#define WIN32_LEAN_AND_MEAN +#define _WIN32_WINNT 0x510 +#define DIRECTINPUT_VERSION 0x800 + +#if !defined(CINTERFACE) +//#error /DCINTERFACE +#endif + +#define DBG_SPEW + +#include "MQ2Main.h" +#ifndef ISXEQ + +typedef struct _OurDetours { + /* 0x00 */ unsigned int addr; + /* 0x04 */ unsigned int count; + /* 0x08 */ unsigned char array[50]; + /* 0x3a */ PBYTE pfDetour; + /* 0x3e */ PBYTE pfTrampoline; + /* 0x42 */ struct _OurDetours *pNext; + /* 0x46 */ struct _OurDetours *pLast; +} OurDetours; + +OurDetours *ourdetours=0; +CRITICAL_SECTION gDetourCS; + + +OurDetours *FindDetour(DWORD address) +{ + OurDetours *pDetour=ourdetours; + while(pDetour) + { + if (pDetour->addr==address) + return pDetour; + pDetour=pDetour->pNext; + } + return 0; +} + +BOOL AddDetour(DWORD address, PBYTE pfDetour, PBYTE pfTrampoline, DWORD Count) +{ + CAutoLock Lock(&gDetourCS); + BOOL Ret=TRUE; + DebugSpew("AddDetour(0x%X, 0x%X, 0x%X, 0x%X)",address,pfDetour,pfTrampoline,Count); + if (FindDetour(address)) + { + + DebugSpew("Address 0x%x already detoured.",address); + return FALSE; + } + OurDetours *detour = new OurDetours; + detour->addr=address; + detour->count=Count; + memcpy(detour->array,(char *)address, Count); + detour->pNext=ourdetours; + if (ourdetours) + ourdetours->pLast=detour; + detour->pLast=0; + if (pfDetour && !DetourFunctionWithEmptyTrampoline(pfTrampoline, + (PBYTE)address, + pfDetour)) + { + detour->pfDetour=0; + detour->pfTrampoline=0; + Ret=FALSE; + DebugSpew("Detour failed."); + } + else + { + detour->pfDetour=pfDetour; + detour->pfTrampoline=pfTrampoline; + DebugSpew("Detour success."); + } + ourdetours=detour; + return Ret; +} + +void AddDetourf(DWORD address, ...) +{ + va_list marker; + int i=0; + va_start(marker, address); + DWORD Parameters[3]; + DWORD nParameters=0; + while (i!=-1) + { + if (nParameters<3) + { + Parameters[nParameters]=i; + nParameters++; + } + i = va_arg(marker,int); + } + va_end(marker); + if (nParameters==3) + { + AddDetour(address,(PBYTE)Parameters[1],(PBYTE)Parameters[2],20); + } + else + { + DebugSpew("Illegal AddDetourf call"); + } +} + +void RemoveDetour(DWORD address) +{ + CAutoLock Lock(&gDetourCS); + DebugSpew("RemoveDetour(%X)",address); + OurDetours *detour = ourdetours; + while (detour) + { + if (detour->addr==address) + { + if (detour->pfDetour) + { + DetourRemove(detour->pfTrampoline, + detour->pfDetour); + } + if (detour->pLast) + detour->pLast->pNext=detour->pNext; + else + ourdetours=detour->pNext; + + if (detour->pNext) + detour->pNext->pLast=detour->pLast; + delete detour; + DebugSpew("Detour removed."); + return; + } + detour=detour->pNext; + } + DebugSpew("Detour not found in RemoveDetour()"); +} + +void RemoveOurDetours() +{ + CAutoLock Lock(&gDetourCS); + DebugSpew("RemoveOurDetours()"); + if (!ourdetours) + return; + while (ourdetours) + { + if (ourdetours->pfDetour) + { + DebugSpew("RemoveOurDetours() -- Removing %X",ourdetours->addr); + DetourRemove(ourdetours->pfTrampoline,ourdetours->pfDetour); + } + + OurDetours *pNext=ourdetours->pNext; + delete ourdetours; + ourdetours=pNext; + } +} + +#endif + + +class CObfuscator +{ +public: + int doit_tramp(int, int); + int doit_detour(int opcode, int flag); +}; + +int CObfuscator::doit_detour(int opcode, int flag) +{ +#if 0 + if (EQ_BEGIN_ZONE == opcode) { + DebugSpewAlways("EQ_BEGIN_ZONE"); + } else { + DebugSpewAlways("opcode %d", opcode); + } +#endif + if (opcode == EQ_BEGIN_ZONE) + { + } + if (opcode == EQ_END_ZONE) + { + } + return doit_tramp(opcode, flag); +}; + +DETOUR_TRAMPOLINE_EMPTY(int CObfuscator::doit_tramp(int, int)); + +#define EB_SIZE (1024*4) +void emotify(void); +void emotify2(char *buffer); + +// we need this detour to clean up the stack because +// emote sends 1024 bytes no matter how many bytes in the string +// MQ2 variables get left on the stack.... +class CEmoteHook +{ +public: + VOID Trampoline(void); + VOID Detour(void); +}; + +VOID CEmoteHook::Detour(void) +{ + emotify(); + Trampoline(); +} +DETOUR_TRAMPOLINE_EMPTY(VOID CEmoteHook::Trampoline(void)); + + +// this is the memory checker key struct +struct mckey { + union { + int x; + unsigned char a[4]; + char sa[4]; + }; +}; + +// pointer to encryption pad for memory checker +unsigned int *extern_array0 = NULL; +unsigned int *extern_array1 = NULL; +unsigned int *extern_array2 = NULL; +unsigned int *extern_array3 = NULL; +unsigned int *extern_array4 = NULL; +#ifndef ISXEQ +int __cdecl memcheck0(unsigned char *buffer, int count); +int __cdecl memcheck1(unsigned char *buffer, int count, struct mckey key); +int __cdecl memcheck2(unsigned char *buffer, int count, struct mckey key); +int __cdecl memcheck3(unsigned char *buffer, int count, struct mckey key); +int __cdecl memcheck4(unsigned char *buffer, int count, struct mckey key); +#endif + +// *************************************************************************** +// Function: HookMemChecker +// Description: Hook MemChecker +// *************************************************************************** +int (__cdecl *memcheck0_tramp)(unsigned char *buffer, int count); +int (__cdecl *memcheck1_tramp)(unsigned char *buffer, int count, struct mckey key); +int (__cdecl *memcheck2_tramp)(unsigned char *buffer, int count, struct mckey key); +int (__cdecl *memcheck3_tramp)(unsigned char *buffer, int count, struct mckey key); +int (__cdecl *memcheck4_tramp)(unsigned char *buffer, int count, struct mckey key); +VOID HookInlineChecks(BOOL Patch) +{ + int i; + DWORD oldperm, tmp, NewData; + + int cmps[] = { __AC1 + 6 }; + + int cmps2[] = { __AC2, + __AC3, + __AC4, + __AC5, + __AC6, + __AC7 }; + + int len2[] = { 6, 6, 6, 6, 6, 6 }; + + char NewData2[20]; + + static char OldData2[sizeof(cmps2)/sizeof(cmps2[0])][20]; + + if (Patch) + { + NewData = 0x7fffffff; + + for (i=0;iMemcpy_Clean((unsigned int)buffer,realbuffer,count); +#endif + + for (i=0;i<(unsigned int)count;i++) { + unsigned char tmp; +#ifdef ISXEQ + tmp=realbuffer[i]; +#else + unsigned int b=(int) &buffer[i]; + OurDetours *detour = ourdetours; + while(detour) + { + if (detour->count && (b >= detour->addr) && + (b < detour->addr+detour->count) ) { + tmp = detour->array[b - detour->addr]; + break; + } + detour=detour->pNext; + } + if (!detour) tmp = buffer[i]; +#endif + x = (int)tmp ^ (eax & 0xff); + eax = ((int)eax >> 8) & 0xffffff; + x = extern_array0[x]; + eax ^= x; + } + +#ifdef ISXEQ + free(realbuffer); +#endif + return eax; +} + + +int __cdecl memcheck1(unsigned char *buffer, int count, struct mckey key) +{ + unsigned int i; + unsigned int ebx, eax, edx; + + if (!extern_array1) { + if (!EQADDR_ENCRYPTPAD1) { + //_asm int 3 + } else { + extern_array1 = (unsigned int *)EQADDR_ENCRYPTPAD1; + } + } +// push ebp +// mov ebp, esp +// push esi +// push edi +// or edi, 0FFFFFFFFh +// cmp [ebp+arg_8], 0 + if (key.x != 0) { +// mov esi, 0FFh +// mov ecx, 0FFFFFFh +// jz short loc_4C3978 +// xor eax, eax +// mov al, byte ptr [ebp+arg_8] +// xor edx, edx +// mov dl, byte ptr [ebp+arg_8+1] + edx = key.a[1]; +// not eax +// and eax, esi + eax = ~key.a[0] & 0xff; +// mov eax, encryptpad1[eax*4] + eax = extern_array1[eax]; +// xor eax, ecx + eax ^= 0xffffff; +// xor edx, eax +// and edx, esi + edx = (edx ^ eax) & 0xff; +// sar eax, 8 +// and eax, ecx + eax = ((int)eax >> 8) & 0xffffff; +// xor eax, encryptpad1[edx*4] + eax ^= extern_array1[edx]; +// xor edx, edx +// mov dl, byte ptr [ebp+arg_8+2] + edx = key.a[2]; +// xor edx, eax +// sar eax, 8 +// and edx, esi + edx = (edx ^ eax) & 0xff; +// and eax, ecx + eax = ((int)eax >> 8) & 0xffffff; +// xor eax, encryptpad1[edx*4] + eax ^= extern_array1[edx]; +// xor edx, edx +// mov dl, byte ptr [ebp+arg_8+3] + edx = key.a[3]; +// xor edx, eax +// sar eax, 8 +// and edx, esi + edx = (edx ^ eax) & 0xff; +// and eax, ecx + eax = ((int)eax >> 8) & 0xffffff; +// xor eax, encryptpad1[edx*4] + eax ^= extern_array1[edx]; +// mov edi, eax +// + } else { // key.x != 0 + eax = 0xffffffff; + } +//loc_4C3978: ; CODE XREF: new_memcheck1+16j +// mov edx, [ebp+arg_0] +// mov eax, [ebp+arg_4] +// add eax, edx +// cmp edx, eax +// jnb short loc_4C399F +// push ebx +// +//loc_4C3985: ; CODE XREF: new_memcheck1+8Fj +// xor ebx, ebx +// mov bl, [edx] +// xor ebx, edi +// sar edi, 8 +// and ebx, esi +// and edi, ecx +// xor edi, encryptpad1[ebx*4] +// inc edx +// cmp edx, eax +// jb short loc_4C3985 +// pop ebx +// +//loc_4C399F: ; CODE XREF: new_memcheck1+75j +// mov eax, edi +// pop edi +// not eax +// pop esi +// pop ebp +// retn +// + +#ifdef ISXEQ + unsigned char *realbuffer=(unsigned char *)malloc(count); + pExtension->Memcpy_Clean((unsigned int)buffer,realbuffer,count); +#endif + + for (i=0;i<(unsigned int)count;i++) { + unsigned char tmp; +#ifdef ISXEQ + tmp=realbuffer[i]; +#else + unsigned int b=(int) &buffer[i]; + OurDetours *detour = ourdetours; + while(detour) { + if (detour->count && (b >= detour->addr) && + (b < detour->addr+detour->count) ) { + tmp = detour->array[b - detour->addr]; + break; + } + detour=detour->pNext; + } + if (!detour) tmp = buffer[i]; +#endif + ebx = ((int)tmp ^ eax) & 0xff; + eax = ((int)eax >> 8) & 0xffffff; + eax ^= extern_array1[ebx]; + } +#ifdef ISXEQ + free(realbuffer); +#endif + return ~eax; +} + + + +int __cdecl memcheck2(unsigned char *buffer, int count, struct mckey key) +{ + unsigned int i; + unsigned int ebx, edx, eax; + + //DebugSpewAlways("memcheck2: 0x%x", buffer); + + if (!extern_array2) { + if (!EQADDR_ENCRYPTPAD2) { + //_asm int 3 + } else { + extern_array2 = (unsigned int *)EQADDR_ENCRYPTPAD2; + } + } +// push ebp +// mov ebp, esp +// push ecx +// xor eax, eax +// mov al, [ebp+arg_8] +// xor edx, edx +// mov dl, [ebp+arg_9] + edx = key.a[1]; +// push ebx +// push esi +// mov esi, 0FFh +// mov ecx, 0FFFFFFh +// not eax +// and eax, esi + eax = ~key.a[0] & 0xff; +// mov eax, encryptpad2[eax*4] + eax = extern_array2[eax]; +// xor eax, ecx + eax ^= 0xffffff; +// xor edx, eax + edx = (edx ^ eax) & 0xff; +// sar eax, 8 +// and edx, esi +// and eax, ecx + eax = ((int)eax >> 8) & 0xffffff; +// xor eax, encryptpad2[edx*4] + eax ^= extern_array2[edx]; +// xor edx, edx +// mov dl, [ebp+arg_A] + edx = key.a[2]; +// push edi +// xor edx, eax + edx = (edx ^ eax) & 0xff; +// sar eax, 8 +// and edx, esi +// and eax, ecx + eax = ((int)eax >> 8) & 0xffffff; +// xor eax, encryptpad2[edx*4] +// mov edx, eax + edx = eax ^ extern_array2[edx]; +// call null_sub_ret_0 + eax = 0; +// mov edi, [ebp+arg_0] +// xor ebx, ebx +// mov bl, [ebp+arg_B] + ebx = key.a[3]; +// mov [ebp+var_4], eax +// xor ebx, edx + ebx = (edx ^ ebx) & 0xff; +// sar edx, 8 +// and edx, ecx +// and ebx, esi + edx = ((int)edx >> 8) & 0xffffff; +// xor edx, encryptpad2[ebx*4] + edx ^= extern_array2[ebx]; +// xor edx, eax + edx ^= eax; +// mov eax, [ebp+arg_4] +// add eax, edi +// jmp short loc_4C5776 +//; --------------------------------------------------------------------------- +// +//loc_4C5761: ; CODE XREF: new_memcheck2+8Fj +// xor ebx, ebx +// mov bl, [edi] +// xor ebx, edx +// sar edx, 8 +// and ebx, esi +// and edx, ecx +// xor edx, encryptpad2[ebx*4] +// inc edi +// +//loc_4C5776: ; CODE XREF: new_memcheck2+76j +// cmp edi, eax +// jb short loc_4C5761 +// pop edi +// mov eax, edx +// not eax +// xor eax, [ebp+var_4] +// pop esi +// pop ebx +// leave +// retn + + +#ifdef ISXEQ + unsigned char *realbuffer=(unsigned char *)malloc(count); + pExtension->Memcpy_Clean((unsigned int)buffer,realbuffer,count); +#endif + + for (i=0;i<(unsigned int)count;i++) { + unsigned char tmp; + +#ifdef ISXEQ + tmp=realbuffer[i]; +#else + unsigned int b=(int) &buffer[i]; + OurDetours *detour = ourdetours; + while(detour) { + if (detour->count && (b >= detour->addr) && + (b < detour->addr+detour->count) ) { + tmp = detour->array[b - detour->addr]; + break; + } + detour=detour->pNext; + } + if (!detour) tmp = buffer[i]; +#endif + + ebx = ((int) tmp ^ edx) & 0xff; + edx = ((int)edx >> 8) & 0xffffff; + edx ^= extern_array2[ebx]; + } + eax = ~edx ^ 0; +#ifdef ISXEQ + free(realbuffer); +#endif + return eax; +} + + +//extern int extern_arrray[]; +//unsigned int *extern_array3 = (unsigned int *)0x5C0E98; + +// 004F4AB9: 55 push ebp +// 004F4ABA: 8B EC mov ebp,esp +// 004F4ABC: 56 push esi + +// bah - 83 /1 ib OR r/m16,imm8 r/m16 OR imm8 (sign-extended) +// sign extended!!!!!!!!!!!! + +// 004F4ABD: 83 C8 FF or eax,0FFh + +int __cdecl memcheck3(unsigned char *buffer, int count, struct mckey key) +{ + unsigned int eax, ebx, edx, i; + + if (!extern_array3) { + if (!EQADDR_ENCRYPTPAD3) { + //_asm int 3 + } else { + extern_array3 = (unsigned int *)EQADDR_ENCRYPTPAD3; + } + } +// push ebp +// mov ebp, esp +// push ecx +// xor eax, eax +// mov al, [ebp+arg_8] +// xor edx, edx +// mov dl, [ebp+arg_9] + edx = key.a[1]; +// push ebx +// push esi +// mov esi, 0FFh +// mov ecx, 0FFFFFFh +// not eax +// and eax, esi + eax = ~key.a[0] & 0xff; +// mov eax, encryptpad3[eax*4] + eax = extern_array3[eax]; +// xor eax, ecx + eax ^= 0xffffff; +// xor edx, eax +// sar eax, 8 +// and edx, esi + edx = (edx ^ eax) & 0xff; +// and eax, ecx + eax = ((int)eax>>8) & 0xffffff; +// xor eax, encryptpad3[edx*4] + eax ^= extern_array3[edx]; +// xor edx, edx +// mov dl, [ebp+arg_A] + edx = key.a[2]; +// push edi +// xor edx, eax + edx = (edx ^ eax) & 0xff; +// sar eax, 8 +// and edx, esi +// and eax, ecx + eax = ((int)eax>>8) & 0xffffff; +// xor eax, encryptpad3[edx*4] +// mov edx, eax + edx = eax ^ extern_array3[edx]; + +// call null_sub_ret_0 + eax = 0; +// mov edi, [ebp+arg_0] +// xor ebx, ebx +// mov bl, [ebp+arg_B] + ebx = key.a[3]; +// mov [ebp+var_4], eax +// xor ebx, edx +// sar edx, 8 +// and edx, ecx +// and ebx, esi + ebx = (ebx ^ edx) & 0xff; + edx = ((int)edx>>8) & 0xffffff; +// xor edx, encryptpad3[ebx*4] + edx ^= extern_array3[ebx]; +// xor edx, eax + edx ^= eax; +// mov eax, [ebp+arg_4] +// add eax, edi +// jmp short loc_4C5813 +//; --------------------------------------------------------------------------- +// +//loc_4C57FE: ; CODE XREF: new_memcheck3+8Fj +// xor ebx, ebx +// mov bl, [edi] +// xor ebx, edx +// sar edx, 8 +// and ebx, esi +// and edx, ecx +// xor edx, encryptpad3[ebx*4] +// inc edi +// + +#ifdef ISXEQ + unsigned char *realbuffer=(unsigned char *)malloc(count); + pExtension->Memcpy_Clean((unsigned int)buffer,realbuffer,count); +#endif + + for (i=0;i<(unsigned int)count;i++) { + unsigned char tmp; +#ifdef ISXEQ + tmp=realbuffer[i]; +#else + unsigned int b=(int) &buffer[i]; + OurDetours *detour = ourdetours; + while(detour) + { + if (detour->count && (b >= detour->addr) && + (b < detour->addr+detour->count) ) { + tmp = detour->array[b - detour->addr]; + break; + } + detour=detour->pNext; + } + if (!detour) tmp = buffer[i]; +#endif + + ebx = (tmp ^ edx) & 0xff; + edx = ((int)edx >> 8) & 0xffffff; + edx ^= extern_array3[ebx]; + } +//loc_4C5813: ; CODE XREF: new_memcheck3+76j +// cmp edi, eax +// jb short loc_4C57FE +// pop edi +// mov eax, edx +// not eax +// xor eax, [ebp+var_4] + eax = ~edx ^ 0; + +#ifdef ISXEQ + free(realbuffer); +#endif + return eax; +// pop esi +// pop ebx +// leave +// retn +} + +int __cdecl memcheck4(unsigned char *buffer, int count, struct mckey key) +{ + unsigned int eax, ebx, edx, i; + + if (!extern_array4) { + if (!EQADDR_ENCRYPTPAD4) { + //_asm int 3 + } else { + extern_array4 = (unsigned int *)EQADDR_ENCRYPTPAD4; + } + } + edx = key.a[1]; + eax = ~key.a[0] & 0xff; + eax = extern_array4[eax]; + eax ^= 0xffffff; + edx = (edx ^ eax) & 0xff; + eax = ((int)eax>>8) & 0xffffff; + eax ^= extern_array4[edx]; + edx = key.a[2]; + edx = (edx ^ eax) & 0xff; + eax = ((int)eax>>8) & 0xffffff; + edx = eax ^ extern_array4[edx]; + eax = 0; + ebx = key.a[3]; + ebx = (ebx ^ edx) & 0xff; + edx = ((int)edx>>8) & 0xffffff; + edx ^= extern_array4[ebx]; + edx ^= eax; + +#ifdef ISXEQ + unsigned char *realbuffer=(unsigned char *)malloc(count); + pExtension->Memcpy_Clean((unsigned int)buffer,realbuffer,count); +#endif + + for (i=0;i<(unsigned int)count;i++) { + unsigned char tmp; +#ifdef ISXEQ + tmp=realbuffer[i]; +#else + unsigned int b=(int) &buffer[i]; + OurDetours *detour = ourdetours; + while(detour) + { + if (detour->count && (b >= detour->addr) && + (b < detour->addr+detour->count) ) { + tmp = detour->array[b - detour->addr]; + break; + } + detour=detour->pNext; + } + if (!detour) tmp = buffer[i]; +#endif + + ebx = (tmp ^ edx) & 0xff; + edx = ((int)edx >> 8) & 0xffffff; + edx ^= extern_array4[ebx]; + } + eax = ~edx ^ 0; + +#ifdef ISXEQ + free(realbuffer); +#endif + return eax; +} + +VOID __cdecl CrashDetected_Trampoline(); +VOID __cdecl CrashDetected_Detour() +{ + MessageBox(0,"Edge is blocking the 'send Sony crash info?' box for your safety and privacy. Hooray!","EverQuest Crash Detected",MB_OK); +} +DETOUR_TRAMPOLINE_EMPTY(VOID CrashDetected_Trampoline()); + +DETOUR_TRAMPOLINE_EMPTY(int LoadFrontEnd_Trampoline()); +#ifndef TESTMEM +int LoadFrontEnd_Detour() +{ + gGameState=GetGameState(); + return LoadFrontEnd_Trampoline(); +} +#endif +void InitializeMQ2Detours() +{ +#ifndef ISXEQ + InitializeCriticalSection(&gDetourCS); + HookMemChecker(TRUE); +#endif + EzDetour(CrashDetected,CrashDetected_Detour,CrashDetected_Trampoline); +#ifndef TESTMEM + EzDetour(__LoadFrontEnd, LoadFrontEnd_Detour, LoadFrontEnd_Trampoline); +#endif +} + +void ShutdownMQ2Detours() +{ + RemoveDetour(CrashDetected); + RemoveDetour(__LoadFrontEnd); +#ifndef ISXEQ + HookMemChecker(FALSE); + RemoveOurDetours(); + DeleteCriticalSection(&gDetourCS); +#endif +} + + +#pragma optimize( "", off ) + +void emotify(void) +{ + char buffer[EB_SIZE]; + emotify2(buffer); +} +void emotify2(char *A) +{ + int i; + for (i=0;i gMacroSubLookupMap; +PEVENTQUEUE gEventQueue = NULL; +PMACROBLOCK gEventFunc[NUM_EVENTS] = {NULL}; +#endif +UCHAR gLastFind = 0; +DOUBLE gZFilter=10000.0f; +DOUBLE gFaceAngle=10000.0f; +DOUBLE gLookAngle=10000.0f; +CHAR gszEQPath[MAX_STRING] = {0}; +CHAR gszMacroPath[MAX_STRING] = {0}; +CHAR gszLogPath[MAX_STRING] = {0}; +CHAR gszINIPath[MAX_STRING] = {0}; +CHAR gszINIFilename[MAX_STRING] = {0}; +CHAR gszItemDB[MAX_STRING] = {0}; +CHAR gszMacroName[MAX_STRING] = {0}; +CHAR szLastCommand[MAX_STRING] = {0}; + +CHAR gszLastNormalError[MAX_STRING] = {0}; +CHAR gszLastSyntaxError[MAX_STRING] = {0}; +CHAR gszLastMQ2DataError[MAX_STRING] = {0}; + +PSPAWNINFO pNamingSpawn=0; +CHAR gszSpawnPlayerName[7][MAX_STRING]={ +"",//0 +"${If[${NamingSpawn.Mark},\"${NamingSpawn.Mark} - \",]}${If[${NamingSpawn.Trader},\"Trader \",]}${If[${NamingSpawn.Invis},(${NamingSpawn.DisplayName}),${NamingSpawn.DisplayName}]}${If[${NamingSpawn.AFK},\" AFK\",]}${If[${NamingSpawn.Linkdead},\" LD\",]}${If[${NamingSpawn.LFG},\" LFG\",]}${If[${NamingSpawn.GroupLeader},\" LDR\",]}",//1 +"${If[${NamingSpawn.Mark},\"${NamingSpawn.Mark} - \",]}${If[${NamingSpawn.Trader},\"Trader \",]}${If[${NamingSpawn.Invis},(${NamingSpawn.DisplayName}),${NamingSpawn.DisplayName}]}${If[${NamingSpawn.Surname.Length},\" ${NamingSpawn.Surname}\",]}${If[${NamingSpawn.AFK},\" AFK\",]}${If[${NamingSpawn.Linkdead},\" LD\",]}${If[${NamingSpawn.LFG},\" LFG\",]}${If[${NamingSpawn.GroupLeader},\" LDR\",]}",//2 +"${If[${NamingSpawn.Mark},\"${NamingSpawn.Mark} - \",]}${If[${NamingSpawn.Trader},\"Trader \",]}${If[${NamingSpawn.Invis},(${NamingSpawn.DisplayName}),${NamingSpawn.DisplayName}]}${If[${NamingSpawn.Surname.Length},\" ${NamingSpawn.Surname}\",]}${If[${NamingSpawn.AFK},\" AFK\",]}${If[${NamingSpawn.Linkdead},\" LD\",]}${If[${NamingSpawn.LFG},\" LFG\",]}${If[${NamingSpawn.GroupLeader},\" LDR\",]}${If[${NamingSpawn.Guild.Length},\n<${If[${NamingSpawn.GuildStatus.NotEqual[member]},\"${NamingSpawn.GuildStatus} of \",]}${NamingSpawn.Guild}>,]}",//3 +"${If[${NamingSpawn.Mark},\"${NamingSpawn.Mark} - \",]}${If[${NamingSpawn.Trader},\"Trader \",]}${If[${NamingSpawn.AARank},\"${NamingSpawn.AATitle} \",]}${If[${NamingSpawn.Invis},(${NamingSpawn.DisplayName}),${NamingSpawn.DisplayName}]}${If[${NamingSpawn.Surname.Length},\" ${NamingSpawn.Surname}\",]}${If[${NamingSpawn.Suffix.Length},\" ${NamingSpawn.Suffix}\",]}${If[${NamingSpawn.AFK},\" AFK\",]}${If[${NamingSpawn.Linkdead},\" LD\",]}${If[${NamingSpawn.LFG},\" LFG\",]}${If[${NamingSpawn.GroupLeader},\" LDR\",]}${If[${NamingSpawn.Guild.Length},\n<${If[${NamingSpawn.GuildStatus.NotEqual[member]},\"${NamingSpawn.GuildStatus} of \",]}${NamingSpawn.Guild}>,]}",//4 +"${If[${NamingSpawn.Mark},\"${NamingSpawn.Mark} - \",]}${If[${NamingSpawn.Trader},\"Trader \",]}${If[${NamingSpawn.AARank},\"${NamingSpawn.AATitle} \",]}${If[${NamingSpawn.Invis},(${NamingSpawn.DisplayName}),${NamingSpawn.DisplayName}]}${If[${NamingSpawn.Suffix.Length},\" ${NamingSpawn.Suffix}\",]}${If[${NamingSpawn.AFK},\" AFK\",]}${If[${NamingSpawn.Linkdead},\" LD\",]}${If[${NamingSpawn.LFG},\" LFG\",]}${If[${NamingSpawn.GroupLeader},\" LDR\",]}",//5 +"${If[${NamingSpawn.Mark},\"${NamingSpawn.Mark} - \",]}${If[${NamingSpawn.Trader},\"Trader \",]}${If[${NamingSpawn.AARank},\"${NamingSpawn.AATitle} \",]}${If[${NamingSpawn.Invis},(${NamingSpawn.DisplayName}),${NamingSpawn.DisplayName}]}${If[${NamingSpawn.Surname.Length},\" ${NamingSpawn.Surname}\",]}${If[${NamingSpawn.Suffix.Length},\" ${NamingSpawn.Suffix}\",]}${If[${NamingSpawn.AFK},\" AFK\",]}${If[${NamingSpawn.Linkdead},\" LD\",]}${If[${NamingSpawn.LFG},\" LFG\",]}${If[${NamingSpawn.GroupLeader},\" LDR\",]}",//6 +}; +CHAR gszSpawnNPCName[MAX_STRING]="${If[${NamingSpawn.Mark},\"${NamingSpawn.Mark} - \",]}${If[${NamingSpawn.Assist},\">> \",]}${NamingSpawn.DisplayName}${If[${NamingSpawn.Assist},\" - ${NamingSpawn.PctHPs}%<<\",]}${If[${NamingSpawn.Surname.Length},\n(${NamingSpawn.Surname}),]}"; +CHAR gszSpawnPetName[MAX_STRING]="${If[${NamingSpawn.Mark},\"${NamingSpawn.Mark} - \",]}${If[${NamingSpawn.Assist},\">> \",]}${NamingSpawn.DisplayName}${If[${NamingSpawn.Assist},\" - ${NamingSpawn.PctHPs}%<<\",]}${If[${NamingSpawn.Master.Type.Equal[PC]},\n(${NamingSpawn.Master}),]}"; +CHAR gszSpawnCorpseName[MAX_STRING]="${NamingSpawn.DisplayName}'s corpse"; + +DWORD DrawHUDParams[4]={0,0,0,0}; + +#ifndef ISXEQ +Blech *pMQ2Blech=0; +CHAR EventMsg[MAX_STRING]={0}; +#ifdef USEBLECHEVENTS +Blech *pEventBlech = 0; +#endif +PEVENTLIST pEventList = NULL; +#endif + +DWORD gEventChat = 0; +DWORD gRunning = 0; +BOOL gbMoving = FALSE; +DWORD gMaxTurbo = 10; +BOOL gReturn = TRUE; +BOOL gInClick = FALSE; +BOOL gbInZone = FALSE; +BOOL gZoning = FALSE; +BOOL WereWeZoning = TRUE; +BOOL gbInDInput = FALSE; +BOOL gbInChat = FALSE; +BOOL gbInDState = FALSE; +BOOL gbInDAcquire = FALSE; +BOOL gFilterSkillsAll = FALSE; +BOOL gFilterSkillsIncrease = FALSE; +BOOL gFilterTarget = FALSE; +BOOL gFilterDebug = FALSE; +BOOL gFilterMoney = FALSE; +BOOL gFilterFood = FALSE; +BOOL gFilterMacro = FALSE; +BOOL gFilterMQ = FALSE; +BOOL gFilterEncumber = FALSE; +BOOL gFilterCustom = TRUE; +BOOL gSpewToFile = FALSE; +BOOL gbDoAutoRun = FALSE; +BOOL gMQPauseOnChat = FALSE; +BOOL gKeepKeys = FALSE; +BOOL gLClickedObject = FALSE; +SWHOFILTER gFilterSWho = {0}; +EQLIB_VAR BOOL gFilterMQ2DataErrors=FALSE; + +DOUBLE DegToRad = 57.295779513082320876846364344191; +DOUBLE PI = 3.1415926535; + +//PKEYPRESS gKeyStack = NULL; +PMQTIMER gTimer = NULL; +LONG gDelay = 0; +CHAR gDelayCondition[MAX_STRING]={0}; +BOOL bAllowCommandParse=TRUE; +LONG gDelayZoning = 0; +PALERTLIST gpAlertList = NULL; +BOOL gMacroPause = FALSE; +SPAWNINFO EnviroTarget = {0}; +PGROUNDITEM pGroundTarget = NULL; +SPAWNINFO DoorEnviroTarget = {0}; +PDOOR pDoorTarget = NULL; +PITEMDB gItemDB = NULL; +BOOL bRunNextCommand = FALSE; +BOOL gTurbo = FALSE; +PDEFINE pDefines = NULL; +CHAR gLastFindSlot[MAX_STRING]={0}; +PFILTER gpFilters = NULL; + +BOOL g_bInDXMouse = FALSE; +PMOUSESPOOF gMouseData = NULL; +BOOL bDetMouse = TRUE; + +// EQ Functions Initialization +fEQCommand cmdHelp = NULL; +fEQCommand cmdWho = NULL; +fEQCommand cmdWhoTarget = NULL; +fEQCommand cmdLocation = NULL; +fEQCommand cmdFace = NULL; +fEQCommand cmdTarget = NULL; +fEQCommand cmdCharInfo = NULL; +fEQCommand cmdFilter = NULL; +fEQCommand cmdDoAbility = NULL; +fEQCommand cmdCast = NULL; + +DWORD gnNormalEQMappableCommands; +PCHAR szEQMappableCommands[nEQMappableCommands]; +map ItemSlotMap; + +CHAR DataTypeTemp[MAX_STRING]={0}; + +map SpawnByName; +MQRANK EQP_DistArray[3000]; +DWORD gSpawnCount=0; + +// Motd and Pulse's mouse variables +BOOL gMouseClickInProgress[8] = {FALSE}; +// End of mouse variables + +// Arrays (Note: See also EQLib_Utilities.cpp) +DIKEYID gDiKeyID[] = { +#include "dikeys.h" + {NULL,0} +}; + +PCHAR gDiKeyName[256]; + +PCHAR szHeading[] = { + "south", //0 + "south by southeast", //1 + "southeast", //2 + "east by southeast", //3 + "east", //4 + "east by northeast", //5 + "northeast", //6 + "north by northeast", //7 + "north", //8 + "north by northwest", //9 + "northwest", //10 + "west by northwest", //11 + "west", //12 + "west by southwest", //13 + "southwest", //14 + "south by southwest" //15 +}; + +PCHAR szHeadingShort[] = { + "S", //0 + "SSE", //1 + "SE", //2 + "ESE", //3 + "E", //4 + "ENE", //5 + "NE", //6 + "NNE", //7 + "N", //8 + "NNW", //9 + "NW", //10 + "WNW", //11 + "W", //12 + "WSW", //13 + "SW", //14 + "SSW" //15 +}; + +PCHAR szHeadingNormal[] = { + "north", //0 + "north by northeast", //1 + "northeast", //2 + "east by northeast", //3 + "east", //4 + "east by southeast", //5 + "southeast", //6 + "south by southeast", //7 + "south", //8 + "south by southwest", //9 + "southwest", //10 + "west by southwest", //11 + "west", //12 + "west by northwest", //13 + "northwest", //14 + "north by northwest" //15 +}; + +PCHAR szHeadingNormalShort[] = { + "N", //0 + "NNE", //1 + "NE", //2 + "ENE", //3 + "E", //4 + "ESE", //5 + "SE", //6 + "SSE", //7 + "S", //8 + "SSW", //9 + "SW", //10 + "WSW", //11 + "W", //12 + "WNW", //13 + "NW", //14 + "NNW" //15 +}; + + +PCHAR szSize[] = { + "Tiny", + "Small", + "Normal", + "Large", + "Giant", + "Huge", //? + "Unknown" //? +}; + +PCHAR szSpawnType[] = { + "player", + "NPC", + "corpse", + "any", + "pet", + NULL // SuperWhoTarget +}; + +PCHAR szGuildStatus[] = { + "", + "Leader", + "Senior Officer", + "Officer", + "Active Member", + "Member", + "Junior Member", + "Initiate", + "Recruit", + NULL +}; + +PCHAR szGender[] = { + "male", + "female", + "neuter", + "unknown" +}; + +PCHAR szDeityTeam[] = { + "none", //0 + "good", //1 + "neutral", //2 + "evil" //3 +}; + +PCHAR szLights[] = { + "NONE", // 0 - No light + "CDL", // 1 - Candle + "TR", // 2 - Torch + "TGS", // 3 - Tiny Glowing Skull + "SL", // 4 - Small Lantern + "SoM", // 5 - Stein of Moggok + "LL", // 6 - Large Lantern + "FL", // 7 - Flameless lantern, Halo of Light + "GOS", // 8 - Globe of stars + "LG", // 9 - Light Globe + "LS", // 10 - Lightstone, Burnt-out lightstone, wispstone + "GLS", // 11 - Greater lightstone + "FBE", // 12 - Fire Beatle Eye, Firefly Globe + "CL" // 13 - Coldlight +}; + +BYTE LightBrightness[] = { + 0, //0 + 1, //1 + 2, //2 + 3, //3 + 6, //4 + 7, //5 + 8, //6 + 9, //7 + 10, //8 + 0, //9 + 0, //10 + 0, //11 + 4, //12 + 5 //13 +}; + +PCHAR szSkills[] = { + #include "skills.h" + NULL +}; + +PCHAR szInnates[] = { + "Awareness",//c4c + "Bash Door",//c50 + "Breathe Fire",//c54 + "Harmony",//c58 + "Harm Touch",//c5c + "Infravision",//c60 + "Lay Hands",//c64 + "Lore",//c68 + "No Bash",//c6c + "Regeneration",//c70 + "Slam",//c74 + "Surprise",//c78 + "Ultravision",//c7c + "Inspect",//c80 + "Open",//c84 + NULL +}; + +PCHAR szCombineTypes[] = { + #include "combines.h" + NULL +}; + +PCHAR szItemTypes[] = { + #include "itemtypes.h" + NULL +}; + +PCHAR szZoneExpansionName[] = { + "Original EQ", //0 + "Kunark", //1 + "Velious", //2 + "Luclin", //3 + "Planes of Power", //4 + "Legacy of Ykesha", //5 + "Lost Dungeons of Norrath", //6 + "Gates of Discord", //7 + "Omens of War", //8 +}; + +#include "grounds.h" +PCHAR szItemName[] = { + #include "weapons.h" + NULL +}; + +PCHAR szDmgBonusType[] = { + "None", + "Magic", + "Fire", + "Cold", + "Poison", + "Disease" +}; + +PCHAR szBodyType[] = { + "Object",//0 (catapults, tents, practice dummies, etc) + "Humanoid", //1 + "Lycanthrope", //2 + "Undead", //3 + "Giant", //4 + "Construct", //5 (includes confused mutations in ldon, chests as of 9-19-2006) + "Extraplanar", //6 + "Magical", //7 + "Undead Pet", //8 + "Bane Giant", //9 + "Dain", //10 + "Untargetable", //11 + "Vampyre", //12 + "Atenha Ra", //13 + "Greater Akheva",//14 + "Khati Sha", //15 + "Seru", //16 + "*UNKNOWN BODYTYPE 17", //17 + "Draz Nurakk", //18 + "Zek", //19 + "Luggald", //20 + "Animal", //21 + "Insect", //22 + "Monster", //23 + "Elemental", //24 + "Plant", //25 + "Dragon", //26 + "Elemental", //27 + "Summoned Creature",//28 + "Dragon",//29 + "Bane Dragon",//30 + "Familiar",//31 + "Proc Pet",//32 + "Chest",//33 (5 as of 9-19-2006) + "Muramite",//34 + "*UNKNOWN BODYTYPE 35", + "*UNKNOWN BODYTYPE 36", + "*UNKNOWN BODYTYPE 37", + "*UNKNOWN BODYTYPE 38", + "*UNKNOWN BODYTYPE 39", + "*UNKNOWN BODYTYPE 40", + "*UNKNOWN BODYTYPE 41", + "*UNKNOWN BODYTYPE 42", + "*UNKNOWN BODYTYPE 43", + "*UNKNOWN BODYTYPE 44", + "*UNKNOWN BODYTYPE 45", + "*UNKNOWN BODYTYPE 46", + "*UNKNOWN BODYTYPE 47", + "*UNKNOWN BODYTYPE 48", + "*UNKNOWN BODYTYPE 49", + "*UNKNOWN BODYTYPE 50", + "*UNKNOWN BODYTYPE 51", + "*UNKNOWN BODYTYPE 52", + "*UNKNOWN BODYTYPE 53", + "*UNKNOWN BODYTYPE 54", + "*UNKNOWN BODYTYPE 55", + "*UNKNOWN BODYTYPE 56", + "*UNKNOWN BODYTYPE 57", + "*UNKNOWN BODYTYPE 58", + "*UNKNOWN BODYTYPE 59", + "*UNKNOWN BODYTYPE 60", + "*UNKNOWN BODYTYPE 61", + "*UNKNOWN BODYTYPE 62", + "*UNKNOWN BODYTYPE 63", + "*UNKNOWN BODYTYPE 64", + "Trap", + "Timer", + "Trigger", + "*UNKNOWN BODYTYPE 68", + "*UNKNOWN BODYTYPE 69", + "*UNKNOWN BODYTYPE 70", + "*UNKNOWN BODYTYPE 71", + "*UNKNOWN BODYTYPE 72", + "*UNKNOWN BODYTYPE 73", + "*UNKNOWN BODYTYPE 74", + "*UNKNOWN BODYTYPE 75", + "*UNKNOWN BODYTYPE 76", + "*UNKNOWN BODYTYPE 77", + "*UNKNOWN BODYTYPE 78", + "*UNKNOWN BODYTYPE 79", + "*UNKNOWN BODYTYPE 80", + "*UNKNOWN BODYTYPE 81", + "*UNKNOWN BODYTYPE 82", + "*UNKNOWN BODYTYPE 83", + "*UNKNOWN BODYTYPE 84", + "*UNKNOWN BODYTYPE 85", + "*UNKNOWN BODYTYPE 86", + "*UNKNOWN BODYTYPE 87", + "*UNKNOWN BODYTYPE 88", + "*UNKNOWN BODYTYPE 89", + "*UNKNOWN BODYTYPE 90", + "*UNKNOWN BODYTYPE 91", + "*UNKNOWN BODYTYPE 92", + "*UNKNOWN BODYTYPE 93", + "*UNKNOWN BODYTYPE 94", + "*UNKNOWN BODYTYPE 95", + "*UNKNOWN BODYTYPE 96", + "*UNKNOWN BODYTYPE 97", + "*UNKNOWN BODYTYPE 98", + "*UNKNOWN BODYTYPE 99", + "Untargetable", + "Trap", + "Timer", + "Trigger", +}; + +PCHAR szAugRestrictions[] = { + "None", + "Armor Only", + "Weapons Only", + "1H Weapons Only", + "2H Weapons Only", + "1H Slash Only", + "1H Blunt Only", + "Piercing Only", + "Hand to Hand Only", + "2H Slash Only", + "2H Blunt Only", + "2H Pierce Only", + "Bows Only", + "Shields Only" +}; +PCHAR szItemSlot[] = { + "charm", // 0 + "leftear", // 1 + "head", + "face", + "rightear", + "neck", + "shoulder", + "arms", + "back", + "leftwrist", + "rightwrist", // 10 + "ranged", + "hands", + "mainhand", + "offhand", + "leftfinger", + "rightfinger", + "chest", + "legs", + "feet", + "waist", // 20 + "powersource", + "ammo", + "pack1", + "pack2", + "pack3", + "pack4", + "pack5", + "pack6", + "pack7", + "pack8", // 30 + "pack9", + "pack10", + "cursor", + NULL // 31 +}; + +PCHAR szExpansions[] = { + "The Ruins of Kunark", + "The Scars of Velious", + "The Shadows of Luclin", + "The Planes of Power", + "The Legacy of Ykesha", + "Lost Dungeons of Norrath", + "Gates of Discord", + "Omens of War", + "Dragons of Norrath", + "Depths of Darkhollow", + "Prophecy of Ro", + "The Serpent's Spine", + "The Buried Sea", + "Secrets of Faydwer", + "Seeds of Destruction", + "Underfoot", + "House of Thule", + "Veil of Alaris", + "Rain of Fear", + NULL +}; + +BOOL bAllErrorsFatal=FALSE; +BOOL bAllErrorsDumpStack=FALSE; +#ifndef DoWarp +BOOL bLaxColor=TRUE; +#else +BOOL bLaxColor=FALSE; +#endif +BOOL bAllErrorsLog=FALSE; +BOOL gbHUDUnderUI=1; +BOOL gbAlwaysDrawMQHUD=0; +BOOL gbMQ2LoadingMsg=TRUE; +BOOL gbExactSearchCleanNames=FALSE; + +DWORD nColorAdjective=0; +DWORD nColorAdjectiveYou=0; +DWORD nColorExpletive=0; +DWORD nColorSyntaxError=0; +DWORD nColorMacroError=0; +DWORD nColorMQ2DataError=0; +DWORD nColorFatalError=0; + +PCHAR szColorAdjective[]= +{ + "", + "GOD DAMN ", + "FUCKING ", + "MOTHER FUCKING ", + NULL +}; + +PCHAR szColorAdjectiveYou[]= +{ + "", + " FUCKER", + " MOTHER FUCKER", + " ASSHOLE", + " FUCKTARD", + " FUCKING RETARDED MONKEY", + " GOD DAMN SHORT BUS PASSENGER", + " ASSMONKEY", + " PIGFUCKER", + " PEEN", + " FUCKING IDIOT", + " STUPID FUCKER", + " DUMBASS", + " FUCKING DUMBASS", + " STUPID FUCK", + NULL +}; + +PCHAR szColorExpletive[]= +{ + "", + "CHRIST ", + "JESUS FUCK ", + "GOD ", + "JESUS FUCKING CHRIST ", + "FUCKING CHRIST ", + "GKFJDGJKFDGJKDF ", + NULL +}; + +PCHAR szColorSyntaxError[]= +{ + "", + "%edont you know how to use a simple %acommand%y", + NULL +}; + +PCHAR szColorMacroError[]= +{ + "", + "%ei'm pretty sure you're on %acrack%y" + "%egood job%y, cant you do anything %aright%y", + "%ewhatever you're %asmoking, pass it %aalong%y", + "%e%aRTFM%y", + "%e%aRTFM%y, until then fuck off%y", + "%eget a %abrain%y", + NULL +}; + +PCHAR szColorFatalError[]= +{ + "", + "%eyou fucking broke it%y", + "%egood job%y. what's next? your head on a %astick thats %awhat%y", + NULL +}; + +PCHAR szColorMQ2DataError[]= +{ + "", + "%ewhy dont you %aread the %areference%y", + "%eget a %aclue%y", + "%ewhatever you're %asmoking, pass it %aalong%y", + "%e%aread the %areference%y", + "%e%aread the %areference%y, until then fuck off%y", + NULL +}; + +PMQPLUGIN pPlugins=0; +PMQXMLFILE pXMLFiles=0; +DWORD ManaGained=0; +DWORD HealthGained=0; +DWORD EnduranceGained=0; +PALIAS pAliases=0; +PSUB pSubs=0; +PMQCOMMAND pCommands=0; + + + +// Offset Initialization + +DWORD EQADDR_HWND = 0; +DWORD EQADDR_MEMCHECK0=0; +DWORD EQADDR_MEMCHECK1=0; +DWORD EQADDR_MEMCHECK2=0; +DWORD EQADDR_MEMCHECK3=0; +DWORD EQADDR_MEMCHECK4=0; +PCHAR EQADDR_SERVERHOST=0; +PCHAR EQADDR_SERVERNAME=0; +DWORD EQADDR_CONVERTITEMTAGS=0; +PCMDLIST EQADDR_CMDLIST=0; + +PBYTE EQADDR_ATTACK=0; +PBYTE EQADDR_NOTINCHATMODE=0; +PBYTE EQADDR_RUNWALKSTATE=0; +PCHAR EQADDR_LASTTELL=0; +PCHAR gpbRangedAttackReady=0; +PCHAR gpbShowNetStatus=0; +PCHAR gpbAltTimerReady=0; +DWORD *g_ppDrawHandler=0; +DWORD *gpShowNames=0; +DWORD *gpPCNames=0; +PBYTE pTributeActive=0; +PBYTE gpAutoFire=0; +PBYTE gpShiftKeyDown=0; // addr+1=ctrl, addr+2=alt +DWORD *gpMouseEventTime=0; + +PVOID EQADDR_GWORLD=0; +PDWORD EQADDR_DOABILITYLIST=0; + +PMAPLABEL *ppCurrentMapLabel=0; +PCHAR *EQMappableCommandList=0; + +PBYTE EQADDR_ENCRYPTPAD0=0; +PBYTE EQADDR_ENCRYPTPAD1=0; +PBYTE EQADDR_ENCRYPTPAD2=0; +PBYTE EQADDR_ENCRYPTPAD3=0; +PBYTE EQADDR_ENCRYPTPAD4=0; + +DWORD *pScreenX=0; +DWORD *pScreenY=0; +DWORD *pScreenXMax=0; +DWORD *pScreenYMax=0; +DWORD *pScreenMode=0; +CHAR *pMouseLook=0; +PMOUSEINFO EQADDR_MOUSE=0; +PMOUSECLICK EQADDR_MOUSECLICK=0; + +#ifndef ISXEQ +DWORD EQADDR_DIMAIN=0; +IDirectInputDevice8A **EQADDR_DIKEYBOARD=0; +IDirectInputDevice8A **EQADDR_DIMOUSE=0; +#endif + +PGUILDS pGuildList = 0; +PEQSOCIAL pSocialList = 0; +PBYTE pgHotkeyPage = 0; +PINT pgCurrentSocial = 0; + +fEQNewUIINI NewUIINI = 0; +fEQProcGameEvts ProcessGameEvents = 0; +fEQExecuteCmd ExecuteCmd = 0; +fEQGetMelee get_melee_range = GetMeleeRange; +fGetLabelFromEQ GetLabelFromEQ = 0; + +StringTable **ppStringTable=0; +CDBStr **ppCDBStr = 0; +EQMisc *pEQMisc=0; +CSkillMgr **ppCSkillMgr=0; +CGuild *pGuild=0; +_SKILLMGR **ppSkillMgr=0; + +CEverQuest **ppEverQuest=0; +CDisplay **ppDisplay=0; +EQ_PC **ppPCData=0; +EQ_Character **ppCharData=0; +EQPlayer **ppCharSpawn=0; +EQPlayer **ppActiveMerchant=0; +EQPlayerManager **ppSpawnManager=0; +EQPlayer **ppLocalPlayer=0; +EQPlayer **ppControlledPlayer=0; +EQWorldData **ppWorldData=0; +SpellManager **ppSpellMgr=0; +EQPlayer **ppTarget=0; +EqSwitchManager **ppSwitchMgr=0; +EQItemList **ppItemList=0; +SPELLFAVORITE *pSpellSets=0; +EQZoneInfo *pZoneInfo=0; +AltAdvManager** ppAltAdvManager=0; +CONNECTION_T **ppConnection=0; +AURAMGR **ppAuraMgr=0; +EQCHATMGR **ppEQChatMgr=0; + +EQPlayer **ppTradeTarget=0; +EQPlayer **ppActiveBanker=0; +EQPlayer **ppActiveGMaster=0; +EQPlayer **ppActiveCorpse=0; + +/* WINDOW INSTANCES */ + +CContextMenuManager **ppContextMenuManager=0; +CCursorAttachment **ppCursorAttachment=0; +CSocialEditWnd **ppSocialEditWnd=0; +CContainerMgr **ppContainerMgr=0; +CChatManager **ppChatManager=0; +CFacePick **ppFacePick=0; +CInvSlotMgr **ppInvSlotMgr=0; +CNoteWnd **ppNoteWnd=0; +CTipWnd **ppTipWndOFDAY=0; +CTipWnd **ppTipWndCONTEXT=0; +CBookWnd **ppBookWnd=0; +CFriendsWnd **ppFriendsWnd=0; +CMusicPlayerWnd **ppMusicPlayerWnd=0; +CAlarmWnd **ppAlarmWnd=0; +CLoadskinWnd **ppLoadskinWnd=0; +CPetInfoWnd **ppPetInfoWnd=0; +CTrainWnd **ppTrainWnd=0; +CSkillsWnd **ppSkillsWnd=0; +CSkillsSelectWnd **ppSkillsSelectWnd=0; +CAAWnd **ppAAWnd=0; +CGroupWnd **ppGroupWnd=0; +CGroupSearchWnd **ppGroupSearchWnd=0; +CGroupSearchFiltersWnd **ppGroupSearchFiltersWnd=0; +CRaidWnd **ppRaidWnd=0; +CRaidOptionsWnd **ppRaidOptionsWnd=0; +CBreathWnd **ppBreathWnd=0; +CMapToolbarWnd **ppMapToolbarWnd=0; +CMapViewWnd **ppMapViewWnd=0; +CEditLabelWnd **ppEditLabelWnd=0; +COptionsWnd **ppOptionsWnd=0; +CBuffWindow **ppBuffWindowSHORT=0; +CBuffWindow **ppBuffWindowNORMAL=0; +CTargetWnd **ppTargetWnd=0; +CColorPickerWnd **ppColorPickerWnd=0; +CHotButtonWnd **ppHotButtonWnd=0; +CPlayerWnd **ppPlayerWnd=0; +CCastingWnd **ppCastingWnd=0; +CCastSpellWnd **ppCastSpellWnd=0; +CSpellBookWnd **ppSpellBookWnd=0; +CInventoryWnd **ppInventoryWnd=0; +CBankWnd **ppBankWnd=0; +CQuantityWnd **ppQuantityWnd=0; +CTextEntryWnd **ppTextEntryWnd=0; +CFileSelectionWnd **ppFileSelectionWnd=0; +CLootWnd **ppLootWnd=0; +CActionsWnd **ppActionsWnd=0; +CCombatAbilityWnd **ppCombatAbilityWnd=0; +CMerchantWnd **ppMerchantWnd=0; +CTradeWnd **ppTradeWnd=0; +CBazaarWnd **ppBazaarWnd=0; +CBazaarSearchWnd **ppBazaarSearchWnd=0; +CGiveWnd **ppGiveWnd=0; +CSelectorWnd **ppSelectorWnd=0; +CTrackingWnd **ppTrackingWnd=0; +CInspectWnd **ppInspectWnd=0; +CFeedbackWnd **ppFeedbackWnd=0; +CBugReportWnd **ppBugReportWnd=0; +CVideoModesWnd **ppVideoModesWnd=0; +CCompassWnd **ppCompassWnd=0; +CPlayerNotesWnd **ppPlayerNotesWnd=0; +CGemsGameWnd **ppGemsGameWnd=0; +CStoryWnd **ppStoryWnd=0; +CBodyTintWnd **ppBodyTintWnd=0; +CGuildMgmtWnd **ppGuildMgmtWnd=0; +CJournalTextWnd **ppJournalTextWnd=0; +CJournalCatWnd **ppJournalCatWnd=0; +CPetitionQWnd **ppPetitionQWnd=0; +CSoulmarkWnd **ppSoulmarkWnd=0; +CTimeLeftWnd **ppTimeLeftWnd=0; +CTextOverlay **ppTextOverlay=0; +CPotionBeltWnd **ppPotionBeltWnd=0; + +CSidlManager **ppSidlMgr=0; +CXWndManager **ppWndMgr=0; +KeypressHandler **ppKeypressHandler=0; +PEQRAID pRaid=0; +DZMEMBER **ppDZMember=0; +DZTIMERINFO **ppDZTimerInfo=0; +TASKMEMBER **ppTaskMember=0; +DYNAMICZONE *pDynamicZone=0; +MERCENARYINFO **ppMercInfo=0; +AGGROINFO **ppAggroInfo=0; + +#define INITIALIZE_EQGAME_OFFSET(var) DWORD var = (((DWORD)var##_x - 0x400000) + baseAddress) + +INITIALIZE_EQGAME_OFFSET(__ActualVersionDate); +INITIALIZE_EQGAME_OFFSET(__ActualVersionTime); +INITIALIZE_EQGAME_OFFSET(__MemChecker0); +INITIALIZE_EQGAME_OFFSET(__MemChecker1); +INITIALIZE_EQGAME_OFFSET(__MemChecker2); +INITIALIZE_EQGAME_OFFSET(__MemChecker3); +INITIALIZE_EQGAME_OFFSET(__MemChecker4); +INITIALIZE_EQGAME_OFFSET(__EncryptPad0); +INITIALIZE_EQGAME_OFFSET(__EncryptPad1); +INITIALIZE_EQGAME_OFFSET(__EncryptPad2); +INITIALIZE_EQGAME_OFFSET(__EncryptPad3); +INITIALIZE_EQGAME_OFFSET(__EncryptPad4); +INITIALIZE_EQGAME_OFFSET(__AC1); +INITIALIZE_EQGAME_OFFSET(__AC2); +INITIALIZE_EQGAME_OFFSET(__AC3); +INITIALIZE_EQGAME_OFFSET(__AC4); +INITIALIZE_EQGAME_OFFSET(__AC5); +INITIALIZE_EQGAME_OFFSET(__AC6); +INITIALIZE_EQGAME_OFFSET(__AC7); +INITIALIZE_EQGAME_OFFSET(DI8__Main); +INITIALIZE_EQGAME_OFFSET(DI8__Keyboard); +INITIALIZE_EQGAME_OFFSET(DI8__Mouse); +INITIALIZE_EQGAME_OFFSET(__AltTimerReady); +INITIALIZE_EQGAME_OFFSET(__Attack); +INITIALIZE_EQGAME_OFFSET(__Autofire); +INITIALIZE_EQGAME_OFFSET(__BindList); +INITIALIZE_EQGAME_OFFSET(__Clicks); +INITIALIZE_EQGAME_OFFSET(__CommandList); +INITIALIZE_EQGAME_OFFSET(__CurrentMapLabel); +INITIALIZE_EQGAME_OFFSET(__CurrentSocial); +INITIALIZE_EQGAME_OFFSET(__DoAbilityList); +INITIALIZE_EQGAME_OFFSET(__do_loot); +INITIALIZE_EQGAME_OFFSET(__DrawHandler); +INITIALIZE_EQGAME_OFFSET(__Guilds); +INITIALIZE_EQGAME_OFFSET(__gWorld); +INITIALIZE_EQGAME_OFFSET(__HotkeyPage); +INITIALIZE_EQGAME_OFFSET(__HWnd); +INITIALIZE_EQGAME_OFFSET(__InChatMode); +INITIALIZE_EQGAME_OFFSET(__LastTell); +INITIALIZE_EQGAME_OFFSET(__LMouseHeldTime); +INITIALIZE_EQGAME_OFFSET(__Mouse); +INITIALIZE_EQGAME_OFFSET(__MouseLook); +INITIALIZE_EQGAME_OFFSET(__MouseEventTime); +INITIALIZE_EQGAME_OFFSET(__NetStatusToggle); +INITIALIZE_EQGAME_OFFSET(__PCNames); +INITIALIZE_EQGAME_OFFSET(__RangeAttackReady); +INITIALIZE_EQGAME_OFFSET(__RMouseHeldTime); +INITIALIZE_EQGAME_OFFSET(__RunWalkState); +INITIALIZE_EQGAME_OFFSET(__ScreenMode); +INITIALIZE_EQGAME_OFFSET(__ScreenX); +INITIALIZE_EQGAME_OFFSET(__ScreenY); +INITIALIZE_EQGAME_OFFSET(__ScreenXMax); +INITIALIZE_EQGAME_OFFSET(__ScreenYMax); +INITIALIZE_EQGAME_OFFSET(__ServerHost); +INITIALIZE_EQGAME_OFFSET(__ServerName); +INITIALIZE_EQGAME_OFFSET(__ShiftKeyDown); +INITIALIZE_EQGAME_OFFSET(__ShowNames); +INITIALIZE_EQGAME_OFFSET(__Socials); + +INITIALIZE_EQGAME_OFFSET(instCRaid); +INITIALIZE_EQGAME_OFFSET(instEQZoneInfo); +INITIALIZE_EQGAME_OFFSET(instKeypressHandler); +INITIALIZE_EQGAME_OFFSET(pinstActiveBanker); +INITIALIZE_EQGAME_OFFSET(pinstActiveCorpse); +INITIALIZE_EQGAME_OFFSET(pinstActiveGMaster); +INITIALIZE_EQGAME_OFFSET(pinstActiveMerchant); +INITIALIZE_EQGAME_OFFSET(pinstAggroInfo); +INITIALIZE_EQGAME_OFFSET(pinstAltAdvManager); +INITIALIZE_EQGAME_OFFSET(pinstAuraMgr); +INITIALIZE_EQGAME_OFFSET(pinstBandageTarget); +INITIALIZE_EQGAME_OFFSET(pinstCamActor); +INITIALIZE_EQGAME_OFFSET(pinstCDBStr); +INITIALIZE_EQGAME_OFFSET(pinstCDisplay); +INITIALIZE_EQGAME_OFFSET(pinstCEverQuest); +INITIALIZE_EQGAME_OFFSET(pinstCharData); +INITIALIZE_EQGAME_OFFSET(pinstCharSpawn); +INITIALIZE_EQGAME_OFFSET(pinstControlledMissile); +INITIALIZE_EQGAME_OFFSET(pinstControlledPlayer); +INITIALIZE_EQGAME_OFFSET(pinstCSidlManager); +INITIALIZE_EQGAME_OFFSET(pinstCXWndManager); +INITIALIZE_EQGAME_OFFSET(instDynamicZone); +INITIALIZE_EQGAME_OFFSET(pinstDZMember); +INITIALIZE_EQGAME_OFFSET(pinstDZTimerInfo); +INITIALIZE_EQGAME_OFFSET(pinstEQItemList); +INITIALIZE_EQGAME_OFFSET(instEQMisc); +INITIALIZE_EQGAME_OFFSET(pinstEQSoundManager); +INITIALIZE_EQGAME_OFFSET(instExpeditionLeader); +INITIALIZE_EQGAME_OFFSET(instExpeditionName); +INITIALIZE_EQGAME_OFFSET(pinstGroup); +INITIALIZE_EQGAME_OFFSET(pinstImeManager); +INITIALIZE_EQGAME_OFFSET(pinstLocalPlayer); +INITIALIZE_EQGAME_OFFSET(pinstMercenaryData); +INITIALIZE_EQGAME_OFFSET(pinstModelPlayer); +INITIALIZE_EQGAME_OFFSET(pinstPCData); +INITIALIZE_EQGAME_OFFSET(pinstSkillMgr); +INITIALIZE_EQGAME_OFFSET(pinstSpawnManager); +INITIALIZE_EQGAME_OFFSET(pinstSpellManager); +INITIALIZE_EQGAME_OFFSET(pinstSpellSets); +INITIALIZE_EQGAME_OFFSET(pinstStringTable); +INITIALIZE_EQGAME_OFFSET(pinstSwitchManager); +INITIALIZE_EQGAME_OFFSET(pinstTarget); +INITIALIZE_EQGAME_OFFSET(pinstTargetObject); +INITIALIZE_EQGAME_OFFSET(pinstTargetSwitch); +INITIALIZE_EQGAME_OFFSET(pinstTaskMember); +INITIALIZE_EQGAME_OFFSET(pinstTrackTarget); +INITIALIZE_EQGAME_OFFSET(pinstTradeTarget); +INITIALIZE_EQGAME_OFFSET(instTributeActive); +INITIALIZE_EQGAME_OFFSET(pinstViewActor); +INITIALIZE_EQGAME_OFFSET(pinstWorldData); + +INITIALIZE_EQGAME_OFFSET(pinstCTextOverlay); +INITIALIZE_EQGAME_OFFSET(pinstCAudioTriggersWindow); +INITIALIZE_EQGAME_OFFSET(pinstCCharacterSelect); +INITIALIZE_EQGAME_OFFSET(pinstCFacePick); +INITIALIZE_EQGAME_OFFSET(pinstCNoteWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBookWnd); +INITIALIZE_EQGAME_OFFSET(pinstCPetInfoWnd); +INITIALIZE_EQGAME_OFFSET(pinstCTrainWnd); +INITIALIZE_EQGAME_OFFSET(pinstCSkillsWnd); +INITIALIZE_EQGAME_OFFSET(pinstCSkillsSelectWnd); +INITIALIZE_EQGAME_OFFSET(pinstCCombatSkillSelectWnd); +INITIALIZE_EQGAME_OFFSET(pinstCFriendsWnd); +INITIALIZE_EQGAME_OFFSET(pinstCAuraWnd); +INITIALIZE_EQGAME_OFFSET(pinstCRespawnWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBandolierWnd); +INITIALIZE_EQGAME_OFFSET(pinstCPotionBeltWnd); +INITIALIZE_EQGAME_OFFSET(pinstCAAWnd); +INITIALIZE_EQGAME_OFFSET(pinstCGroupSearchFiltersWnd); +INITIALIZE_EQGAME_OFFSET(pinstCLoadskinWnd); +INITIALIZE_EQGAME_OFFSET(pinstCAlarmWnd); +INITIALIZE_EQGAME_OFFSET(pinstCMusicPlayerWnd); +INITIALIZE_EQGAME_OFFSET(pinstCMailWnd); +INITIALIZE_EQGAME_OFFSET(pinstCMailCompositionWnd); +INITIALIZE_EQGAME_OFFSET(pinstCMailAddressBookWnd); +INITIALIZE_EQGAME_OFFSET(pinstCRaidWnd); +INITIALIZE_EQGAME_OFFSET(pinstCRaidOptionsWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBreathWnd); +INITIALIZE_EQGAME_OFFSET(pinstCMapViewWnd); +INITIALIZE_EQGAME_OFFSET(pinstCMapToolbarWnd); +INITIALIZE_EQGAME_OFFSET(pinstCEditLabelWnd); +INITIALIZE_EQGAME_OFFSET(pinstCTargetWnd); +INITIALIZE_EQGAME_OFFSET(pinstCColorPickerWnd); +INITIALIZE_EQGAME_OFFSET(pinstCPlayerWnd); +INITIALIZE_EQGAME_OFFSET(pinstCOptionsWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBuffWindowNORMAL); +INITIALIZE_EQGAME_OFFSET(pinstCBuffWindowSHORT); +INITIALIZE_EQGAME_OFFSET(pinstCharacterCreation); +INITIALIZE_EQGAME_OFFSET(pinstCCursorAttachment); +INITIALIZE_EQGAME_OFFSET(pinstCCastingWnd); +INITIALIZE_EQGAME_OFFSET(pinstCCastSpellWnd); +INITIALIZE_EQGAME_OFFSET(pinstCSpellBookWnd); +INITIALIZE_EQGAME_OFFSET(pinstCInventoryWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBankWnd); +INITIALIZE_EQGAME_OFFSET(pinstCQuantityWnd); +INITIALIZE_EQGAME_OFFSET(pinstCLootWnd); +INITIALIZE_EQGAME_OFFSET(pinstCActionsWnd); +INITIALIZE_EQGAME_OFFSET(pinstCCombatAbilityWnd); +INITIALIZE_EQGAME_OFFSET(pinstCMerchantWnd); +INITIALIZE_EQGAME_OFFSET(pinstCTradeWnd); +INITIALIZE_EQGAME_OFFSET(pinstCSelectorWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBazaarWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBazaarSearchWnd); +INITIALIZE_EQGAME_OFFSET(pinstCGiveWnd); +INITIALIZE_EQGAME_OFFSET(pinstCTrackingWnd); +INITIALIZE_EQGAME_OFFSET(pinstCInspectWnd); +INITIALIZE_EQGAME_OFFSET(pinstCSocialEditWnd); +INITIALIZE_EQGAME_OFFSET(pinstCFeedbackWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBugReportWnd); +INITIALIZE_EQGAME_OFFSET(pinstCVideoModesWnd); +INITIALIZE_EQGAME_OFFSET(pinstCTextEntryWnd); +INITIALIZE_EQGAME_OFFSET(pinstCFileSelectionWnd); +INITIALIZE_EQGAME_OFFSET(pinstCCompassWnd); +INITIALIZE_EQGAME_OFFSET(pinstCPlayerNotesWnd); +INITIALIZE_EQGAME_OFFSET(pinstCGemsGameWnd); +INITIALIZE_EQGAME_OFFSET(pinstCTimeLeftWnd); +INITIALIZE_EQGAME_OFFSET(pinstCPetitionQWnd); +INITIALIZE_EQGAME_OFFSET(pinstCSoulmarkWnd); +INITIALIZE_EQGAME_OFFSET(pinstCStoryWnd); +INITIALIZE_EQGAME_OFFSET(pinstCJournalTextWnd); +INITIALIZE_EQGAME_OFFSET(pinstCJournalCatWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBodyTintWnd); +INITIALIZE_EQGAME_OFFSET(pinstCServerListWnd); +INITIALIZE_EQGAME_OFFSET(pinstCAvaZoneWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBlockedBuffWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBlockedPetBuffWnd); +INITIALIZE_EQGAME_OFFSET(pinstCInvSlotMgr); +INITIALIZE_EQGAME_OFFSET(pinstCContainerMgr); +INITIALIZE_EQGAME_OFFSET(pinstCAdventureLeaderboardWnd); +INITIALIZE_EQGAME_OFFSET(pinstCAdventureRequestWnd); +INITIALIZE_EQGAME_OFFSET(pinstCAltStorageWnd); +INITIALIZE_EQGAME_OFFSET(pinstCAdventureStatsWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBarterMerchantWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBarterSearchWnd); +INITIALIZE_EQGAME_OFFSET(pinstCBarterWnd); +INITIALIZE_EQGAME_OFFSET(pinstCChatManager); +INITIALIZE_EQGAME_OFFSET(pinstCDynamicZoneWnd); +INITIALIZE_EQGAME_OFFSET(pinstCEQMainWnd); +INITIALIZE_EQGAME_OFFSET(pinstCFellowshipWnd); +INITIALIZE_EQGAME_OFFSET(pinstCFindLocationWnd); +INITIALIZE_EQGAME_OFFSET(pinstCGroupSearchWnd); +INITIALIZE_EQGAME_OFFSET(pinstCGroupWnd); +INITIALIZE_EQGAME_OFFSET(pinstCGuildBankWnd); +INITIALIZE_EQGAME_OFFSET(pinstCGuildMgmtWnd); +INITIALIZE_EQGAME_OFFSET(pinstCHotButtonWnd); +INITIALIZE_EQGAME_OFFSET(pinstCHotButtonWnd1); +INITIALIZE_EQGAME_OFFSET(pinstCHotButtonWnd2); +INITIALIZE_EQGAME_OFFSET(pinstCHotButtonWnd3); +INITIALIZE_EQGAME_OFFSET(pinstCHotButtonWnd4); +INITIALIZE_EQGAME_OFFSET(pinstCItemDisplayManager); +INITIALIZE_EQGAME_OFFSET(pinstCItemExpTransferWnd); +INITIALIZE_EQGAME_OFFSET(pinstCLFGuildWnd); +INITIALIZE_EQGAME_OFFSET(pinstCMIZoneSelectWnd); +INITIALIZE_EQGAME_OFFSET(pinstCConfirmationDialog); +INITIALIZE_EQGAME_OFFSET(pinstCPopupWndManager); +INITIALIZE_EQGAME_OFFSET(pinstCProgressionSelectionWnd); +INITIALIZE_EQGAME_OFFSET(pinstCPvPStatsWnd); +INITIALIZE_EQGAME_OFFSET(pinstCSystemInfoDialogBox); +INITIALIZE_EQGAME_OFFSET(pinstCTaskTemplateSelectWnd); +INITIALIZE_EQGAME_OFFSET(pinstCTipWndOFDAY); +INITIALIZE_EQGAME_OFFSET(pinstCTipWndCONTEXT); +INITIALIZE_EQGAME_OFFSET(pinstCTitleWnd); +INITIALIZE_EQGAME_OFFSET(pinstCContextMenuManager); +INITIALIZE_EQGAME_OFFSET(pinstCVoiceMacroWnd); +INITIALIZE_EQGAME_OFFSET(pinstCHtmlWnd); + +INITIALIZE_EQGAME_OFFSET(__CastRay); +INITIALIZE_EQGAME_OFFSET(__ConvertItemTags); +INITIALIZE_EQGAME_OFFSET(__ExecuteCmd); +INITIALIZE_EQGAME_OFFSET(__EQGetTime); +INITIALIZE_EQGAME_OFFSET(__get_melee_range); +INITIALIZE_EQGAME_OFFSET(__GetGaugeValueFromEQ); +INITIALIZE_EQGAME_OFFSET(__GetLabelFromEQ); +INITIALIZE_EQGAME_OFFSET(__GetXTargetType); +INITIALIZE_EQGAME_OFFSET(__LoadFrontEnd); +INITIALIZE_EQGAME_OFFSET(__NewUIINI); +INITIALIZE_EQGAME_OFFSET(__ProcessGameEvents); +INITIALIZE_EQGAME_OFFSET(CrashDetected); +INITIALIZE_EQGAME_OFFSET(DrawNetStatus); +INITIALIZE_EQGAME_OFFSET(Util__FastTime); +INITIALIZE_EQGAME_OFFSET(Expansion_HoT); + +INITIALIZE_EQGAME_OFFSET(AltAdvManager__GetCalculatedTimer); +INITIALIZE_EQGAME_OFFSET(AltAdvManager__IsAbilityReady); +INITIALIZE_EQGAME_OFFSET(AltAdvManager__GetAltAbility); + +INITIALIZE_EQGAME_OFFSET(CharacterZoneClient__HasSkill); + +INITIALIZE_EQGAME_OFFSET(CBankWnd__GetNumBankSlots); + +INITIALIZE_EQGAME_OFFSET(CBazaarSearchWnd__HandleBazaarMsg); + +INITIALIZE_EQGAME_OFFSET(CButtonWnd__SetCheck); + +INITIALIZE_EQGAME_OFFSET(CChatManager__GetRGBAFromIndex); +INITIALIZE_EQGAME_OFFSET(CChatManager__InitContextMenu); + +INITIALIZE_EQGAME_OFFSET(CChatService__GetNumberOfFriends); +INITIALIZE_EQGAME_OFFSET(CChatService__GetFriendName); + + +INITIALIZE_EQGAME_OFFSET(CRaces_AddModel); +INITIALIZE_EQGAME_OFFSET(CChatWindow__CChatWindow); +INITIALIZE_EQGAME_OFFSET(CChatWindow__Clear); +INITIALIZE_EQGAME_OFFSET(CChatWindow__WndNotification); + +INITIALIZE_EQGAME_OFFSET(CComboWnd__DeleteAll); +INITIALIZE_EQGAME_OFFSET(CComboWnd__Draw); +INITIALIZE_EQGAME_OFFSET(CComboWnd__GetCurChoice); +INITIALIZE_EQGAME_OFFSET(CComboWnd__GetListRect); +INITIALIZE_EQGAME_OFFSET(CComboWnd__GetTextRect); +INITIALIZE_EQGAME_OFFSET(CComboWnd__InsertChoice); +INITIALIZE_EQGAME_OFFSET(CComboWnd__SetColors); +INITIALIZE_EQGAME_OFFSET(CComboWnd__SetChoice); + +INITIALIZE_EQGAME_OFFSET(CContainerWnd__HandleCombine); +INITIALIZE_EQGAME_OFFSET(CContainerWnd__vftable); + +INITIALIZE_EQGAME_OFFSET(CDisplay__CleanGameUI); +INITIALIZE_EQGAME_OFFSET(CDisplay__GetClickedActor); +INITIALIZE_EQGAME_OFFSET(CDisplay__GetUserDefinedColor); +INITIALIZE_EQGAME_OFFSET(CDisplay__GetWorldFilePath); +INITIALIZE_EQGAME_OFFSET(CDisplay__is3dON); +INITIALIZE_EQGAME_OFFSET(CDisplay__ReloadUI); +INITIALIZE_EQGAME_OFFSET(CDisplay__WriteTextHD2); + +INITIALIZE_EQGAME_OFFSET(CEditBaseWnd__SetSel); + +INITIALIZE_EQGAME_OFFSET(CEditWnd__DrawCaret); +INITIALIZE_EQGAME_OFFSET(CEditWnd__GetCharIndexPt); +INITIALIZE_EQGAME_OFFSET(CEditWnd__GetDisplayString); +INITIALIZE_EQGAME_OFFSET(CEditWnd__GetHorzOffset); +INITIALIZE_EQGAME_OFFSET(CEditWnd__GetLineForPrintableChar); +INITIALIZE_EQGAME_OFFSET(CEditWnd__GetSelStartPt); +INITIALIZE_EQGAME_OFFSET(CEditWnd__GetSTMLSafeText); +INITIALIZE_EQGAME_OFFSET(CEditWnd__PointFromPrintableChar); +INITIALIZE_EQGAME_OFFSET(CEditWnd__SelectableCharFromPoint); +INITIALIZE_EQGAME_OFFSET(CEditWnd__SetEditable); + +INITIALIZE_EQGAME_OFFSET(CEverQuest__ClickedPlayer); +INITIALIZE_EQGAME_OFFSET(CEverQuest__DoTellWindow); +INITIALIZE_EQGAME_OFFSET(CEverQuest__DropHeldItemOnGround); +INITIALIZE_EQGAME_OFFSET(CEverQuest__dsp_chat); +INITIALIZE_EQGAME_OFFSET(CEverQuest__Emote); +INITIALIZE_EQGAME_OFFSET(CEverQuest__EnterZone); +INITIALIZE_EQGAME_OFFSET(CEverQuest__GetBodyTypeDesc); +INITIALIZE_EQGAME_OFFSET(CEverQuest__GetClassDesc); +INITIALIZE_EQGAME_OFFSET(CEverQuest__GetClassThreeLetterCode); +INITIALIZE_EQGAME_OFFSET(CEverQuest__GetDeityDesc); +INITIALIZE_EQGAME_OFFSET(CEverQuest__GetLangDesc); +INITIALIZE_EQGAME_OFFSET(CEverQuest__GetRaceDesc); +INITIALIZE_EQGAME_OFFSET(CEverQuest__InterpretCmd); +INITIALIZE_EQGAME_OFFSET(CEverQuest__LeftClickedOnPlayer); +INITIALIZE_EQGAME_OFFSET(CEverQuest__LMouseUp); +INITIALIZE_EQGAME_OFFSET(CEverQuest__RightClickedOnPlayer); +INITIALIZE_EQGAME_OFFSET(CEverQuest__RMouseUp); +INITIALIZE_EQGAME_OFFSET(CEverQuest__SetGameState); +INITIALIZE_EQGAME_OFFSET(CEverQuest__UPCNotificationFlush); + +INITIALIZE_EQGAME_OFFSET(CGaugeWnd__CalcFillRect); +INITIALIZE_EQGAME_OFFSET(CGaugeWnd__CalcLinesFillRect); +INITIALIZE_EQGAME_OFFSET(CGaugeWnd__Draw); + +INITIALIZE_EQGAME_OFFSET(CGuild__FindMemberByName); + +INITIALIZE_EQGAME_OFFSET(CHotButtonWnd__DoHotButton); + +INITIALIZE_EQGAME_OFFSET(CInvSlotMgr__FindInvSlot); +INITIALIZE_EQGAME_OFFSET(CInvSlotMgr__MoveItem); + +INITIALIZE_EQGAME_OFFSET(CInvSlot__HandleRButtonUp); +INITIALIZE_EQGAME_OFFSET(CInvSlot__SliderComplete); +INITIALIZE_EQGAME_OFFSET(CInvSlot__GetItemBase); + +INITIALIZE_EQGAME_OFFSET(CInvSlotWnd__DrawTooltip); + +INITIALIZE_EQGAME_OFFSET(CItemDisplayWnd__SetSpell); +INITIALIZE_EQGAME_OFFSET(CItemDisplayWnd__UpdateStrings); + +INITIALIZE_EQGAME_OFFSET(CLabel__Draw); + +INITIALIZE_EQGAME_OFFSET(CListWnd__AddColumn); +INITIALIZE_EQGAME_OFFSET(CListWnd__AddColumn1); +INITIALIZE_EQGAME_OFFSET(CListWnd__AddLine); +INITIALIZE_EQGAME_OFFSET(CListWnd__AddString); +INITIALIZE_EQGAME_OFFSET(CListWnd__CalculateFirstVisibleLine); +INITIALIZE_EQGAME_OFFSET(CListWnd__CalculateVSBRange); +INITIALIZE_EQGAME_OFFSET(CListWnd__ClearAllSel); +INITIALIZE_EQGAME_OFFSET(CListWnd__CloseAndUpdateEditWindow); +INITIALIZE_EQGAME_OFFSET(CListWnd__Compare); +INITIALIZE_EQGAME_OFFSET(CListWnd__Draw); +INITIALIZE_EQGAME_OFFSET(CListWnd__DrawColumnSeparators); +INITIALIZE_EQGAME_OFFSET(CListWnd__DrawHeader); +INITIALIZE_EQGAME_OFFSET(CListWnd__DrawItem); +INITIALIZE_EQGAME_OFFSET(CListWnd__DrawLine); +INITIALIZE_EQGAME_OFFSET(CListWnd__DrawSeparator); +INITIALIZE_EQGAME_OFFSET(CListWnd__EnsureVisible); +INITIALIZE_EQGAME_OFFSET(CListWnd__ExtendSel); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetColumnMinWidth); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetColumnWidth); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetCurSel); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetItemAtPoint); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetItemAtPoint1); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetItemData); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetItemHeight); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetItemIcon); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetItemRect); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetItemText); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetSelList); +INITIALIZE_EQGAME_OFFSET(CListWnd__GetSeparatorRect); +INITIALIZE_EQGAME_OFFSET(CListWnd__RemoveLine); +INITIALIZE_EQGAME_OFFSET(CListWnd__SetColors); +INITIALIZE_EQGAME_OFFSET(CListWnd__SetColumnJustification); +INITIALIZE_EQGAME_OFFSET(CListWnd__SetColumnWidth); +INITIALIZE_EQGAME_OFFSET(CListWnd__SetCurSel); +INITIALIZE_EQGAME_OFFSET(CListWnd__SetItemColor); +INITIALIZE_EQGAME_OFFSET(CListWnd__SetItemData); +INITIALIZE_EQGAME_OFFSET(CListWnd__SetItemText); +INITIALIZE_EQGAME_OFFSET(CListWnd__ShiftColumnSeparator); +INITIALIZE_EQGAME_OFFSET(CListWnd__Sort); +INITIALIZE_EQGAME_OFFSET(CListWnd__ToggleSel); + +INITIALIZE_EQGAME_OFFSET(CMapViewWnd__CMapViewWnd); + +INITIALIZE_EQGAME_OFFSET(CMerchantWnd__DisplayBuyOrSellPrice); +INITIALIZE_EQGAME_OFFSET(CMerchantWnd__RequestBuyItem); +INITIALIZE_EQGAME_OFFSET(CMerchantWnd__RequestSellItem); +INITIALIZE_EQGAME_OFFSET(CMerchantWnd__SelectBuySellSlot); + +INITIALIZE_EQGAME_OFFSET(CObfuscator__doit); + +INITIALIZE_EQGAME_OFFSET(CSidlManager__FindScreenPieceTemplate1); +INITIALIZE_EQGAME_OFFSET(CSidlManager__CreateLabel); + +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__CalculateHSBRange); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__CalculateVSBRange); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__ConvertToRes); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__CreateChildrenFromSidl); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__CSidlScreenWnd1); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__CSidlScreenWnd2); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__dCSidlScreenWnd); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__DrawSidlPiece); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__EnableIniStorage); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__GetSidlPiece); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__Init1); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__LoadIniInfo); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__LoadIniListWnd); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__LoadSidlScreen); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__StoreIniInfo); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__StoreIniVis); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__WndNotification); +INITIALIZE_EQGAME_OFFSET(CSidlScreenWnd__GetChildItem); + +INITIALIZE_EQGAME_OFFSET(CSkillMgr__IsAvailable); +INITIALIZE_EQGAME_OFFSET(CSkillMgr__GetSkillCap); + +INITIALIZE_EQGAME_OFFSET(CSliderWnd__GetValue); +INITIALIZE_EQGAME_OFFSET(CSliderWnd__SetValue); +INITIALIZE_EQGAME_OFFSET(CSliderWnd__SetNumTicks); + +INITIALIZE_EQGAME_OFFSET(CSpellBookWnd__MemorizeSet); + +INITIALIZE_EQGAME_OFFSET(CStmlWnd__AppendSTML); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__CalculateHSBRange); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__CalculateVSBRange); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__CanBreakAtCharacter); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__FastForwardToEndOfTag); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__ForceParseNow); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__GetNextTagPiece); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__GetSTMLText); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__GetVisibleText); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__InitializeWindowVariables); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__MakeStmlColorTag); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__MakeWndNotificationTag); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__SetSTMLText); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__StripFirstSTMLLines); +INITIALIZE_EQGAME_OFFSET(CStmlWnd__UpdateHistoryString); + +INITIALIZE_EQGAME_OFFSET(CTabWnd__Draw); +INITIALIZE_EQGAME_OFFSET(CTabWnd__DrawCurrentPage); +INITIALIZE_EQGAME_OFFSET(CTabWnd__DrawTab); +INITIALIZE_EQGAME_OFFSET(CTabWnd__GetCurrentPage); +INITIALIZE_EQGAME_OFFSET(CTabWnd__GetPageInnerRect); +INITIALIZE_EQGAME_OFFSET(CTabWnd__GetTabInnerRect); +INITIALIZE_EQGAME_OFFSET(CTabWnd__GetTabRect); +INITIALIZE_EQGAME_OFFSET(CTabWnd__InsertPage); +INITIALIZE_EQGAME_OFFSET(CTabWnd__SetPage); +INITIALIZE_EQGAME_OFFSET(CTabWnd__SetPageRect); +INITIALIZE_EQGAME_OFFSET(CTabWnd__UpdatePage); + +INITIALIZE_EQGAME_OFFSET(CTextOverlay__DisplayText); + +INITIALIZE_EQGAME_OFFSET(CTextureFont__DrawWrappedText); + +INITIALIZE_EQGAME_OFFSET(CXMLDataManager__GetXMLData); + +INITIALIZE_EQGAME_OFFSET(CXMLSOMDocumentBase__XMLRead); + +INITIALIZE_EQGAME_OFFSET(CXStr__CXStr); +INITIALIZE_EQGAME_OFFSET(CXStr__CXStr1); +INITIALIZE_EQGAME_OFFSET(CXStr__CXStr3); +INITIALIZE_EQGAME_OFFSET(CXStr__dCXStr); +INITIALIZE_EQGAME_OFFSET(CXStr__operator_equal); +INITIALIZE_EQGAME_OFFSET(CXStr__operator_equal1); +INITIALIZE_EQGAME_OFFSET(CXStr__operator_plus_equal1); + +INITIALIZE_EQGAME_OFFSET(CXWnd__BringToTop); +INITIALIZE_EQGAME_OFFSET(CXWnd__Center); +INITIALIZE_EQGAME_OFFSET(CXWnd__ClrFocus); +INITIALIZE_EQGAME_OFFSET(CXWnd__DoAllDrawing); +INITIALIZE_EQGAME_OFFSET(CXWnd__DrawChildren); +INITIALIZE_EQGAME_OFFSET(CXWnd__DrawColoredRect); +INITIALIZE_EQGAME_OFFSET(CXWnd__DrawTooltip); +INITIALIZE_EQGAME_OFFSET(CXWnd__DrawTooltipAtPoint); +INITIALIZE_EQGAME_OFFSET(CXWnd__GetBorderFrame); +INITIALIZE_EQGAME_OFFSET(CXWnd__GetChildWndAt); +INITIALIZE_EQGAME_OFFSET(CXWnd__GetClientClipRect); +INITIALIZE_EQGAME_OFFSET(CXWnd__GetScreenClipRect); +INITIALIZE_EQGAME_OFFSET(CXWnd__GetScreenRect); +INITIALIZE_EQGAME_OFFSET(CXWnd__GetTooltipRect); +INITIALIZE_EQGAME_OFFSET(CXWnd__GetWindowTextA); +INITIALIZE_EQGAME_OFFSET(CXWnd__IsActive); +INITIALIZE_EQGAME_OFFSET(CXWnd__IsDescendantOf); +INITIALIZE_EQGAME_OFFSET(CXWnd__IsReallyVisible); +INITIALIZE_EQGAME_OFFSET(CXWnd__IsType); +INITIALIZE_EQGAME_OFFSET(CXWnd__Move); +INITIALIZE_EQGAME_OFFSET(CXWnd__Move1); +INITIALIZE_EQGAME_OFFSET(CXWnd__ProcessTransition); +INITIALIZE_EQGAME_OFFSET(CXWnd__Refade); +INITIALIZE_EQGAME_OFFSET(CXWnd__Resize); +INITIALIZE_EQGAME_OFFSET(CXWnd__Right); +INITIALIZE_EQGAME_OFFSET(CXWnd__SetFocus); +INITIALIZE_EQGAME_OFFSET(CXWnd__SetFont); +INITIALIZE_EQGAME_OFFSET(CXWnd__SetKeyTooltip); +INITIALIZE_EQGAME_OFFSET(CXWnd__SetMouseOver); +INITIALIZE_EQGAME_OFFSET(CXWnd__StartFade); +INITIALIZE_EQGAME_OFFSET(CXWnd__GetChildItem); + +INITIALIZE_EQGAME_OFFSET(CXWndManager__DrawCursor); +INITIALIZE_EQGAME_OFFSET(CXWndManager__DrawWindows); +INITIALIZE_EQGAME_OFFSET(CXWndManager__GetKeyboardFlags); +INITIALIZE_EQGAME_OFFSET(CXWndManager__HandleKeyboardMsg); +INITIALIZE_EQGAME_OFFSET(CXWndManager__RemoveWnd); + +INITIALIZE_EQGAME_OFFSET(CDBStr__GetString); + +INITIALIZE_EQGAME_OFFSET(EQ_Character__CastRay); +INITIALIZE_EQGAME_OFFSET(EQ_Character__CastSpell); +INITIALIZE_EQGAME_OFFSET(EQ_Character__Cur_HP); +INITIALIZE_EQGAME_OFFSET(EQ_Character__GetAACastingTimeModifier); +INITIALIZE_EQGAME_OFFSET(EQ_Character__GetCharInfo2); +INITIALIZE_EQGAME_OFFSET(EQ_Character__GetFocusCastingTimeModifier); +INITIALIZE_EQGAME_OFFSET(EQ_Character__GetFocusRangeModifier); +INITIALIZE_EQGAME_OFFSET(EQ_Character__Max_Endurance); +INITIALIZE_EQGAME_OFFSET(EQ_Character__Max_HP); +INITIALIZE_EQGAME_OFFSET(EQ_Character__Max_Mana); +INITIALIZE_EQGAME_OFFSET(EQ_Character__doCombatAbility); +INITIALIZE_EQGAME_OFFSET(EQ_Character__UseSkill); +INITIALIZE_EQGAME_OFFSET(EQ_Character__GetConLevel); +INITIALIZE_EQGAME_OFFSET(EQ_Character__IsExpansionFlag); +INITIALIZE_EQGAME_OFFSET(EQ_Character__TotalEffect); + +INITIALIZE_EQGAME_OFFSET(EQ_Item__CanDrop); +INITIALIZE_EQGAME_OFFSET(EQ_Item__CreateItemTagString); +INITIALIZE_EQGAME_OFFSET(EQ_Item__IsStackable); + +INITIALIZE_EQGAME_OFFSET(EQ_LoadingS__SetProgressBar); +INITIALIZE_EQGAME_OFFSET(EQ_LoadingS__Array); + +INITIALIZE_EQGAME_OFFSET(EQ_PC__DestroyHeldItemOrMoney); +INITIALIZE_EQGAME_OFFSET(EQ_PC__GetAltAbilityIndex); +INITIALIZE_EQGAME_OFFSET(EQ_PC__GetCombatAbility); +INITIALIZE_EQGAME_OFFSET(EQ_PC__GetCombatAbilityTimer); +INITIALIZE_EQGAME_OFFSET(EQ_PC__GetItemTimerValue); +INITIALIZE_EQGAME_OFFSET(EQ_PC__HasLoreItem); + +INITIALIZE_EQGAME_OFFSET(EQItemList__EQItemList); +INITIALIZE_EQGAME_OFFSET(EQItemList__add_item); +INITIALIZE_EQGAME_OFFSET(EQItemList__delete_item); +INITIALIZE_EQGAME_OFFSET(EQItemList__FreeItemList); + +INITIALIZE_EQGAME_OFFSET(EQMisc__GetActiveFavorCost); + +INITIALIZE_EQGAME_OFFSET(EQPlayer__ChangeBoneStringSprite); +INITIALIZE_EQGAME_OFFSET(EQPlayer__dEQPlayer); +INITIALIZE_EQGAME_OFFSET(EQPlayer__DoAttack); +INITIALIZE_EQGAME_OFFSET(EQPlayer__EQPlayer); +INITIALIZE_EQGAME_OFFSET(EQPlayer__SetNameSpriteState); +INITIALIZE_EQGAME_OFFSET(EQPlayer__SetNameSpriteTint); +INITIALIZE_EQGAME_OFFSET(EQPlayer__IsBodyType_j); +INITIALIZE_EQGAME_OFFSET(EQPlayer__IsTargetable); + +INITIALIZE_EQGAME_OFFSET(EQPlayerManager__GetSpawnByID); +INITIALIZE_EQGAME_OFFSET(EQPlayerManager__GetSpawnByName); + +INITIALIZE_EQGAME_OFFSET(KeypressHandler__AttachAltKeyToEqCommand); +INITIALIZE_EQGAME_OFFSET(KeypressHandler__AttachKeyToEqCommand); +INITIALIZE_EQGAME_OFFSET(KeypressHandler__ClearCommandStateArray); +INITIALIZE_EQGAME_OFFSET(KeypressHandler__HandleKeyDown); +INITIALIZE_EQGAME_OFFSET(KeypressHandler__HandleKeyUp); +INITIALIZE_EQGAME_OFFSET(KeypressHandler__SaveKeymapping); + +INITIALIZE_EQGAME_OFFSET(MapViewMap__Clear); +INITIALIZE_EQGAME_OFFSET(MapViewMap__SaveEx); + +INITIALIZE_EQGAME_OFFSET(PlayerPointManager__GetAltCurrency); + +INITIALIZE_EQGAME_OFFSET(StringTable__getString); + +INITIALIZE_EQGAME_OFFSET(PcZoneClient__GetPcSkillLimit); +}; diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2Globals.h b/client_files/native_autoloot/eq-core-dll/src/MQ2Globals.h new file mode 100644 index 0000000000..6fe0d0815a --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2Globals.h @@ -0,0 +1,1208 @@ +/***************************************************************************** + MQ2Main.dll: MacroQuest2's extension DLL for EverQuest + Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License, version 2, as published by + the Free Software Foundation. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. +******************************************************************************/ + +namespace MQ2Globals +{ +bool InitOffsets(); + +EQLIB_VAR DWORD baseAddress; +EQLIB_VAR DWORD eqGraphicsAddress; +EQLIB_VAR DWORD eqMainAddress; + +/* BENCHMARK HANDLES */ + +EQLIB_API DWORD bmWriteChatColor; +EQLIB_API DWORD bmPluginsIncomingChat; +EQLIB_API DWORD bmPluginsPulse; +EQLIB_API DWORD bmPluginsOnZoned; +EQLIB_API DWORD bmPluginsCleanUI; +EQLIB_API DWORD bmPluginsReloadUI; +EQLIB_API DWORD bmPluginsDrawHUD; +EQLIB_API DWORD bmPluginsSetGameState; +EQLIB_API DWORD bmParseMacroParameter; +EQLIB_API DWORD bmUpdateSpawnSort; +EQLIB_API DWORD bmUpdateSpawnCaptions; +EQLIB_API DWORD bmCalculate; +EQLIB_API DWORD bmBeginZone; +EQLIB_API DWORD bmEndZone; + +/* OTHER */ + +#ifndef ISXEQ +LEGACY_VAR PDATAVAR pGlobalVariables; +LEGACY_VAR PDATAVAR pMacroVariables; +#endif + +EQLIB_VAR BOOL bAllErrorsFatal; +EQLIB_VAR BOOL bAllErrorsDumpStack; +EQLIB_VAR BOOL bAllErrorsLog; +EQLIB_API CHAR DataTypeTemp[MAX_STRING]; + +EQLIB_API CHAR gszVersion[32]; + + +EQLIB_API DWORD gGameState; +EQLIB_API ePVPServer PVPServer; + +EQLIB_VAR BOOL g_Loaded; +EQLIB_VAR DWORD ThreadID; + +EQLIB_VAR BOOL gStringTableFixed; +EQLIB_VAR DWORD gMaxSpawnCaptions; +EQLIB_VAR BOOL gMQCaptions; + +EQLIB_VAR HMODULE ghModule; +EQLIB_VAR HINSTANCE ghInstance; +EQLIB_VAR BOOL gbEQWLoaded; +//EQLIB_VAR PHOTKEY pHotkey; +EQLIB_VAR BOOL gbUnload; +EQLIB_VAR DWORD gpHook; +#ifndef ISXEQ +LEGACY_VAR PMACROBLOCK gMacroBlock; +LEGACY_VAR PMACROSTACK gMacroStack; +LEGACY_VAR map gMacroSubLookupMap; +LEGACY_VAR PEVENTQUEUE gEventQueue; +LEGACY_VAR PMACROBLOCK gEventFunc[NUM_EVENTS]; +#endif +EQLIB_VAR UCHAR gLastFind; +EQLIB_VAR BOOL gInClick; +EQLIB_VAR DOUBLE gZFilter; +EQLIB_VAR DOUBLE gFaceAngle; +EQLIB_VAR DOUBLE gLookAngle; +EQLIB_VAR CHAR gszEQPath[MAX_STRING]; +EQLIB_VAR CHAR gszMacroPath[MAX_STRING]; +EQLIB_VAR CHAR gszLogPath[MAX_STRING]; +EQLIB_VAR CHAR gszINIPath[MAX_STRING]; +EQLIB_VAR CHAR gszINIFilename[MAX_STRING]; +EQLIB_VAR CHAR gszItemDB[MAX_STRING]; +EQLIB_VAR CHAR gszMacroName[MAX_STRING]; +EQLIB_VAR CHAR szLastCommand[MAX_STRING]; + +EQLIB_VAR CHAR gszLastNormalError[MAX_STRING];// QUIT USING THIS DIRECTLY, USE MacroError, FatalError, ETC +EQLIB_VAR CHAR gszLastSyntaxError[MAX_STRING]; +EQLIB_VAR CHAR gszLastMQ2DataError[MAX_STRING]; + +EQLIB_VAR PSPAWNINFO pNamingSpawn; +EQLIB_VAR CHAR gszSpawnNPCName[MAX_STRING]; +EQLIB_VAR CHAR gszSpawnPlayerName[7][MAX_STRING]; +EQLIB_VAR CHAR gszSpawnPetName[MAX_STRING]; +EQLIB_VAR CHAR gszSpawnCorpseName[MAX_STRING]; + +EQLIB_VAR DWORD DrawHUDParams[4]; + +EQLIB_VAR DWORD gEventChat; +EQLIB_VAR DWORD gRunning; +EQLIB_VAR BOOL gbMoving; +EQLIB_VAR DWORD gMaxTurbo; +EQLIB_VAR BOOL gReturn; + +EQLIB_VAR PCHATBUF gDelayedCommands; + +EQLIB_VAR BOOL gbInZone; +EQLIB_VAR BOOL gZoning; +EQLIB_VAR BOOL WereWeZoning; +EQLIB_VAR BOOL gbInDInput; +EQLIB_VAR BOOL gbInDState; +EQLIB_VAR BOOL gbInDAcquire; +EQLIB_VAR BOOL gbInChat; +EQLIB_VAR BOOL gFilterSkillsAll; +EQLIB_VAR BOOL gFilterSkillsIncrease; +EQLIB_VAR BOOL gFilterTarget; +EQLIB_VAR BOOL gFilterDebug; +EQLIB_VAR BOOL gFilterMoney; +EQLIB_VAR BOOL gFilterFood; +//EQLIB_VAR DWORD gUseMQChatWnd; +EQLIB_VAR BOOL gFilterMQ; +EQLIB_VAR BOOL gFilterMacro; +EQLIB_VAR BOOL gFilterEncumber; +EQLIB_VAR BOOL gFilterCustom; +EQLIB_VAR BOOL gSpewToFile; +EQLIB_VAR BOOL gbDoAutoRun; +EQLIB_VAR BOOL gMQPauseOnChat; +EQLIB_VAR BOOL gKeepKeys; +EQLIB_VAR BOOL gLClickedObject; +EQLIB_VAR SWHOFILTER gFilterSWho; + +EQLIB_VAR BOOL gbHUDUnderUI; +EQLIB_VAR BOOL gbAlwaysDrawMQHUD; + +EQLIB_VAR BOOL gFilterMQ2DataErrors; + +EQLIB_VAR DOUBLE DegToRad; +EQLIB_VAR DOUBLE PI; +#define ZoneShift 0 + +#ifndef ISXEQ +LEGACY_VAR Blech *pMQ2Blech; +LEGACY_VAR CHAR EventMsg[MAX_STRING]; +#ifdef USEBLECHEVENTS +LEGACY_VAR Blech *pEventBlech; +#endif +LEGACY_VAR PEVENTLIST pEventList; +#endif + +//EQLIB_VAR PKEYPRESS gKeyStack; +EQLIB_VAR PMQTIMER gTimer; +EQLIB_VAR LONG gDelay; +EQLIB_VAR CHAR gDelayCondition[MAX_STRING]; +EQLIB_VAR PALERTLIST gpAlertList; +EQLIB_VAR BOOL gMacroPause; +EQLIB_VAR SPAWNINFO EnviroTarget; +EQLIB_VAR PGROUNDITEM pGroundTarget; +EQLIB_VAR SPAWNINFO DoorEnviroTarget; +EQLIB_VAR PDOOR pDoorTarget; +EQLIB_VAR PITEMDB gItemDB; +EQLIB_VAR BOOL bRunNextCommand; +EQLIB_VAR BOOL bAllowCommandParse; +EQLIB_VAR BOOL gTurbo; +EQLIB_VAR PDEFINE pDefines; +//EQLIB_VAR CHAR gLastFindSlot[MAX_STRING]; +//EQLIB_VAR CHAR gLastError[MAX_STRING]; +//EQLIB_VAR HWND ghWnd; +EQLIB_VAR PFILTER gpFilters; + +EQLIB_VAR map ItemSlotMap; + +EQLIB_VAR BOOL g_bInDXMouse; +EQLIB_VAR PMOUSESPOOF gMouseData; + +EQLIB_VAR DIKEYID gDiKeyID[]; +EQLIB_VAR PCHAR gDiKeyName[256]; + + +EQLIB_VAR DWORD ManaGained; +EQLIB_VAR DWORD HealthGained; +EQLIB_VAR DWORD EnduranceGained; + +EQLIB_VAR DWORD gGameState; +EQLIB_VAR BOOL gbMQ2LoadingMsg; +EQLIB_VAR BOOL gbExactSearchCleanNames; + +EQLIB_VAR DWORD EQADDR_CONVERTITEMTAGS; + +EQLIB_VAR DWORD EQADDR_MEMCHECK0; +EQLIB_VAR DWORD EQADDR_MEMCHECK1; +EQLIB_VAR DWORD EQADDR_MEMCHECK2; +EQLIB_VAR DWORD EQADDR_MEMCHECK3; +EQLIB_VAR DWORD EQADDR_MEMCHECK4; +EQLIB_VAR PCHAR EQADDR_SERVERHOST; +EQLIB_VAR PCHAR EQADDR_SERVERNAME; +EQLIB_VAR DWORD EQADDR_HWND; + +EQLIB_VAR _SKILLMGR **ppSkillMgr; +#define pSkillMgr (*ppSkillMgr) + +EQLIB_VAR PCMDLIST EQADDR_CMDLIST; + +EQLIB_VAR PBYTE EQADDR_ATTACK; +EQLIB_VAR PBYTE EQADDR_NOTINCHATMODE; +EQLIB_VAR PBYTE EQADDR_RUNWALKSTATE; +EQLIB_VAR PCHAR EQADDR_LASTTELL; +EQLIB_VAR PVOID EQADDR_GWORLD; +EQLIB_VAR PDWORD EQADDR_DOABILITYLIST; +//EQLIB_VAR PBYTE EQADDR_DOABILITYAVAILABLE; +EQLIB_VAR PBYTE pTributeActive; + +EQLIB_VAR PBYTE EQADDR_ENCRYPTPAD0; +EQLIB_VAR PBYTE EQADDR_ENCRYPTPAD1; +EQLIB_VAR PBYTE EQADDR_ENCRYPTPAD2; +EQLIB_VAR PBYTE EQADDR_ENCRYPTPAD3; +EQLIB_VAR PBYTE EQADDR_ENCRYPTPAD4; + +EQLIB_VAR PMOUSEINFO EQADDR_MOUSE; +EQLIB_VAR PMOUSECLICK EQADDR_MOUSECLICK; + +EQLIB_VAR PMAPLABEL *ppCurrentMapLabel; +#define pCurrentMapLabel (*ppCurrentMapLabel) + +EQLIB_VAR PCHAR gpbRangedAttackReady; +#define gbRangedAttackReady (*gpbRangedAttackReady) +EQLIB_VAR PCHAR gpbAltTimerReady; +#define gbAltTimerReady (*gpbAltTimerReady) +EQLIB_VAR PCHAR gpbShowNetStatus; +#define gbShowNetStatus (*gpbShowNetStatus) +EQLIB_VAR DWORD *gpShowNames; +#define gShowNames (*gpShowNames) +EQLIB_VAR DWORD *gpPCNames; +#define gPCNames (*gpPCNames) +EQLIB_VAR PBYTE gpAutoFire; +#define gAutoFire (*gpAutoFire) +EQLIB_VAR PBYTE gpShiftKeyDown; +#define gShiftKeyDown (*gpShiftKeyDown) +EQLIB_VAR DWORD *gpMouseEventTime; +#define gMouseEventTime (*gpMouseEventTime) + +EQLIB_VAR DWORD *g_ppDrawHandler; +#define g_pDrawHandler (*g_ppDrawHandler) + +EQLIB_VAR PCHAR *EQMappableCommandList; +EQLIB_VAR DWORD gnNormalEQMappableCommands; + +#ifndef ISXEQ +EQLIB_VAR DWORD EQADDR_DIMAIN; +EQLIB_VAR IDirectInputDevice8A **EQADDR_DIKEYBOARD; +EQLIB_VAR IDirectInputDevice8A **EQADDR_DIMOUSE; +#endif + +EQLIB_VAR DWORD EQADDR_EQLABELS; + +EQLIB_VAR BOOL gMouseClickInProgress[8]; +EQLIB_VAR BOOL bDetMouse; + +// *************************************************************************** +// String arrays +// *************************************************************************** +EQLIB_VAR PCHAR szEQMappableCommands[nEQMappableCommands]; + +EQLIB_VAR PCHAR szHeading[]; +EQLIB_VAR PCHAR szHeadingShort[]; +EQLIB_VAR PCHAR szHeadingNormal[]; +EQLIB_VAR PCHAR szHeadingNormalShort[]; +EQLIB_VAR PCHAR szSize[]; +EQLIB_VAR PCHAR szSpawnType[]; +EQLIB_VAR PCHAR szGuildStatus[]; +EQLIB_VAR PCHAR szGender[]; +EQLIB_VAR PCHAR szDeityTeam[]; +EQLIB_VAR PCHAR szLights[]; +EQLIB_VAR BYTE LightBrightness[]; +EQLIB_VAR PCHAR szSkills[]; +EQLIB_VAR PCHAR szInnates[]; +EQLIB_VAR PCHAR szCombineTypes[]; +EQLIB_VAR PCHAR szItemTypes[]; + +EQLIB_VAR PCHAR szWornLoc[]; + + +EQLIB_VAR fEQCommand cmdHelp; +EQLIB_VAR fEQCommand cmdWho; +EQLIB_VAR fEQCommand cmdWhoTarget; +EQLIB_VAR fEQCommand cmdLocation; +EQLIB_VAR fEQCommand cmdFace; +EQLIB_VAR fEQCommand cmdTarget; +EQLIB_VAR fEQCommand cmdCharInfo; +EQLIB_VAR fEQCommand cmdFilter; +EQLIB_VAR fEQCommand cmdDoAbility; +EQLIB_VAR fEQCommand cmdCast; + + +EQLIB_VAR fEQNewUIINI NewUIINI; +EQLIB_VAR fEQProcGameEvts ProcessGameEvents; +EQLIB_VAR fEQExecuteCmd ExecuteCmd; +EQLIB_VAR fEQGetMelee get_melee_range; + +EQLIB_VAR PCHAR szItemName[]; +EQLIB_VAR PCHAR szItemName4xx[]; +EQLIB_VAR ACTORDEFENTRY ActorDefList[]; +//EQLIB_VAR PCHAR szTheme[]; +EQLIB_VAR PCHAR szDmgBonusType[]; +EQLIB_VAR PCHAR szBodyType[]; +EQLIB_VAR PCHAR szAugRestrictions[]; +EQLIB_VAR PCHAR szItemSlot[]; +EQLIB_VAR PCHAR szExpansions[]; + +EQLIB_VAR BOOL bLaxColor; +EQLIB_VAR PCHAR szColorAdjective[]; +EQLIB_VAR PCHAR szColorAdjectiveYou[]; +EQLIB_VAR PCHAR szColorExpletive[]; +EQLIB_VAR PCHAR szColorSyntaxError[]; +EQLIB_VAR PCHAR szColorMacroError[]; +EQLIB_VAR PCHAR szColorMQ2DataError[]; +EQLIB_VAR PCHAR szColorFatalError[]; +EQLIB_VAR DWORD nColorAdjective; +EQLIB_VAR DWORD nColorAdjectiveYou; +EQLIB_VAR DWORD nColorExpletive; +EQLIB_VAR DWORD nColorSyntaxError; +EQLIB_VAR DWORD nColorMacroError; +EQLIB_VAR DWORD nColorMQ2DataError; +EQLIB_VAR DWORD nColorFatalError; + +EQLIB_VAR PALIAS pAliases; +EQLIB_VAR PSUB pSubs; +EQLIB_VAR PMQCOMMAND pCommands; +EQLIB_VAR PMQPLUGIN pPlugins; +EQLIB_VAR PMQXMLFILE pXMLFiles; + +EQLIB_VAR fGetLabelFromEQ GetLabelFromEQ; + +EQLIB_VAR map SpawnByName; +//EQLIB_VAR EQPlayer **ppEQP_IDArray; +EQLIB_VAR MQRANK EQP_DistArray[3000]; +EQLIB_VAR DWORD gSpawnCount; +//#define ppEQP_IDArray (*pppEQP_IDArray) + +EQLIB_VAR StringTable **ppStringTable; +#define pStringTable (*ppStringTable) + +EQLIB_VAR CDBStr **ppCDBStr; +#define pCDBStr (*ppCDBStr) +EQLIB_VAR EQMisc *pEQMisc; +EQLIB_VAR CSkillMgr **ppCSkillMgr; +#define pCSkillMgr (*ppCSkillMgr) +EQLIB_VAR CGuild *pGuild; + +EQLIB_VAR CEverQuest **ppEverQuest; +#define pEverQuest (*ppEverQuest) +EQLIB_VAR CDisplay **ppDisplay; +#define pDisplay (*ppDisplay) +EQLIB_VAR EQ_PC **ppPCData; +#define pPCData (*ppPCData) +EQLIB_VAR EQ_Character **ppCharData; +#define pCharData (*ppCharData) +#define pCharData1 ((EQ_Character1 *)&GetCharInfo()->vtable2) +EQLIB_VAR EQPlayer **ppCharSpawn; +#define pCharSpawn (*ppCharSpawn) +EQLIB_VAR EQPlayer **ppActiveMerchant; +#define pActiveMerchant (*ppActiveMerchant) +EQLIB_VAR EQPlayerManager **ppSpawnManager; +#define pSpawnManager (*ppSpawnManager) +#define pSpawnList (((struct _SPAWNMANAGER *)pSpawnManager)->FirstSpawn) +#define pChatService ((CChatService*)((PEVERQUEST)pEverQuest)->ChatService) +#define pPlayerPointManager ((PlayerPointManager*)&GetCharInfo()->PlayerPointManager) + +EQLIB_VAR EQPlayer **ppLocalPlayer; +#define pLocalPlayer (*ppLocalPlayer) +EQLIB_VAR EQPlayer **ppControlledPlayer; +#define pControlledPlayer (*ppControlledPlayer) + + + +EQLIB_VAR EQWorldData **ppWorldData; +#define pWorldData (*ppWorldData) +EQLIB_VAR SpellManager **ppSpellMgr; +#define pSpellMgr (*ppSpellMgr) +EQLIB_VAR EQPlayer **ppTarget; +#define pTarget (*ppTarget) +EQLIB_VAR EqSwitchManager **ppSwitchMgr; +#define pSwitchMgr (*ppSwitchMgr) +EQLIB_VAR EQItemList **ppItemList; +#define pItemList (*ppItemList) +EQLIB_VAR EQZoneInfo *pZoneInfo; +EQLIB_VAR PGUILDS pGuildList; +EQLIB_VAR PEQSOCIAL pSocialList; + +EQLIB_VAR PBYTE pgHotkeyPage; +#define gHotkeyPage (*pgHotkeyPage) + +EQLIB_VAR EQPlayer **ppTradeTarget; +#define pTradeTarget (*ppTradeTarget) +EQLIB_VAR EQPlayer **ppActiveBanker; +#define pActiveBanker (*ppActiveBanker) +EQLIB_VAR EQPlayer **ppActiveGMaster; +#define pActiveGMaster (*ppActiveGMaster) +EQLIB_VAR EQPlayer **ppActiveCorpse; +#define pActiveCorpse (*ppActiveCorpse) + +EQLIB_VAR CSidlManager **ppSidlMgr; +#define pSidlMgr (*ppSidlMgr) + +EQLIB_VAR CXWndManager **ppWndMgr; +#define pWndMgr (*ppWndMgr) + +EQLIB_VAR KeypressHandler **ppKeypressHandler; +#define pKeypressHandler (*ppKeypressHandler) + +EQLIB_VAR PEQRAID pRaid; +EQLIB_VAR DZMEMBER **ppDZMember; +EQLIB_VAR TASKMEMBER **ppTaskMember; +EQLIB_VAR DZTIMERINFO **ppDZTimerInfo; +EQLIB_VAR DYNAMICZONE *pDynamicZone; + +EQLIB_VAR PINT pgCurrentSocial; +#define gCurrentSocial (*pgCurrentSocial) + +EQLIB_VAR DWORD *pScreenX; +#define ScreenX (*pScreenX) +EQLIB_VAR DWORD *pScreenY; +#define ScreenY (*pScreenY) +EQLIB_VAR DWORD *pScreenXMax; +#define ScreenXMax (*pScreenXMax) +EQLIB_VAR DWORD *pScreenYMax; +#define ScreenYMax (*pScreenYMax) +EQLIB_VAR DWORD *pScreenMode; +#define ScreenMode (*pScreenMode) +EQLIB_VAR CHAR *pMouseLook; +#define bMouseLook (*pMouseLook) + +EQLIB_VAR SPELLFAVORITE *pSpellSets; +EQLIB_VAR AltAdvManager** ppAltAdvManager; +#define pAltAdvManager (*ppAltAdvManager) + +EQLIB_VAR PCONNECTION_T *ppConnection; +#define pConnection (*ppConnection) +EQLIB_VAR AURAMGR **ppAuraMgr; +#define pAuraMgr (*ppAuraMgr) + +EQLIB_VAR EQCHATMGR **ppEQChatMgr; +#define pChatMgr (*ppEQChatMgr) + +EQLIB_VAR MERCENARYINFO **ppMercInfo; +#define pMercInfo (*ppMercInfo) + +EQLIB_VAR AGGROINFO **ppAggroInfo; +#define pAggroInfo (*ppAggroInfo) + +/* WINDOW INSTANCES */ +EQLIB_VAR CContextMenuManager **ppContextMenuManager; +EQLIB_VAR CCursorAttachment **ppCursorAttachment; +EQLIB_VAR CSocialEditWnd **ppSocialEditWnd; +EQLIB_VAR CContainerMgr **ppContainerMgr; +EQLIB_VAR CChatManager **ppChatManager; +EQLIB_VAR CConfirmationDialog **ppConfirmationDialog; +EQLIB_VAR CFacePick **ppFacePick; +EQLIB_VAR CInvSlotMgr **ppInvSlotMgr; +//EQLIB_VAR CPopupWndManager **ppPopupWndManager; +EQLIB_VAR CNoteWnd **ppNoteWnd; +EQLIB_VAR CHelpWnd **ppHelpWnd; +EQLIB_VAR CTipWnd **ppTipWnd; +EQLIB_VAR CTipWnd **ppTipWnd; +EQLIB_VAR CBookWnd **ppBookWnd; +EQLIB_VAR CFriendsWnd **ppFriendsWnd; +EQLIB_VAR CMusicPlayerWnd **ppMusicPlayerWnd; +EQLIB_VAR CAlarmWnd **ppAlarmWnd; +EQLIB_VAR CLoadskinWnd **ppLoadskinWnd; +EQLIB_VAR CPetInfoWnd **ppPetInfoWnd; +EQLIB_VAR CTrainWnd **ppTrainWnd; +EQLIB_VAR CSkillsWnd **ppSkillsWnd; +EQLIB_VAR CSkillsSelectWnd **ppSkillsSelectWnd; +//EQLIB_VAR CCombatSkillSelectWnd **ppCombatSkillSelectWnd; +EQLIB_VAR CAAWnd **ppAAWnd; +EQLIB_VAR CGroupWnd **ppGroupWnd; +//EQLIB_VAR CSystemInfoDialogBox **ppSystemInfoDialogBox; +EQLIB_VAR CGroupSearchWnd **ppGroupSearchWnd; +EQLIB_VAR CGroupSearchFiltersWnd **ppGroupSearchFiltersWnd; +EQLIB_VAR CRaidWnd **ppRaidWnd; +EQLIB_VAR CRaidOptionsWnd **ppRaidOptionsWnd; +EQLIB_VAR CBreathWnd **ppBreathWnd; +EQLIB_VAR CMapToolbarWnd **ppMapToolbarWnd; +EQLIB_VAR CMapViewWnd **ppMapViewWnd; +EQLIB_VAR CEditLabelWnd **ppEditLabelWnd; +EQLIB_VAR COptionsWnd **ppOptionsWnd; +EQLIB_VAR CBuffWindow **ppBuffWindowNORMAL; +EQLIB_VAR CBuffWindow **ppBuffWindowSHORT; +EQLIB_VAR CTargetWnd **ppTargetWnd; +EQLIB_VAR CColorPickerWnd **ppColorPickerWnd; +EQLIB_VAR CHotButtonWnd **ppHotButtonWnd; +EQLIB_VAR CPlayerWnd **ppPlayerWnd; +EQLIB_VAR CCastingWnd **ppCastingWnd; +EQLIB_VAR CCastSpellWnd **ppCastSpellWnd; +EQLIB_VAR CSpellBookWnd **ppSpellBookWnd; +EQLIB_VAR CInventoryWnd **ppInventoryWnd; +EQLIB_VAR CBankWnd **ppBankWnd; +EQLIB_VAR CQuantityWnd **ppQuantityWnd; +EQLIB_VAR CTextEntryWnd **ppTextEntryWnd; +EQLIB_VAR CFileSelectionWnd **ppFileSelectionWnd; +EQLIB_VAR CLootWnd **ppLootWnd; +EQLIB_VAR CPetInfoWnd **ppPetInfoWnd; +EQLIB_VAR CActionsWnd **ppActionsWnd; +EQLIB_VAR CCombatAbilityWnd **ppCombatAbilityWnd; +EQLIB_VAR CMerchantWnd **ppMerchantWnd; +EQLIB_VAR CTradeWnd **ppTradeWnd; +EQLIB_VAR CBazaarWnd **ppBazaarWnd; +EQLIB_VAR CBazaarSearchWnd **ppBazaarSearchWnd; +EQLIB_VAR CGiveWnd **ppGiveWnd; +EQLIB_VAR CSelectorWnd **ppSelectorWnd; +EQLIB_VAR CTrackingWnd **ppTrackingWnd; +EQLIB_VAR CInspectWnd **ppInspectWnd; +EQLIB_VAR CFeedbackWnd **ppFeedbackWnd; +EQLIB_VAR CBugReportWnd **ppBugReportWnd; +EQLIB_VAR CVideoModesWnd **ppVideoModesWnd; +EQLIB_VAR CCompassWnd **ppCompassWnd; +EQLIB_VAR CPlayerNotesWnd **ppPlayerNotesWnd; +EQLIB_VAR CGemsGameWnd **ppGemsGameWnd; +EQLIB_VAR CStoryWnd **ppStoryWnd; +//EQLIB_VAR CFindLocationWnd **ppFindLocationWnd; +//EQLIB_VAR CAdventureRequestWnd **ppAdventureRequestWnd; +//EQLIB_VAR CAdventureMerchantWnd **ppAdventureMerchantWnd; +//EQLIB_VAR CAdventureStatsWnd **ppAdventureStatsWnd; +//EQLIB_VAR CAdventureLeaderboardWnd **ppAdventureLeaderboardWnd; +//EQLIB_VAR CLeadershipWindow **ppLeadershipWindow; +EQLIB_VAR CBodyTintWnd **ppBodyTintWnd; +EQLIB_VAR CGuildMgmtWnd **ppGuildMgmtWnd; +EQLIB_VAR CJournalTextWnd **ppJournalTextWnd; +EQLIB_VAR CJournalCatWnd **ppJournalCatWnd; +//EQLIB_VAR CTributeBenefitWnd **ppTributeBenefitWnd; +//EQLIB_VAR CTributeMasterWnd **ppTributeMasterWnd; +EQLIB_VAR CPetitionQWnd **ppPetitionQWnd; +EQLIB_VAR CSoulmarkWnd **ppSoulmarkWnd; +EQLIB_VAR CTimeLeftWnd **ppTimeLeftWnd; +EQLIB_VAR CTextOverlay **ppTextOverlay; +EQLIB_VAR CPotionBeltWnd **ppPotionBeltWnd; + + +#define pContextMenuManager (*ppContextMenuManager) +#define pCursorAttachment (*ppCursorAttachment) +#define pSocialEditWnd (*ppSocialEditWnd) +#define pContainerMgr (*ppContainerMgr) +#define pChatManager (*ppChatManager) +#define pConfirmationDialog (*ppConfirmationDialog) +#define pFacePick (*ppFacePick) +#define pInvSlotMgr (*ppInvSlotMgr) +#define pPopupWndManager (*ppPopupWndManager) +#define pNoteWnd (*ppNoteWnd) +#define pHelpWnd (*ppHelpWnd) +#define pTipWnd (*ppTipWnd) +#define pTipWnd (*ppTipWnd) +#define pBookWnd (*ppBookWnd) +#define pFriendsWnd (*ppFriendsWnd) +#define pMusicPlayerWnd (*ppMusicPlayerWnd) +#define pAlarmWnd (*ppAlarmWnd) +#define pLoadskinWnd (*ppLoadskinWnd) +#define pPetInfoWnd (*ppPetInfoWnd) +#define pTrainWnd (*ppTrainWnd) +#define pSkillsWnd (*ppSkillsWnd) +#define pSkillsSelectWnd (*ppSkillsSelectWnd) +#define pCombatSkillSelectWnd (*ppCombatSkillSelectWnd) +#define pAAWnd (*ppAAWnd) +#define pGroupWnd (*ppGroupWnd) +#define pSystemInfoDialogBox (*ppSystemInfoDialogBox) +#define pGroupSearchWnd (*ppGroupSearchWnd) +#define pGroupSearchFiltersWnd (*ppGroupSearchFiltersWnd) +#define pRaidWnd (*ppRaidWnd) +#define pRaidOptionsWnd (*ppRaidOptionsWnd) +#define pBreathWnd (*ppBreathWnd) +#define pMapToolbarWnd (*ppMapToolbarWnd) +#define pMapViewWnd (*ppMapViewWnd) +#define pEditLabelWnd (*ppEditLabelWnd) +#define pOptionsWnd (*ppOptionsWnd) +#define pBuffWnd (*ppBuffWindowNORMAL) +#define pSongWnd (*ppBuffWindowSHORT) +#define pTargetWnd (*ppTargetWnd) +#define pColorPickerWnd (*ppColorPickerWnd) +#define pHotButtonWnd (*ppHotButtonWnd) +#define pPlayerWnd (*ppPlayerWnd) +#define pCastingWnd (*ppCastingWnd) +#define pCastSpellWnd (*ppCastSpellWnd) +#define pSpellBookWnd (*ppSpellBookWnd) +#define pInventoryWnd (*ppInventoryWnd) +#define pBankWnd (*ppBankWnd) +#define pQuantityWnd (*ppQuantityWnd) +#define pTextEntryWnd (*ppTextEntryWnd) +#define pFileSelectionWnd (*ppFileSelectionWnd) +#define pLootWnd (*ppLootWnd) +#define pPetInfoWnd (*ppPetInfoWnd) +#define pActionsWnd (*ppActionsWnd) +#define pCombatAbilityWnd (*ppCombatAbilityWnd) +#define pMerchantWnd (*ppMerchantWnd) +#define pTradeWnd (*ppTradeWnd) +#define pBazaarWnd (*ppBazaarWnd) +#define pBazaarSearchWnd (*ppBazaarSearchWnd) +#define pGiveWnd (*ppGiveWnd) +#define pSelectorWnd (*ppSelectorWnd) +#define pTrackingWnd (*ppTrackingWnd) +#define pInspectWnd (*ppInspectWnd) +#define pFeedbackWnd (*ppFeedbackWnd) +#define pBugReportWnd (*ppBugReportWnd) +#define pVideoModesWnd (*ppVideoModesWnd) +#define pCompassWnd (*ppCompassWnd) +#define pPlayerNotesWnd (*ppPlayerNotesWnd) +#define pGemsGameWnd (*ppGemsGameWnd) +#define pStoryWnd (*ppStoryWnd) +#define pFindLocationWnd (*ppFindLocationWnd) +#define pAdventureRequestWnd (*ppAdventureRequestWnd) +#define pAdventureMerchantWnd (*ppAdventureMerchantWnd) +#define pAdventureStatsWnd (*ppAdventureStatsWnd) +#define pAdventureLeaderboardWnd (*ppAdventureLeaderboardWnd) +#define pLeadershipWindow (*ppLeadershipWindow) +#define pBodyTintWnd (*ppBodyTintWnd) +#define pGuildMgmtWnd (*ppGuildMgmtWnd) +#define pJournalTextWnd (*ppJournalTextWnd) +#define pJournalCatWnd (*ppJournalCatWnd) +#define pTributeBenefitWnd (*ppTributeBenefitWnd) +#define pTributeMasterWnd (*ppTributeMasterWnd) +#define pPetitionQWnd (*ppPetitionQWnd) +#define pSoulmarkWnd (*ppSoulmarkWnd) +#define pTimeLeftWnd (*ppTimeLeftWnd) +#define pTextOverlay (*ppTextOverlay) +#define pPotionBeltWnd (*ppPotionBeltWnd) +#define pDZMember (*ppDZMember) +#define pDZTimerInfo (*ppDZTimerInfo) +#define pTaskMember (*ppTaskMember) + +EQLIB_VAR DWORD __ActualVersionDate; +EQLIB_VAR DWORD __ActualVersionTime; +EQLIB_VAR DWORD __MemChecker0; +EQLIB_VAR DWORD __MemChecker1; +EQLIB_VAR DWORD __MemChecker2; +EQLIB_VAR DWORD __MemChecker3; +EQLIB_VAR DWORD __MemChecker4; +EQLIB_VAR DWORD __EncryptPad0; +EQLIB_VAR DWORD __EncryptPad1; +EQLIB_VAR DWORD __EncryptPad2; +EQLIB_VAR DWORD __EncryptPad3; +EQLIB_VAR DWORD __EncryptPad4; +EQLIB_VAR DWORD __AC1; +EQLIB_VAR DWORD __AC2; +EQLIB_VAR DWORD __AC3; +EQLIB_VAR DWORD __AC4; +EQLIB_VAR DWORD __AC5; +EQLIB_VAR DWORD __AC6; +EQLIB_VAR DWORD __AC7; +EQLIB_VAR DWORD DI8__Main; +EQLIB_VAR DWORD DI8__Keyboard; +EQLIB_VAR DWORD DI8__Mouse; +EQLIB_VAR DWORD __AltTimerReady; +EQLIB_VAR DWORD __Attack; +EQLIB_VAR DWORD __Autofire; +EQLIB_VAR DWORD __BindList; +EQLIB_VAR DWORD __Clicks; +EQLIB_VAR DWORD __CommandList; +EQLIB_VAR DWORD __CurrentMapLabel; +EQLIB_VAR DWORD __CurrentSocial; +EQLIB_VAR DWORD __DoAbilityList; +EQLIB_VAR DWORD __do_loot; +EQLIB_VAR DWORD __DrawHandler; +EQLIB_VAR DWORD __Guilds; +EQLIB_VAR DWORD __gWorld; +EQLIB_VAR DWORD __HotkeyPage; +EQLIB_VAR DWORD __HWnd; +EQLIB_VAR DWORD __InChatMode; +EQLIB_VAR DWORD __LastTell; +EQLIB_VAR DWORD __LMouseHeldTime; +EQLIB_VAR DWORD __Mouse; +EQLIB_VAR DWORD __MouseLook; +EQLIB_VAR DWORD __MouseEventTime; +EQLIB_VAR DWORD __NetStatusToggle; +EQLIB_VAR DWORD __PCNames; +EQLIB_VAR DWORD __RangeAttackReady; +EQLIB_VAR DWORD __RMouseHeldTime; +EQLIB_VAR DWORD __RunWalkState; +EQLIB_VAR DWORD __ScreenMode; +EQLIB_VAR DWORD __ScreenX; +EQLIB_VAR DWORD __ScreenY; +EQLIB_VAR DWORD __ScreenXMax; +EQLIB_VAR DWORD __ScreenYMax; +EQLIB_VAR DWORD __ServerHost; +EQLIB_VAR DWORD __ServerName; +EQLIB_VAR DWORD __ShiftKeyDown; +EQLIB_VAR DWORD __ShowNames; +EQLIB_VAR DWORD __Socials; + +EQLIB_VAR DWORD instCRaid; +EQLIB_VAR DWORD instEQZoneInfo; +EQLIB_VAR DWORD instKeypressHandler; +EQLIB_VAR DWORD pinstActiveBanker; +EQLIB_VAR DWORD pinstActiveCorpse; +EQLIB_VAR DWORD pinstActiveGMaster; +EQLIB_VAR DWORD pinstActiveMerchant; +EQLIB_VAR DWORD pinstAggroInfo; +EQLIB_VAR DWORD pinstAltAdvManager; +EQLIB_VAR DWORD pinstAuraMgr; +EQLIB_VAR DWORD pinstBandageTarget; +EQLIB_VAR DWORD pinstCamActor; +EQLIB_VAR DWORD pinstCDBStr; +EQLIB_VAR DWORD pinstCDisplay; +EQLIB_VAR DWORD pinstCEverQuest; +EQLIB_VAR DWORD pinstCharData; +EQLIB_VAR DWORD pinstCharSpawn; +EQLIB_VAR DWORD pinstControlledMissile; +EQLIB_VAR DWORD pinstControlledPlayer; +EQLIB_VAR DWORD pinstCSidlManager; +EQLIB_VAR DWORD pinstCXWndManager; +EQLIB_VAR DWORD instDynamicZone; +EQLIB_VAR DWORD pinstDZMember; +EQLIB_VAR DWORD pinstDZTimerInfo; +EQLIB_VAR DWORD pinstEQItemList; +EQLIB_VAR DWORD instEQMisc; +EQLIB_VAR DWORD pinstEQSoundManager; +EQLIB_VAR DWORD instExpeditionLeader; +EQLIB_VAR DWORD instExpeditionName; +EQLIB_VAR DWORD pinstGroup; +EQLIB_VAR DWORD pinstImeManager; +EQLIB_VAR DWORD pinstLocalPlayer; +EQLIB_VAR DWORD pinstMercenaryData; +EQLIB_VAR DWORD pinstModelPlayer; +EQLIB_VAR DWORD pinstPCData; +EQLIB_VAR DWORD pinstSkillMgr; +EQLIB_VAR DWORD pinstSpawnManager; +EQLIB_VAR DWORD pinstSpellManager; +EQLIB_VAR DWORD pinstSpellSets; +EQLIB_VAR DWORD pinstStringTable; +EQLIB_VAR DWORD pinstSwitchManager; +EQLIB_VAR DWORD pinstTarget; +EQLIB_VAR DWORD pinstTargetObject; +EQLIB_VAR DWORD pinstTargetSwitch; +EQLIB_VAR DWORD pinstTaskMember; +EQLIB_VAR DWORD pinstTrackTarget; +EQLIB_VAR DWORD pinstTradeTarget; +EQLIB_VAR DWORD instTributeActive; +EQLIB_VAR DWORD pinstViewActor; +EQLIB_VAR DWORD pinstWorldData; + +EQLIB_VAR DWORD pinstCTextOverlay; +EQLIB_VAR DWORD pinstCAudioTriggersWindow; +EQLIB_VAR DWORD pinstCCharacterSelect; +EQLIB_VAR DWORD pinstCFacePick; +EQLIB_VAR DWORD pinstCNoteWnd; +EQLIB_VAR DWORD pinstCBookWnd; +EQLIB_VAR DWORD pinstCPetInfoWnd; +EQLIB_VAR DWORD pinstCTrainWnd; +EQLIB_VAR DWORD pinstCSkillsWnd; +EQLIB_VAR DWORD pinstCSkillsSelectWnd; +EQLIB_VAR DWORD pinstCCombatSkillSelectWnd; +EQLIB_VAR DWORD pinstCFriendsWnd; +EQLIB_VAR DWORD pinstCAuraWnd; +EQLIB_VAR DWORD pinstCRespawnWnd; +EQLIB_VAR DWORD pinstCBandolierWnd; +EQLIB_VAR DWORD pinstCPotionBeltWnd; +EQLIB_VAR DWORD pinstCAAWnd; +EQLIB_VAR DWORD pinstCGroupSearchFiltersWnd; +EQLIB_VAR DWORD pinstCLoadskinWnd; +EQLIB_VAR DWORD pinstCAlarmWnd; +EQLIB_VAR DWORD pinstCMusicPlayerWnd; +EQLIB_VAR DWORD pinstCMailWnd; +EQLIB_VAR DWORD pinstCMailCompositionWnd; +EQLIB_VAR DWORD pinstCMailAddressBookWnd; +EQLIB_VAR DWORD pinstCRaidWnd; +EQLIB_VAR DWORD pinstCRaidOptionsWnd; +EQLIB_VAR DWORD pinstCBreathWnd; +EQLIB_VAR DWORD pinstCMapViewWnd; +EQLIB_VAR DWORD pinstCMapToolbarWnd; +EQLIB_VAR DWORD pinstCEditLabelWnd; +EQLIB_VAR DWORD pinstCTargetWnd; +EQLIB_VAR DWORD pinstCColorPickerWnd; +EQLIB_VAR DWORD pinstCPlayerWnd; +EQLIB_VAR DWORD pinstCOptionsWnd; +EQLIB_VAR DWORD pinstCBuffWindowNORMAL; +EQLIB_VAR DWORD pinstCBuffWindowSHORT; +EQLIB_VAR DWORD pinstCharacterCreation; +EQLIB_VAR DWORD pinstCCursorAttachment; +EQLIB_VAR DWORD pinstCCastingWnd; +EQLIB_VAR DWORD pinstCCastSpellWnd; +EQLIB_VAR DWORD pinstCSpellBookWnd; +EQLIB_VAR DWORD pinstCInventoryWnd; +EQLIB_VAR DWORD pinstCBankWnd; +EQLIB_VAR DWORD pinstCQuantityWnd; +EQLIB_VAR DWORD pinstCLootWnd; +EQLIB_VAR DWORD pinstCActionsWnd; +EQLIB_VAR DWORD pinstCCombatAbilityWnd; +EQLIB_VAR DWORD pinstCMerchantWnd; +EQLIB_VAR DWORD pinstCTradeWnd; +EQLIB_VAR DWORD pinstCSelectorWnd; +EQLIB_VAR DWORD pinstCBazaarWnd; +EQLIB_VAR DWORD pinstCBazaarSearchWnd; +EQLIB_VAR DWORD pinstCGiveWnd; +EQLIB_VAR DWORD pinstCTrackingWnd; +EQLIB_VAR DWORD pinstCInspectWnd; +EQLIB_VAR DWORD pinstCSocialEditWnd; +EQLIB_VAR DWORD pinstCFeedbackWnd; +EQLIB_VAR DWORD pinstCBugReportWnd; +EQLIB_VAR DWORD pinstCVideoModesWnd; +EQLIB_VAR DWORD pinstCTextEntryWnd; +EQLIB_VAR DWORD pinstCFileSelectionWnd; +EQLIB_VAR DWORD pinstCCompassWnd; +EQLIB_VAR DWORD pinstCPlayerNotesWnd; +EQLIB_VAR DWORD pinstCGemsGameWnd; +EQLIB_VAR DWORD pinstCTimeLeftWnd; +EQLIB_VAR DWORD pinstCPetitionQWnd; +EQLIB_VAR DWORD pinstCSoulmarkWnd; +EQLIB_VAR DWORD pinstCStoryWnd; +EQLIB_VAR DWORD pinstCJournalTextWnd; +EQLIB_VAR DWORD pinstCJournalCatWnd; +EQLIB_VAR DWORD pinstCBodyTintWnd; +EQLIB_VAR DWORD pinstCServerListWnd; +EQLIB_VAR DWORD pinstCAvaZoneWnd; +EQLIB_VAR DWORD pinstCBlockedBuffWnd; +EQLIB_VAR DWORD pinstCBlockedPetBuffWnd; +EQLIB_VAR DWORD pinstCInvSlotMgr; +EQLIB_VAR DWORD pinstCContainerMgr; +EQLIB_VAR DWORD pinstCAdventureLeaderboardWnd; +EQLIB_VAR DWORD pinstCAdventureRequestWnd; +EQLIB_VAR DWORD pinstCAltStorageWnd; +EQLIB_VAR DWORD pinstCAdventureStatsWnd; +EQLIB_VAR DWORD pinstCBarterMerchantWnd; +EQLIB_VAR DWORD pinstCBarterSearchWnd; +EQLIB_VAR DWORD pinstCBarterWnd; +EQLIB_VAR DWORD pinstCChatManager; +EQLIB_VAR DWORD pinstCDynamicZoneWnd; +EQLIB_VAR DWORD pinstCEQMainWnd; +EQLIB_VAR DWORD pinstCFellowshipWnd; +EQLIB_VAR DWORD pinstCFindLocationWnd; +EQLIB_VAR DWORD pinstCGroupSearchWnd; +EQLIB_VAR DWORD pinstCGroupWnd; +EQLIB_VAR DWORD pinstCGuildBankWnd; +EQLIB_VAR DWORD pinstCGuildMgmtWnd; +EQLIB_VAR DWORD pinstCHotButtonWnd; +EQLIB_VAR DWORD pinstCHotButtonWnd1; +EQLIB_VAR DWORD pinstCHotButtonWnd2; +EQLIB_VAR DWORD pinstCHotButtonWnd3; +EQLIB_VAR DWORD pinstCHotButtonWnd4; +EQLIB_VAR DWORD pinstCItemDisplayManager; +EQLIB_VAR DWORD pinstCItemExpTransferWnd; +EQLIB_VAR DWORD pinstCLFGuildWnd; +EQLIB_VAR DWORD pinstCMIZoneSelectWnd; +EQLIB_VAR DWORD pinstCConfirmationDialog; +EQLIB_VAR DWORD pinstCPopupWndManager; +EQLIB_VAR DWORD pinstCProgressionSelectionWnd; +EQLIB_VAR DWORD pinstCPvPStatsWnd; +EQLIB_VAR DWORD pinstCSystemInfoDialogBox; +EQLIB_VAR DWORD pinstCTargetOfTargetWnd; +EQLIB_VAR DWORD pinstCTaskTemplateSelectWnd; +EQLIB_VAR DWORD pinstCTaskWnd; +EQLIB_VAR DWORD pinstCTipWndOFDAY; +EQLIB_VAR DWORD pinstCTipWndCONTEXT; +EQLIB_VAR DWORD pinstCTitleWnd; +EQLIB_VAR DWORD pinstCContextMenuManager; +EQLIB_VAR DWORD pinstCVoiceMacroWnd; +EQLIB_VAR DWORD pinstCHtmlWnd; + +EQLIB_VAR DWORD __CastRay; +EQLIB_VAR DWORD __ConvertItemTags; +EQLIB_VAR DWORD __ExecuteCmd; +EQLIB_VAR DWORD __EQGetTime; +EQLIB_VAR DWORD __get_melee_range; +EQLIB_VAR DWORD __GetGaugeValueFromEQ; +EQLIB_VAR DWORD __GetLabelFromEQ; +EQLIB_VAR DWORD __GetXTargetType; +EQLIB_VAR DWORD __LoadFrontEnd; +EQLIB_VAR DWORD __NewUIINI; +EQLIB_VAR DWORD __ProcessGameEvents; +EQLIB_VAR DWORD CrashDetected; +EQLIB_VAR DWORD DrawNetStatus; +EQLIB_VAR DWORD Util__FastTime; +EQLIB_VAR DWORD Expansion_HoT; + +EQLIB_VAR DWORD AltAdvManager__GetCalculatedTimer; +EQLIB_VAR DWORD AltAdvManager__IsAbilityReady; +EQLIB_VAR DWORD AltAdvManager__GetAltAbility; + +EQLIB_VAR DWORD CharacterZoneClient__HasSkill; + +EQLIB_VAR DWORD CBankWnd__GetNumBankSlots; + +EQLIB_VAR DWORD CBazaarSearchWnd__HandleBazaarMsg; + +EQLIB_VAR DWORD CButtonWnd__SetCheck; + +EQLIB_VAR DWORD CChatManager__GetRGBAFromIndex; +EQLIB_VAR DWORD CChatManager__InitContextMenu; + +EQLIB_VAR DWORD CChatService__GetNumberOfFriends; +EQLIB_VAR DWORD CChatService__GetFriendName; + +EQLIB_VAR DWORD CRaces_AddModel; + +EQLIB_VAR DWORD CChatWindow__CChatWindow; +EQLIB_VAR DWORD CChatWindow__Clear; +EQLIB_VAR DWORD CChatWindow__WndNotification; + +EQLIB_VAR DWORD CComboWnd__DeleteAll; +EQLIB_VAR DWORD CComboWnd__Draw; +EQLIB_VAR DWORD CComboWnd__GetCurChoice; +EQLIB_VAR DWORD CComboWnd__GetListRect; +EQLIB_VAR DWORD CComboWnd__GetTextRect; +EQLIB_VAR DWORD CComboWnd__InsertChoice; +EQLIB_VAR DWORD CComboWnd__SetColors; +EQLIB_VAR DWORD CComboWnd__SetChoice; + +EQLIB_VAR DWORD CContainerWnd__HandleCombine; +EQLIB_VAR DWORD CContainerWnd__vftable; + +EQLIB_VAR DWORD CDisplay__CleanGameUI; +EQLIB_VAR DWORD CDisplay__GetClickedActor; +EQLIB_VAR DWORD CDisplay__GetUserDefinedColor; +EQLIB_VAR DWORD CDisplay__GetWorldFilePath; +EQLIB_VAR DWORD CDisplay__is3dON; +EQLIB_VAR DWORD CDisplay__ReloadUI; +EQLIB_VAR DWORD CDisplay__WriteTextHD2; + +EQLIB_VAR DWORD CEditBaseWnd__SetSel; + +EQLIB_VAR DWORD CEditWnd__DrawCaret; +EQLIB_VAR DWORD CEditWnd__GetCharIndexPt; +EQLIB_VAR DWORD CEditWnd__GetDisplayString; +EQLIB_VAR DWORD CEditWnd__GetHorzOffset; +EQLIB_VAR DWORD CEditWnd__GetLineForPrintableChar; +EQLIB_VAR DWORD CEditWnd__GetSelStartPt; +EQLIB_VAR DWORD CEditWnd__GetSTMLSafeText; +EQLIB_VAR DWORD CEditWnd__PointFromPrintableChar; +EQLIB_VAR DWORD CEditWnd__SelectableCharFromPoint; +EQLIB_VAR DWORD CEditWnd__SetEditable; + +EQLIB_VAR DWORD CEverQuest__ClickedPlayer; +EQLIB_VAR DWORD CEverQuest__DoTellWindow; +EQLIB_VAR DWORD CEverQuest__DropHeldItemOnGround; +EQLIB_VAR DWORD CEverQuest__dsp_chat; +EQLIB_VAR DWORD CEverQuest__Emote; +EQLIB_VAR DWORD CEverQuest__EnterZone; +EQLIB_VAR DWORD CEverQuest__GetBodyTypeDesc; +EQLIB_VAR DWORD CEverQuest__GetClassDesc; +EQLIB_VAR DWORD CEverQuest__GetClassThreeLetterCode; +EQLIB_VAR DWORD CEverQuest__GetDeityDesc; +EQLIB_VAR DWORD CEverQuest__GetLangDesc; +EQLIB_VAR DWORD CEverQuest__GetRaceDesc; +EQLIB_VAR DWORD CEverQuest__InterpretCmd; +EQLIB_VAR DWORD CEverQuest__LeftClickedOnPlayer; +EQLIB_VAR DWORD CEverQuest__LMouseUp; +EQLIB_VAR DWORD CEverQuest__RightClickedOnPlayer; +EQLIB_VAR DWORD CEverQuest__RMouseUp; +EQLIB_VAR DWORD CEverQuest__SetGameState; +EQLIB_VAR DWORD CEverQuest__UPCNotificationFlush; + +EQLIB_VAR DWORD CGaugeWnd__CalcFillRect; +EQLIB_VAR DWORD CGaugeWnd__CalcLinesFillRect; +EQLIB_VAR DWORD CGaugeWnd__Draw; + +EQLIB_VAR DWORD CGuild__FindMemberByName; + +EQLIB_VAR DWORD CHotButtonWnd__DoHotButton; + +EQLIB_VAR DWORD CInvSlotMgr__FindInvSlot; +EQLIB_VAR DWORD CInvSlotMgr__MoveItem; + +EQLIB_VAR DWORD CInvSlot__HandleRButtonUp; +EQLIB_VAR DWORD CInvSlot__SliderComplete; +EQLIB_VAR DWORD CInvSlot__GetItemBase; + +EQLIB_VAR DWORD CInvSlotWnd__DrawTooltip; + +EQLIB_VAR DWORD CItemDisplayWnd__SetSpell; +EQLIB_VAR DWORD CItemDisplayWnd__UpdateStrings; + +EQLIB_VAR DWORD CLabel__Draw; + +EQLIB_VAR DWORD CListWnd__AddColumn; +EQLIB_VAR DWORD CListWnd__AddColumn1; +EQLIB_VAR DWORD CListWnd__AddLine; +EQLIB_VAR DWORD CListWnd__AddString; +EQLIB_VAR DWORD CListWnd__CalculateFirstVisibleLine; +EQLIB_VAR DWORD CListWnd__CalculateVSBRange; +EQLIB_VAR DWORD CListWnd__ClearAllSel; +EQLIB_VAR DWORD CListWnd__CloseAndUpdateEditWindow; +EQLIB_VAR DWORD CListWnd__Compare; +EQLIB_VAR DWORD CListWnd__Draw; +EQLIB_VAR DWORD CListWnd__DrawColumnSeparators; +EQLIB_VAR DWORD CListWnd__DrawHeader; +EQLIB_VAR DWORD CListWnd__DrawItem; +EQLIB_VAR DWORD CListWnd__DrawLine; +EQLIB_VAR DWORD CListWnd__DrawSeparator; +EQLIB_VAR DWORD CListWnd__EnsureVisible; +EQLIB_VAR DWORD CListWnd__ExtendSel; +EQLIB_VAR DWORD CListWnd__GetColumnMinWidth; +EQLIB_VAR DWORD CListWnd__GetColumnWidth; +EQLIB_VAR DWORD CListWnd__GetCurSel; +EQLIB_VAR DWORD CListWnd__GetItemAtPoint; +EQLIB_VAR DWORD CListWnd__GetItemAtPoint1; +EQLIB_VAR DWORD CListWnd__GetItemData; +EQLIB_VAR DWORD CListWnd__GetItemHeight; +EQLIB_VAR DWORD CListWnd__GetItemIcon; +EQLIB_VAR DWORD CListWnd__GetItemRect; +EQLIB_VAR DWORD CListWnd__GetItemText; +EQLIB_VAR DWORD CListWnd__GetSelList; +EQLIB_VAR DWORD CListWnd__GetSeparatorRect; +EQLIB_VAR DWORD CListWnd__RemoveLine; +EQLIB_VAR DWORD CListWnd__SetColors; +EQLIB_VAR DWORD CListWnd__SetColumnJustification; +EQLIB_VAR DWORD CListWnd__SetColumnWidth; +EQLIB_VAR DWORD CListWnd__SetCurSel; +EQLIB_VAR DWORD CListWnd__SetItemColor; +EQLIB_VAR DWORD CListWnd__SetItemData; +EQLIB_VAR DWORD CListWnd__SetItemText; +EQLIB_VAR DWORD CListWnd__ShiftColumnSeparator; +EQLIB_VAR DWORD CListWnd__Sort; +EQLIB_VAR DWORD CListWnd__ToggleSel; + +EQLIB_VAR DWORD CMapViewWnd__CMapViewWnd; + +EQLIB_VAR DWORD CMerchantWnd__DisplayBuyOrSellPrice; +EQLIB_VAR DWORD CMerchantWnd__RequestBuyItem; +EQLIB_VAR DWORD CMerchantWnd__RequestSellItem; +EQLIB_VAR DWORD CMerchantWnd__SelectBuySellSlot; + +EQLIB_VAR DWORD CObfuscator__doit; + +EQLIB_VAR DWORD CSidlManager__FindScreenPieceTemplate1; +EQLIB_VAR DWORD CSidlManager__CreateLabel; + +EQLIB_VAR DWORD CSidlScreenWnd__CalculateHSBRange; +EQLIB_VAR DWORD CSidlScreenWnd__CalculateVSBRange; +EQLIB_VAR DWORD CSidlScreenWnd__ConvertToRes; +EQLIB_VAR DWORD CSidlScreenWnd__CreateChildrenFromSidl; +EQLIB_VAR DWORD CSidlScreenWnd__CSidlScreenWnd1; +EQLIB_VAR DWORD CSidlScreenWnd__CSidlScreenWnd2; +EQLIB_VAR DWORD CSidlScreenWnd__dCSidlScreenWnd; +EQLIB_VAR DWORD CSidlScreenWnd__DrawSidlPiece; +EQLIB_VAR DWORD CSidlScreenWnd__EnableIniStorage; +EQLIB_VAR DWORD CSidlScreenWnd__GetSidlPiece; +EQLIB_VAR DWORD CSidlScreenWnd__Init1; +EQLIB_VAR DWORD CSidlScreenWnd__LoadIniInfo; +EQLIB_VAR DWORD CSidlScreenWnd__LoadIniListWnd; +EQLIB_VAR DWORD CSidlScreenWnd__LoadSidlScreen; +EQLIB_VAR DWORD CSidlScreenWnd__StoreIniInfo; +EQLIB_VAR DWORD CSidlScreenWnd__StoreIniVis; +EQLIB_VAR DWORD CSidlScreenWnd__WndNotification; +EQLIB_VAR DWORD CSidlScreenWnd__GetChildItem; + +EQLIB_VAR DWORD CSkillMgr__IsAvailable; +EQLIB_VAR DWORD CSkillMgr__GetSkillCap; + +EQLIB_VAR DWORD CSliderWnd__GetValue; +EQLIB_VAR DWORD CSliderWnd__SetValue; +EQLIB_VAR DWORD CSliderWnd__SetNumTicks; + +EQLIB_VAR DWORD CSpellBookWnd__MemorizeSet; + +EQLIB_VAR DWORD CStmlWnd__AppendSTML; +EQLIB_VAR DWORD CStmlWnd__CalculateHSBRange; +EQLIB_VAR DWORD CStmlWnd__CalculateVSBRange; +EQLIB_VAR DWORD CStmlWnd__CanBreakAtCharacter; +EQLIB_VAR DWORD CStmlWnd__FastForwardToEndOfTag; +EQLIB_VAR DWORD CStmlWnd__ForceParseNow; +EQLIB_VAR DWORD CStmlWnd__GetNextTagPiece; +EQLIB_VAR DWORD CStmlWnd__GetSTMLText; +EQLIB_VAR DWORD CStmlWnd__GetVisibleText; +EQLIB_VAR DWORD CStmlWnd__InitializeWindowVariables; +EQLIB_VAR DWORD CStmlWnd__MakeStmlColorTag; +EQLIB_VAR DWORD CStmlWnd__MakeWndNotificationTag; +EQLIB_VAR DWORD CStmlWnd__SetSTMLText; +EQLIB_VAR DWORD CStmlWnd__StripFirstSTMLLines; +EQLIB_VAR DWORD CStmlWnd__UpdateHistoryString; + +EQLIB_VAR DWORD CTabWnd__Draw; +EQLIB_VAR DWORD CTabWnd__DrawCurrentPage; +EQLIB_VAR DWORD CTabWnd__DrawTab; +EQLIB_VAR DWORD CTabWnd__GetCurrentPage; +EQLIB_VAR DWORD CTabWnd__GetPageInnerRect; +EQLIB_VAR DWORD CTabWnd__GetTabInnerRect; +EQLIB_VAR DWORD CTabWnd__GetTabRect; +EQLIB_VAR DWORD CTabWnd__InsertPage; +EQLIB_VAR DWORD CTabWnd__SetPage; +EQLIB_VAR DWORD CTabWnd__SetPageRect; +EQLIB_VAR DWORD CTabWnd__UpdatePage; + +EQLIB_VAR DWORD CTextOverlay__DisplayText; + +EQLIB_VAR DWORD CTextureFont__DrawWrappedText; + +EQLIB_VAR DWORD CXMLDataManager__GetXMLData; + +EQLIB_VAR DWORD CXMLSOMDocumentBase__XMLRead; + +EQLIB_VAR DWORD CXStr__CXStr; +EQLIB_VAR DWORD CXStr__CXStr1; +EQLIB_VAR DWORD CXStr__CXStr3; +EQLIB_VAR DWORD CXStr__dCXStr; +EQLIB_VAR DWORD CXStr__operator_equal; +EQLIB_VAR DWORD CXStr__operator_equal1; +EQLIB_VAR DWORD CXStr__operator_plus_equal1; + +EQLIB_VAR DWORD CXWnd__BringToTop; +EQLIB_VAR DWORD CXWnd__Center; +EQLIB_VAR DWORD CXWnd__ClrFocus; +EQLIB_VAR DWORD CXWnd__DoAllDrawing; +EQLIB_VAR DWORD CXWnd__DrawChildren; +EQLIB_VAR DWORD CXWnd__DrawColoredRect; +EQLIB_VAR DWORD CXWnd__DrawTooltip; +EQLIB_VAR DWORD CXWnd__DrawTooltipAtPoint; +EQLIB_VAR DWORD CXWnd__GetBorderFrame; +EQLIB_VAR DWORD CXWnd__GetChildWndAt; +EQLIB_VAR DWORD CXWnd__GetClientClipRect; +EQLIB_VAR DWORD CXWnd__GetScreenClipRect; +EQLIB_VAR DWORD CXWnd__GetScreenRect; +EQLIB_VAR DWORD CXWnd__GetTooltipRect; +EQLIB_VAR DWORD CXWnd__GetWindowTextA; +EQLIB_VAR DWORD CXWnd__IsActive; +EQLIB_VAR DWORD CXWnd__IsDescendantOf; +EQLIB_VAR DWORD CXWnd__IsReallyVisible; +EQLIB_VAR DWORD CXWnd__IsType; +EQLIB_VAR DWORD CXWnd__Move; +EQLIB_VAR DWORD CXWnd__Move1; +EQLIB_VAR DWORD CXWnd__ProcessTransition; +EQLIB_VAR DWORD CXWnd__Refade; +EQLIB_VAR DWORD CXWnd__Resize; +EQLIB_VAR DWORD CXWnd__Right; +EQLIB_VAR DWORD CXWnd__SetFocus; +EQLIB_VAR DWORD CXWnd__SetFont; +EQLIB_VAR DWORD CXWnd__SetKeyTooltip; +EQLIB_VAR DWORD CXWnd__SetMouseOver; +EQLIB_VAR DWORD CXWnd__StartFade; +EQLIB_VAR DWORD CXWnd__GetChildItem; + +EQLIB_VAR DWORD CXWndManager__DrawCursor; +EQLIB_VAR DWORD CXWndManager__DrawWindows; +EQLIB_VAR DWORD CXWndManager__GetKeyboardFlags; +EQLIB_VAR DWORD CXWndManager__HandleKeyboardMsg; +EQLIB_VAR DWORD CXWndManager__RemoveWnd; + +EQLIB_VAR DWORD CDBStr__GetString; + +EQLIB_VAR DWORD EQ_Character__CastRay; +EQLIB_VAR DWORD EQ_Character__CastSpell; +EQLIB_VAR DWORD EQ_Character__Cur_HP; +EQLIB_VAR DWORD EQ_Character__GetAACastingTimeModifier; +EQLIB_VAR DWORD EQ_Character__GetCharInfo2; +EQLIB_VAR DWORD EQ_Character__GetFocusCastingTimeModifier; +EQLIB_VAR DWORD EQ_Character__GetFocusRangeModifier; +EQLIB_VAR DWORD EQ_Character__Max_Endurance; +EQLIB_VAR DWORD EQ_Character__Max_HP; +EQLIB_VAR DWORD EQ_Character__Max_Mana; +EQLIB_VAR DWORD EQ_Character__doCombatAbility; +EQLIB_VAR DWORD EQ_Character__UseSkill; +EQLIB_VAR DWORD EQ_Character__GetConLevel; +EQLIB_VAR DWORD EQ_Character__IsExpansionFlag; +EQLIB_VAR DWORD EQ_Character__TotalEffect; + +EQLIB_VAR DWORD EQ_Item__CanDrop; +EQLIB_VAR DWORD EQ_Item__CreateItemTagString; +EQLIB_VAR DWORD EQ_Item__IsStackable; + +EQLIB_VAR DWORD EQ_LoadingS__SetProgressBar; +EQLIB_VAR DWORD EQ_LoadingS__Array; + +EQLIB_VAR DWORD EQ_PC__DestroyHeldItemOrMoney; +EQLIB_VAR DWORD EQ_PC__GetAltAbilityIndex; +EQLIB_VAR DWORD EQ_PC__GetCombatAbility; +EQLIB_VAR DWORD EQ_PC__GetCombatAbilityTimer; +EQLIB_VAR DWORD EQ_PC__GetItemTimerValue; +EQLIB_VAR DWORD EQ_PC__HasLoreItem; + +EQLIB_VAR DWORD EQItemList__EQItemList; +EQLIB_VAR DWORD EQItemList__add_item; +EQLIB_VAR DWORD EQItemList__delete_item; +EQLIB_VAR DWORD EQItemList__FreeItemList; + +EQLIB_VAR DWORD EQMisc__GetActiveFavorCost; + +EQLIB_VAR DWORD EQPlayer__ChangeBoneStringSprite; +EQLIB_VAR DWORD EQPlayer__dEQPlayer; +EQLIB_VAR DWORD EQPlayer__DoAttack; +EQLIB_VAR DWORD EQPlayer__EQPlayer; +EQLIB_VAR DWORD EQPlayer__SetNameSpriteState; +EQLIB_VAR DWORD EQPlayer__SetNameSpriteTint; +EQLIB_VAR DWORD EQPlayer__IsBodyType_j; +EQLIB_VAR DWORD EQPlayer__IsTargetable; + +EQLIB_VAR DWORD EQPlayerManager__GetSpawnByID; +EQLIB_VAR DWORD EQPlayerManager__GetSpawnByName; + +EQLIB_VAR DWORD KeypressHandler__AttachAltKeyToEqCommand; +EQLIB_VAR DWORD KeypressHandler__AttachKeyToEqCommand; +EQLIB_VAR DWORD KeypressHandler__ClearCommandStateArray; +EQLIB_VAR DWORD KeypressHandler__HandleKeyDown; +EQLIB_VAR DWORD KeypressHandler__HandleKeyUp; +EQLIB_VAR DWORD KeypressHandler__SaveKeymapping; + +EQLIB_VAR DWORD MapViewMap__Clear; +EQLIB_VAR DWORD MapViewMap__SaveEx; + +EQLIB_VAR DWORD PlayerPointManager__GetAltCurrency; + +EQLIB_VAR DWORD StringTable__getString; + +EQLIB_VAR DWORD PcZoneClient__GetPcSkillLimit; + + +} +using namespace MQ2Globals; + + diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2Inlines.h b/client_files/native_autoloot/eq-core-dll/src/MQ2Inlines.h new file mode 100644 index 0000000000..2b24edd50c --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2Inlines.h @@ -0,0 +1,452 @@ +#pragma once +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +static inline PCHARINFO GetCharInfo(VOID) { + // if (!ppCharData) return NULL; + return (PCHARINFO)pCharData; +} + +static inline PCHARINFO2 GetCharInfo2(VOID) { + // if (!ppCharData) return NULL; + return ((PCHARINFO)pCharData)->pCI2->pCharInfo2; +} + + +static inline EQPlayer *GetSpawnByID(DWORD dwSpawnID) +{ + // if (dwSpawnID<3000) + // return ppEQP_IDArray[dwSpawnID]; + return pSpawnManager->GetSpawnByID(dwSpawnID); +} + +static inline PSPAWNINFO GetSpawnByDisplayedName(char* spawnName) +{ + PSPAWNINFO pSpawn = (PSPAWNINFO)pSpawnList; + while (pSpawn) { + if (!_stricmp(pSpawn->DisplayedName, spawnName)) { + return pSpawn; + } + pSpawn = pSpawn->pNext; + } +} + +static inline EQPlayer *GetSpawnByName(char *spawnName) +{ + return pSpawnManager->GetSpawnByName(spawnName); +} + +static inline PSPELL GetSpellByID(DWORD dwSpellID) +{ + if (dwSpellID==0 || dwSpellID >= TOTAL_SPELL_COUNT) + return 0; + return &(*((PSPELLMGR)pSpellMgr)->Spells[dwSpellID]); +} + +static inline PCHAR GetBodyTypeDesc(DWORD BodyTypeID) +{ + if (BodyTypeID<104 && BodyTypeID>=0) + return szBodyType[BodyTypeID]; + return "*UNKNOWN BODYTYPE"; +} + +static inline PCHAR GetClassDesc(DWORD ClassID) +{ + if (ClassID==60) + return "LDoN Recruiter"; + if (ClassID==61) + return "LDoN Merchant"; + if (ClassID==62) + return "Destructible Object"; + if (ClassID==63) + return "Tribute Master"; + if (ClassID==64) + return "Guild Tribute Master"; + if (ClassID==66) + return "Guild Banker"; + if (ClassID==67 || ClassID==68) + return "DoN Merchant"; + if (ClassID==69) + return "Fellowship Registrar"; + if (ClassID==70) + return "Merchant"; + if (ClassID==71) + return "Mercenary Liaison"; + if (ClassID==0xFF) + return "Aura"; + if (ClassID==0xFE) + return "Banner"; + if (ClassID==0xFD) + return "Campfire"; + return pEverQuest->GetClassDesc(ClassID); +} + +static inline BOOL IsAssistNPC(PSPAWNINFO pSpawn) +{ + if (GetCharInfo()->pSpawn && pSpawn) + { + DWORD nAssist; + { + if (GetCharInfo()->pSpawn->GroupAssistNPC[0]==pSpawn->SpawnID) + { + return true; + } + } + for (nAssist=0 ; nAssist < 3 ; nAssist++) + { + if (GetCharInfo()->pSpawn->RaidAssistNPC[nAssist]==pSpawn->SpawnID) + { + return true; + } + } + } + return false; +} + +static inline BOOL IsMarkedNPC(PSPAWNINFO pSpawn) +{ + if (GetCharInfo()->pSpawn && pSpawn) + { + DWORD nMark; + for (nMark=0 ; nMark < 3 ; nMark++) + { + if (GetCharInfo()->pSpawn->RaidMarkNPC[nMark]==pSpawn->SpawnID) + { + return true; + } + } + for (nMark=0 ; nMark < 3 ; nMark++) + { + if (GetCharInfo()->pSpawn->GroupMarkNPC[nMark]==pSpawn->SpawnID) + { + return true; + } + } + } + return false; +} + +#define GetCurHPS() pCharData1->Cur_HP(0) +#define GetMaxHPS() pCharData1->Max_HP(0) +#define GetMaxEndurance() pCharData1->Max_Endurance() +#define GetMaxMana() pCharData1->Max_Mana() + +static inline DWORD GetBodyType(PSPAWNINFO pSpawn) +{ + for(int i=0; i<104; i++) + { + if(((EQPlayer*)pSpawn)->IsBodyType(i,0,0)) + { + if(i==100) + { + if(((EQPlayer*)pSpawn)->IsBodyType(i,101,0)) + return 101; + if(((EQPlayer*)pSpawn)->IsBodyType(i,102,0)) + return 102; + if(((EQPlayer*)pSpawn)->IsBodyType(i,103,0)) + return 103; + } + return i; + } + } + return 0; +} + +static inline eSpawnType GetSpawnType(PSPAWNINFO pSpawn) +{ + switch(pSpawn->Type) + { + case SPAWN_PLAYER: + { + return PC; + } + case SPAWN_NPC: + if (pSpawn->Rider) + { + return MOUNT; + } + if (pSpawn->MasterID) + return PET; + if (pSpawn->Mercenary) + return MERCENARY; + + // some type of controller spawn for flying mobs - locations, speed, heading, all NaN + if (IsNaN(pSpawn->Y) && IsNaN(pSpawn->X) && IsNaN(pSpawn->Z)) + return FLYER; + + switch(GetBodyType(pSpawn)) + { + case 0: + if (pSpawn->Class==62) + return OBJECT; + return NPC; + case 1: + if (pSpawn->Race == 567) + return CAMPFIRE; + if (pSpawn->Race == 500 || (pSpawn->Race >= 553 && pSpawn->Race <= 557) || pSpawn->Race == 586) + return BANNER; + return NPC; + //case 3: + // return NPC; + case 5: + if (strstr(pSpawn->Name,"Idol") || strstr(pSpawn->Name,"Poison") || strstr(pSpawn->Name,"Rune")) + return AURA; + if (pSpawn->Class==62) + return OBJECT; + return NPC; + case 11: + if (strstr(pSpawn->Name,"Aura") || strstr(pSpawn->Name,"Circle_of") || strstr(pSpawn->Name,"Guardian_Circle") || strstr(pSpawn->Name,"Earthen_Strength")) + return AURA; + return UNTARGETABLE; + //case 21: + // return NPC; + //case 23: + // return NPC; + case 33: + return CHEST; + //case 34: + // return NPC; + //case 65: + // return TRAP; + //case 66: + // return TIMER; + //case 67: + // return TRIGGER; + case 100: + return UNTARGETABLE; + case 101: + return TRAP; + case 102: + return TIMER; + case 103: + return TRIGGER; + default: + return NPC; + } + return NPC; + case SPAWN_CORPSE: + return CORPSE; + default: + return ITEM; + } +} + +static inline FLOAT GetDistance(FLOAT X1,FLOAT Y1) +{ + FLOAT dX=X1-((PSPAWNINFO)pCharSpawn)->X; + FLOAT dY=Y1-((PSPAWNINFO)pCharSpawn)->Y; + return sqrtf(dX*dX + dY*dY); +} + +static inline FLOAT GetDistance(FLOAT X1,FLOAT Y1,FLOAT X2,FLOAT Y2) +{ + FLOAT dX=X1-X2; + FLOAT dY=Y1-Y2; + return sqrtf(dX*dX + dY*dY); +} + +#ifndef ISXEQ +static inline FLOAT GetDistance3D(FLOAT X1, FLOAT Y1, FLOAT Z1, FLOAT X2, FLOAT Y2, FLOAT Z2) +{ + FLOAT dX = X1 - X2; + FLOAT dY = Y1 - Y2; + FLOAT dZ = Z1 - Z2; + return sqrtf(dX*dX + dY*dY + dZ*dZ); +} +#endif + + +// *************************************************************************** +// Function: DistanceToSpawn +// Description: Return the distance between two spawns +// *************************************************************************** +static inline FLOAT GetDistance(PSPAWNINFO pChar, PSPAWNINFO pSpawn) +{ + FLOAT X = pChar->X - pSpawn->X; + FLOAT Y = pChar->Y - pSpawn->Y; + //FLOAT Z = pChar->Z - pSpawn->Z; + return sqrtf(X*X + Y*Y);// + Z*Z); +} + +#define DistanceToSpawn(pChar,pSpawn) GetDistance(pChar,pSpawn) + +#define _FileExists(filename) ( (_access( filename, 0 )) != -1 ) +// *************************************************************************** +// FindMount(PSPAWNINFO) - Used to find the mount of a spawn, if one +// exists. returns the spawn if one does not. +// *************************************************************************** +static inline PSPAWNINFO FindMount(PSPAWNINFO pSpawn) +{ + return (pSpawn->Mount?pSpawn->Mount:pSpawn); +} + + +// *************************************************************************** +// Function: ConColorToRGB +// Description: Returns the RGB color for a con color +// *************************************************************************** +static inline DWORD ConColorToARGB(DWORD ConColor) +{ + switch (ConColor) + { + case CONCOLOR_GREY: + return 0xFF505050; + case CONCOLOR_GREEN: + return 0xFF00FF00; + case CONCOLOR_LIGHTBLUE: + return 0xFF00FFFF; + case CONCOLOR_BLUE: + return 0xFF0000FF; + case CONCOLOR_WHITE: + return 0xFFFFFFFF; + case CONCOLOR_YELLOW: + return 0xFFFFFF00; + case CONCOLOR_RED: + default: + return 0xFFFF0000; + } +} + +static inline BOOL IsRaidMember(PSPAWNINFO pSpawn) +{ + + if (!pSpawn || !pRaid) + return false; + + for (DWORD N = 0 ; N < 72 ; N++) + { + if (pRaid->RaidMemberUsed[N] && !stricmp(pSpawn->Name,pRaid->RaidMember[N].Name)) + return true; + } + return false; +} + +static inline BOOL IsGroupMember(PSPAWNINFO pSpawn) +{ + if (!pSpawn) + return false; + + PCHARINFO pChar=GetCharInfo(); + if (!pChar || !pChar->pGroupInfo) return 0; + for (DWORD N=1; N<6; N++) + { + if (pChar->pGroupInfo->pMember[N]) + { + CHAR Name[MAX_STRING]={0}; + GetCXStr(pChar->pGroupInfo->pMember[N]->pName,Name,MAX_STRING); + if (!stricmp(pSpawn->Name,Name)) + return true; + } + } + return false; +} + +static inline PSPAWNINFO GetRaidMember(unsigned long N) +{ + if (N>=72) + return 0; + PEQRAIDMEMBER pRaidMember=&pRaid->RaidMember[N]; + + if (!pRaidMember) + + return 0; + + return (PSPAWNINFO)GetSpawnByName(pRaidMember->Name); + +} + +static inline PSPAWNINFO GetGroupMember(unsigned long N) +{ + if (N>5) + return false; + PCHARINFO pChar=GetCharInfo(); + if (!pChar->pGroupInfo) return 0; + for (unsigned long i=1; i<6; i++) + { + if (pChar->pGroupInfo->pMember[i]) + { + N--; + if (N==0) + { + CHAR Name[MAX_STRING]={0}; + GetCXStr(pChar->pGroupInfo->pMember[i]->pName,Name,MAX_STRING); + return (PSPAWNINFO)GetSpawnByName(Name); + } + } + } + return 0; +} + +#ifndef ISXEQ +static inline BOOL IsNumber(PCHAR String) +{ + if (*String==0) + return FALSE; + if (*String=='-') + String++; + while(*String) + { + if (!((*String>='0' && *String<='9') || *String=='.')) + return FALSE; + ++String; + } + return TRUE; +} +#endif +#define Warp 0 + +static inline BOOL IsNumberToComma(PCHAR String) +{ + if (*String==0) + return FALSE; + PCHAR Temp=String; + while(*String) + { + if (!((*String>='0' && *String<='9') || *String=='.')) + { + if (*String==',' && Temp!=String) + return TRUE; + return FALSE; + } + ++String; + } + return TRUE; +} + +static inline BOOL LineOfSight(PSPAWNINFO Origin, PSPAWNINFO CanISeeThis) +{ + return CastRay(Origin,CanISeeThis->Y,CanISeeThis->X,CanISeeThis->Z); +} + +static inline BOOL IsMobFleeing(PSPAWNINFO pChar, PSPAWNINFO pSpawn) +{ + FLOAT HeadingTo = (FLOAT)(atan2f(pChar->Y - pSpawn->Y, pSpawn->X - pChar->X) * 180.0f / PI + 90.0f); + FLOAT Heading = pSpawn->Heading*0.703125f; + + if (HeadingTo<0.0f) + HeadingTo += 360.0f; + else if (HeadingTo>=360.0f) + HeadingTo -= 360.0f; + + FLOAT UB = HeadingTo + 120.0f; + FLOAT LB = HeadingTo - 120.0f; + + if (LB < UB) return ((Heading < UB) && (Heading > LB)); + else return ((Heading < LB) && (Heading > UB)); +} + +static inline DWORD FixOffset(DWORD nOffset) +{ + return ((nOffset - 0x400000) + baseAddress); +} diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2Internal.h b/client_files/native_autoloot/eq-core-dll/src/MQ2Internal.h new file mode 100644 index 0000000000..a3ac1b40f3 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2Internal.h @@ -0,0 +1,998 @@ +#pragma once +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +namespace MQ2Internal { + + enum ePVPServer + { + PVP_NONE = 0, + PVP_TEAM = 1, + PVP_RALLOS = 2, + PVP_SULLON = 3, + }; + + enum eSpawnType + { + NONE=0, + PC, + MOUNT, + PET, + NPC, + CORPSE, + TRIGGER, + TRAP, + TIMER, + UNTARGETABLE, + CHEST, + ITEM, + AURA, + OBJECT, + BANNER, + CAMPFIRE, + MERCENARY, + FLYER, + NPCCORPSE=2000, + PCCORPSE, + }; + + typedef struct _SEARCHSPAWN { + DWORD MinLevel; + DWORD MaxLevel; + eSpawnType SpawnType; + DWORD SpawnID; + DWORD FromSpawnID; + FLOAT Radius; + CHAR szName[MAX_STRING]; + CHAR szBodyType[MAX_STRING]; + CHAR szRace[MAX_STRING]; + CHAR szClass[MAX_STRING]; + CHAR szLight[MAX_STRING]; + DWORD GuildID; + BOOL bSpawnID; + BOOL bNotNearAlert; + BOOL bNearAlert; + BOOL bNoAlert; + BOOL bAlert; + BOOL bLFG; + BOOL bTrader; + BOOL bLight; + BOOL bTargNext; + BOOL bTargPrev; + BOOL bGroup; + BOOL bRaid; + BOOL bGM; + BOOL bNamed; + BOOL bMerchant; + BOOL bTributeMaster; + BOOL bKnight; + BOOL bTank; + BOOL bHealer; + BOOL bDps; + BOOL bSlower; + BOOL bAura; + BOOL bBanner; + BOOL bCampfire; + DWORD NotID; + DWORD NotNearAlertList; + DWORD NearAlertList; + DWORD NoAlertList; + DWORD AlertList; + DOUBLE ZRadius; + DOUBLE FRadius; + FLOAT xLoc; + FLOAT yLoc; + BOOL bKnownLocation; + BOOL bNoPet; + DWORD SortBy; + BOOL bNoGuild; + BOOL bLoS; + BOOL bExactName; + BOOL bTargetable; + } SEARCHSPAWN, *PSEARCHSPAWN; + + static enum SearchItemFlag + { + Lore=1, + NoDrop=2, + NoRent=3, + Magic=4, + Book=5, + Pack=6, + Combinable=7, + Summoned=8, + Weapon=9, + Normal=10, + Instrument=11, + + // item locations... + Worn=100, + Inventory=101, + Bank=102, + Merchant=103, + Corpse=104, + SharedBank=105, + Trade=106, + Bazaar=107, + Inspect=108, + Enviro=109, + + }; + + typedef struct _SEARCHITEM { + CHAR FlagMask[MAX_STRING]; + CHAR Flag[MAX_STRING]; + + CHAR szName[MAX_STRING]; + DWORD ID; + + } SEARCHITEM, *PSEARCHITEM; + + typedef struct _SWHOFILTER { + BOOL Lastname; + BOOL Class; + BOOL Race; + BOOL Body; + BOOL Level; + BOOL Distance; + BOOL GM; + BOOL Guild; + BOOL LD; + BOOL Sneak; + BOOL Anon; + BOOL LFG; + BOOL NPCTag; + BOOL SpawnID; + BOOL Trader; + BOOL AFK; + BOOL Light; + BOOL Holding; + BOOL ConColor; + BOOL Invisible; + } SWHOFILTER, *PSWHOFILTER; + + typedef struct _SWHOSORT { + CHAR szName[MAX_STRING]; + CHAR szLine[MAX_STRING]; + BYTE Level; + DWORD SpawnID; + FLOAT Distance; + DWORD Class; + DWORD Race; + DWORD GuildID; + } SWHOSORT, *PSWHOSORT; + + typedef struct _CONNECTION { + SOCKET socket; + BOOL Auth; + struct _CONNECTION *pNext; + } CONNECTION, *PCONNECTION; + + typedef struct _CHATBUF { + CHAR szText[MAX_STRING]; + struct _CHATBUF *pNext; + } CHATBUF, *PCHATBUF; + + + typedef struct _MOUSEINFO { + DWORD X; + DWORD Y; + DWORD SpeedX; + DWORD SpeedY; + } MOUSEINFO, *PMOUSEINFO; + + + typedef struct _SPELLINFO { + CHAR Name[32]; + CHAR Target[32]; + } SPELLINFO, *PSPELLINFO; + + typedef struct _PACKLOC { + DWORD X; + DWORD Y; + } PACKLOC, *PPACKLOC; + + typedef struct _MACROBLOCK { + CHAR Line[MAX_STRING]; + CHAR SourceFile[MAX_STRING]; + DWORD LineNumber; + BOOL MacroCmd; +#ifdef MQ2_PROFILING + DWORD ExecutionCount; + LONGLONG ExecutionTime; +#endif + struct _MACROBLOCK *pNext; + struct _MACROBLOCK *pPrev; + } MACROBLOCK, *PMACROBLOCK; + + + typedef struct _ALERT { + SEARCHSPAWN SearchSpawn; + struct _ALERT *pNext; + } ALERT, *PALERT; + + typedef struct _ALERTLIST { + DWORD Id; + PALERT pAlert; + struct _ALERTLIST *pNext; + } ALERTLIST, *PALERTLIST; + + typedef struct _MQTIMER { + CHAR szName[MAX_VARNAME]; + ULONG Original; + ULONG Current; + struct _MQTIMER *pNext; + struct _MQTIMER *pPrev; + } MQTIMER, *PMQTIMER; + + typedef struct _KEYPRESS { + WORD KeyId; + BOOL Pressed; + struct _KEYPRESS *pNext; + } KEYPRESS, *PKEYPRESS; + + typedef struct _DIKEYID { + CHAR szName[32]; + WORD Id; + } DIKEYID, *PDIKEYID; + + typedef struct _ITEMDB { + struct _ITEMDB *pNext; + DWORD ID; + CHAR szName[256]; + } ITEMDB, *PITEMDB; + + typedef struct _DEFINE { + struct _DEFINE *pNext; + CHAR szName[MAX_STRING]; + CHAR szReplace[MAX_STRING]; + } DEFINE, *PDEFINE; + + typedef struct _EVENTLIST { + struct _EVENTLIST *pNext; + CHAR szName[MAX_STRING]; + CHAR szMatch[MAX_STRING]; + PMACROBLOCK pEventFunc; +#ifdef USEBLECHEVENTS + DWORD BlechID; +#endif + } EVENTLIST, *PEVENTLIST; + + + typedef struct _ALIAS { + struct _ALIAS *pNext; + struct _ALIAS *pLast; + CHAR szName[MAX_STRING]; + CHAR szCommand[MAX_STRING]; + } ALIAS, *PALIAS; + + typedef struct _SUB { + struct _SUB *pNext; + struct _SUB *pLast; + CHAR szOrig[MAX_STRING]; + CHAR szSub[MAX_STRING]; + } SUB, *PSUB; + + typedef struct _MQCOMMAND { + CHAR Command[64]; + fEQCommand Function; + BOOL EQ; + BOOL Parse; + BOOL InGameOnly; + struct _MQCOMMAND* pLast; + struct _MQCOMMAND* pNext; + } MQCOMMAND, *PMQCOMMAND; + + + typedef struct _FILTER { + struct _FILTER *pNext; + CHAR FilterText[MAX_STRING]; + DWORD Length; + PBOOL pEnabled; + } FILTER, *PFILTER; + + typedef struct _PARMLIST { + CHAR szName[MAX_STRING]; + DWORD (__cdecl *fAddress)(PCHAR, PCHAR, PSPAWNINFO); + } PARMLIST, *PPARMLIST; + + typedef struct _MQXMLFile + { + char szFilename[MAX_PATH]; + _MQXMLFile *pLast; + _MQXMLFile *pNext; + } MQXMLFILE, *PMQXMLFILE; + + typedef struct _MQBENCH + { + CHAR szName[64]; + DWORD Entry; + DWORD LastTime; + DWORD TotalTime; + DWORD Count; + } MQBENCH, *PMQBENCH; + + typedef struct _MQGroundPending + { + PGROUNDITEM pGroundItem; + struct _MQGroundPending *pLast; + struct _MQGroundPending *pNext; + } MQGROUNDPENDING, *PMQGROUNDPENDING; + + typedef struct _MQPlugin + { + char szFilename[MAX_PATH]; + HMODULE hModule; + float fpVersion; + + fMQInitializePlugin Initialize; + fMQShutdownPlugin Shutdown; + fMQZoned Zoned; + fMQWriteChatColor WriteChatColor; + fMQPulse Pulse; + fMQIncomingChat IncomingChat; + fMQCleanUI CleanUI; + fMQReloadUI ReloadUI; + fMQDrawHUD DrawHUD; + fMQSetGameState SetGameState; + fMQSpawn AddSpawn; + fMQSpawn RemoveSpawn; + fMQGroundItem AddGroundItem; + fMQGroundItem RemoveGroundItem; + fMQBeginZone BeginZone; + fMQEndZone EndZone; + struct _MQPlugin* pLast; + struct _MQPlugin* pNext; + } MQPLUGIN, *PMQPLUGIN; + + typedef struct _actordefentry { + unsigned int Def; + char Name[256]; + } ACTORDEFENTRY, *PACTORDEFENTRY; + + class CAutoLock { + public: + inline void Lock() { if (!bLocked) { EnterCriticalSection(pLock); bLocked = TRUE; }} + inline void Unlock() { if (bLocked) { LeaveCriticalSection(pLock); bLocked = FALSE; }} + CAutoLock(LPCRITICAL_SECTION _pLock) { bLocked = FALSE; pLock = _pLock; Lock(); } + ~CAutoLock() { Unlock(); } + + private: + LPCRITICAL_SECTION pLock; + BOOL bLocked; + }; + + class CCustomWnd : public CSidlScreenWnd + { + public: + CCustomWnd(CXStr *screenpiece):CSidlScreenWnd(0,screenpiece,-1,1,0) + { + CreateChildrenFromSidl(); + pXWnd()->Show(1,1); + ReplacevfTable(); + CloseOnESC=0; + } + + CCustomWnd(char *screenpiece):CSidlScreenWnd(0,&CXStr(screenpiece),-1,1,0) + { + CreateChildrenFromSidl(); + pXWnd()->Show(1,1); + ReplacevfTable(); + CloseOnESC=0; + } + + ~CCustomWnd() + { + RemovevfTable(); + } + + // int WndNotification(CXWnd *pWnd, unsigned int Message, void *unknown) + // { + // return CSidlScreenWnd::WndNotification(pWnd,Message,unknown); + // } + + void ReplacevfTable() + { + OldvfTable=((_CSIDLWND*)this)->pvfTable; + PCSIDLWNDVFTABLE NewvfTable=new CSIDLWNDVFTABLE; + memcpy(NewvfTable,OldvfTable,sizeof(CSIDLWNDVFTABLE)); + ((_CSIDLWND*)this)->pvfTable=NewvfTable; + } + + void RemovevfTable() + { + PCSIDLWNDVFTABLE NewvfTable=((_CSIDLWND*)this)->pvfTable; + ((_CSIDLWND*)this)->pvfTable=OldvfTable; + delete NewvfTable; + } + + void SetvfTable(DWORD index, DWORD value) + { + DWORD* vtable=(DWORD*)((_CSIDLWND*)this)->pvfTable; + vtable[index]=value; + } + + PCSIDLWNDVFTABLE OldvfTable; + + // inline CXWnd *GetChildItem(const char *Name) {return CSidlScreenWnd::GetChildItem(Name);}; + }; + +#if !defined(ISXEQ) && !defined(ISXEQ_LEGACY) + /* CIndex class stolen from teqim - Lax */ + template + class CIndex + { + public: + CIndex() + { + InitializeCriticalSection(&CS); + Size=0; + List=0; + } + + CIndex(unsigned long InitialSize) + { + InitializeCriticalSection(&CS); + Size=0; + List=0; + Resize(InitialSize); + } + + ~CIndex() + {// user is responsible for managing elements + CAutoLock L(&CS); + if (List) + free(List); + List=0; + Size=0; + DeleteCriticalSection(&CS); + } + + void Cleanup() + { + for (unsigned long i = 0 ; i < Size ; i++) + { + if (List[i]) + { + delete List[i]; + List[i]=0; + } + } + } + + void Resize(unsigned long NewSize) + { + CAutoLock L(&CS); + if (List) + { + if (NewSize>Size) + { + // because we want to zero out the unused portions, we wont use realloc + Any *NewList=(Any*)malloc(NewSize*sizeof(Any)); + memset(NewList,0,NewSize*sizeof(Any)); + memcpy(NewList,List,Size*sizeof(Any)); + free(List); + List=NewList; + Size=NewSize; + } + } + else + { + List=(Any*)malloc(NewSize*sizeof(Any)); + memset(List,0,NewSize*sizeof(Any)); + Size=NewSize; + } + } + + // gets the next unused index, resizing if necessary + inline unsigned long GetUnused() + { + unsigned long i; + CAutoLock L(&CS); + for (i = 0 ; i < Size ; i++) + { + if (!List[i]) + return i; + } + Resize(Size+10); + return i; + } + + unsigned long Count() + { + CAutoLock L(&CS); + unsigned long ret=0; + for (unsigned long i = 0 ; i < Size ; i++) + { + if (List[i]) + ret++; + } + return ret; + } + + unsigned long Size; + Any *List; + + inline Any& operator+=(Any& Value){return List[GetUnused()]=Value;} + inline Any& operator[](unsigned long Index){return List[Index];} + CRITICAL_SECTION CS; + }; +#endif + + typedef struct _MQ2VarPtr + { + union { + PVOID Ptr; + FLOAT Float; + DWORD DWord; + ARGBCOLOR Argb; + int Int; + UCHAR Array[4]; + }; + } MQ2VARPTR, *PMQ2VARPTR; + +#ifndef ISXEQ + + typedef struct _MQ2TypeVar + { + class MQ2Type *Type; + union { + MQ2VARPTR VarPtr; + PVOID Ptr; + FLOAT Float; + DWORD DWord; + ARGBCOLOR Argb; + int Int; + UCHAR Array[4]; + }; + } MQ2TYPEVAR, *PMQ2TYPEVAR; + + typedef struct _MQ2TypeMember + { + DWORD ID; + PCHAR Name; + } MQ2TYPEMEMBER, *PMQ2TYPEMEMBER; + + typedef BOOL (__cdecl *fMQData)(PCHAR szIndex, MQ2TYPEVAR &Ret); + + typedef struct _MQ2DataItem + { + CHAR Name[64]; + fMQData Function; + } MQ2DATAITEM, *PMQ2DATAITEM; + + LEGACY_API BOOL AddMQ2Type(class MQ2Type &Type); + LEGACY_API BOOL RemoveMQ2Type(class MQ2Type &Type); + + typedef struct _DATAVAR { + CHAR szName[MAX_STRING]; + MQ2TYPEVAR Var; + struct _DATAVAR *pNext; + struct _DATAVAR *pPrev; + struct _DATAVAR **ppHead; + } DATAVAR, *PDATAVAR; + + class MQ2Type + { + public: + inline MQ2Type(PCHAR NewName) + { + strncpy(TypeName,NewName,32); + TypeName[31]=0; + Official=AddMQ2Type(*this); + pInherits=0; + } + + inline void InitializeMembers(PMQ2TYPEMEMBER MemberArray) + { + for (unsigned long i = 0 ; MemberArray[i].ID ; i++) + { + AddMember(MemberArray[i].ID,MemberArray[i].Name); + } + } + + inline ~MQ2Type() + { + if (Official) + RemoveMQ2Type(*this); + Members.Cleanup(); + } + + virtual bool FromData(MQ2VARPTR &VarPtr, MQ2TYPEVAR &Source)=0; + virtual bool FromString(MQ2VARPTR &VarPtr, PCHAR Source)=0; + virtual void InitVariable(MQ2VARPTR &VarPtr) {VarPtr.Ptr=0;} + virtual void FreeVariable(MQ2VARPTR &VarPtr) {} + + virtual bool GetMember(MQ2VARPTR VarPtr, PCHAR Member, PCHAR Index, MQ2TYPEVAR &Dest)=0; + // virtual bool SetMember(PVOID Ptr, PCHAR Member, DWORD Index, MQ2TYPEVAR &Data)=0; + virtual bool ToString(MQ2VARPTR VarPtr, PCHAR Destination) + { + strcpy(Destination,TypeName); + return true; + } + + inline PCHAR GetName() {return &TypeName[0];} + + PCHAR GetMemberName(DWORD ID) + { + for (unsigned long N=0 ; N < Members.Size ; N++) + { + if (PMQ2TYPEMEMBER pMember = Members[N]) + { + if (pMember->ID==ID) + return &pMember->Name[0]; + } + } + return 0; + } + + BOOL GetMemberID(PCHAR Name, DWORD &Result) + { + unsigned long N=MemberMap[Name]; + if (N==0) + return false; + N--; + PMQ2TYPEMEMBER pMember = Members[N]; + Result=pMember->ID; + return true; + } + PMQ2TYPEMEMBER FindMember(PCHAR Name) + { + unsigned long N=MemberMap[Name]; + if (!N) + return 0; + N--; + return Members[N]; + } + BOOL InheritedMember(PCHAR Name) + { + if (!pInherits || !pInherits->FindMember(Name)) + return FALSE; + return TRUE; + } + void SetInheritance(MQ2Type *pNewInherit) + { + pInherits=pNewInherit; + } + + protected: + + inline BOOL AddMember(DWORD ID, PCHAR Name) + { + unsigned long N=MemberMap[Name]; + if (N>0) + return false; + N=Members.GetUnused(); + MemberMap[Name]=N+1; + PMQ2TYPEMEMBER pMember = new MQ2TYPEMEMBER; + pMember->Name=Name; + pMember->ID=ID; + Members[N]=pMember; + return true; + } + + inline BOOL RemoveMember(PCHAR Name) + { + unsigned long N=MemberMap[Name]; + if (N==0) + return false; + N--; + PMQ2TYPEMEMBER pMember = Members[N]; + delete pMember; + Members[N]=0; + } + + CHAR TypeName[32]; + BOOL Official; + CIndex Members; + map MemberMap; + MQ2Type *pInherits; + }; + + class CDataArray + { + public: + CDataArray() + { + pType=0; + nExtents=0; + pExtents=0; + pData=0; + TotalElements=0; + } + + CDataArray(MQ2Type *Type, PCHAR Index, PCHAR Default, BOOL ByData=FALSE) + { + nExtents=1; + + // count number of , 's + if (PCHAR pComma=strchr(Index,',')) + { + nExtents++; + while(pComma=strchr(&pComma[1],',')) + { + nExtents++; + } + } + + // allocate extents + + pExtents=(DWORD*)malloc(sizeof(DWORD)*nExtents); + + TotalElements=1; + + // read extents + PCHAR pStart=Index; + unsigned long N; + for (N = 0 ; N < nExtents ; N++) + { + PCHAR pComma=strchr(pStart,','); + if (pComma) + *pComma=0; + + pExtents[N]=atoi(pStart); + TotalElements*=pExtents[N]; + if (pComma) + { + *pComma=','; + pStart=&pComma[1]; + } + } + + pData = (MQ2VARPTR*) malloc(sizeof(MQ2VARPTR)*TotalElements); + + if (pType=Type) + for (N = 0 ; N < TotalElements ; N++) + { + pType->InitVariable(pData[N]); + if (ByData) + pType->FromData(pData[N],*(MQ2TYPEVAR *)Default); + else + pType->FromString(pData[N],Default); + } + + } + + void Delete() + { + if (pExtents) + free(pExtents); + if (pType && pData) + for (unsigned long N = 0 ; N < TotalElements ; N++) + { + pType->FreeVariable(pData[N]); + } + free(pData); + pType=0; + nExtents=0; + pExtents=0; + pData=0; + TotalElements=0; + } + + int GetElement(PCHAR Index) + { + DWORD Element=0; + if (nExtents==1) + { + if (strchr(Index,',')) + return -1; + Element=atoi(Index)-1; + if (Element>=TotalElements) + return -1; + return Element; + } + else + { + DWORD nGetExtents = 1; + + if (PCHAR pComma=strchr(Index,',')) + { + nGetExtents++; + while(pComma=strchr(&pComma[1],',')) + { + nGetExtents++; + } + } + if (nGetExtents!=nExtents) + return -1; + + // read extents + PCHAR pStart=Index; + unsigned long N; + for (N = 0 ; N < nExtents ; N++) + { + PCHAR pComma=strchr(pStart,','); + if (pComma) + *pComma=0; + + DWORD Temp=atoi(pStart)-1; + if (Temp>=pExtents[N]) + return -1; + for (unsigned long i = N+1 ; i < nExtents; i++) + Temp*=pExtents[i]; + Element+=Temp; + + if (pComma) + { + *pComma=','; + pStart=&pComma[1]; + } + } + if (Element>=TotalElements) + { + // bug in array logic + OutputDebugString("Bug in array logic\n"); + return -1; + } + return Element; + } + } + + BOOL GetElement(PCHAR Index, MQ2TYPEVAR &Dest) + { + DWORD Element=0; + if (nExtents==1) + { + if (strchr(Index,',')) + return FALSE; + Element=atoi(Index)-1; + if (Element>=TotalElements) + return FALSE; + Dest.Type=pType; + Dest.VarPtr=pData[Element]; + return TRUE; + } + else + { + DWORD nGetExtents = 1; + + if (PCHAR pComma=strchr(Index,',')) + { + nGetExtents++; + while(pComma=strchr(&pComma[1],',')) + { + nGetExtents++; + } + } + if (nGetExtents!=nExtents) + return FALSE; + + // read extents + PCHAR pStart=Index; + unsigned long N; + for (N = 0 ; N < nExtents ; N++) + { + PCHAR pComma=strchr(pStart,','); + if (pComma) + *pComma=0; + + DWORD Temp=atoi(pStart)-1; + if (Temp>=pExtents[N]) + return FALSE; + for (unsigned long i = N+1 ; i < nExtents; i++) + Temp*=pExtents[i]; + Element+=Temp; + + if (pComma) + { + *pComma=','; + pStart=&pComma[1]; + } + } + if (Element>=TotalElements) + { + // bug in array logic + OutputDebugString("Bug in array logic\n"); + return FALSE; + } + Dest.Type=pType; + Dest.VarPtr=pData[Element]; + return TRUE; + } + + } + + ~CDataArray() + { + if (pExtents) + free(pExtents); + if (pType && pData) + for (unsigned long N = 0 ; N < TotalElements ; N++) + { + pType->FreeVariable(pData[N]); + } + free(pData); + } + + MQ2Type *pType; + DWORD nExtents; + DWORD *pExtents; + MQ2VARPTR *pData; + DWORD TotalElements; + }; +#endif + + typedef struct _MQRANK + { + MQ2VARPTR VarPtr; + MQ2VARPTR Value; + } MQRANK, *PMQRANK; + + static int pMQRankFloatCompare(const void *A, const void *B) + { + if ((*(PMQRANK*)A)->Value.Float==(*(PMQRANK*)B)->Value.Float) + return 0; + if ((*(PMQRANK*)A)->Value.Float<(*(PMQRANK*)B)->Value.Float) + return -1; + return 1; + } + + static int MQRankFloatCompare(const void *A, const void *B) + { + if (((PMQRANK)A)->Value.Float==((PMQRANK)B)->Value.Float) + return 0; + if (((PMQRANK)A)->Value.Float<((PMQRANK)B)->Value.Float) + return -1; + return 1; + } + + static int MQRankFloatCompareReverse(const void *A, const void *B) + { + if (((PMQRANK)A)->Value.Float==((PMQRANK)B)->Value.Float) + return 0; + if (((PMQRANK)A)->Value.Float>((PMQRANK)B)->Value.Float) + return -1; + return 1; + } + + static int MQRankCompare(const void *A, const void *B) + { + if (((PMQRANK)A)->Value.DWord==((PMQRANK)B)->Value.DWord) + return 0; + if (((PMQRANK)A)->Value.DWord<((PMQRANK)B)->Value.DWord) + return -1; + return 1; + } + + static int MQRankCompareReverse(const void *A, const void *B) + { + if (((PMQRANK)A)->Value.DWord==((PMQRANK)B)->Value.DWord) + return 0; + if (((PMQRANK)A)->Value.DWord>((PMQRANK)B)->Value.DWord) + return -1; + return 1; + } + +#ifndef ISXEQ + typedef struct _MACROSTACK { + PMACROBLOCK Location; + struct _MACROSTACK *pNext; + CHAR Return[MAX_STRING]; + PDATAVAR Parameters; + PDATAVAR LocalVariables; + } MACROSTACK, *PMACROSTACK; + + typedef struct _EVENTQUEUE { + struct _EVENTQUEUE *pPrev; + struct _EVENTQUEUE *pNext; + DWORD Type; + PEVENTLIST pEventList; + PDATAVAR Parameters; + } EVENTQUEUE, *PEVENTQUEUE; +#endif + +}; +using namespace MQ2Internal; + diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2ItemDisplay.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2ItemDisplay.cpp new file mode 100644 index 0000000000..88afebb047 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2ItemDisplay.cpp @@ -0,0 +1,642 @@ +// MQ2ItemDisplay.cpp : Defines the entry point for the DLL application. +// + +// PLUGIN_API is only to be used for callbacks. All existing callbacks at this time +// are shown below. Remove the ones your plugin does not use. Always use Initialize +// and Shutdown for setup and cleanup, do NOT do it in DllMain. + + +#ifndef ISXEQ +#include "MQ2Main.h" +#else +#include "../ISXEQClient.h" +#include "ISXEQItemDisplay.h" +#endif + +// thanks, finally, SOE. we'll leave this here for a while and eventually remove it +#define DISABLE_TOOLTIP_TIMERS + +void Comment(PSPAWNINFO pChar, PCHAR szLine); + +extern "C" { + __declspec(dllexport) ITEMINFO g_Item; + CONTENTS g_Contents; +} + +// *************************************************************************** +// Function: ItemDisplayHook +// Description: Our Item display hook +// *************************************************************************** +class ItemDisplayHook +{ + typedef enum {None = 0, Clicky, Proc, Worn, Focus, Scroll} SEffectType; + + static bool bNoSpellTramp; + static SEffectType eEffectType; +public: + bool CXStrReplace (PCXSTR * Str, const char * cFind, const char * cReplace) + { + char cTemp[2048]; + DWORD dwSize = GetCXStr (*Str, cTemp, sizeof (cTemp)); + if (dwSize > 0 && dwSize < sizeof (cTemp) - 20) { + char * cPtr = strstr (cTemp, cFind); + if (cPtr != NULL) { + char * cDup = strdup (cPtr); + + strcpy (cPtr, cReplace); + strcpy (cPtr + strlen (cReplace), cDup + strlen (cFind)); + + free (cDup); + + SetCXStr (Str, cTemp); + return true; + } + } + + return false; + } + + const char * GetRaceThreeLetterCode (int iRace) + { + switch (iRace) + { + case 1: return ("HUM"); + case 2: return ("BAR"); + case 3: return ("ERU"); + case 4: return ("ELF"); + case 5: return ("HIE"); + case 6: return ("DEF"); + case 7: return ("HEF"); + case 8: return ("DWF"); + case 9: return ("TRL"); + case 10:return ("OGR"); + case 11:return ("HLF"); + case 12:return ("GNM"); + case 13:return ("IKS"); + case 14:return ("VAH"); + case 15:return ("FRG"); + case 16:return ("DRK"); + case 17:return ("SHD"); //shroud + } + + return ("UNKNOWN RACE"); + } + int GetDmgBonus (PCXSTR * Str) + { + char cTemp[2048]; + INT dmgbonuspos; + INT dmgbonus = 0; + INT badcharpos; + + GetCXStr(*Str, cTemp, sizeof (cTemp)); + + string ItemDisplay; + ItemDisplay = cTemp; + + char ActualDmgBonus[3]; + + dmgbonuspos = ItemDisplay.find("Dmg Bonus:"); + + if (dmgbonuspos != string::npos) { + dmgbonuspos = dmgbonuspos + 11; + ItemDisplay = ItemDisplay.substr(dmgbonuspos,3); + + badcharpos = ItemDisplay.find(" "); + + if (badcharpos != string::npos) { //found blank + ItemDisplay = ItemDisplay.substr(0,2); + }else{ + //badcharpos = tmpActualDmgBonus.find("<"); + badcharpos = ItemDisplay.find("<"); + if (badcharpos != string::npos) { //found < + ItemDisplay = ItemDisplay.substr(0,2); + } + } + + strcpy (ActualDmgBonus,ItemDisplay.c_str()); + dmgbonus = atoi(ActualDmgBonus); + } + + return dmgbonus; + } + + VOID SetSpell_Trampoline(int SpellID,bool HasSpellDescr); + VOID SetSpell_Detour(int SpellID,bool HasSpellDescr) + { + PEQSPELLINFOWINDOW This=(PEQSPELLINFOWINDOW)this; + PCHARINFO pCharInfo = NULL; + if (NULL == (pCharInfo = GetCharInfo())) return; + PSPELL pSpell = GetSpellByID(SpellID); + if (pSpell == NULL) { + return; + } + CHAR out[MAX_STRING] = {0}; + CHAR temp[MAX_STRING] = {0}; + if (!bNoSpellTramp) { + SetSpell_Trampoline(SpellID,HasSpellDescr); + strcpy(out,"
"); + } else { + char * cColour = "FF0000", * cName = "Blub"; + + switch (eEffectType) + { + case Clicky: + cColour = "00FF00"; + cName = "Clicky"; + break; + case Proc: + cColour = "FF00FF"; + cName = "Proc"; + break; + case Worn: + cColour = "FFFF00"; + cName = "Worn"; + break; + case Focus: + cColour = "9F9F00"; + cName = "Focus"; + break; + case Scroll: + cColour = "9F9F9F"; + cName = "Scroll"; + break; + } + + sprintf (out, "
Spell Info for %s effect: %s
", cColour, cName, pSpell->Name); + } + if (pLocalPlayer && pLocalPlayer->Data.GM) + { + sprintf(temp, "ID: %04d                            ", pSpell->ID); + strcat(out, temp); + } + DWORD Tics=GetSpellDuration(pSpell,pCharInfo->pSpawn); + if (Tics==0xFFFFFFFF) + strcat(out, "Duration: Permanent
" ); + else if (Tics==0xFFFFFFFE) + strcat(out, "Duration: Unknown
" ); + else if (Tics==0) { + // It's "instant", who cares? + strcat(out,"
"); + } + else { + sprintf(temp, "Duration: %1.1f minutes
",(float)((Tics*6.0f)/60.0f)); + strcat(out, temp); + } + + sprintf(temp, "RecoveryTime: %1.2f       RecastTime: %1.2f
", (float)(pSpell->FizzleTime/1000.0f), (float)(pSpell->RecastTime/1000.0f) ); + strcat(out,temp); + + if (pSpell->Range > 0.0f ) { + sprintf(temp, "Range: %1.0f", pSpell->Range ); + strcat(out,temp); + if ( pSpell->PushBack == 0.0f && pSpell->AERange == 0.0f) + strcat(out, "
"); + } + + if (pSpell->PushBack != 0.0f ) { + if (pSpell->Range > 0.0f ) + strcat(out, "                      " ); + sprintf(temp, "PushBack: %1.1f", pSpell->PushBack ); + strcat(out, temp); + if (pSpell->AERange == 0.0f || pSpell->Range > 0.0f ) + strcat(out, "
" ); + } + + if (pSpell->AERange > 0.0f ) { + if (pSpell->Range > 0.0f) + strcat(out, "                      " ); + else if (pSpell->PushBack > 0.0f ) + strcat(out, "                 " ); + sprintf(temp, "AERange: %1.0f
", pSpell->AERange ); + strcat(out, temp); + } + + if (pSpell->TargetType != 0x06 && pSpell->TargetType != 0x0e && pSpell->TargetType != 0x03 && pSpell->TargetType != 0x28 && pSpell->TargetType != 0x29 ) { + if (pSpell->SpellType == 0) { // Ziggy: Only show resist type for detrimental spells + switch(pSpell->Resist) + { + case 9: strcat(out, "Resist: Corruption" ); break; + case 7: strcat(out, "Resist: Prismatic[Avg]" ); break; // Ziggy - Added Reminder which.. + case 6: strcat(out, "Resist: Chromatic[Low]" ); break; // ..is what type of resist + case 5: strcat(out, "Resist: Disease" ); break; + case 4: strcat(out, "Resist: Poison" ); break; + case 3: strcat(out, "Resist: Cold/Ice" ); break; + case 2: strcat(out, "Resist: Fire" ); break; + case 1: strcat(out, "Resist: Magic" ); break; + case 0: strcat(out, "Resist: Unresistable"); break; + } + + if (pSpell->ResistAdj != 0 ) { + sprintf(temp, "   (Resist Adj.: %d)
", pSpell->ResistAdj ); + strcat(out,temp); + } else { + strcat(out,"
"); + } + } + } + + strcat(out, "
" ); + ShowSpellSlotInfo(pSpell,&out[strlen(out)]); + + //show usable classes routine by Koad// + + + bool bUseableClasses = false; + + if (pLocalPlayer && pLocalPlayer->Data.GM) + { + strcat(out, "
"); + for (int j = 0; j < 16; j++) { // Ziggy - output will word wrap properly now + if (pSpell->Level[j] > 0 && pSpell->Level[j] <= 70) { + if (bUseableClasses) strcat(out, ", "); + + sprintf(temp, "%s(%d)", GetClassDesc(j + 1), pSpell->Level[j]); + strcat(out, temp); + bUseableClasses = true; + } + } + if (bUseableClasses) strcat(out, "

"); + } + + if (pSpell->CastOnYou[0]) { + sprintf(temp, "Cast on you: %s
", pSpell->CastOnYou); + strcat(out,temp); + } + + if (pSpell->CastOnAnother[0]) { + sprintf(temp, "Cast on another: %s
", pSpell->CastOnAnother); + strcat(out,temp); + } + + if (pSpell->WearOff[0]) { + sprintf(temp, "Wears off: %s
", pSpell->WearOff); + strcat(out,temp); + } + + if (out[0]!=17) { + strcat(out,"
"); + AppendCXStr(&This->ItemInfo,&out[0]); + } + } + + VOID ItemSetSpell_Detour(int SpellID,bool HasSpellDescr) + { + PEQITEMWINDOW This=(PEQITEMWINDOW)this; + PCHARINFO pCharInfo = NULL; + if (NULL == (pCharInfo = GetCharInfo())) return; + PSPELL pSpell = GetSpellByID(SpellID); + if (pSpell == NULL) { + return; + } + + CHAR out[MAX_STRING] = {0}; + CHAR temp[MAX_STRING] = {0}; + if (!bNoSpellTramp) { + SetSpell_Trampoline(SpellID,HasSpellDescr); + strcpy(out,"
"); + } else { + char * cColour = "FF0000", * cName = "Blub"; + + switch (eEffectType) + { + case Clicky: + cColour = "00FF00"; + cName = "Clicky"; + break; + case Proc: + cColour = "FF00FF"; + cName = "Proc"; + break; + case Worn: + cColour = "FFFF00"; + cName = "Worn"; + break; + case Focus: + cColour = "9F9F00"; + cName = "Focus"; + break; + case Scroll: + cColour = "9F9F9F"; + cName = "Scroll"; + break; + } + + sprintf (out, "
Spell Info for %s effect: %s
", cColour, cName, pSpell->Name); + + if(This->ItemInfo && GetCXStr(This->ItemInfo, temp)) + { + if(strstr(temp, out)) + { + return; + } + } + } + if (pLocalPlayer && pLocalPlayer->Data.GM) + { + sprintf(temp, "ID: %04d                            ", pSpell->ID); + strcat(out, temp); + } + DWORD Tics=GetSpellDuration(pSpell,pCharInfo->pSpawn); + if (Tics==0xFFFFFFFF) + strcat(out, "Duration: Permanent
" ); + else if (Tics==0xFFFFFFFE) + strcat(out, "Duration: Unknown
" ); + else if (Tics==0) { + // It's "instant", who cares? + strcat(out,"
"); + } + else { + sprintf(temp, "Duration: %1.1f minutes
",(float)((Tics*6.0f)/60.0f)); + strcat(out, temp); + } + + sprintf(temp, "RecoveryTime: %1.2f       RecastTime: %1.2f
", (float)(pSpell->FizzleTime/1000.0f), (float)(pSpell->RecastTime/1000.0f) ); + strcat(out,temp); + + if (pSpell->Range > 0.0f ) { + sprintf(temp, "Range: %1.0f", pSpell->Range ); + strcat(out,temp); + if ( pSpell->PushBack == 0.0f && pSpell->AERange == 0.0f) + strcat(out, "
"); + } + + if (pSpell->PushBack != 0.0f ) { + if (pSpell->Range > 0.0f ) + strcat(out, "                      " ); + sprintf(temp, "PushBack: %1.1f", pSpell->PushBack ); + strcat(out, temp); + if (pSpell->AERange == 0.0f || pSpell->Range > 0.0f ) + strcat(out, "
" ); + } + + if (pSpell->AERange > 0.0f ) { + if (pSpell->Range > 0.0f) + strcat(out, "                      " ); + else if (pSpell->PushBack > 0.0f ) + strcat(out, "                 " ); + sprintf(temp, "AERange: %1.0f
", pSpell->AERange ); + strcat(out, temp); + } + + if (pSpell->TargetType != 0x06 && pSpell->TargetType != 0x0e && pSpell->TargetType != 0x03 && pSpell->TargetType != 0x28 && pSpell->TargetType != 0x29 ) { + if (pSpell->SpellType == 0) { // Ziggy: Only show resist type for detrimental spells + switch(pSpell->Resist) + { + case 9: strcat(out, "Resist: Corruption" ); break; + case 7: strcat(out, "Resist: Prismatic[Avg]" ); break; // Ziggy - Added Reminder which.. + case 6: strcat(out, "Resist: Chromatic[Low]" ); break; // ..is what type of resist + case 5: strcat(out, "Resist: Disease" ); break; + case 4: strcat(out, "Resist: Poison" ); break; + case 3: strcat(out, "Resist: Cold/Ice" ); break; + case 2: strcat(out, "Resist: Fire" ); break; + case 1: strcat(out, "Resist: Magic" ); break; + case 0: strcat(out, "Resist: Unresistable"); break; + } + + if (pSpell->ResistAdj != 0 ) { + sprintf(temp, "   (Resist Adj.: %d)
", pSpell->ResistAdj ); + strcat(out,temp); + } else { + strcat(out,"
"); + } + } + } + + strcat(out, "
" ); + ShowSpellSlotInfo(pSpell,&out[strlen(out)]); + + //show usable classes routine by Koad// + if (pLocalPlayer && pLocalPlayer->Data.GM) + { + bool bUseableClasses = false; + strcat(out, "
"); + for (int j = 0; j < 16; j++) { // Ziggy - output will word wrap properly now + if (pSpell->Level[j] > 0 && pSpell->Level[j] <= 70) { + if (bUseableClasses) strcat(out, ", "); + + sprintf(temp, "%s(%d)", GetClassDesc(j + 1), pSpell->Level[j]); + strcat(out, temp); + bUseableClasses = true; + } + } + if (bUseableClasses) strcat(out, "

"); + } + + if (pSpell->CastOnYou[0]) { + sprintf(temp, "Cast on you: %s
", pSpell->CastOnYou); + strcat(out,temp); + } + + if (pSpell->CastOnAnother[0]) { + sprintf(temp, "Cast on another: %s
", pSpell->CastOnAnother); + strcat(out,temp); + } + + if (pSpell->WearOff[0]) { + sprintf(temp, "Wears off: %s
", pSpell->WearOff); + strcat(out,temp); + } + + if (out[0]!=17) { + strcat(out,"
"); + //((CXStr)This->ItemInfo)+= + AppendCXStr(&This->ItemInfo,&out[0]); + } + } + + VOID UpdateStrings_Trampoline(); + VOID UpdateStrings_Detour() + { + PEQITEMWINDOW This=(PEQITEMWINDOW)this; + PCONTENTS item=(PCONTENTS)This->pItem; + volatile PITEMINFO Item=GetItemFromContents(item); + CHAR out[MAX_STRING] = {0}; + CHAR temp[MAX_STRING] = {0}; + CHAR temp2[MAX_STRING] = {0}; + PCHAR lore = NULL; + + UpdateStrings_Trampoline(); + + // keep a global copy of the last item displayed... + memcpy(&g_Item, Item, sizeof(ITEMINFO)); + + strcpy(out,"
"); + if ( Item->ItemNumber > 0 && pLocalPlayer && pLocalPlayer->Data.GM) { + sprintf(temp,"Item ID: %d
", Item->ItemNumber); + strcat(out, temp); + } + if ( ((EQ_Item*)item)->IsStackable() ) { + if ( Item->StackSize > 0 ) { + sprintf(temp,"Stackable Count: %d
", Item->StackSize); + strcat(out, temp); + } + } + if (Item->Cost>0) { + DWORD cp = Item->Cost; + DWORD sp = cp/10; cp=cp%10; + DWORD gp = sp/10; sp=sp%10; + DWORD pp = gp/10; gp=gp%10; + strcat(out,"Value:"); + if (pp>0) { + sprintf(temp," %dpp",pp); + strcat(out,temp); + } + if (gp>0) { + sprintf(temp," %dgp",gp); + strcat(out,temp); + } + if (sp>0) { + sprintf(temp," %dsp",sp); + strcat(out,temp); + } + if (cp>0) { + sprintf(temp," %dcp",cp); + strcat(out,temp); + } + strcat(out,"
"); + } + + if (Item->Clicky.TimerID!=0) { + int Secs = GetItemTimer(item); + if (!Secs) { + sprintf(temp,"Item Timer: Ready
"); + } else { + int Mins=(Secs/60)%60; + int Hrs=(Secs/3600); + Secs=Secs%60; + if (Hrs) + sprintf(temp,"Item Timer: %d:%02d:%02d
",Hrs,Mins,Secs); + else + sprintf(temp,"Item Timer: %d:%02d
",Mins,Secs); + } + strcat(out, temp); + } + + //Outlaw (AKA CheckinThingsOut) (02/24/2005) + if (Item->ItemType != 27) { //Arrows..they have dmg/dly but we don't want them + if ( Item->Delay > 0) { + if ( Item->Damage > 0) { + sprintf(temp,"Base DPS: %5.3f
", ((float)Item->Damage / (float)Item->Delay) * 10); + strcat(out, temp); + } + } + } + lore=Item->LoreName; + if (lore[0]=='*') lore++; + if (strcmp(lore,Item->Name)) { + sprintf(temp,"Item Lore: %s
",Item->LoreName); + strcat(out,temp); + } + PCHARINFO pChar = GetCharInfo(); // Ziggy - for item level highlights + // Will be 0 for no effect or -1 if other effects present + if (Item->Proc.SpellID && Item->Proc.SpellID!=-1) { + if (Item->Proc.RequiredLevel == 0 ) + sprintf(temp, "Procs at level 1 (Proc rate modifier: %d)
", Item->Proc.ProcRate); + else + sprintf(temp,"%sProcs at level %d%s (Proc rate modifier: %d)
", (Item->Proc.RequiredLevel > GetCharInfo2()->Level ? "" : ""), Item->Proc.RequiredLevel, (Item->Proc.RequiredLevel > GetCharInfo2()->Level ? "" : ""), Item->Proc.ProcRate); + strcat(out,temp); + } + /* No longer needed? + else if (Item->SpellId==998) { // 998 = haste + sprintf(temp,"%d%% Haste
",Item->Level+1); + strcat(out,temp); + } + */ + + // Just in case... + if (This->ItemInfo && (!strstr(This->ItemInfo->Text,"(Combat)")) && Item->Proc.ProcRate > 0 ) + { + sprintf(temp, "Proc rate Modifier: %d
", Item->Proc.ProcRate ); + strcat(out,temp); + } + + // Teh_Ish (02/08/2004) + if ( Item->Clicky.EffectType==4 || Item->Clicky.EffectType==1 || Item->Clicky.EffectType==5) { + if ( Item->Clicky.RequiredLevel == 0 ) + sprintf(temp, "Clickable at level 1
"); + else + sprintf(temp,"%sClickable at level %d%s
", (Item->Clicky.RequiredLevel > GetCharInfo2()->Level ? "" : ""), Item->Clicky.RequiredLevel, (Item->Clicky.RequiredLevel > GetCharInfo2()->Level ? "" : "")); + strcat(out,temp); + } + + // TheColonel (1/18/2004) + /* + if (Item->InstrumentType != 0){ + float instrumentmod = ((float)Item->InstrumentMod)/10.0f; + sprintf(temp,"Instrument mod: %3.1f to %s.
", instrumentmod, szItemTypes[Item->InstrumentType]); + strcat(out,temp); + } + /**/ + + if (Item->Type == ITEMTYPE_PACK) { + sprintf(temp,"Container Type: %s
",szCombineTypes[Item->Combine]); + strcat(out,temp); + } + + if (Item->ItemNumber > 0 && pLocalPlayer && pLocalPlayer->Data.GM) { + sprintf(temp, "%07d", Item->ItemNumber); + } + + if (out[0]!=17) { + strcat(out,"
"); + ((CStmlWnd*)This->DisplayWnd)->AppendSTML(&out[0]); + } + + // Ziggy - Items showing their spell details: + bNoSpellTramp=true; + if (Item->Clicky.SpellID > 0 && Item->Clicky.SpellID != -1) { + eEffectType = Clicky; + ItemSetSpell_Detour(Item->Clicky.SpellID, false); + } + + if (Item->Proc.SpellID > 0 && Item->Proc.SpellID != -1) { + eEffectType = Proc; + ItemSetSpell_Detour(Item->Proc.SpellID, false); + } + + if (Item->Worn.SpellID > 0 && Item->Worn.SpellID != -1) { + eEffectType = Worn; + ItemSetSpell_Detour(Item->Worn.SpellID, false); + } + + if (Item->Focus.SpellID > 0 && Item->Focus.SpellID != -1) { + eEffectType = Focus; + ItemSetSpell_Detour(Item->Focus.SpellID, false); + } + + if (Item->Scroll.SpellID > 0 && Item->Scroll.SpellID != -1) { + eEffectType = Scroll; + ItemSetSpell_Detour(Item->Scroll.SpellID, false); + } + bNoSpellTramp=false; + eEffectType = None; + } +}; + +ItemDisplayHook::SEffectType ItemDisplayHook::eEffectType = None; +bool ItemDisplayHook::bNoSpellTramp = false; + +DETOUR_TRAMPOLINE_EMPTY(VOID ItemDisplayHook::SetSpell_Trampoline(int SpellID,bool HasSpellDescr)); +DETOUR_TRAMPOLINE_EMPTY(VOID ItemDisplayHook::UpdateStrings_Trampoline()); + +#ifndef ISXEQ + +// Called once, when the plugin is to initialize +PLUGIN_API VOID InitializeMQ2ItemDisplay(VOID) +{ + memset(&g_Contents, 0, sizeof(g_Contents)); + g_Contents.Item1 = NULL; + g_Contents.Item2 = &g_Item; + g_Item.ItemNumber = 0; + + EzDetour(CItemDisplayWnd__SetSpell,&ItemDisplayHook::SetSpell_Detour,&ItemDisplayHook::SetSpell_Trampoline); + EzDetour(CItemDisplayWnd__UpdateStrings, &ItemDisplayHook::UpdateStrings_Detour, &ItemDisplayHook::UpdateStrings_Trampoline); +} + +// Called once, when the plugin is to shutdown +PLUGIN_API VOID ShutdownPlugin(VOID) +{ + RemoveDetour(CItemDisplayWnd__SetSpell); + RemoveDetour(CItemDisplayWnd__UpdateStrings); +} +#endif diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2KeyBinds.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2KeyBinds.cpp new file mode 100644 index 0000000000..9cadc32156 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2KeyBinds.cpp @@ -0,0 +1,624 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif + +#define DBG_SPEW +#include "MQ2Main.h" +#include +#include +#include +using namespace std; + +void InjectMQ2Binds(COptionsWnd *pWnd); +void EjectMQ2Binds(COptionsWnd *pWnd); + +struct MQ2KeyBind +{ + char Name[32]; + KeyCombo Normal; + KeyCombo Alt; + fMQExecuteCmd Function; + BOOL State; +}; + +CIndex BindList(10); +map BindNameMap; + +inline MQ2KeyBind *KeyBindByName(char *Name) +{ + string Lwr=Name; + MakeLower(Lwr); + unsigned long N=BindNameMap[Lwr]; + if (!N) + return 0; + return BindList[--N]; +} + +inline void SetKeyBindNameMap(char *Name, unsigned long Number) +{ + string Lwr=Name; + MakeLower(Lwr); + BindNameMap[Lwr]=Number+1; +} + +inline void RemoveKeyBindNameMap(char *Name) +{ + string Lwr=Name; + MakeLower(Lwr); + BindNameMap[Lwr]=0; +} + +BOOL SetEQKeyBindByNumber(DWORD N, BOOL Alternate, KeyCombo &Combo) +{ + if (NAltKey[N] = Combo; + else + pKeypressHandler->NormalKey[N] = Combo; + + if(N < gnNormalEQMappableCommands) + pKeypressHandler->SaveKeymapping( N, Combo, Alternate ); + return TRUE; + } + return FALSE; +} + +inline BOOL SetEQKeyBind(PCHAR name, BOOL Alternate, KeyCombo &Combo ) +{ + return SetEQKeyBindByNumber(FindMappableCommand(name),Alternate,Combo); +} + +BOOL MQ2HandleKeyDown(class KeyCombo const &Combo) +{ + unsigned long N; + bool Ret=false; + for ( N = 0 ; N < nEQMappableCommands ; N++) + { + if (pKeypressHandler->CommandState[N]==0 && (pKeypressHandler->NormalKey[N]==Combo || + pKeypressHandler->AltKey[N]==Combo)) + { + ExecuteCmd(N,1,0); + pKeypressHandler->CommandState[N]=1; + Ret=true; + } + } + for ( N = 0 ; N < BindList.Size ; N++) + { + if (MQ2KeyBind *pBind=BindList[N]) + { + if (pBind->State==0 && (pBind->Normal==Combo || pBind->Alt==Combo)) + { + pBind->Function(pBind->Name,true); + pBind->State=1; + Ret=true; + } + } + } + return Ret; +} + +BOOL MQ2HandleKeyUp(class KeyCombo const &Combo) +{ + unsigned long N; + bool Ret=false; + for ( N = 0 ; N < nEQMappableCommands ; N++) + { + if (pKeypressHandler->CommandState[N] && (pKeypressHandler->NormalKey[N].Data[3]==Combo.Data[3] || + pKeypressHandler->AltKey[N].Data[3]==Combo.Data[3])) + { + ExecuteCmd(N,0,0); + pKeypressHandler->CommandState[N]=0; + Ret=true; + } + } + for ( N = 0 ; N < BindList.Size ; N++) + { + if (MQ2KeyBind *pBind=BindList[N]) + { + if (pBind->State==1 && (pBind->Normal.Data[3]==Combo.Data[3] || pBind->Alt.Data[3]==Combo.Data[3])) + { + pBind->Function(pBind->Name,false); + pBind->State=0; + Ret=true; + } + } + } + return Ret; +} + +class KeypressHandlerHook +{ +public: + void ClearCommandStateArray_Trampoline(void); + void ClearCommandStateArray_Hook(void) + { + unsigned long N; + for (N = 0 ; N < BindList.Size ; N++) + if (MQ2KeyBind *pBind=BindList[N]) + { + pBind->State=false; + } + ZeroMemory(&pKeypressHandler->CommandState[0],sizeof(pKeypressHandler->CommandState)); + } + + + bool HandleKeyDown_Trampoline(class KeyCombo const &); + bool HandleKeyUp_Trampoline(class KeyCombo const &); + + bool HandleKeyDown_Hook(class KeyCombo const &Combo) + { + if (!pWndMgr->HandleKeyboardMsg(Combo.Data[3],1)) + return true; + return (MQ2HandleKeyDown(Combo)!=0); + } + bool HandleKeyUp_Hook(class KeyCombo const &Combo) + { + bool Ret=false; + if (!pWndMgr->HandleKeyboardMsg(Combo.Data[3],0)) + Ret=true; + return (MQ2HandleKeyUp(Combo) || Ret); + } +}; + +DETOUR_TRAMPOLINE_EMPTY(void KeypressHandlerHook::ClearCommandStateArray_Trampoline(void)); +DETOUR_TRAMPOLINE_EMPTY(bool KeypressHandlerHook::HandleKeyDown_Trampoline(class KeyCombo const &)); +DETOUR_TRAMPOLINE_EMPTY(bool KeypressHandlerHook::HandleKeyUp_Trampoline(class KeyCombo const &)); + + +/* +class COptionsWndHook +{ +public: + void RefreshCurrentKeyboardAssignmentList_Trampoline(); + void RefreshCurrentKeyboardAssignmentList_Hook() + { + RefreshCurrentKeyboardAssignmentList_Trampoline(); + } + + void InitKeyboardAssignments_Trampoline(); + void InitKeyboardAssignments_Hook() + { + InitKeyboardAssignments_Trampoline(); + InjectMQ2Binds((COptionsWnd*)this); + } +}; +/**/ +VOID DoRangedBind(PCHAR Name,BOOL Down); + +void InitializeMQ2KeyBinds() +{ + /* + if (pOptionsWnd) + { + InjectMQ2Binds(pOptionsWnd); + } + /**/ + AddMQ2KeyBind("RANGED",DoRangedBind); + + EzDetour(KeypressHandler__ClearCommandStateArray,&KeypressHandlerHook::ClearCommandStateArray_Hook,&KeypressHandlerHook::ClearCommandStateArray_Trampoline); + EzDetour(KeypressHandler__HandleKeyDown,&KeypressHandlerHook::HandleKeyDown_Hook,&KeypressHandlerHook::HandleKeyDown_Trampoline); + EzDetour(KeypressHandler__HandleKeyUp,&KeypressHandlerHook::HandleKeyUp_Hook,&KeypressHandlerHook::HandleKeyUp_Trampoline); +} + +void ShutdownMQ2KeyBinds() +{ + BindList.Cleanup(); + RemoveDetour(KeypressHandler__ClearCommandStateArray); + RemoveDetour(KeypressHandler__HandleKeyDown); + RemoveDetour(KeypressHandler__HandleKeyUp); +} + +BOOL AddMQ2KeyBind(PCHAR name, fMQExecuteCmd Function) +{ + DebugSpew("AddMQ2KeyBind(%s)",name); + if (KeyBindByName(name)) + { + DebugSpew("AddMQ2KeyBind(%s) - Name already in use",name); + return false; + } + + MQ2KeyBind* pBind = new MQ2KeyBind; + pBind->State=false; + strncpy(pBind->Name,name,32); + pBind->Name[31]=0; + CHAR szBuffer[MAX_STRING]={0}; + CHAR szName[MAX_STRING]={0}; + + sprintf(szName,"%s_%s",pBind->Name,"Nrm"); + GetPrivateProfileString("Key Binds",szName,"clear",szBuffer,MAX_STRING,gszINIFilename); + ParseKeyCombo(szBuffer,pBind->Normal); + sprintf(szName,"%s_%s",pBind->Name,"Alt"); + GetPrivateProfileString("Key Binds",szName,"clear",szBuffer,MAX_STRING,gszINIFilename); + ParseKeyCombo(szBuffer,pBind->Alt); + + pBind->Function=Function; + + unsigned long N=BindList.GetUnused(); + BindList[N]=pBind; + SetKeyBindNameMap(name,N); + + return true; +} + +BOOL GetMQ2KeyBind(PCHAR name, BOOL Alt, KeyCombo &Combo) +{ + if (MQ2KeyBind *pBind=KeyBindByName(name)) + { + if (Alt) + Combo=pBind->Alt; + else + Combo=pBind->Normal; + return true; + } + return false; +} + +BOOL RemoveMQ2KeyBind(PCHAR name) +{ + DebugSpew("RemoveMQ2KeyBind(%s)",name); + string Lwr=name; + MakeLower(Lwr); + unsigned long N=BindNameMap[Lwr]; + if (!N) + return false; + --N; + if (MQ2KeyBind* pBind=BindList[N]) + { + BindNameMap[Lwr]=0; + BindList[N]=0; + delete pBind; + return true; + } + return false; +} + +BOOL PressMQ2KeyBind(PCHAR name, BOOL Hold) +{ + if (MQ2KeyBind *pBind=KeyBindByName(name)) + { + pBind->Function(pBind->Name,true); + if (!Hold) + pBind->Function(pBind->Name,false); + return true; + } + return false; +} + +BOOL SetMQ2KeyBind(PCHAR name, BOOL Alternate, KeyCombo &Combo) +{ + if (MQ2KeyBind *pBind=KeyBindByName(name)) + { + CHAR szName[MAX_STRING]={0}; + CHAR szBuffer[MAX_STRING]={0}; + if (!Alternate) + { + sprintf(szName,"%s_Nrm",pBind->Name); + pBind->Normal=Combo; + } + else + { + sprintf(szName,"%s_Alt",pBind->Name); + pBind->Alt=Combo; + } + WritePrivateProfileString("Key Binds",szName,DescribeKeyCombo(Combo,szBuffer),gszINIFilename); + return true; + } + return false; +} + +#ifndef ISXEQ +VOID MQ2KeyBindCommand(PSPAWNINFO pChar, PCHAR szLine) +{ + if (szLine[0]==0) + { + WriteChatColor("Usage: /bind >"); + return; + } + CHAR szBuffer[MAX_STRING]; + CHAR szArg1[MAX_STRING] = {0}; + GetArg(szArg1,szLine,1); + PCHAR szRest = GetNextArg(szLine); + PCHAR szArg=&szArg1[0]; + bool AltKey=false; + if (szArg[0]=='~') + { + AltKey=true; + szArg=&szArg1[1]; + } + unsigned long i; + if (!stricmp(szArg,"list")) + { + // list binds + CHAR szNormal[MAX_STRING]={0}; + CHAR szAlt[MAX_STRING]={0}; + WriteChatColor("MQ2 Binds"); + WriteChatColor("--------------"); + for (i = 0 ; i < BindList.Size ; i++) + { + if (MQ2KeyBind *pBind = BindList[i]) + { + sprintf(szArg1,"[\ay%s\ax] Nrm:\at%s\ax Alt:\at%s\ax",pBind->Name,DescribeKeyCombo(pBind->Normal,szNormal),DescribeKeyCombo(pBind->Alt,szAlt)); + WriteChatColor(szArg1); + } + } + WriteChatColor("--------------"); + WriteChatColor("End MQ2 Binds"); + return; + } + if (!stricmp(szArg,"eqlist")) + { + CHAR szNormal[MAX_STRING]={0}; + CHAR szAlt[MAX_STRING]={0}; + // list eq binds + WriteChatColor("EQ Binds"); + WriteChatColor("--------------"); + for (i = 0 ; i < nEQMappableCommands ; i++) + { + if((DWORD)szEQMappableCommands[i] == 0 || (DWORD)szEQMappableCommands[i] > (DWORD)__AC1_Data) + continue; + sprintf(szArg1,"[\ay%s\ax] Nrm:\at%s\ax Alt:\at%s\ax",szEQMappableCommands[i],DescribeKeyCombo(pKeypressHandler->NormalKey[i],szNormal),DescribeKeyCombo(pKeypressHandler->AltKey[i],szAlt)); + WriteChatColor(szArg1); + } + WriteChatColor("--------------"); + WriteChatColor("End EQ Binds"); + return; + } + + KeyCombo NewCombo; + if (!ParseKeyCombo(szRest,NewCombo)) + { + WriteChatColor("Invalid key combination"); + return; + } + + if (!stricmp(szArg,"clearcombo")) + { + KeyCombo ClearCombo; + // mq2 binds + for (i = 0; i < BindList.Size; i++) + { + MQ2KeyBind* pBind = BindList[i]; + if (pBind) + { + if (pBind->Alt == NewCombo && SetMQ2KeyBind(pBind->Name,true,ClearCombo)) + { + sprintf(szArg1,"Alternate %s cleared",pBind->Name); + WriteChatColor(szArg1); + } + if (pBind->Normal == NewCombo && SetMQ2KeyBind(pBind->Name,false,ClearCombo)) + { + sprintf(szArg1,"Normal %s cleared",pBind->Name); + WriteChatColor(szArg1); + } + } + } + + // eq binds + for (i = 0; i < nEQMappableCommands; i++) + { + if((DWORD)szEQMappableCommands[i] == 0 || (DWORD)szEQMappableCommands[i] > (DWORD)__AC1_Data) + continue; + if (pKeypressHandler->AltKey[i] == NewCombo && SetEQKeyBindByNumber(i,true,ClearCombo)) + { + sprintf(szArg1,"Alternate %s cleared",szEQMappableCommands[i] ); + WriteChatColor(szArg1); + } + if (pKeypressHandler->NormalKey[i] == NewCombo && SetEQKeyBindByNumber(i,false,ClearCombo)) + { + sprintf(szArg1,"Normal %s cleared", szEQMappableCommands[i]); + WriteChatColor(szArg1); + } + } + return; + } + + + + if (SetMQ2KeyBind(szArg,AltKey,NewCombo)) + { + MQ2KeyBind *pBind=KeyBindByName(szArg); + sprintf(szArg1,"%s %s now bound as %s",AltKey?"Alternate":"Normal",pBind->Name,DescribeKeyCombo(NewCombo,szBuffer)); + WriteChatColor(szArg1); + return; + } + + int N=FindMappableCommand(szArg); + if (N<0) + { + WriteChatColor("Unknown bind command name"); + return; + } + + if (SetEQKeyBindByNumber(N,AltKey,NewCombo)) + { + sprintf( szArg1,"%s %s now bound as %s", + (AltKey)?("Alternate"):("Normal"), + szEQMappableCommands[N], + DescribeKeyCombo((AltKey)?(pKeypressHandler->AltKey[N]):(pKeypressHandler->NormalKey[N]),szBuffer)); + } +} +#else +int CMD_MQ2Bind(int argc, char *argv[]) +{ + unsigned long i; + if (argc<2) + { + WriteChatf("Usage: %s >",argv[0]); + return 0; + } + if (!stricmp(argv[1],"list")) + { + // list binds + CHAR szNormal[MAX_STRING]={0}; + CHAR szAlt[MAX_STRING]={0}; + WriteChatColor("MQ2 Binds"); + WriteChatColor("--------------"); + foreach(MQ2KeyBind *pBind,i,BindList) + { + WriteChatf("[\ay%s\ax] Nrm:\at%s\ax Alt:\at%s\ax",pBind->Name,DescribeKeyCombo(pBind->Normal,szNormal),DescribeKeyCombo(pBind->Alt,szAlt)); + } + WriteChatColor("--------------"); + WriteChatColor("End MQ2 Binds"); + return 0; + } + if (!stricmp(argv[1],"eqlist")) + { + CHAR szNormal[MAX_STRING]={0}; + CHAR szAlt[MAX_STRING]={0}; + // list eq binds + WriteChatColor("EQ Binds"); + WriteChatColor("--------------"); + for (i = 0 ; i < nEQMappableCommands ; i++) + { + if((DWORD)szEQMappableCommands[i] == 0 || (DWORD)szEQMappableCommands[i] > (DWORD)__AC1_Data) + continue; + WriteChatf("[\ay%s\ax] Nrm:\at%s\ax Alt:\at%s\ax",szEQMappableCommands[i],DescribeKeyCombo(pKeypressHandler->NormalKey[i],szNormal),DescribeKeyCombo(pKeypressHandler->AltKey[i],szAlt)); + } + WriteChatColor("--------------"); + WriteChatColor("End EQ Binds"); + return 0; + } + + + KeyCombo NewCombo; + if (argc<3 || !ParseKeyCombo(argv[2],NewCombo)) + { + WriteChatColor("Invalid key combination"); + return 0; + } + + if (!stricmp(argv[1],"clearcombo")) + { + KeyCombo ClearCombo; + // mq2 binds + for (i = 0; i < BindList.Size; i++) + { + MQ2KeyBind* pBind = BindList[i]; + if (pBind) + { + if (pBind->Alt == NewCombo && SetMQ2KeyBind(pBind->Name,true,ClearCombo)) + { + WriteChatf("Alternate %s cleared",pBind->Name); + } + if (pBind->Normal == NewCombo && SetMQ2KeyBind(pBind->Name,false,ClearCombo)) + { + WriteChatf("Normal %s cleared",pBind->Name); + } + } + } + + // eq binds + for (i = 0; i < nEQMappableCommands; i++) + { + if((DWORD)szEQMappableCommands[i] == 0 || (DWORD)szEQMappableCommands[i] > (DWORD)__AC1_Data) + continue; + if (pKeypressHandler->AltKey[i] == NewCombo && SetEQKeyBindByNumber(i,true,ClearCombo)) + { + WriteChatf("Alternate %s cleared",szEQMappableCommands[i] ); + } + if (pKeypressHandler->NormalKey[i] == NewCombo && SetEQKeyBindByNumber(i,false,ClearCombo)) + { + WriteChatf("Normal %s cleared", szEQMappableCommands[i]); + } + } + return 0; + } + + + if (argv[1][0]=='~' && SetMQ2KeyBind(&argv[1][1],1,NewCombo)) + { + CHAR szBuffer[MAX_STRING]={0}; + MQ2KeyBind *pBind=KeyBindByName(&argv[1][1]); + WriteChatf("Alternate %s now bound as %s",pBind->Name,DescribeKeyCombo(NewCombo,szBuffer)); + } + + if (SetMQ2KeyBind(argv[1],0,NewCombo)) + { + CHAR szBuffer[MAX_STRING]={0}; + MQ2KeyBind *pBind=KeyBindByName(argv[1]); + WriteChatf("Normal %s now bound as %s",pBind->Name,DescribeKeyCombo(NewCombo,szBuffer)); + return 0; + } + + bool AltKey=argv[1][0]=='~'; + int N; + if (AltKey) + N=FindMappableCommand(&argv[1][1]); + else + N=FindMappableCommand(argv[1]); + if (N<0) + { + WriteChatColor("Unknown bind command name"); + return 0; + } + + if (SetEQKeyBindByNumber(N,AltKey,NewCombo)) + { + CHAR szBuffer[MAX_STRING]={0}; + WriteChatf("%s %s now bound as %s", + (AltKey)?("Alternate"):("Normal"), + szEQMappableCommands[N], + DescribeKeyCombo((AltKey)?(pKeypressHandler->AltKey[N]):(pKeypressHandler->NormalKey[N]),szBuffer)); + } + return 0; +} + +#endif + +VOID DoRangedBind(PCHAR Name,BOOL Down) +{ + if (Down && pTarget && gbRangedAttackReady) + { + pLocalPlayer->DoAttack(0x0B,0,pTarget); + gbRangedAttackReady=0; + } +} + +BOOL DumpBinds(PCHAR Filename) +{ + CHAR szFilename[MAX_STRING]={0}; + sprintf(szFilename,"%s\\Configs\\%s",gszINIPath,Filename); + if (!strchr(Filename,'.')) + strcat(szFilename,".cfg"); + FILE *file=fopen(szFilename,"wt"); + if (!file) + { + return false; + } + CHAR szBuffer[MAX_STRING]={0}; + unsigned long N; + for ( N = 0 ; N < nEQMappableCommands ; N++) + { + if((DWORD)szEQMappableCommands[N] == 0 || (DWORD)szEQMappableCommands[N] > (DWORD)__AC1_Data) + continue; + fprintf(file,"/bind %s %s\n",szEQMappableCommands[N],DescribeKeyCombo(pKeypressHandler->NormalKey[N],szBuffer)); + fprintf(file,"/bind ~%s %s\n",szEQMappableCommands[N],DescribeKeyCombo(pKeypressHandler->AltKey[N],szBuffer)); + } + for ( N = 0 ; N < BindList.Size ; N++) + { + if (MQ2KeyBind *pBind=BindList[N]) + { + fprintf(file,"/bind %s %s\n",pBind->Name,DescribeKeyCombo(pBind->Normal,szBuffer)); + fprintf(file,"/bind ~%s %s\n",pBind->Name,DescribeKeyCombo(pBind->Alt,szBuffer)); + } + } + fclose(file); + return true; +} + + diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2Labels.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2Labels.cpp new file mode 100644 index 0000000000..ddb8b7cfe0 --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2Labels.cpp @@ -0,0 +1,230 @@ +// MQ2Labels.cpp : Defines the entry point for the DLL application. +// + +// MQ2 Custom Labels + + +#include "MQ2Main.h" +#include +#include + +typedef string(*pEqTypesFunc)(); + +map eqTypesMap; + +namespace { + +constexpr WORD NativeOpServerAuthStats = 0x1338; +constexpr DWORD NativeStatClassesBitmask = 1; +constexpr DWORD NativeMaxServerAuthStat = 128; + +#pragma pack(push, 1) +struct NativeServerAuthStatEntry { + DWORD StatKey; + ULONGLONG StatValue; +}; +#pragma pack(pop) + +ULONGLONG gNativeServerAuthStats[NativeMaxServerAuthStat] = {0}; +bool gNativeServerAuthStatsSeen[NativeMaxServerAuthStat] = {false}; + +bool NativeHasServerAuthStat(DWORD stat_key) +{ + return stat_key < NativeMaxServerAuthStat && gNativeServerAuthStatsSeen[stat_key]; +} + +ULONGLONG NativeGetServerAuthStat(DWORD stat_key) +{ + return NativeHasServerAuthStat(stat_key) ? gNativeServerAuthStats[stat_key] : 0; +} + +std::string NativeClassListLabel(bool abbreviations) +{ + if (!NativeHasServerAuthStat(NativeStatClassesBitmask)) { + return ""; + } + + static const char* class_names[] = { + "Warrior", "Cleric", "Paladin", "Ranger", "Shadow Knight", "Druid", + "Monk", "Bard", "Rogue", "Shaman", "Necromancer", "Wizard", + "Magician", "Enchanter", "Beastlord", "Berserker" + }; + + static const char* class_abbreviations[] = { + "WAR", "CLR", "PAL", "RNG", "SHD", "DRU", "MNK", "BRD", + "ROG", "SHM", "NEC", "WIZ", "MAG", "ENC", "BST", "BER" + }; + + const auto class_bits = NativeGetServerAuthStat(NativeStatClassesBitmask); + const auto* labels = abbreviations ? class_abbreviations : class_names; + std::string text; + + for (DWORD i = 0; i < (sizeof(class_names) / sizeof(class_names[0])); ++i) { + if (!(class_bits & (1ULL << i))) { + continue; + } + + if (!text.empty()) { + text += "\n"; + } + text += labels[i]; + } + + return text; +} + +std::string NativeClassNamesLabel() +{ + return NativeClassListLabel(false); +} + +std::string NativeClassAbbreviationsLabel() +{ + return NativeClassListLabel(true); +} + +} // namespace + +void NativeLabelsHandleWorldMessage(unsigned __int16 opcode, const char* buffer, size_t size) +{ + if (opcode != NativeOpServerAuthStats || !buffer || size < sizeof(DWORD)) { + return; + } + + const DWORD count = *(const DWORD*)buffer; + const size_t max_entries = (size - sizeof(DWORD)) / sizeof(NativeServerAuthStatEntry); + if (count > max_entries) { + return; + } + + const auto* entries = (const NativeServerAuthStatEntry*)(buffer + sizeof(DWORD)); + for (DWORD i = 0; i < count; ++i) { + const DWORD stat_key = entries[i].StatKey; + if (stat_key > 0 && stat_key < NativeMaxServerAuthStat) { + gNativeServerAuthStats[stat_key] = entries[i].StatValue; + gNativeServerAuthStatsSeen[stat_key] = true; + } + } +} + +// CSidlManager::CreateLabel 0x5F2470 + +// the tool tip is already copied out of the +// in class CControlTemplate. use this struct +// to mock up the class, so we don't have to +// worry about class instatiation and crap + +struct _CControl { + /*0x000*/ DWORD Fluff[0x24]; // if this changes update ISXEQLabels.cpp too + /*0x090*/ CXSTR * EQType; +}; + +// optimize off because the tramp looks blank to the compiler +// and it doesn't respect the fact the it will be a real routine +#pragma optimize ("g", off) + +class CSidlManagerHook { +public: + class CXWnd * CreateLabel_Trampoline(class CXWnd *, struct _CControl *); + class CXWnd * CreateLabel_Detour(class CXWnd *CWin, struct _CControl *CControl) + { + CLABELWND *p; + class CXWnd *tmp = CreateLabel_Trampoline(CWin, CControl); + p = (CLABELWND *)tmp; + if (CControl->EQType) { + *((DWORD *)&p->SidlPiece) = atoi(CControl->EQType->Text); + } else { + *((DWORD *)&p->SidlPiece) = 0; + } + + return tmp; + } +}; + +DETOUR_TRAMPOLINE_EMPTY(class CXWnd * CSidlManagerHook::CreateLabel_Trampoline(class CXWnd *, struct _CControl *)); + +#pragma optimize ("g", on) + +// CLabelHook::Draw_Detour + +class CLabelHook { +public: + VOID Draw_Trampoline(VOID); + VOID Draw_Detour(VOID) + { + PCLABELWND pThisLabel; + __asm {mov [pThisLabel], ecx}; + // (PCLABELWND)this; + Draw_Trampoline(); + CHAR Buffer[MAX_STRING] = {0}; + BOOL Found=FALSE; + DWORD index; + + std::string eqtypesString = ""; + + + auto eqtype_iter = eqTypesMap.find((DWORD)pThisLabel->SidlPiece); + if (eqtype_iter != eqTypesMap.end()) { + auto func = eqtype_iter->second; + if (func) { + eqtypesString = (*func)(); + Found = TRUE; + } + } else if ((DWORD)pThisLabel->SidlPiece==9999) { + if (!pThisLabel->Wnd.XMLToolTip) { + strcpy(Buffer,"BadCustom"); + Found=TRUE; + } else { + //strcpy(Buffer,&pThisLabel->XMLToolTip->Text[0]); + STMLToPlainText(&pThisLabel->Wnd.XMLToolTip->Text[0],Buffer); + ParseMacroParameter(((PCHARINFO)pCharData)->pSpawn,Buffer); + if (!strcmp(Buffer,"NULL")) + Buffer[0]=0; + Found=TRUE; + } + } + if (Found) SetCXStr(&(pThisLabel->Wnd.WindowText),(PCHAR)eqtypesString.c_str()); + } +}; + +DETOUR_TRAMPOLINE_EMPTY(VOID CLabelHook::Draw_Trampoline(VOID)); + +BOOL StealNextGauge=FALSE; +DWORD NextGauge=0; + +std::string testDisplayFunction() +{ + return "Test"; +} + +// Called once, when the plugin is to initialize +PLUGIN_API VOID InitializeMQ2Labels(VOID) +{ + // DebugSpewAlways("Initializing MQ2Labels"); + eqTypesMap[1000] = testDisplayFunction; //and so forth + eqTypesMap[3] = NativeClassNamesLabel; + eqTypesMap[6666] = NativeClassAbbreviationsLabel; + + // Add commands, macro parameters, hooks, etc. + //EasyClassDetour(CLabel__Draw,CLabelHook,Draw_Detour,VOID,(VOID),Draw_Trampoline); + EzDetour(CLabel__Draw,&CLabelHook::Draw_Detour,&CLabelHook::Draw_Trampoline); + EzDetour(CSidlManager__CreateLabel,&CSidlManagerHook::CreateLabel_Detour,&CSidlManagerHook::CreateLabel_Trampoline); + + + // currently in testing: + // EasyClassDetour(CGauge__Draw,CGaugeHook,Draw_Detour,VOID,(VOID),Draw_Trampoline); + // EasyDetour(__GetGaugeValueFromEQ,GetGaugeValueFromEQ_Hook,int,(int,class CXStr *,bool *),GetGaugeValueFromEQ_Trampoline); +} + +// Called once, when the plugin is to shutdown +PLUGIN_API VOID ShutdownLabelsPlugin(VOID) +{ + // DebugSpewAlways("Shutting down MQ2Labels"); + + // Remove commands, macro parameters, hooks, etc. + RemoveDetour(CSidlManager__CreateLabel); + RemoveDetour(CLabel__Draw); + //RemoveDetour(CGaugeWnd__Draw); + //RemoveDetour(__GetGaugeValueFromEQ); +} + diff --git a/client_files/native_autoloot/eq-core-dll/src/MQ2MacroCommands.cpp b/client_files/native_autoloot/eq-core-dll/src/MQ2MacroCommands.cpp new file mode 100644 index 0000000000..76ea2ca7be --- /dev/null +++ b/client_files/native_autoloot/eq-core-dll/src/MQ2MacroCommands.cpp @@ -0,0 +1,1253 @@ +/***************************************************************************** +MQ2Main.dll: MacroQuest2's extension DLL for EverQuest +Copyright (C) 2002-2003 Plazmic, 2003-2005 Lax + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License, version 2, as published by +the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. +******************************************************************************/ + +#if !defined(CINTERFACE) +#error /DCINTERFACE +#endif +#ifndef ISXEQ + +#define DBG_SPEW + +#ifdef ISXEQ_LEGACY +#include "../ISXEQLegacy/ISXEQLegacy.h" +#else +#include "MQ2Main.h" +#endif + +/* VAR SYSTEM INDEPENDENT */ +// in-place cleanup of tabs, leading/trailing space +VOID CleanMacroLine(PCHAR szLine) +{ + if (!szLine || szLine[0]==0) + return; + PCHAR pChar=szLine; + while(pChar[0]) + { + if (pChar[0]=='\t' || pChar[0]==0x0a || pChar[0]==0x0d) + pChar[0]=' '; + ++pChar; + } + // find beginning and end + PCHAR pStart=szLine; + unsigned long Length=strlen(szLine); + PCHAR pEnd=&szLine[Length-1]; + + while(*pStart==' ') + ++pStart; + while(*pEnd==' ') + --pEnd; + if (!*pStart || !*pEnd) + { + szLine[0]=0; + return; + } + // keep only this part. + unsigned long NewLength=1+pEnd-pStart; + if (NewLength==Length) + return;//nothing to do + memmove(szLine,pStart,NewLength); + szLine[NewLength]=0; +} + +// *************************************************************************** +// Function: Include +// Description: Includes another macro file +// Usage: #include +// *************************************************************************** +DWORD Include(PCHAR szFile) +{ + CHAR szTemp[MAX_STRING] = {0}; + FILE *fMacro = fopen(szFile,"rt"); + DWORD LineNumber=0; + BOOL InBlockComment = FALSE; + PMACROBLOCK pAddedLine = NULL; + char *tmp; + if (!fMacro) { + FatalError("Couldn't open include file: %s",szFile); + return 0; + } + DebugSpewNoFile("Include - Including: %s",szFile); + while (!feof(fMacro)) { + + tmp = fgets(szTemp,MAX_STRING,fMacro); + + if (!tmp && feof(fMacro)) break; + + CleanMacroLine(szTemp); + + LineNumber++; + + if (!strncmp(szTemp,"|**",3)) { + InBlockComment=TRUE; + } + if (!InBlockComment) { + if (NULL == (pAddedLine=AddMacroLine(szTemp))) { + MacroError("Unable to add macro line."); + fclose(fMacro); + gszMacroName[0]=0; + gRunning = 0; + return 0; + } else if (1 != (DWORD)pAddedLine) { + pAddedLine->LineNumber = LineNumber; + strcpy(pAddedLine->SourceFile, GetFilenameFromFullPath(szFile)); + } + } else { + DebugSpewNoFile("Macro - BlockComment: %s",szTemp); + if (!strncmp(&szTemp[strlen(szTemp)-3],"**|",3)) { + InBlockComment=FALSE; + } + } + } + fclose(fMacro); + return 1; +} + +// *************************************************************************** +// Function: AddMacroLine +// Description: Add a line to the MacroBlock +// *************************************************************************** +PMACROBLOCK AddMacroLine(PCHAR szLine) +{ + PMACROBLOCK pBlock = NULL; + // replace all tabs with spaces + if ((szLine[0]==0) || (szLine[0]=='|')) return (PMACROBLOCK)1; + + PDEFINE pDef = pDefines; + if (szLine[0]!='#') while (pDef) { + while (strstr(szLine,pDef->szName)) { + CHAR szNew[MAX_STRING] = {0}; + strncpy(szNew,szLine,strstr(szLine,pDef->szName)-szLine); + strcat(szNew,pDef->szReplace); + strcat(szNew,strstr(szLine,pDef->szName)+strlen(pDef->szName)); + strcpy(szLine,szNew); + } + pDef = pDef->pNext; + } + if (szLine[0]=='#') { + if (!strnicmp(szLine,"#include ",9)) { + CHAR Filename[MAX_STRING] = {0}; + szLine+=8; + while (szLine[0]==' ') szLine++; + + if (!strstr(szLine,".")) strcat(szLine,".mac"); + sprintf(Filename,"%s\\%s",gszMacroPath, szLine); + + //DebugSpewNoFile("AddMacroLine - Including file: %s",Filename); + return (PMACROBLOCK)Include(Filename); + } else if (!strnicmp(szLine,"#turbo",6)) { + gTurbo = TRUE; + CHAR szArg[MAX_STRING] = {0}; + GetArg(szArg,szLine,2); + gMaxTurbo = atoi(szArg); + if (gMaxTurbo==0) + gMaxTurbo=20; + else if (gMaxTurbo>40) + { + MacroError("#turbo %d is too high, setting at 40 (maximum)",gMaxTurbo); + gMaxTurbo=40; + } + } else if (!strnicmp(szLine,"#define ",8)) { + CHAR szArg1[MAX_STRING] = {0}; + CHAR szArg2[MAX_STRING] = {0}; + PDEFINE pDef = (PDEFINE)malloc(sizeof(DEFINE)); + GetArg(szArg1,szLine,2); + GetArg(szArg2,szLine,3); + if ((szArg1[0]!=0) && (szArg2[0]!=0)) { + strcpy(pDef->szName,szArg1); + strcpy(pDef->szReplace,szArg2); + pDef->pNext = pDefines; + pDefines = pDef; + } else { + MacroError("Bad #define: %s",szLine); + } + } else if (!strnicmp(szLine,"#event ",7)) { + CHAR szArg1[MAX_STRING] = {0}; + CHAR szArg2[MAX_STRING] = {0}; + PEVENTLIST pEvent = (PEVENTLIST)malloc(sizeof(EVENTLIST)); + GetArg(szArg1,szLine,2); + GetArg(szArg2,szLine,3); + if ((szArg1[0]!=0) && (szArg2[0]!=0)) { + sprintf(pEvent->szName,"Sub Event_%s",szArg1); + strcpy(pEvent->szMatch,szArg2); +#ifdef USEBLECHEVENTS + pEvent->BlechID=pEventBlech->AddEvent(pEvent->szMatch,EventBlechCallback,pEvent); +#endif + pEvent->pEventFunc = NULL; + pEvent->pNext = pEventList; + pEventList = pEvent; + } else { + MacroError("Bad #event: %s",szLine); + } + } else if (!strnicmp(szLine,"#chat ",6)) { + szLine+=5; + while (szLine[0]==' ') szLine++; + if (!stricmp(szLine,"say")) gEventChat = gEventChat | CHAT_SAY; + if (!stricmp(szLine,"tell")) gEventChat = gEventChat | CHAT_TELL; + if (!stricmp(szLine,"ooc")) gEventChat = gEventChat | CHAT_OOC; + if (!stricmp(szLine,"shout")) gEventChat = gEventChat | CHAT_SHOUT; + if (!stricmp(szLine,"auc")) gEventChat = gEventChat | CHAT_AUC; + if (!stricmp(szLine,"guild")) gEventChat = gEventChat | CHAT_GUILD; + if (!stricmp(szLine,"group")) gEventChat = gEventChat | CHAT_GROUP; + if (!stricmp(szLine,"chat")) gEventChat = gEventChat | CHAT_CHAT; + } else if (szLine[1]=='!') { + // Like: #!/usr/local/bin/LegacyMQ2 + // ignore. + } else { + MacroError("Unknown # command: %s",szLine); + return FALSE; + } + } + + pBlock = (PMACROBLOCK)malloc(sizeof(MACROBLOCK)); + if (!pBlock) return NULL; + //DebugSpewNoFile("AddMacroLine - Adding: %s",szLine); + strcpy(pBlock->Line,szLine); + pBlock->LineNumber = -1; + pBlock->SourceFile[0]=0; + pBlock->pNext=NULL; + pBlock->pPrev=NULL; + + if ((!stricmp(szLine,"Sub Event_Chat")) || (!strnicmp(szLine,"Sub Event_Chat(",15))) { + gEventFunc[EVENT_CHAT] = pBlock; + } else if ((!stricmp(szLine,"Sub Event_Timer")) || (!strnicmp(szLine,"Sub Event_Timer(",16))) { + gEventFunc[EVENT_TIMER] = pBlock; + } else { + PEVENTLIST pEvent = pEventList; + while (pEvent) { + if (!stricmp(szLine,pEvent->szName)) { + pEvent->pEventFunc = pBlock; + } else { + CHAR szNameP[MAX_STRING] = {0}; + sprintf(szNameP,"%s(",pEvent->szName); + if (!strnicmp(szLine,szNameP,strlen(szNameP))) { + pEvent->pEventFunc = pBlock; + } + } + pEvent = pEvent->pNext; + } + } + if (!gMacroBlock) { + gMacroBlock=pBlock; + } else { + PMACROBLOCK pLoop = gMacroBlock; + while (pLoop->pNext) pLoop = pLoop->pNext; + pLoop->pNext = pBlock; + pBlock->pPrev = pLoop; + } + return pBlock; +} + + +// *************************************************************************** +// Function: Macro +// Description: Our '/macro' command +// Usage: /macro +// *************************************************************************** +VOID Macro(PSPAWNINFO pChar, PCHAR szLine) +{ + bRunNextCommand = TRUE; + CHAR szTemp[MAX_STRING] = {0}; + CHAR Filename[MAX_STRING] = {0}; + PCHAR Params = NULL; + PCHAR szNext = NULL; + BOOL InBlockComment = FALSE; + if (szLine[0] == 0) { + SyntaxError("Usage: /macro [param [param...]]"); + return; + } + if (gMacroBlock) + { + gReturn = false; + EndMacro(pChar,"");//"keep keys vars arrays timers"); + gReturn = true; + } + gMaxTurbo=20; + gTurbo=true; + GetArg(szTemp,szLine,1); + Params = GetNextArg(szLine); + + strcpy(gszMacroName,szTemp); +#ifdef ISXEQ_LEGACY + strcpy(Filename,szTemp); + FILE *fMacro = fopen(szTemp,"rt"); +#else + if (!strstr(szTemp,".")) strcat(szTemp,".mac"); + sprintf(Filename,"%s\\%s",gszMacroPath, szTemp); + + FILE *fMacro = fopen(Filename,"rt"); +#endif + if (!fMacro) { + FatalError("Couldn't open macro file: %s",Filename); + gszMacroName[0]=0; + gRunning = 0; + return; + } + gRunning = GetTickCount(); + gEventChat = 0; + strcpy(gszMacroName,szTemp); + DebugSpew("Macro - Loading macro: %s",Filename); + DWORD LineNumber = 0; + PMACROBLOCK pAddedLine = NULL; + while (!feof(fMacro)) { + fgets(szTemp,MAX_STRING,fMacro); + CleanMacroLine(szTemp); + LineNumber++; + if (!strncmp(szTemp,"|**",3)) { + InBlockComment=TRUE; + } + if (!InBlockComment) { + if (NULL == (pAddedLine=AddMacroLine(szTemp))) { + MacroError("Unable to add macro line."); + fclose(fMacro); + gszMacroName[0]=0; + gRunning = 0; + return; + } else if (1 != (DWORD)pAddedLine) { + pAddedLine->LineNumber = LineNumber; + strcpy(pAddedLine->SourceFile, GetFilenameFromFullPath(Filename)); + } + } else { + DebugSpew("Macro - BlockComment: %s",szTemp); + if (!strncmp(&szTemp[strlen(szTemp)-3],"**|",3)) { + InBlockComment=FALSE; + } + } + } + fclose(fMacro); + PDEFINE pDef; + while (pDefines) { + pDef = pDefines->pNext; + free(pDefines); + pDefines = pDef; + } + strcpy(szTemp, "Main"); + if (Params[0] !=0) { + strcat(szTemp, " "); + strcat(szTemp, Params); + } + DebugSpew("Macro - Starting macro with '/call %s'",szTemp); + Call(pChar, szTemp); + if ((gMacroBlock) && (gMacroBlock->pNext)) gMacroBlock = gMacroBlock->pNext; + if (gMacroBlock) gMacroBlock->MacroCmd = 1; + if ((!gMacroBlock) || (!gMacroStack)) { + gszMacroName[0]=0; + gRunning = 0; + } +#ifdef ISXEQ_LEGACY + else + { + char ShortName[128]; + ShortName[0]=0; + _splitpath(Filename,0,0,ShortName,0); + IS_ScriptEngineScriptBegins(pExtension,pISInterface,hScriptEngineService,&g_LegacyEngine,ShortName); + } +#endif +} + +// *************************************************************************** +// Function: Cleanup +// Description: Our '/cleanup' command +// Sends i, esc, esc, esc, esc, i +// Usage: /cleanup +// *************************************************************************** +VOID Cleanup(PSPAWNINFO pChar, PCHAR szLine) +{ + DebugSpewNoFile("Cleanup - Cleaning up screen"); + DWORD i; + KeyCombo Escape; + ParseKeyCombo("Esc",Escape); + if(ppContainerMgr && pContainerMgr) { + PEQ_CONTAINERWND_MANAGER ContainerMgr = (PEQ_CONTAINERWND_MANAGER)pContainerMgr; + DWORD concount=2; //Close inv + clear target + if (ContainerMgr->pWorldContents && ContainerMgr->pWorldContents->Open==1) concount++; + for (i=0;i<25;i++) { + if (ContainerMgr->pPCContainers[i] && ContainerMgr->pPCContainers[i]->Wnd.dShow==1) concount++; + } + for (i=0;idShow==0) + DoMappable(pChar,"inventory"); + } + } else { + DoMappable(pChar,"inventory"); + for (i=0;i<10;i++) + { + MQ2HandleKeyDown(Escape); + MQ2HandleKeyUp(Escape); + } + DoMappable(pChar,"inventory"); + } +} + +// *************************************************************************** +// Function: Delay +// Description: Our '/delay' command +// Usage: /delay