mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-22 16:28:28 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a0073b4018 |
@@ -1,21 +0,0 @@
|
||||
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
|
||||
// https://github.com/microsoft/vscode-dev-containers/tree/v0.101.1/containers/ubuntu-18.04-git
|
||||
{
|
||||
"name": "Ubuntu 18.04 EQEMU",
|
||||
// Moved from dockerfile to image so it builds faster
|
||||
"image": "eqemu/devcontainer:0.0.2",
|
||||
|
||||
// Set *default* container specific settings.json values on container create.
|
||||
"settings": {
|
||||
"terminal.integrated.shell.linux": "/bin/bash"
|
||||
},
|
||||
|
||||
"runArgs": [ "--cap-add=SYS_PTRACE", "--security-opt", "seccomp=unconfined" ],
|
||||
|
||||
// Add the IDs of extensions you want installed when the container is created.
|
||||
"extensions": ["ms-vscode.cpptools", "ms-azuretools.vscode-docker"],
|
||||
"mounts": ["source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind"],
|
||||
"remoteEnv": {
|
||||
"HOST_PROJECT_PATH": "${localWorkspaceFolder}"
|
||||
}
|
||||
}
|
||||
-16
@@ -1,16 +0,0 @@
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: EQEmulator Server Linux CI
|
||||
|
||||
# Limits how many of these builds can run on the drone runner at a time, this isn't about cores
|
||||
concurrency:
|
||||
limit: 1
|
||||
|
||||
steps:
|
||||
- name: server-build
|
||||
# Source build script https://github.com/Akkadius/akk-stack/blob/master/containers/eqemu-server/Dockerfile#L20
|
||||
image: akkadius/eqemu-server:latest
|
||||
commands:
|
||||
- sudo chown eqemu:eqemu /drone/src/ * -R
|
||||
- git submodule init && git submodule update && mkdir -p build && cd build && cmake -DEQEMU_BUILD_LOGIN=ON -DEQEMU_BUILD_BOTS=ON -DEQEMU_BUILD_LUA=ON -G 'Unix Makefiles' .. && make -j$((`nproc`-4))
|
||||
+1
-19
@@ -17,8 +17,6 @@
|
||||
*.out
|
||||
*.app
|
||||
|
||||
.bash_history
|
||||
|
||||
# CMake
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
@@ -37,20 +35,4 @@ perl/
|
||||
submodules/*
|
||||
cmake-build-debug/
|
||||
|
||||
.nfs.*
|
||||
|
||||
# Visual Studio and CMAKE Generated Files
|
||||
/.vs/
|
||||
*.vcxproj
|
||||
*.vcxproj.filters
|
||||
*.vcxproj.user
|
||||
*.cmake
|
||||
*.ilk
|
||||
*.pdb
|
||||
*.sln
|
||||
*.dir/
|
||||
libs/
|
||||
bin/
|
||||
/Win32
|
||||
/x64
|
||||
/client_files/**/CMakeFiles/
|
||||
.nfs.*
|
||||
+19
-11
@@ -1,18 +1,26 @@
|
||||
language: cpp
|
||||
compiler: gcc
|
||||
dist: bionic
|
||||
dist: trusty
|
||||
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libmysqlclient-dev
|
||||
- libperl-dev
|
||||
- libboost-dev
|
||||
- liblua5.1-0-dev
|
||||
- zlib1g-dev
|
||||
- uuid-dev
|
||||
- libssl-dev
|
||||
before_install:
|
||||
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
||||
- sudo apt-get update -qq
|
||||
- mkdir $HOME/usr
|
||||
- export PATH="$HOME/usr/bin:$PATH"
|
||||
- wget https://cmake.org/files/v3.11/cmake-3.11.2-Linux-x86_64.sh
|
||||
- chmod +x cmake-3.11.2-Linux-x86_64.sh
|
||||
- ./cmake-3.11.2-Linux-x86_64.sh --prefix=$HOME/usr --exclude-subdir --skip-license
|
||||
|
||||
install:
|
||||
- sudo apt-get install -qq g++-7
|
||||
- sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 90
|
||||
- sudo apt-get install libmysqlclient-dev
|
||||
- sudo apt-get install libperl-dev
|
||||
- sudo apt-get install libboost-dev
|
||||
- sudo apt-get install liblua5.1-0-dev
|
||||
- sudo apt-get install zlib1g-dev
|
||||
- sudo apt-get install uuid-dev
|
||||
- sudo apt-get install libssl-dev
|
||||
script:
|
||||
- cmake -G "Unix Makefiles" -DEQEMU_BUILD_TESTS=ON -DEQEMU_ENABLE_BOTS=ON -DEQEMU_BUILD_LOGIN=ON
|
||||
- make -j2
|
||||
|
||||
Vendored
-19
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"/usr/include/mysql",
|
||||
"/usr/local/include",
|
||||
"/usr/include",
|
||||
"/usr/include/lua5.1"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "/usr/bin/c++",
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
Vendored
-164
@@ -1,164 +0,0 @@
|
||||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "make",
|
||||
"type": "shell",
|
||||
"command": "cd bin && make",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "make clean",
|
||||
"type": "shell",
|
||||
"command": "cd bin && make clean",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "cmake",
|
||||
"type": "shell",
|
||||
"command": "mkdir -p bin && cd bin && rm CMakeCache.txt && cmake -DEQEMU_BUILD_LOGIN=ON -DEQEMU_BUILD_LUA=ON -G 'Unix Makefiles' ..",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher":{
|
||||
"owner": "cpp",
|
||||
"fileLocation": "relative",
|
||||
"pattern":[
|
||||
{
|
||||
"regexp": "([\\w+|\\\\]*\\.\\w+)\\((\\d+)\\)\\: (warning|error) (.*)$",
|
||||
"file": 1,
|
||||
"location": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "download maps",
|
||||
"type": "shell",
|
||||
"command": "mkdir -p bin && cd bin && wget https://codeload.github.com/Akkadius/EQEmuMaps/zip/master -O maps.zip && unzip -o maps.zip && rm ./maps -rf && mv EQEmuMaps-master maps && rm maps.zip",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "download quests",
|
||||
"type": "shell",
|
||||
"command": "mkdir -p bin && cd bin && cd server && git -C ./quests pull 2> /dev/null || git clone https://github.com/ProjectEQ/projecteqquests.git quests",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "download eqemu_config",
|
||||
"type": "shell",
|
||||
"command": "mkdir -p bin && cd bin && wget --no-check-certificate https://raw.githubusercontent.com/Akkadius/EQEmuInstall/master/eqemu_config_docker.json -O eqemu_config.json",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "rebuild database (mariadb must be started)",
|
||||
"type": "shell",
|
||||
"command": "mkdir -p bin && cd bin && docker run -i --rm --privileged -v ${HOST_PROJECT_PATH}/bin:/src --network=eqemu -it eqemu/server:0.0.3 bash -c './eqemu_server.pl source_peq_db && ./eqemu_server.pl check_db_updates && ./eqemu_server.pl linux_login_server_setup'",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"problemMatcher": [
|
||||
"$gcc"
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "zone 7000",
|
||||
"type": "shell",
|
||||
"command": "docker stop zone7000 | true && docker network create eqemu | true && docker run -i --rm --name zone7000 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --privileged -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 --network=eqemu -p 7000:7000/udp -e LD_LIBRARY_PATH=/src/ eqemu/server:0.0.3 gdb -ex run --args ./zone dynamic_zone7000:7000",
|
||||
"group": {
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "zone 7001",
|
||||
"type": "shell",
|
||||
"command": "docker stop zone7001 | true && docker network create eqemu | true && docker run -i --rm --name zone7001 --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --privileged -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 --network=eqemu -p 7001:7001/udp -e LD_LIBRARY_PATH=/src/ eqemu/server:0.0.3 gdb -ex run --args ./zone dynamic_zone7001:7001",
|
||||
"group": {
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "loginserver",
|
||||
"type": "shell",
|
||||
"command": "docker stop loginserver | true && docker network create eqemu | true && docker run -i --rm --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --privileged -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 --network=eqemu --name loginserver -p 5999:5999/udp -p 5998:5998/udp -e LD_LIBRARY_PATH=/src/ eqemu/server:0.0.3 gdb -ex run --args ./loginserver",
|
||||
"group": {
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "shared_memory, world",
|
||||
"type": "shell",
|
||||
"command": "docker stop sharedmemory | true && docker stop world | true && docker network create eqemu | true && docker run --rm -v ${HOST_PROJECT_PATH}/bin:/src --network=eqemu --name sharedmemory eqemu/server:0.0.3 ./shared_memory && docker run --rm -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 -e LD_LIBRARY_PATH=/src/ --network=eqemu --name world -p 9000:9000 -p 9000:9000/udp -p 9001:9001 -p 9080:9080 eqemu/server:0.0.3 gdb -ex run ./world",
|
||||
"group": {
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "queryserv",
|
||||
"type": "shell",
|
||||
"command": "docker stop queryserv | true && docker run --rm -v ${HOST_PROJECT_PATH}/bin:/src --ulimit core=10000000 -e LD_LIBRARY_PATH=/src/ --network=eqemu --name queryserv eqemu/server:0.0.3 gdb -ex run ./queryserv",
|
||||
"group": {
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "mariadb",
|
||||
"type": "shell",
|
||||
"command": "docker stop mariadb | true && cd bin && docker network create eqemu | true && docker run --rm -v ${HOST_PROJECT_PATH}/bin/db:/bitnami/mariadb -p 3306:3306 -e MARIADB_DATABASE=peq -e MARIADB_USER=eqemu -e MARIADB_PASSWORD=eqemupass -e ALLOW_EMPTY_PASSWORD=yes --name mariadb --network=eqemu bitnami/mariadb:latest",
|
||||
"group": {
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "ucs",
|
||||
"type": "shell",
|
||||
"command": "docker stop ucs | true && cd bin && docker network create eqemu | true && docker run --rm -v ${HOST_PROJECT_PATH}/bin:/src -p 7778:7778 --name ucs --network=eqemu eqemu/server:0.0.3 gdb -ex run ./ucs",
|
||||
"group": {
|
||||
"kind": "test",
|
||||
"isDefault": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+3
-6
@@ -12,7 +12,7 @@ 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 14)
|
||||
SET(CMAKE_CXX_STANDARD 11)
|
||||
SET(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
SET(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
@@ -133,7 +133,7 @@ ENDIF(EQEMU_ENABLE_BOTS)
|
||||
|
||||
#database
|
||||
IF(MySQL_FOUND AND MariaDB_FOUND)
|
||||
SET(DATABASE_LIBRARY_SELECTION MariaDB CACHE STRING "Database library to use:
|
||||
SET(DATABASE_LIBRARY_SELECTION MySQL CACHE STRING "Database library to use:
|
||||
MySQL
|
||||
MariaDB"
|
||||
)
|
||||
@@ -328,10 +328,7 @@ IF(UNIX)
|
||||
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()
|
||||
SET(SERVER_LIBS ${SERVER_LIBS} "uuid")
|
||||
ENDIF()
|
||||
|
||||
IF(EQEMU_BUILD_LOGIN AND NOT TLS_LIBRARY_ENABLED)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# EQEmulator Core Server
|
||||
|Travis CI (Linux)|Appveyor (Windows x86) |Appveyor (Windows x64) |
|
||||
|Travis CI (Linux)|Appveyor w/ Bots (Windows) |Appveyor w/o Bots (Windows) |
|
||||
|:---:|:---:|:---:|
|
||||
|[](https://travis-ci.org/EQEmu/Server) |[](https://ci.appveyor.com/project/KimLS/server) |[](https://ci.appveyor.com/project/KimLS/server-87crp) |
|
||||
|[](https://travis-ci.org/EQEmu/Server) |[](https://ci.appveyor.com/project/KimLS/server-87crp/branch/master) |[](https://ci.appveyor.com/project/KimLS/server-w0pq2/branch/master) |
|
||||
|
||||
***
|
||||
|
||||
@@ -17,13 +17,9 @@
|
||||
|:---:|:---:|:---:|
|
||||
|**Install Count**|||
|
||||
### > Windows
|
||||
|
||||
* [Install Guide](https://eqemu.gitbook.io/server/categories/installation/server-installation-windows)
|
||||
* [Install](https://github.com/EQEmu/Server/wiki/Windows-Server)
|
||||
|
||||
### > Debian/Ubuntu/CentOS/Fedora
|
||||
|
||||
* [Install Guide](https://eqemu.gitbook.io/server/categories/installation/server-installation-linux)
|
||||
|
||||
* You can use curl or wget to kick off the installer (whichever your OS has)
|
||||
> curl -O https://raw.githubusercontent.com/EQEmu/Server/master/utils/scripts/linux_installer/install.sh install.sh && chmod 755 install.sh && ./install.sh
|
||||
|
||||
@@ -56,7 +52,7 @@ forum, although pull requests will be much quicker and easier on all parties.
|
||||
|
||||
## Resources
|
||||
- [EQEmulator Forums](http://www.eqemulator.org/forums)
|
||||
- [EQEmulator Wiki](https://eqemu.gitbook.io/)
|
||||
- [EQEmulator Wiki](https://github.com/EQEmu/Server/wiki)
|
||||
|
||||
## Related Repositories
|
||||
* [ProjectEQ Quests](https://github.com/ProjectEQ/projecteqquests)
|
||||
@@ -80,4 +76,3 @@ forum, although pull requests will be much quicker and easier on all parties.
|
||||
<a href="https://github.com/EQEmu/server/graphs/contributors">
|
||||
<img src="https://contributors-img.firebaseapp.com/image?repo=EQEmu/server" />
|
||||
</a>
|
||||
|
||||
|
||||
+76
-119
@@ -26,24 +26,21 @@
|
||||
#include "../../common/crash.h"
|
||||
#include "../../common/rulesys.h"
|
||||
#include "../../common/string_util.h"
|
||||
#include "../../common/content/world_content_service.h"
|
||||
|
||||
EQEmuLogSys LogSys;
|
||||
WorldContentService content_service;
|
||||
|
||||
void ExportSpells(SharedDatabase *db);
|
||||
void ExportSkillCaps(SharedDatabase *db);
|
||||
void ExportBaseData(SharedDatabase *db);
|
||||
void ExportDBStrings(SharedDatabase *db);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int main(int argc, char **argv) {
|
||||
RegisterExecutablePlatform(ExePlatformClientExport);
|
||||
LogSys.LoadLogSettingsDefaults();
|
||||
set_exception_handler();
|
||||
|
||||
LogInfo("Client Files Export Utility");
|
||||
if (!EQEmuConfig::LoadConfig()) {
|
||||
if(!EQEmuConfig::LoadConfig()) {
|
||||
LogError("Unable to load configuration file");
|
||||
return 1;
|
||||
}
|
||||
@@ -51,38 +48,14 @@ int main(int argc, char **argv)
|
||||
auto Config = EQEmuConfig::get();
|
||||
|
||||
SharedDatabase database;
|
||||
SharedDatabase content_db;
|
||||
|
||||
LogInfo("Connecting to database");
|
||||
if (!database.Connect(
|
||||
Config->DatabaseHost.c_str(),
|
||||
Config->DatabaseUsername.c_str(),
|
||||
Config->DatabasePassword.c_str(),
|
||||
Config->DatabaseDB.c_str(),
|
||||
Config->DatabasePort
|
||||
)) {
|
||||
if(!database.Connect(Config->DatabaseHost.c_str(), Config->DatabaseUsername.c_str(),
|
||||
Config->DatabasePassword.c_str(), Config->DatabaseDB.c_str(), Config->DatabasePort)) {
|
||||
LogError("Unable to connect to the database, cannot continue without a database connection");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multi-tenancy: Content database
|
||||
*/
|
||||
if (!Config->ContentDbHost.empty()) {
|
||||
if (!content_db.Connect(
|
||||
Config->ContentDbHost.c_str() ,
|
||||
Config->ContentDbUsername.c_str(),
|
||||
Config->ContentDbPassword.c_str(),
|
||||
Config->ContentDbName.c_str(),
|
||||
Config->ContentDbPort
|
||||
)) {
|
||||
LogError("Cannot continue without a content database connection");
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
content_db.SetMysql(database.getMySQL());
|
||||
}
|
||||
|
||||
/* Register Log System and Settings */
|
||||
database.LoadLogSettings(LogSys.log_settings);
|
||||
LogSys.StartFileLogs();
|
||||
|
||||
@@ -93,15 +66,15 @@ int main(int argc, char **argv)
|
||||
}
|
||||
|
||||
if (arg_1 == "spells") {
|
||||
ExportSpells(&content_db);
|
||||
ExportSpells(&database);
|
||||
return 0;
|
||||
}
|
||||
if (arg_1 == "skills") {
|
||||
ExportSkillCaps(&content_db);
|
||||
ExportSkillCaps(&database);
|
||||
return 0;
|
||||
}
|
||||
if (arg_1 == "basedata") {
|
||||
ExportBaseData(&content_db);
|
||||
ExportBaseData(&database);
|
||||
return 0;
|
||||
}
|
||||
if (arg_1 == "dbstring") {
|
||||
@@ -109,9 +82,9 @@ int main(int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
ExportSpells(&content_db);
|
||||
ExportSkillCaps(&content_db);
|
||||
ExportBaseData(&content_db);
|
||||
ExportSpells(&database);
|
||||
ExportSkillCaps(&database);
|
||||
ExportBaseData(&database);
|
||||
ExportDBStrings(&database);
|
||||
|
||||
LogSys.CloseFileLogs();
|
||||
@@ -119,105 +92,93 @@ int main(int argc, char **argv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ExportSpells(SharedDatabase *db)
|
||||
{
|
||||
void ExportSpells(SharedDatabase *db) {
|
||||
LogInfo("Exporting Spells");
|
||||
|
||||
FILE *f = fopen("export/spells_us.txt", "w");
|
||||
if (!f) {
|
||||
if(!f) {
|
||||
LogError("Unable to open export/spells_us.txt to write, skipping.");
|
||||
return;
|
||||
}
|
||||
|
||||
const std::string query = "SELECT * FROM spells_new ORDER BY id";
|
||||
auto results = db->QueryDatabase(query);
|
||||
const std::string query = "SELECT * FROM spells_new ORDER BY id";
|
||||
auto results = db->QueryDatabase(query);
|
||||
|
||||
if (results.Success()) {
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
std::string line;
|
||||
unsigned int fields = results.ColumnCount();
|
||||
for (unsigned int i = 0; i < fields; ++i) {
|
||||
if (i != 0) {
|
||||
if(results.Success()) {
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
std::string line;
|
||||
unsigned int fields = results.ColumnCount();
|
||||
for(unsigned int i = 0; i < fields; ++i) {
|
||||
if(i != 0) {
|
||||
line.push_back('^');
|
||||
}
|
||||
|
||||
if (row[i] != nullptr) {
|
||||
if(row[i] != nullptr) {
|
||||
line += row[i];
|
||||
}
|
||||
}
|
||||
|
||||
fprintf(f, "%s\n", line.c_str());
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
bool SkillUsable(SharedDatabase *db, int skill_id, int class_id)
|
||||
{
|
||||
bool SkillUsable(SharedDatabase *db, int skill_id, int class_id) {
|
||||
|
||||
bool res = false;
|
||||
|
||||
std::string query = StringFormat(
|
||||
"SELECT max(cap) FROM skill_caps WHERE class=%d AND skillID=%d",
|
||||
class_id, skill_id
|
||||
);
|
||||
auto results = db->QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
return false;
|
||||
}
|
||||
std::string query = StringFormat("SELECT max(cap) FROM skill_caps WHERE class=%d AND skillID=%d",
|
||||
class_id, skill_id);
|
||||
auto results = db->QueryDatabase(query);
|
||||
if(!results.Success()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
return false;
|
||||
}
|
||||
if (results.RowCount() == 0)
|
||||
return false;
|
||||
|
||||
auto row = results.begin();
|
||||
if (row[0] && atoi(row[0]) > 0) {
|
||||
return true;
|
||||
}
|
||||
auto row = results.begin();
|
||||
if(row[0] && atoi(row[0]) > 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
int GetSkill(SharedDatabase *db, int skill_id, int class_id, int level)
|
||||
{
|
||||
int GetSkill(SharedDatabase *db, int skill_id, int class_id, int level) {
|
||||
|
||||
std::string query = StringFormat(
|
||||
"SELECT cap FROM skill_caps WHERE class=%d AND skillID=%d AND level=%d",
|
||||
class_id, skill_id, level
|
||||
);
|
||||
auto results = db->QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
return 0;
|
||||
}
|
||||
std::string query = StringFormat("SELECT cap FROM skill_caps WHERE class=%d AND skillID=%d AND level=%d",
|
||||
class_id, skill_id, level);
|
||||
auto results = db->QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
return 0;
|
||||
}
|
||||
if (results.RowCount() == 0)
|
||||
return 0;
|
||||
|
||||
auto row = results.begin();
|
||||
auto row = results.begin();
|
||||
return atoi(row[0]);
|
||||
}
|
||||
|
||||
void ExportSkillCaps(SharedDatabase *db)
|
||||
{
|
||||
void ExportSkillCaps(SharedDatabase *db) {
|
||||
LogInfo("Exporting Skill Caps");
|
||||
|
||||
FILE *f = fopen("export/SkillCaps.txt", "w");
|
||||
if (!f) {
|
||||
if(!f) {
|
||||
LogError("Unable to open export/SkillCaps.txt to write, skipping.");
|
||||
return;
|
||||
}
|
||||
|
||||
for (int cl = 1; cl <= 16; ++cl) {
|
||||
for (int skill = 0; skill <= 77; ++skill) {
|
||||
if (SkillUsable(db, skill, cl)) {
|
||||
int previous_cap = 0;
|
||||
for (int level = 1; level <= 100; ++level) {
|
||||
for(int cl = 1; cl <= 16; ++cl) {
|
||||
for(int skill = 0; skill <= 77; ++skill) {
|
||||
if(SkillUsable(db, skill, cl)) {
|
||||
int previous_cap = 0;
|
||||
for(int level = 1; level <= 100; ++level) {
|
||||
int cap = GetSkill(db, skill, cl, level);
|
||||
if (cap < previous_cap) {
|
||||
if(cap < previous_cap) {
|
||||
cap = previous_cap;
|
||||
}
|
||||
|
||||
@@ -231,28 +192,26 @@ void ExportSkillCaps(SharedDatabase *db)
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
void ExportBaseData(SharedDatabase *db)
|
||||
{
|
||||
void ExportBaseData(SharedDatabase *db) {
|
||||
LogInfo("Exporting Base Data");
|
||||
|
||||
FILE *f = fopen("export/BaseData.txt", "w");
|
||||
if (!f) {
|
||||
if(!f) {
|
||||
LogError("Unable to open export/BaseData.txt to write, skipping.");
|
||||
return;
|
||||
}
|
||||
|
||||
const std::string query = "SELECT * FROM base_data ORDER BY level, class";
|
||||
auto results = db->QueryDatabase(query);
|
||||
if (results.Success()) {
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
std::string line;
|
||||
unsigned int fields = results.ColumnCount();
|
||||
for (unsigned int rowIndex = 0; rowIndex < fields; ++rowIndex) {
|
||||
if (rowIndex != 0) {
|
||||
const std::string query = "SELECT * FROM base_data ORDER BY level, class";
|
||||
auto results = db->QueryDatabase(query);
|
||||
if(results.Success()) {
|
||||
for (auto row = results.begin();row != results.end();++row) {
|
||||
std::string line;
|
||||
unsigned int fields = results.ColumnCount();
|
||||
for(unsigned int rowIndex = 0; rowIndex < fields; ++rowIndex) {
|
||||
if(rowIndex != 0)
|
||||
line.push_back('^');
|
||||
}
|
||||
|
||||
if (row[rowIndex] != nullptr) {
|
||||
if(row[rowIndex] != nullptr) {
|
||||
line += row[rowIndex];
|
||||
}
|
||||
}
|
||||
@@ -264,29 +223,27 @@ void ExportBaseData(SharedDatabase *db)
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
void ExportDBStrings(SharedDatabase *db)
|
||||
{
|
||||
void ExportDBStrings(SharedDatabase *db) {
|
||||
LogInfo("Exporting DB Strings");
|
||||
|
||||
FILE *f = fopen("export/dbstr_us.txt", "w");
|
||||
if (!f) {
|
||||
if(!f) {
|
||||
LogError("Unable to open export/dbstr_us.txt to write, skipping.");
|
||||
return;
|
||||
}
|
||||
|
||||
fprintf(f, "Major^Minor^String(New)\n");
|
||||
const std::string query = "SELECT * FROM db_str ORDER BY id, type";
|
||||
auto results = db->QueryDatabase(query);
|
||||
if (results.Success()) {
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
std::string line;
|
||||
unsigned int fields = results.ColumnCount();
|
||||
for (unsigned int rowIndex = 0; rowIndex < fields; ++rowIndex) {
|
||||
if (rowIndex != 0) {
|
||||
const std::string query = "SELECT * FROM db_str ORDER BY id, type";
|
||||
auto results = db->QueryDatabase(query);
|
||||
if(results.Success()) {
|
||||
for(auto row = results.begin(); row != results.end(); ++row) {
|
||||
std::string line;
|
||||
unsigned int fields = results.ColumnCount();
|
||||
for(unsigned int rowIndex = 0; rowIndex < fields; ++rowIndex) {
|
||||
if(rowIndex != 0)
|
||||
line.push_back('^');
|
||||
}
|
||||
|
||||
if (row[rowIndex] != nullptr) {
|
||||
if(row[rowIndex] != nullptr) {
|
||||
line += row[rowIndex];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,10 +24,8 @@
|
||||
#include "../../common/crash.h"
|
||||
#include "../../common/rulesys.h"
|
||||
#include "../../common/string_util.h"
|
||||
#include "../../common/content/world_content_service.h"
|
||||
|
||||
EQEmuLogSys LogSys;
|
||||
WorldContentService content_service;
|
||||
|
||||
void ImportSpells(SharedDatabase *db);
|
||||
void ImportSkillCaps(SharedDatabase *db);
|
||||
@@ -48,48 +46,24 @@ int main(int argc, char **argv) {
|
||||
auto Config = EQEmuConfig::get();
|
||||
|
||||
SharedDatabase database;
|
||||
SharedDatabase content_db;
|
||||
|
||||
LogInfo("Connecting to database");
|
||||
if (!database.Connect(
|
||||
Config->DatabaseHost.c_str(),
|
||||
Config->DatabaseUsername.c_str(),
|
||||
Config->DatabasePassword.c_str(),
|
||||
Config->DatabaseDB.c_str(),
|
||||
Config->DatabasePort
|
||||
)) {
|
||||
LogError("Unable to connect to the database, cannot continue without a database connection");
|
||||
if(!database.Connect(Config->DatabaseHost.c_str(), Config->DatabaseUsername.c_str(),
|
||||
Config->DatabasePassword.c_str(), Config->DatabaseDB.c_str(), Config->DatabasePort)) {
|
||||
LogError("Unable to connect to the database, cannot continue without a "
|
||||
"database connection");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Multi-tenancy: Content database
|
||||
*/
|
||||
if (!Config->ContentDbHost.empty()) {
|
||||
if (!content_db.Connect(
|
||||
Config->ContentDbHost.c_str() ,
|
||||
Config->ContentDbUsername.c_str(),
|
||||
Config->ContentDbPassword.c_str(),
|
||||
Config->ContentDbName.c_str(),
|
||||
Config->ContentDbPort
|
||||
)) {
|
||||
LogError("Cannot continue without a content database connection");
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
content_db.SetMysql(database.getMySQL());
|
||||
}
|
||||
|
||||
database.LoadLogSettings(LogSys.log_settings);
|
||||
LogSys.StartFileLogs();
|
||||
|
||||
ImportSpells(&content_db);
|
||||
ImportSkillCaps(&content_db);
|
||||
ImportBaseData(&content_db);
|
||||
ImportSpells(&database);
|
||||
ImportSkillCaps(&database);
|
||||
ImportBaseData(&database);
|
||||
ImportDBStrings(&database);
|
||||
|
||||
LogSys.CloseFileLogs();
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -326,10 +300,10 @@ void ImportDBStrings(SharedDatabase *db) {
|
||||
std::string sql;
|
||||
int id, type;
|
||||
std::string value;
|
||||
|
||||
|
||||
id = atoi(split[0].c_str());
|
||||
type = atoi(split[1].c_str());
|
||||
|
||||
|
||||
if(split.size() >= 3) {
|
||||
value = ::EscapeString(split[2]);
|
||||
}
|
||||
|
||||
+4
-332
@@ -6,11 +6,9 @@ SET(common_sources
|
||||
cli/eqemu_command_handler.cpp
|
||||
compression.cpp
|
||||
condition.cpp
|
||||
content/world_content_service.cpp
|
||||
crash.cpp
|
||||
crc16.cpp
|
||||
crc32.cpp
|
||||
database/database_dump_service.cpp
|
||||
database.cpp
|
||||
database_conversions.cpp
|
||||
database_instances.cpp
|
||||
@@ -33,7 +31,6 @@ SET(common_sources
|
||||
event_sub.cpp
|
||||
extprofile.cpp
|
||||
faction.cpp
|
||||
file_util.cpp
|
||||
guild_base.cpp
|
||||
guilds.cpp
|
||||
inventory_profile.cpp
|
||||
@@ -47,6 +44,7 @@ SET(common_sources
|
||||
md5.cpp
|
||||
memory_buffer.cpp
|
||||
memory_mapped_file.cpp
|
||||
metric_manager.cpp
|
||||
misc.cpp
|
||||
misc_functions.cpp
|
||||
mutex.cpp
|
||||
@@ -109,331 +107,6 @@ SET(common_sources
|
||||
util/directory.cpp
|
||||
util/uuid.cpp)
|
||||
|
||||
SET(repositories
|
||||
|
||||
# Criteria
|
||||
repositories/criteria/content_filter_criteria.h
|
||||
|
||||
# Base Repositories
|
||||
repositories/base/base_aa_ability_repository.h
|
||||
repositories/base/base_aa_ranks_repository.h
|
||||
repositories/base/base_aa_rank_effects_repository.h
|
||||
repositories/base/base_aa_rank_prereqs_repository.h
|
||||
repositories/base/base_account_repository.h
|
||||
repositories/base/base_account_flags_repository.h
|
||||
repositories/base/base_account_ip_repository.h
|
||||
repositories/base/base_account_rewards_repository.h
|
||||
repositories/base/base_adventure_details_repository.h
|
||||
repositories/base/base_adventure_members_repository.h
|
||||
repositories/base/base_adventure_stats_repository.h
|
||||
repositories/base/base_adventure_template_repository.h
|
||||
repositories/base/base_adventure_template_entry_repository.h
|
||||
repositories/base/base_adventure_template_entry_flavor_repository.h
|
||||
repositories/base/base_alternate_currency_repository.h
|
||||
repositories/base/base_auras_repository.h
|
||||
repositories/base/base_base_data_repository.h
|
||||
repositories/base/base_blocked_spells_repository.h
|
||||
repositories/base/base_bugs_repository.h
|
||||
repositories/base/base_bug_reports_repository.h
|
||||
repositories/base/base_buyer_repository.h
|
||||
repositories/base/base_character_activities_repository.h
|
||||
repositories/base/base_character_alternate_abilities_repository.h
|
||||
repositories/base/base_character_alt_currency_repository.h
|
||||
repositories/base/base_character_auras_repository.h
|
||||
repositories/base/base_character_bandolier_repository.h
|
||||
repositories/base/base_character_bind_repository.h
|
||||
repositories/base/base_character_buffs_repository.h
|
||||
repositories/base/base_character_corpses_repository.h
|
||||
repositories/base/base_character_corpse_items_repository.h
|
||||
repositories/base/base_character_currency_repository.h
|
||||
repositories/base/base_character_data_repository.h
|
||||
repositories/base/base_character_disciplines_repository.h
|
||||
repositories/base/base_character_inspect_messages_repository.h
|
||||
repositories/base/base_character_item_recast_repository.h
|
||||
repositories/base/base_character_languages_repository.h
|
||||
repositories/base/base_character_leadership_abilities_repository.h
|
||||
repositories/base/base_character_material_repository.h
|
||||
repositories/base/base_character_memmed_spells_repository.h
|
||||
repositories/base/base_character_pet_buffs_repository.h
|
||||
repositories/base/base_character_pet_info_repository.h
|
||||
repositories/base/base_character_pet_inventory_repository.h
|
||||
repositories/base/base_character_potionbelt_repository.h
|
||||
repositories/base/base_character_skills_repository.h
|
||||
repositories/base/base_character_spells_repository.h
|
||||
repositories/base/base_character_tasks_repository.h
|
||||
repositories/base/base_char_create_combinations_repository.h
|
||||
repositories/base/base_char_create_point_allocations_repository.h
|
||||
repositories/base/base_char_recipe_list_repository.h
|
||||
repositories/base/base_completed_tasks_repository.h
|
||||
repositories/base/base_content_flags_repository.h
|
||||
repositories/base/base_data_buckets_repository.h
|
||||
repositories/base/base_db_str_repository.h
|
||||
repositories/base/base_discovered_items_repository.h
|
||||
repositories/base/base_doors_repository.h
|
||||
repositories/base/base_eventlog_repository.h
|
||||
repositories/base/base_faction_base_data_repository.h
|
||||
repositories/base/base_faction_list_repository.h
|
||||
repositories/base/base_faction_list_mod_repository.h
|
||||
repositories/base/base_faction_values_repository.h
|
||||
repositories/base/base_fishing_repository.h
|
||||
repositories/base/base_forage_repository.h
|
||||
repositories/base/base_friends_repository.h
|
||||
repositories/base/base_global_loot_repository.h
|
||||
repositories/base/base_gm_ips_repository.h
|
||||
repositories/base/base_goallists_repository.h
|
||||
repositories/base/base_graveyard_repository.h
|
||||
repositories/base/base_grid_repository.h
|
||||
repositories/base/base_grid_entries_repository.h
|
||||
repositories/base/base_ground_spawns_repository.h
|
||||
repositories/base/base_group_id_repository.h
|
||||
repositories/base/base_group_leaders_repository.h
|
||||
repositories/base/base_guilds_repository.h
|
||||
repositories/base/base_guild_members_repository.h
|
||||
repositories/base/base_guild_ranks_repository.h
|
||||
repositories/base/base_guild_relations_repository.h
|
||||
repositories/base/base_hackers_repository.h
|
||||
repositories/base/base_instance_list_repository.h
|
||||
repositories/base/base_instance_list_player_repository.h
|
||||
repositories/base/base_inventory_repository.h
|
||||
repositories/base/base_inventory_snapshots_repository.h
|
||||
repositories/base/base_ip_exemptions_repository.h
|
||||
repositories/base/base_items_repository.h
|
||||
repositories/base/base_item_tick_repository.h
|
||||
repositories/base/base_ldon_trap_entries_repository.h
|
||||
repositories/base/base_ldon_trap_templates_repository.h
|
||||
repositories/base/base_level_exp_mods_repository.h
|
||||
repositories/base/base_lfguild_repository.h
|
||||
repositories/base/base_login_accounts_repository.h
|
||||
repositories/base/base_login_api_tokens_repository.h
|
||||
repositories/base/base_login_server_admins_repository.h
|
||||
repositories/base/base_login_server_list_types_repository.h
|
||||
repositories/base/base_login_world_servers_repository.h
|
||||
repositories/base/base_logsys_categories_repository.h
|
||||
repositories/base/base_lootdrop_repository.h
|
||||
repositories/base/base_lootdrop_entries_repository.h
|
||||
repositories/base/base_loottable_repository.h
|
||||
repositories/base/base_loottable_entries_repository.h
|
||||
repositories/base/base_mail_repository.h
|
||||
repositories/base/base_merchantlist_repository.h
|
||||
repositories/base/base_merchantlist_temp_repository.h
|
||||
repositories/base/base_name_filter_repository.h
|
||||
repositories/base/base_npc_emotes_repository.h
|
||||
repositories/base/base_npc_faction_repository.h
|
||||
repositories/base/base_npc_faction_entries_repository.h
|
||||
repositories/base/base_npc_scale_global_base_repository.h
|
||||
repositories/base/base_npc_spells_repository.h
|
||||
repositories/base/base_npc_spells_effects_repository.h
|
||||
repositories/base/base_npc_spells_effects_entries_repository.h
|
||||
repositories/base/base_npc_spells_entries_repository.h
|
||||
repositories/base/base_npc_types_repository.h
|
||||
repositories/base/base_npc_types_tint_repository.h
|
||||
repositories/base/base_object_repository.h
|
||||
repositories/base/base_object_contents_repository.h
|
||||
repositories/base/base_perl_event_export_settings_repository.h
|
||||
repositories/base/base_petitions_repository.h
|
||||
repositories/base/base_pets_repository.h
|
||||
repositories/base/base_pets_equipmentset_repository.h
|
||||
repositories/base/base_pets_equipmentset_entries_repository.h
|
||||
repositories/base/base_player_titlesets_repository.h
|
||||
repositories/base/base_proximities_repository.h
|
||||
repositories/base/base_quest_globals_repository.h
|
||||
repositories/base/base_raid_details_repository.h
|
||||
repositories/base/base_raid_members_repository.h
|
||||
repositories/base/base_reports_repository.h
|
||||
repositories/base/base_respawn_times_repository.h
|
||||
repositories/base/base_rule_sets_repository.h
|
||||
repositories/base/base_rule_values_repository.h
|
||||
repositories/base/base_saylink_repository.h
|
||||
repositories/base/base_skill_caps_repository.h
|
||||
repositories/base/base_spawn2_repository.h
|
||||
repositories/base/base_spawnentry_repository.h
|
||||
repositories/base/base_spawngroup_repository.h
|
||||
repositories/base/base_spawn_conditions_repository.h
|
||||
repositories/base/base_spawn_condition_values_repository.h
|
||||
repositories/base/base_spawn_events_repository.h
|
||||
repositories/base/base_spells_new_repository.h
|
||||
repositories/base/base_spell_buckets_repository.h
|
||||
repositories/base/base_spell_globals_repository.h
|
||||
repositories/base/base_starting_items_repository.h
|
||||
repositories/base/base_start_zones_repository.h
|
||||
repositories/base/base_tasks_repository.h
|
||||
repositories/base/base_tasksets_repository.h
|
||||
repositories/base/base_task_activities_repository.h
|
||||
repositories/base/base_timers_repository.h
|
||||
repositories/base/base_titles_repository.h
|
||||
repositories/base/base_trader_repository.h
|
||||
repositories/base/base_tradeskill_recipe_repository.h
|
||||
repositories/base/base_tradeskill_recipe_entries_repository.h
|
||||
repositories/base/base_traps_repository.h
|
||||
repositories/base/base_tributes_repository.h
|
||||
repositories/base/base_tribute_levels_repository.h
|
||||
repositories/base/base_variables_repository.h
|
||||
repositories/base/base_veteran_reward_templates_repository.h
|
||||
repositories/base/base_zone_repository.h
|
||||
repositories/base/base_zone_points_repository.h
|
||||
|
||||
# Extended Repositories
|
||||
repositories/aa_ability_repository.h
|
||||
repositories/aa_ranks_repository.h
|
||||
repositories/aa_rank_effects_repository.h
|
||||
repositories/aa_rank_prereqs_repository.h
|
||||
repositories/account_repository.h
|
||||
repositories/account_flags_repository.h
|
||||
repositories/account_ip_repository.h
|
||||
repositories/account_rewards_repository.h
|
||||
repositories/adventure_details_repository.h
|
||||
repositories/adventure_members_repository.h
|
||||
repositories/adventure_stats_repository.h
|
||||
repositories/adventure_template_repository.h
|
||||
repositories/adventure_template_entry_repository.h
|
||||
repositories/adventure_template_entry_flavor_repository.h
|
||||
repositories/alternate_currency_repository.h
|
||||
repositories/auras_repository.h
|
||||
repositories/base_data_repository.h
|
||||
repositories/blocked_spells_repository.h
|
||||
repositories/bugs_repository.h
|
||||
repositories/bug_reports_repository.h
|
||||
repositories/buyer_repository.h
|
||||
repositories/character_activities_repository.h
|
||||
repositories/character_alternate_abilities_repository.h
|
||||
repositories/character_alt_currency_repository.h
|
||||
repositories/character_auras_repository.h
|
||||
repositories/character_bandolier_repository.h
|
||||
repositories/character_bind_repository.h
|
||||
repositories/character_buffs_repository.h
|
||||
repositories/character_corpses_repository.h
|
||||
repositories/character_corpse_items_repository.h
|
||||
repositories/character_currency_repository.h
|
||||
repositories/character_data_repository.h
|
||||
repositories/character_disciplines_repository.h
|
||||
repositories/character_inspect_messages_repository.h
|
||||
repositories/character_item_recast_repository.h
|
||||
repositories/character_languages_repository.h
|
||||
repositories/character_leadership_abilities_repository.h
|
||||
repositories/character_material_repository.h
|
||||
repositories/character_memmed_spells_repository.h
|
||||
repositories/character_pet_buffs_repository.h
|
||||
repositories/character_pet_info_repository.h
|
||||
repositories/character_pet_inventory_repository.h
|
||||
repositories/character_potionbelt_repository.h
|
||||
repositories/character_skills_repository.h
|
||||
repositories/character_spells_repository.h
|
||||
repositories/character_tasks_repository.h
|
||||
repositories/char_create_combinations_repository.h
|
||||
repositories/char_create_point_allocations_repository.h
|
||||
repositories/char_recipe_list_repository.h
|
||||
repositories/completed_tasks_repository.h
|
||||
repositories/content_flags_repository.h
|
||||
repositories/data_buckets_repository.h
|
||||
repositories/db_str_repository.h
|
||||
repositories/discovered_items_repository.h
|
||||
repositories/doors_repository.h
|
||||
repositories/eventlog_repository.h
|
||||
repositories/faction_base_data_repository.h
|
||||
repositories/faction_list_repository.h
|
||||
repositories/faction_list_mod_repository.h
|
||||
repositories/faction_values_repository.h
|
||||
repositories/fishing_repository.h
|
||||
repositories/forage_repository.h
|
||||
repositories/friends_repository.h
|
||||
repositories/global_loot_repository.h
|
||||
repositories/gm_ips_repository.h
|
||||
repositories/goallists_repository.h
|
||||
repositories/graveyard_repository.h
|
||||
repositories/grid_repository.h
|
||||
repositories/grid_entries_repository.h
|
||||
repositories/ground_spawns_repository.h
|
||||
repositories/group_id_repository.h
|
||||
repositories/group_leaders_repository.h
|
||||
repositories/guilds_repository.h
|
||||
repositories/guild_members_repository.h
|
||||
repositories/guild_ranks_repository.h
|
||||
repositories/guild_relations_repository.h
|
||||
repositories/hackers_repository.h
|
||||
repositories/instance_list_repository.h
|
||||
repositories/instance_list_player_repository.h
|
||||
repositories/inventory_repository.h
|
||||
repositories/inventory_snapshots_repository.h
|
||||
repositories/ip_exemptions_repository.h
|
||||
repositories/items_repository.h
|
||||
repositories/item_tick_repository.h
|
||||
repositories/ldon_trap_entries_repository.h
|
||||
repositories/ldon_trap_templates_repository.h
|
||||
repositories/level_exp_mods_repository.h
|
||||
repositories/lfguild_repository.h
|
||||
repositories/login_accounts_repository.h
|
||||
repositories/login_api_tokens_repository.h
|
||||
repositories/login_server_admins_repository.h
|
||||
repositories/login_server_list_types_repository.h
|
||||
repositories/login_world_servers_repository.h
|
||||
repositories/logsys_categories_repository.h
|
||||
repositories/lootdrop_repository.h
|
||||
repositories/lootdrop_entries_repository.h
|
||||
repositories/loottable_repository.h
|
||||
repositories/loottable_entries_repository.h
|
||||
repositories/mail_repository.h
|
||||
repositories/merchantlist_repository.h
|
||||
repositories/merchantlist_temp_repository.h
|
||||
repositories/name_filter_repository.h
|
||||
repositories/npc_emotes_repository.h
|
||||
repositories/npc_faction_repository.h
|
||||
repositories/npc_faction_entries_repository.h
|
||||
repositories/npc_scale_global_base_repository.h
|
||||
repositories/npc_spells_repository.h
|
||||
repositories/npc_spells_effects_repository.h
|
||||
repositories/npc_spells_effects_entries_repository.h
|
||||
repositories/npc_spells_entries_repository.h
|
||||
repositories/npc_types_repository.h
|
||||
repositories/npc_types_tint_repository.h
|
||||
repositories/object_repository.h
|
||||
repositories/object_contents_repository.h
|
||||
repositories/perl_event_export_settings_repository.h
|
||||
repositories/petitions_repository.h
|
||||
repositories/pets_repository.h
|
||||
repositories/pets_equipmentset_repository.h
|
||||
repositories/pets_equipmentset_entries_repository.h
|
||||
repositories/player_titlesets_repository.h
|
||||
repositories/proximities_repository.h
|
||||
repositories/quest_globals_repository.h
|
||||
repositories/raid_details_repository.h
|
||||
repositories/raid_members_repository.h
|
||||
repositories/reports_repository.h
|
||||
repositories/respawn_times_repository.h
|
||||
repositories/rule_sets_repository.h
|
||||
repositories/rule_values_repository.h
|
||||
repositories/saylink_repository.h
|
||||
repositories/skill_caps_repository.h
|
||||
repositories/spawn2_repository.h
|
||||
repositories/spawnentry_repository.h
|
||||
repositories/spawngroup_repository.h
|
||||
repositories/spawn_conditions_repository.h
|
||||
repositories/spawn_condition_values_repository.h
|
||||
repositories/spawn_events_repository.h
|
||||
repositories/spells_new_repository.h
|
||||
repositories/spell_buckets_repository.h
|
||||
repositories/spell_globals_repository.h
|
||||
repositories/starting_items_repository.h
|
||||
repositories/start_zones_repository.h
|
||||
repositories/tasks_repository.h
|
||||
repositories/tasksets_repository.h
|
||||
repositories/task_activities_repository.h
|
||||
repositories/timers_repository.h
|
||||
repositories/titles_repository.h
|
||||
repositories/trader_repository.h
|
||||
repositories/tradeskill_recipe_repository.h
|
||||
repositories/tradeskill_recipe_entries_repository.h
|
||||
repositories/traps_repository.h
|
||||
repositories/tributes_repository.h
|
||||
repositories/tribute_levels_repository.h
|
||||
repositories/variables_repository.h
|
||||
repositories/veteran_reward_templates_repository.h
|
||||
repositories/zone_repository.h
|
||||
repositories/zone_points_repository.h
|
||||
|
||||
# Non-Comformative
|
||||
repositories/character_recipe_list_repository.h
|
||||
)
|
||||
|
||||
SET(common_headers
|
||||
any.h
|
||||
base_packet.h
|
||||
@@ -442,14 +115,12 @@ SET(common_headers
|
||||
classes.h
|
||||
compression.h
|
||||
condition.h
|
||||
content/world_content_service.h
|
||||
crash.h
|
||||
crc16.h
|
||||
crc32.h
|
||||
cli/argh.h
|
||||
cli/eqemu_command_handler.h
|
||||
cli/terminal_color.hpp
|
||||
database/database_dump_service.h
|
||||
data_verification.h
|
||||
database.h
|
||||
database_schema.h
|
||||
@@ -480,7 +151,6 @@ SET(common_headers
|
||||
event_sub.h
|
||||
extprofile.h
|
||||
faction.h
|
||||
file_util.h
|
||||
features.h
|
||||
fixed_memory_hash_set.h
|
||||
fixed_memory_variable_hash_set.h
|
||||
@@ -504,6 +174,8 @@ SET(common_headers
|
||||
md5.h
|
||||
memory_buffer.h
|
||||
memory_mapped_file.h
|
||||
metric_event.h
|
||||
metric_manager.h
|
||||
misc.h
|
||||
misc_functions.h
|
||||
mutex.h
|
||||
@@ -707,7 +379,7 @@ SOURCE_GROUP(Util FILES
|
||||
|
||||
INCLUDE_DIRECTORIES(Patches SocketLib StackWalker)
|
||||
|
||||
ADD_LIBRARY(common ${common_sources} ${common_headers} ${repositories})
|
||||
ADD_LIBRARY(common ${common_sources} ${common_headers})
|
||||
|
||||
IF(UNIX)
|
||||
SET_SOURCE_FILES_PROPERTIES("SocketLib/Mime.cpp" PROPERTY COMPILE_FLAGS -Wno-unused-result)
|
||||
|
||||
+2
-2
@@ -24,7 +24,7 @@
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
// EQ::Any is a modified version of Boost::Any and as such retains the Boost licensing.
|
||||
// EQEmu::Any is a modified version of Boost::Any and as such retains the Boost licensing.
|
||||
|
||||
#ifndef EQEMU_COMMON_ANY_H
|
||||
#define EQEMU_COMMON_ANY_H
|
||||
@@ -32,7 +32,7 @@
|
||||
#include <algorithm>
|
||||
#include <typeinfo>
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
class Any
|
||||
{
|
||||
|
||||
@@ -378,8 +378,6 @@ const char *GetClassIDName(uint8 class_id, uint8 level)
|
||||
return "Berserker Guildmaster";
|
||||
case MERCHANT:
|
||||
return "Merchant";
|
||||
case DISCORD_MERCHANT:
|
||||
return "Discord Merchant";
|
||||
case ADVENTURERECRUITER:
|
||||
return "Adventure Recruiter";
|
||||
case ADVENTUREMERCHANT:
|
||||
@@ -390,18 +388,6 @@ const char *GetClassIDName(uint8 class_id, uint8 level)
|
||||
return "Tribute Master";
|
||||
case GUILD_TRIBUTE_MASTER:
|
||||
return "Guild Tribute Master";
|
||||
case GUILD_BANKER:
|
||||
return "Guild Banker";
|
||||
case NORRATHS_KEEPERS_MERCHANT:
|
||||
return "Radiant Crystal Merchant";
|
||||
case DARK_REIGN_MERCHANT:
|
||||
return "Ebon Crystal Merchant";
|
||||
case FELLOWSHIP_MASTER:
|
||||
return "Fellowship Master";
|
||||
case ALT_CURRENCY_MERCHANT:
|
||||
return "Alternate Currency Merchant";
|
||||
case MERCERNARY_MASTER:
|
||||
return "Mercenary Liaison";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
|
||||
@@ -61,7 +61,6 @@
|
||||
#define CORPSE_CLASS 62 // only seen on Danvi's Corpse in Akheva so far..
|
||||
#define TRIBUTE_MASTER 63
|
||||
#define GUILD_TRIBUTE_MASTER 64 // not sure
|
||||
#define GUILD_BANKER 66
|
||||
#define NORRATHS_KEEPERS_MERCHANT 67
|
||||
#define DARK_REIGN_MERCHANT 68
|
||||
#define FELLOWSHIP_MASTER 69
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace EQEmuCommand {
|
||||
index++;
|
||||
}
|
||||
|
||||
if (!arguments_filled || argc == 2 || cmd[{"-h", "--help"}]) {
|
||||
if (!arguments_filled || argc == 2) {
|
||||
std::string arguments_string;
|
||||
for (auto &arg : arguments) {
|
||||
arguments_string += " " + arg;
|
||||
@@ -96,12 +96,12 @@ namespace EQEmuCommand {
|
||||
"\nCommand" <<
|
||||
termcolor::reset << "\n\n" <<
|
||||
termcolor::green << argv[1] << arguments_string << termcolor::reset << "\n" <<
|
||||
termcolor::yellow << (!options_string.empty() ? "\nOptions\n\n" : "") <<
|
||||
termcolor::yellow << (!options_string.empty() ? "\nOptions\n" : "") <<
|
||||
termcolor::reset << termcolor::cyan << options_string << termcolor::reset;
|
||||
|
||||
std::cout << command_string.str() << std::endl;
|
||||
|
||||
exit(0);
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -168,11 +168,6 @@ namespace EQEmuCommand {
|
||||
* Print section header
|
||||
*/
|
||||
std::string command_prefix = it.first.substr(0, it.first.find(":"));
|
||||
|
||||
if (command_prefix.find("test") != std::string::npos) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (command_section != command_prefix) {
|
||||
command_section = command_prefix;
|
||||
std::cout << termcolor::reset << command_prefix << std::endl;
|
||||
@@ -188,11 +183,11 @@ namespace EQEmuCommand {
|
||||
|
||||
std::cout << std::endl;
|
||||
|
||||
std::exit(0);
|
||||
std::exit(1);
|
||||
}
|
||||
|
||||
if (ran_command) {
|
||||
std::exit(0);
|
||||
std::exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#include <string.h>
|
||||
#include <zlib.h>
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
uint32 EstimateDeflateBuffer(uint32 len) {
|
||||
z_stream zstream;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#pragma once
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
uint32 EstimateDeflateBuffer(uint32 len);
|
||||
uint32 DeflateData(const char *buffer, uint32 len, char *out_buffer, uint32 out_len_max);
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
/**
|
||||
* EQEmulator: Everquest Server Emulator
|
||||
* Copyright (C) 2001-2019 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#include "world_content_service.h"
|
||||
#include "../database.h"
|
||||
#include "../rulesys.h"
|
||||
#include "../eqemu_logsys.h"
|
||||
|
||||
|
||||
WorldContentService::WorldContentService()
|
||||
{
|
||||
SetCurrentExpansion(Expansion::EXPANSION_ALL);
|
||||
}
|
||||
|
||||
int WorldContentService::GetCurrentExpansion() const
|
||||
{
|
||||
return current_expansion;
|
||||
}
|
||||
|
||||
void WorldContentService::SetExpansionContext()
|
||||
{
|
||||
int expansion = RuleI(Expansion, CurrentExpansion);
|
||||
if (expansion >= Expansion::Classic && expansion <= Expansion::MaxId) {
|
||||
content_service.SetCurrentExpansion(expansion);
|
||||
}
|
||||
|
||||
LogInfo(
|
||||
"Current expansion is [{}] ({})",
|
||||
GetCurrentExpansion(),
|
||||
GetCurrentExpansionName()
|
||||
);
|
||||
}
|
||||
|
||||
std::string WorldContentService::GetCurrentExpansionName()
|
||||
{
|
||||
if (content_service.GetCurrentExpansion() == Expansion::EXPANSION_ALL) {
|
||||
return "All Expansions";
|
||||
}
|
||||
|
||||
if (current_expansion >= Expansion::Classic && current_expansion <= Expansion::MaxId) {
|
||||
return Expansion::ExpansionName[content_service.GetCurrentExpansion()];
|
||||
}
|
||||
|
||||
return "Unknown Expansion";
|
||||
}
|
||||
|
||||
/**
|
||||
* @param current_expansion
|
||||
*/
|
||||
void WorldContentService::SetCurrentExpansion(int current_expansion)
|
||||
{
|
||||
WorldContentService::current_expansion = current_expansion;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
const std::vector<std::string> &WorldContentService::GetContentFlags() const
|
||||
{
|
||||
return content_flags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param content_flags
|
||||
*/
|
||||
void WorldContentService::SetContentFlags(std::vector<std::string> content_flags)
|
||||
{
|
||||
WorldContentService::content_flags = content_flags;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param content_flag
|
||||
* @return
|
||||
*/
|
||||
bool WorldContentService::IsContentFlagEnabled(const std::string& content_flag)
|
||||
{
|
||||
for (auto &flag : GetContentFlags()) {
|
||||
if (flag == content_flag) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -1,173 +0,0 @@
|
||||
/**
|
||||
* EQEmulator: Everquest Server Emulator
|
||||
* Copyright (C) 2001-2019 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef EQEMU_WORLD_CONTENT_SERVICE_H
|
||||
#define EQEMU_WORLD_CONTENT_SERVICE_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace Expansion {
|
||||
static const int EXPANSION_ALL = -1;
|
||||
static const int EXPANSION_FILTER_MAX = 99;
|
||||
|
||||
enum ExpansionNumber {
|
||||
Classic = 0,
|
||||
TheRuinsOfKunark,
|
||||
TheScarsOfVelious,
|
||||
TheShadowsOfLuclin,
|
||||
ThePlanesOfPower,
|
||||
TheLegacyOfYkesha,
|
||||
LostDungeonsOfNorrath,
|
||||
GatesOfDiscord,
|
||||
OmensOfWar,
|
||||
DragonsOfNorrath,
|
||||
DepthsOfDarkhollow,
|
||||
ProphecyOfRo,
|
||||
TheSerpentsSpine,
|
||||
TheBuriedSea,
|
||||
SecretsOfFaydwer,
|
||||
SeedsOfDestruction,
|
||||
Underfoot,
|
||||
HouseOfThule,
|
||||
VeilOfAlaris,
|
||||
RainOfFear,
|
||||
CallOfTheForsaken,
|
||||
TheDarkendSea,
|
||||
TheBrokenMirror,
|
||||
EmpiresOfKunark,
|
||||
RingOfScale,
|
||||
TheBurningLands,
|
||||
TormentOfVelious,
|
||||
MaxId
|
||||
};
|
||||
|
||||
/**
|
||||
* If you add to this, make sure you update LogCategory
|
||||
*/
|
||||
static const char *ExpansionName[ExpansionNumber::MaxId] = {
|
||||
"Classic",
|
||||
"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",
|
||||
"Call of the Forsaken",
|
||||
"The Darkened Sea",
|
||||
"The Broken Mirror",
|
||||
"Empires of Kunark",
|
||||
"Ring of Scale",
|
||||
"The Burning Lands",
|
||||
"Torment of Velious",
|
||||
};
|
||||
}
|
||||
|
||||
class WorldContentService {
|
||||
public:
|
||||
|
||||
WorldContentService();
|
||||
|
||||
std::string GetCurrentExpansionName();
|
||||
int GetCurrentExpansion() const;
|
||||
void SetCurrentExpansion(int current_expansion);
|
||||
|
||||
bool IsClassicEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::Classic || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTheRuinsOfKunarkEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheRuinsOfKunark || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTheScarsOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheScarsOfVelious || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTheShadowsOfLuclinEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheShadowsOfLuclin || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsThePlanesOfPowerEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::ThePlanesOfPower || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTheLegacyOfYkeshaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheLegacyOfYkesha || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsLostDungeonsOfNorrathEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::LostDungeonsOfNorrath || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsGatesOfDiscordEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::GatesOfDiscord || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsOmensOfWarEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::OmensOfWar || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsDragonsOfNorrathEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::DragonsOfNorrath || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsDepthsOfDarkhollowEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::DepthsOfDarkhollow || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsProphecyOfRoEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::ProphecyOfRo || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTheSerpentsSpineEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheSerpentsSpine || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTheBuriedSeaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBuriedSea || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsSecretsOfFaydwerEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::SecretsOfFaydwer || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsSeedsOfDestructionEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::SeedsOfDestruction || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsUnderfootEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::Underfoot || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsHouseOfThuleEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::HouseOfThule || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsVeilOfAlarisEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::VeilOfAlaris || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsRainOfFearEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::RainOfFear || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsCallOfTheForsakenEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::CallOfTheForsaken || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTheDarkendSeaEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheDarkendSea || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTheBrokenMirrorEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBrokenMirror || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsEmpiresOfKunarkEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::EmpiresOfKunark || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsRingOfScaleEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::RingOfScale || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTheBurningLandsEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TheBurningLands || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
bool IsTormentOfVeliousEnabled() { return GetCurrentExpansion() >= Expansion::ExpansionNumber::TormentOfVelious || GetCurrentExpansion() == Expansion::EXPANSION_ALL; }
|
||||
|
||||
bool IsCurrentExpansionClassic() { return current_expansion == Expansion::ExpansionNumber::Classic; }
|
||||
bool IsCurrentExpansionTheRuinsOfKunark() { return current_expansion == Expansion::ExpansionNumber::TheRuinsOfKunark; }
|
||||
bool IsCurrentExpansionTheScarsOfVelious() { return current_expansion == Expansion::ExpansionNumber::TheScarsOfVelious; }
|
||||
bool IsCurrentExpansionTheShadowsOfLuclin() { return current_expansion == Expansion::ExpansionNumber::TheShadowsOfLuclin; }
|
||||
bool IsCurrentExpansionThePlanesOfPower() { return current_expansion == Expansion::ExpansionNumber::ThePlanesOfPower; }
|
||||
bool IsCurrentExpansionTheLegacyOfYkesha() { return current_expansion == Expansion::ExpansionNumber::TheLegacyOfYkesha; }
|
||||
bool IsCurrentExpansionLostDungeonsOfNorrath() { return current_expansion == Expansion::ExpansionNumber::LostDungeonsOfNorrath; }
|
||||
bool IsCurrentExpansionGatesOfDiscord() { return current_expansion == Expansion::ExpansionNumber::GatesOfDiscord; }
|
||||
bool IsCurrentExpansionOmensOfWar() { return current_expansion == Expansion::ExpansionNumber::OmensOfWar; }
|
||||
bool IsCurrentExpansionDragonsOfNorrath() { return current_expansion == Expansion::ExpansionNumber::DragonsOfNorrath; }
|
||||
bool IsCurrentExpansionDepthsOfDarkhollow() { return current_expansion == Expansion::ExpansionNumber::DepthsOfDarkhollow; }
|
||||
bool IsCurrentExpansionProphecyOfRo() { return current_expansion == Expansion::ExpansionNumber::ProphecyOfRo; }
|
||||
bool IsCurrentExpansionTheSerpentsSpine() { return current_expansion == Expansion::ExpansionNumber::TheSerpentsSpine; }
|
||||
bool IsCurrentExpansionTheBuriedSea() { return current_expansion == Expansion::ExpansionNumber::TheBuriedSea; }
|
||||
bool IsCurrentExpansionSecretsOfFaydwer() { return current_expansion == Expansion::ExpansionNumber::SecretsOfFaydwer; }
|
||||
bool IsCurrentExpansionSeedsOfDestruction() { return current_expansion == Expansion::ExpansionNumber::SeedsOfDestruction; }
|
||||
bool IsCurrentExpansionUnderfoot() { return current_expansion == Expansion::ExpansionNumber::Underfoot; }
|
||||
bool IsCurrentExpansionHouseOfThule() { return current_expansion == Expansion::ExpansionNumber::HouseOfThule; }
|
||||
bool IsCurrentExpansionVeilOfAlaris() { return current_expansion == Expansion::ExpansionNumber::VeilOfAlaris; }
|
||||
bool IsCurrentExpansionRainOfFear() { return current_expansion == Expansion::ExpansionNumber::RainOfFear; }
|
||||
bool IsCurrentExpansionCallOfTheForsaken() { return current_expansion == Expansion::ExpansionNumber::CallOfTheForsaken; }
|
||||
bool IsCurrentExpansionTheDarkendSea() { return current_expansion == Expansion::ExpansionNumber::TheDarkendSea; }
|
||||
bool IsCurrentExpansionTheBrokenMirror() { return current_expansion == Expansion::ExpansionNumber::TheBrokenMirror; }
|
||||
bool IsCurrentExpansionEmpiresOfKunark() { return current_expansion == Expansion::ExpansionNumber::EmpiresOfKunark; }
|
||||
bool IsCurrentExpansionRingOfScale() { return current_expansion == Expansion::ExpansionNumber::RingOfScale; }
|
||||
bool IsCurrentExpansionTheBurningLands() { return current_expansion == Expansion::ExpansionNumber::TheBurningLands; }
|
||||
bool IsCurrentExpansionTormentOfVelious() { return current_expansion == Expansion::ExpansionNumber::TormentOfVelious; }
|
||||
|
||||
private:
|
||||
int current_expansion{};
|
||||
std::vector<std::string> content_flags;
|
||||
public:
|
||||
const std::vector<std::string> &GetContentFlags() const;
|
||||
bool IsContentFlagEnabled(const std::string& content_flag);
|
||||
void SetContentFlags(std::vector<std::string> content_flags);
|
||||
void SetExpansionContext();
|
||||
};
|
||||
|
||||
extern WorldContentService content_service;
|
||||
|
||||
#endif //EQEMU_WORLD_CONTENT_SERVICE_H
|
||||
@@ -118,11 +118,6 @@ void set_exception_handler() {
|
||||
#include <unistd.h>
|
||||
#include <sys/fcntl.h>
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
#include <signal.h>
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
void print_trace()
|
||||
{
|
||||
auto uid = geteuid();
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
|
||||
namespace EQ {
|
||||
namespace EQEmu {
|
||||
template<typename T>
|
||||
T Clamp(const T &value, const T &lower, const T &upper)
|
||||
{
|
||||
|
||||
+237
-338
@@ -45,7 +45,6 @@
|
||||
#include "eq_packet_structs.h"
|
||||
#include "extprofile.h"
|
||||
#include "string_util.h"
|
||||
#include "database_schema.h"
|
||||
|
||||
extern Client client;
|
||||
|
||||
@@ -61,15 +60,15 @@ Database::Database(const char* host, const char* user, const char* passwd, const
|
||||
Connect(host, user, passwd, database, port);
|
||||
}
|
||||
|
||||
bool Database::Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port, std::string connection_label) {
|
||||
bool Database::Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port) {
|
||||
uint32 errnum= 0;
|
||||
char errbuf[MYSQL_ERRMSG_SIZE];
|
||||
if (!Open(host, user, passwd, database, port, &errnum, errbuf)) {
|
||||
LogError("[MySQL] Connection [{}] Failed to connect to database: Error [{}]", connection_label, errbuf);
|
||||
LogError("Failed to connect to database: Error: {}", errbuf);
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
LogInfo("[MySQL] Connection [{}] database [{}] at [{}]:[{}]", connection_label, database, host,port);
|
||||
LogInfo("Using database [{}] at [{}]:[{}]", database, host,port);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -339,21 +338,6 @@ bool Database::ReserveName(uint32 account_id, char* name) {
|
||||
query = StringFormat("INSERT INTO `character_data` SET `account_id` = %i, `name` = '%s'", account_id, name);
|
||||
results = QueryDatabase(query);
|
||||
if (!results.Success() || results.ErrorMessage() != ""){ return false; }
|
||||
|
||||
// Put character into the default guild if rule is being used.
|
||||
int guild_id = RuleI(Character, DefaultGuild);
|
||||
|
||||
if (guild_id != 0) {
|
||||
int character_id=results.LastInsertedID();
|
||||
if (character_id > -1) {
|
||||
query = StringFormat("INSERT INTO `guild_members` SET `char_id` = %i, `guild_id` = '%i'", character_id, guild_id);
|
||||
results = QueryDatabase(query);
|
||||
if (!results.Success() || results.ErrorMessage() != ""){
|
||||
LogInfo("Could not put character [{}] into default Guild", name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -387,7 +371,6 @@ bool Database::DeleteCharacter(char *character_name) {
|
||||
UPDATE
|
||||
character_data
|
||||
SET
|
||||
name = SUBSTRING(CONCAT(name, '-deleted-', UNIX_TIMESTAMP()), 1, 64),
|
||||
deleted_at = NOW()
|
||||
WHERE
|
||||
id = '{}'
|
||||
@@ -402,18 +385,46 @@ bool Database::DeleteCharacter(char *character_name) {
|
||||
|
||||
LogInfo("DeleteCharacter | Character [{}] ({}) is being [{}]", character_name, character_id, delete_type);
|
||||
|
||||
for (const auto& iter : DatabaseSchema::GetCharacterTables()) {
|
||||
std::string table_name = iter.first;
|
||||
std::string character_id_column_name = iter.second;
|
||||
|
||||
QueryDatabase(fmt::format("DELETE FROM {} WHERE {} = {}", table_name, character_id_column_name, character_id));
|
||||
}
|
||||
|
||||
query = StringFormat("DELETE FROM `quest_globals` WHERE `charid` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_activities` WHERE `charid` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_enabledtasks` WHERE `charid` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_tasks` WHERE `charid` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `completed_tasks` WHERE `charid` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `friends` WHERE `charid` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `mail` WHERE `charid` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `timers` WHERE `char_id` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `inventory` WHERE `charid` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `char_recipe_list` WHERE `char_id` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `adventure_stats` WHERE `player_id` ='%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `zone_flags` WHERE `charID` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `titles` WHERE `char_id` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `player_titlesets` WHERE `char_id` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `keyring` WHERE `char_id` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `faction_values` WHERE `char_id` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `instance_list_player` WHERE `charid` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_data` WHERE `id` = '%d'", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_skills` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_languages` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_bind` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_alternate_abilities` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_currency` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_data` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_spells` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_memmed_spells` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_disciplines` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_material` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_tribute` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_bandolier` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_potionbelt` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_inspect_messages` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_leadership_abilities` WHERE `id` = %u", character_id); QueryDatabase(query);
|
||||
query = StringFormat("DELETE FROM `character_alt_currency` WHERE `char_id` = '%d'", character_id); QueryDatabase(query);
|
||||
#ifdef BOTS
|
||||
query = StringFormat("DELETE FROM `guild_members` WHERE `char_id` = '%d' AND GetMobTypeById(%i) = 'C'", character_id); // note: only use of GetMobTypeById()
|
||||
QueryDatabase(query);
|
||||
#else
|
||||
query = StringFormat("DELETE FROM `guild_members` WHERE `char_id` = '%d'", character_id);
|
||||
#endif
|
||||
|
||||
QueryDatabase(query);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -512,96 +523,96 @@ bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, Playe
|
||||
"guild_auto_consent,"
|
||||
"RestTimer) "
|
||||
"VALUES ("
|
||||
"%u," // id
|
||||
"%u," // account_id
|
||||
"'%s'," // `name`
|
||||
"'%s'," // last_name
|
||||
"%u," // gender
|
||||
"%u," // race
|
||||
"%u," // class
|
||||
"%u," // `level`
|
||||
"%u," // deity
|
||||
"%u," // birthday
|
||||
"%u," // last_login
|
||||
"%u," // time_played
|
||||
"%u," // pvp_status
|
||||
"%u," // level2
|
||||
"%u," // anon
|
||||
"%u," // gm
|
||||
"%u," // intoxication
|
||||
"%u," // hair_color
|
||||
"%u," // beard_color
|
||||
"%u," // eye_color_1
|
||||
"%u," // eye_color_2
|
||||
"%u," // hair_style
|
||||
"%u," // beard
|
||||
"%u," // ability_time_seconds
|
||||
"%u," // ability_number
|
||||
"%u," // ability_time_minutes
|
||||
"%u," // ability_time_hours
|
||||
"'%s'," // title
|
||||
"'%s'," // suffix
|
||||
"%u," // exp
|
||||
"%u," // points
|
||||
"%u," // mana
|
||||
"%u," // cur_hp
|
||||
"%u," // str
|
||||
"%u," // sta
|
||||
"%u," // cha
|
||||
"%u," // dex
|
||||
"%u," // `int`
|
||||
"%u," // agi
|
||||
"%u," // wis
|
||||
"%u," // face
|
||||
"%f," // y
|
||||
"%f," // x
|
||||
"%f," // z
|
||||
"%f," // heading
|
||||
"%u," // pvp2
|
||||
"%u," // pvp_type
|
||||
"%u," // autosplit_enabled
|
||||
"%u," // zone_change_count
|
||||
"%u," // drakkin_heritage
|
||||
"%u," // drakkin_tattoo
|
||||
"%u," // drakkin_details
|
||||
"%i," // toxicity
|
||||
"%i," // hunger_level
|
||||
"%i," // thirst_level
|
||||
"%u," // ability_up
|
||||
"%u," // zone_id
|
||||
"%u," // zone_instance
|
||||
"%u," // leadership_exp_on
|
||||
"%u," // ldon_points_guk
|
||||
"%u," // ldon_points_mir
|
||||
"%u," // ldon_points_mmc
|
||||
"%u," // ldon_points_ruj
|
||||
"%u," // ldon_points_tak
|
||||
"%u," // ldon_points_available
|
||||
"%u," // id
|
||||
"%u," // account_id
|
||||
"'%s'," // `name`
|
||||
"'%s'," // last_name
|
||||
"%u," // gender
|
||||
"%u," // race
|
||||
"%u," // class
|
||||
"%u," // `level`
|
||||
"%u," // deity
|
||||
"%u," // birthday
|
||||
"%u," // last_login
|
||||
"%u," // time_played
|
||||
"%u," // pvp_status
|
||||
"%u," // level2
|
||||
"%u," // anon
|
||||
"%u," // gm
|
||||
"%u," // intoxication
|
||||
"%u," // hair_color
|
||||
"%u," // beard_color
|
||||
"%u," // eye_color_1
|
||||
"%u," // eye_color_2
|
||||
"%u," // hair_style
|
||||
"%u," // beard
|
||||
"%u," // ability_time_seconds
|
||||
"%u," // ability_number
|
||||
"%u," // ability_time_minutes
|
||||
"%u," // ability_time_hours
|
||||
"'%s'," // title
|
||||
"'%s'," // suffix
|
||||
"%u," // exp
|
||||
"%u," // points
|
||||
"%u," // mana
|
||||
"%u," // cur_hp
|
||||
"%u," // str
|
||||
"%u," // sta
|
||||
"%u," // cha
|
||||
"%u," // dex
|
||||
"%u," // `int`
|
||||
"%u," // agi
|
||||
"%u," // wis
|
||||
"%u," // face
|
||||
"%f," // y
|
||||
"%f," // x
|
||||
"%f," // z
|
||||
"%f," // heading
|
||||
"%u," // pvp2
|
||||
"%u," // pvp_type
|
||||
"%u," // autosplit_enabled
|
||||
"%u," // zone_change_count
|
||||
"%u," // drakkin_heritage
|
||||
"%u," // drakkin_tattoo
|
||||
"%u," // drakkin_details
|
||||
"%i," // toxicity
|
||||
"%i," // hunger_level
|
||||
"%i," // thirst_level
|
||||
"%u," // ability_up
|
||||
"%u," // zone_id
|
||||
"%u," // zone_instance
|
||||
"%u," // leadership_exp_on
|
||||
"%u," // ldon_points_guk
|
||||
"%u," // ldon_points_mir
|
||||
"%u," // ldon_points_mmc
|
||||
"%u," // ldon_points_ruj
|
||||
"%u," // ldon_points_tak
|
||||
"%u," // ldon_points_available
|
||||
"%u," // tribute_time_remaining
|
||||
"%u," // show_helm
|
||||
"%u," // career_tribute_points
|
||||
"%u," // tribute_points
|
||||
"%u," // tribute_active
|
||||
"%u," // endurance
|
||||
"%u," // group_leadership_exp
|
||||
"%u," // raid_leadership_exp
|
||||
"%u," // show_helm
|
||||
"%u," // career_tribute_points
|
||||
"%u," // tribute_points
|
||||
"%u," // tribute_active
|
||||
"%u," // endurance
|
||||
"%u," // group_leadership_exp
|
||||
"%u," // raid_leadership_exp
|
||||
"%u," // group_leadership_point
|
||||
"%u," // raid_leadership_points
|
||||
"%u," // air_remaining
|
||||
"%u," // pvp_kills
|
||||
"%u," // pvp_deaths
|
||||
"%u," // pvp_current_points
|
||||
"%u," // pvp_career_points
|
||||
"%u," // pvp_best_kill_streak
|
||||
"%u," // air_remaining
|
||||
"%u," // pvp_kills
|
||||
"%u," // pvp_deaths
|
||||
"%u," // pvp_current_points
|
||||
"%u," // pvp_career_points
|
||||
"%u," // pvp_best_kill_streak
|
||||
"%u," // pvp_worst_death_streak
|
||||
"%u," // pvp_current_kill_strea
|
||||
"%u," // aa_points_spent
|
||||
"%u," // aa_exp
|
||||
"%u," // aa_points
|
||||
"%u," // group_auto_consent
|
||||
"%u," // raid_auto_consent
|
||||
"%u," // guild_auto_consent
|
||||
"%u" // RestTimer
|
||||
"%u," // aa_points_spent
|
||||
"%u," // aa_exp
|
||||
"%u," // aa_points
|
||||
"%u," // group_auto_consent
|
||||
"%u," // raid_auto_consent
|
||||
"%u," // guild_auto_consent
|
||||
"%u" // RestTimer
|
||||
")",
|
||||
character_id, // " id, "
|
||||
account_id, // " account_id, "
|
||||
@@ -750,6 +761,61 @@ bool Database::SaveCharacterCreate(uint32 character_id, uint32 account_id, Playe
|
||||
return true;
|
||||
}
|
||||
|
||||
/* This only for new Character creation storing */
|
||||
bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv) {
|
||||
uint32 charid = 0;
|
||||
char zone[50];
|
||||
float x, y, z;
|
||||
charid = GetCharacterID(pp->name);
|
||||
|
||||
if(!charid) {
|
||||
LogError("StoreCharacter: no character id");
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *zname = GetZoneName(pp->zone_id);
|
||||
if(zname == nullptr) {
|
||||
/* Zone not in the DB, something to prevent crash... */
|
||||
strn0cpy(zone, "qeynos", 49);
|
||||
pp->zone_id = 1;
|
||||
}
|
||||
else{ strn0cpy(zone, zname, 49); }
|
||||
|
||||
x = pp->x;
|
||||
y = pp->y;
|
||||
z = pp->z;
|
||||
|
||||
/* Saves Player Profile Data */
|
||||
SaveCharacterCreate(charid, account_id, pp);
|
||||
|
||||
/* Insert starting inventory... */
|
||||
std::string invquery;
|
||||
for (int16 i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invbag::BANK_BAGS_END;) {
|
||||
const EQEmu::ItemInstance* newinv = inv->GetItem(i);
|
||||
if (newinv) {
|
||||
invquery = StringFormat("INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)",
|
||||
charid, i, newinv->GetItem()->ID, newinv->GetCharges(), newinv->GetColor());
|
||||
|
||||
auto results = QueryDatabase(invquery);
|
||||
}
|
||||
|
||||
if (i == EQEmu::invslot::slotCursor) {
|
||||
i = EQEmu::invbag::GENERAL_BAGS_BEGIN;
|
||||
continue;
|
||||
}
|
||||
else if (i == EQEmu::invbag::CURSOR_BAG_END) {
|
||||
i = EQEmu::invslot::BANK_BEGIN;
|
||||
continue;
|
||||
}
|
||||
else if (i == EQEmu::invslot::BANK_END) {
|
||||
i = EQEmu::invbag::BANK_BAGS_BEGIN;
|
||||
continue;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32 Database::GetCharacterID(const char *name) {
|
||||
std::string query = StringFormat("SELECT `id` FROM `character_data` WHERE `name` = '%s'", name);
|
||||
auto results = QueryDatabase(query);
|
||||
@@ -870,38 +936,6 @@ void Database::GetCharName(uint32 char_id, char* name) {
|
||||
}
|
||||
}
|
||||
|
||||
const char* Database::GetCharNameByID(uint32 char_id) {
|
||||
std::string query = fmt::format("SELECT `name` FROM `character_data` WHERE id = {}", char_id);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
return "";
|
||||
}
|
||||
|
||||
auto row = results.begin();
|
||||
return row[0];
|
||||
}
|
||||
|
||||
const char* Database::GetNPCNameByID(uint32 npc_id) {
|
||||
std::string query = fmt::format("SELECT `name` FROM `npc_types` WHERE id = {}", npc_id);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success()) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
return "";
|
||||
}
|
||||
|
||||
auto row = results.begin();
|
||||
return row[0];
|
||||
}
|
||||
|
||||
bool Database::LoadVariables() {
|
||||
auto results = QueryDatabase(StringFormat("SELECT varname, value, unix_timestamp() FROM variables where unix_timestamp(ts) >= %d", varcache.last_update));
|
||||
|
||||
@@ -1082,6 +1116,50 @@ bool Database::GetZoneGraveyard(const uint32 graveyard_id, uint32* graveyard_zon
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Database::LoadZoneNames() {
|
||||
std::string query("SELECT zoneidnumber, short_name FROM zone");
|
||||
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
for (auto row= results.begin();row != results.end();++row)
|
||||
{
|
||||
uint32 zoneid = atoi(row[0]);
|
||||
std::string zonename = row[1];
|
||||
zonename_array.insert(std::pair<uint32,std::string>(zoneid,zonename));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32 Database::GetZoneID(const char* zonename) {
|
||||
|
||||
if (zonename == nullptr)
|
||||
return 0;
|
||||
|
||||
for (auto iter = zonename_array.begin(); iter != zonename_array.end(); ++iter)
|
||||
if (strcasecmp(iter->second.c_str(), zonename) == 0)
|
||||
return iter->first;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char* Database::GetZoneName(uint32 zoneID, bool ErrorUnknown) {
|
||||
auto iter = zonename_array.find(zoneID);
|
||||
|
||||
if (iter != zonename_array.end())
|
||||
return iter->second.c_str();
|
||||
|
||||
if (ErrorUnknown)
|
||||
return "UNKNOWN";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8 Database::GetPEQZone(uint32 zoneID, uint32 version){
|
||||
|
||||
std::string query = StringFormat("SELECT peqzone from zone where zoneidnumber='%i' AND (version=%i OR version=0) ORDER BY version DESC", zoneID, version);
|
||||
@@ -1298,31 +1376,29 @@ uint8 Database::GetServerType() {
|
||||
return atoi(row[0]);
|
||||
}
|
||||
|
||||
bool Database::MoveCharacterToZone(uint32 character_id, uint32 zone_id)
|
||||
{
|
||||
std::string query = StringFormat(
|
||||
"UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `id` = %i",
|
||||
zone_id,
|
||||
character_id
|
||||
);
|
||||
bool Database::MoveCharacterToZone(const char* charname, const char* zonename, uint32 zoneid) {
|
||||
if(zonename == nullptr || strlen(zonename) == 0)
|
||||
return false;
|
||||
|
||||
std::string query = StringFormat("UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `name` = '%s'", zoneid, charname);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return results.RowsAffected() != 0;
|
||||
if (results.RowsAffected() == 0)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Database::MoveCharacterToZone(const char *charname, uint32 zone_id)
|
||||
{
|
||||
std::string query = StringFormat(
|
||||
"UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `name` = '%s'",
|
||||
zone_id,
|
||||
charname
|
||||
);
|
||||
bool Database::MoveCharacterToZone(const char* charname, const char* zonename) {
|
||||
return MoveCharacterToZone(charname, zonename, GetZoneID(zonename));
|
||||
}
|
||||
|
||||
bool Database::MoveCharacterToZone(uint32 iCharID, const char* iZonename) {
|
||||
std::string query = StringFormat("UPDATE `character_data` SET `zone_id` = %i, `x` = -1, `y` = -1, `z` = -1 WHERE `id` = %i", GetZoneID(iZonename), iCharID);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success()) {
|
||||
@@ -2093,44 +2169,6 @@ uint32 Database::GetGuildIDByCharID(uint32 character_id)
|
||||
return atoi(row[0]);
|
||||
}
|
||||
|
||||
uint32 Database::GetGroupIDByCharID(uint32 character_id)
|
||||
{
|
||||
std::string query = fmt::format(
|
||||
SQL(
|
||||
SELECT groupid
|
||||
FROM group_id
|
||||
WHERE charid = '{}'
|
||||
),
|
||||
character_id
|
||||
);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success())
|
||||
return 0;
|
||||
|
||||
if (results.RowCount() == 0)
|
||||
return 0;
|
||||
|
||||
auto row = results.begin();
|
||||
return atoi(row[0]);
|
||||
}
|
||||
|
||||
uint32 Database::GetRaidIDByCharID(uint32 character_id) {
|
||||
std::string query = fmt::format(
|
||||
SQL(
|
||||
SELECT raidid
|
||||
FROM raid_members
|
||||
WHERE charid = '{}'
|
||||
),
|
||||
character_id
|
||||
);
|
||||
auto results = QueryDatabase(query);
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
return atoi(row[0]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param log_settings
|
||||
*/
|
||||
@@ -2308,142 +2346,3 @@ int Database::GetInstanceID(uint32 char_id, uint32 zone_id) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param source_character_name
|
||||
* @param destination_character_name
|
||||
* @param destination_account_name
|
||||
* @return
|
||||
*/
|
||||
bool Database::CopyCharacter(
|
||||
std::string source_character_name,
|
||||
std::string destination_character_name,
|
||||
std::string destination_account_name
|
||||
)
|
||||
{
|
||||
auto results = QueryDatabase(
|
||||
fmt::format(
|
||||
"SELECT id FROM character_data WHERE name = '{}' and deleted_at is NULL LIMIT 1",
|
||||
source_character_name
|
||||
)
|
||||
);
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
LogError("No character found with name [{}]", source_character_name);
|
||||
}
|
||||
|
||||
auto row = results.begin();
|
||||
std::string source_character_id = row[0];
|
||||
|
||||
results = QueryDatabase(
|
||||
fmt::format(
|
||||
"SELECT id FROM account WHERE name = '{}' LIMIT 1",
|
||||
destination_account_name
|
||||
)
|
||||
);
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
LogError("No account found with name [{}]", destination_account_name);
|
||||
}
|
||||
|
||||
row = results.begin();
|
||||
std::string source_account_id = row[0];
|
||||
|
||||
/**
|
||||
* Fresh ID
|
||||
*/
|
||||
results = QueryDatabase("SELECT (MAX(id) + 1) as new_id from character_data");
|
||||
row = results.begin();
|
||||
std::string new_character_id = row[0];
|
||||
|
||||
TransactionBegin();
|
||||
for (const auto &iter : DatabaseSchema::GetCharacterTables()) {
|
||||
std::string table_name = iter.first;
|
||||
std::string character_id_column_name = iter.second;
|
||||
|
||||
/**
|
||||
* Columns
|
||||
*/
|
||||
results = QueryDatabase(fmt::format("SHOW COLUMNS FROM {}", table_name));
|
||||
std::vector<std::string> columns = {};
|
||||
int column_count = 0;
|
||||
for (row = results.begin(); row != results.end(); ++row) {
|
||||
columns.emplace_back(row[0]);
|
||||
column_count++;
|
||||
}
|
||||
|
||||
results = QueryDatabase(
|
||||
fmt::format(
|
||||
"SELECT {} FROM {} WHERE {} = {}",
|
||||
implode(",", wrap(columns, "`")),
|
||||
table_name,
|
||||
character_id_column_name,
|
||||
source_character_id
|
||||
)
|
||||
);
|
||||
|
||||
std::vector<std::vector<std::string>> new_rows;
|
||||
for (row = results.begin(); row != results.end(); ++row) {
|
||||
std::vector<std::string> new_values = {};
|
||||
for (int column_index = 0; column_index < column_count; column_index++) {
|
||||
std::string column = columns[column_index];
|
||||
std::string value = row[column_index] ? row[column_index] : "null";
|
||||
|
||||
if (column == character_id_column_name) {
|
||||
value = new_character_id;
|
||||
}
|
||||
|
||||
if (column == "name" && table_name == "character_data") {
|
||||
value = destination_character_name;
|
||||
}
|
||||
|
||||
if (column == "account_id" && table_name == "character_data") {
|
||||
value = source_account_id;
|
||||
}
|
||||
|
||||
new_values.emplace_back(value);
|
||||
}
|
||||
|
||||
new_rows.emplace_back(new_values);
|
||||
}
|
||||
|
||||
std::string insert_values;
|
||||
std::vector<std::string> insert_rows;
|
||||
|
||||
for (auto &r: new_rows) {
|
||||
std::string insert_row = "(" + implode(",", wrap(r, "'")) + ")";
|
||||
insert_rows.emplace_back(insert_row);
|
||||
}
|
||||
|
||||
if (!insert_rows.empty()) {
|
||||
QueryDatabase(
|
||||
fmt::format(
|
||||
"DELETE FROM {} WHERE {} = {}",
|
||||
table_name,
|
||||
character_id_column_name,
|
||||
new_character_id
|
||||
)
|
||||
);
|
||||
|
||||
auto insert = QueryDatabase(
|
||||
fmt::format(
|
||||
"INSERT INTO {} ({}) VALUES {}",
|
||||
table_name,
|
||||
implode(",", wrap(columns, "`")),
|
||||
implode(",", insert_rows)
|
||||
)
|
||||
);
|
||||
|
||||
if (!insert.ErrorMessage().empty()) {
|
||||
TransactionRollback();
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TransactionCommit();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+25
-39
@@ -40,7 +40,7 @@
|
||||
class MySQLRequestResult;
|
||||
class Client;
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
class InventoryProfile;
|
||||
}
|
||||
@@ -100,40 +100,23 @@ class Database : public DBcore {
|
||||
public:
|
||||
Database();
|
||||
Database(const char* host, const char* user, const char* passwd, const char* database,uint32 port);
|
||||
bool Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port, std::string connection_label = "default");
|
||||
bool Connect(const char* host, const char* user, const char* passwd, const char* database, uint32 port);
|
||||
~Database();
|
||||
|
||||
/* Character Creation */
|
||||
|
||||
bool AddToNameFilter(const char *name);
|
||||
bool CreateCharacter(
|
||||
uint32 account_id,
|
||||
char *name,
|
||||
uint16 gender,
|
||||
uint16 race,
|
||||
uint16 class_,
|
||||
uint8 str,
|
||||
uint8 sta,
|
||||
uint8 cha,
|
||||
uint8 dex,
|
||||
uint8 int_,
|
||||
uint8 agi,
|
||||
uint8 wis,
|
||||
uint8 face
|
||||
);
|
||||
bool DeleteCharacter(char *character_name);
|
||||
bool MoveCharacterToZone(const char *charname, uint32 zone_id);
|
||||
bool MoveCharacterToZone(uint32 character_id, uint32 zone_id);
|
||||
bool ReserveName(uint32 account_id, char *name);
|
||||
bool SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct *pp);
|
||||
bool SetHackerFlag(const char *accountname, const char *charactername, const char *hacked);
|
||||
bool SetMQDetectionFlag(const char *accountname, const char *charactername, const char *hacked, const char *zone);
|
||||
bool UpdateName(const char *oldname, const char *newname);
|
||||
bool CopyCharacter(
|
||||
std::string source_character_name,
|
||||
std::string destination_character_name,
|
||||
std::string destination_account_name
|
||||
);
|
||||
bool AddToNameFilter(const char* name);
|
||||
bool CreateCharacter(uint32 account_id, char* name, uint16 gender, uint16 race, uint16 class_, uint8 str, uint8 sta, uint8 cha, uint8 dex, uint8 int_, uint8 agi, uint8 wis, uint8 face);
|
||||
bool DeleteCharacter(char* character_name);
|
||||
bool MoveCharacterToZone(const char* charname, const char* zonename);
|
||||
bool MoveCharacterToZone(const char* charname, const char* zonename,uint32 zoneid);
|
||||
bool MoveCharacterToZone(uint32 iCharID, const char* iZonename);
|
||||
bool ReserveName(uint32 account_id, char* name);
|
||||
bool SaveCharacterCreate(uint32 character_id, uint32 account_id, PlayerProfile_Struct* pp);
|
||||
bool SetHackerFlag(const char* accountname, const char* charactername, const char* hacked);
|
||||
bool SetMQDetectionFlag(const char* accountname, const char* charactername, const char* hacked, const char* zone);
|
||||
bool StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu::InventoryProfile* inv);
|
||||
bool UpdateName(const char* oldname, const char* newname);
|
||||
|
||||
/* General Information Queries */
|
||||
|
||||
@@ -150,13 +133,9 @@ public:
|
||||
uint32 GetCharacterID(const char *name);
|
||||
uint32 GetCharacterInfo(const char* iName, uint32* oAccID = 0, uint32* oZoneID = 0, uint32* oInstanceID = 0, float* oX = 0, float* oY = 0, float* oZ = 0);
|
||||
uint32 GetGuildIDByCharID(uint32 char_id);
|
||||
uint32 GetGroupIDByCharID(uint32 char_id);
|
||||
uint32 GetRaidIDByCharID(uint32 char_id);
|
||||
|
||||
void GetAccountName(uint32 accountid, char* name, uint32* oLSAccountID = 0);
|
||||
void GetCharName(uint32 char_id, char* name);
|
||||
const char *GetCharNameByID(uint32 char_id);
|
||||
const char *GetNPCNameByID(uint32 npc_id);
|
||||
void LoginIP(uint32 AccountID, const char* LoginIP);
|
||||
|
||||
/* Instancing */
|
||||
@@ -173,6 +152,7 @@ public:
|
||||
bool VerifyInstanceAlive(uint16 instance_id, uint32 char_id);
|
||||
bool VerifyZoneInstance(uint32 zone_id, uint16 instance_id);
|
||||
|
||||
uint16 GetInstanceID(const char* zone, uint32 charid, int16 version);
|
||||
uint16 GetInstanceID(uint32 zone, uint32 charid, int16 version);
|
||||
uint16 GetInstanceVersion(uint16 instance_id);
|
||||
uint32 GetTimeRemainingInstance(uint16 instance_id, bool &is_perma);
|
||||
@@ -212,19 +192,19 @@ public:
|
||||
|
||||
void GetAccountFromID(uint32 id, char* oAccountName, int16* oStatus);
|
||||
void SetAgreementFlag(uint32 acctid);
|
||||
|
||||
|
||||
int GetIPExemption(std::string account_ip);
|
||||
|
||||
int GetInstanceID(uint32 char_id, uint32 zone_id);
|
||||
|
||||
|
||||
/* Groups */
|
||||
|
||||
|
||||
char* GetGroupLeaderForLogin(const char* name,char* leaderbuf);
|
||||
char* GetGroupLeadershipInfo(uint32 gid, char* leaderbuf, char* maintank = nullptr, char* assist = nullptr, char* puller = nullptr, char *marknpc = nullptr, char *mentoree = nullptr, int *mentor_percent = nullptr, GroupLeadershipAA_Struct* GLAA = nullptr);
|
||||
|
||||
|
||||
uint32 GetGroupID(const char* name);
|
||||
|
||||
|
||||
void ClearGroup(uint32 gid = 0);
|
||||
void ClearGroupLeader(uint32 gid = 0);
|
||||
void SetGroupID(const char* name, uint32 id, uint32 charid, uint32 ismerc = false);
|
||||
@@ -260,11 +240,16 @@ public:
|
||||
/* General Queries */
|
||||
|
||||
bool GetSafePoints(const char* short_name, uint32 version, float* safe_x = 0, float* safe_y = 0, float* safe_z = 0, int16* minstatus = 0, uint8* minlevel = 0, char *flag_needed = nullptr);
|
||||
bool GetSafePoints(uint32 zoneID, uint32 version, float* safe_x = 0, float* safe_y = 0, float* safe_z = 0, int16* minstatus = 0, uint8* minlevel = 0, char *flag_needed = nullptr) { return GetSafePoints(GetZoneName(zoneID), version, safe_x, safe_y, safe_z, minstatus, minlevel, flag_needed); }
|
||||
bool GetZoneGraveyard(const uint32 graveyard_id, uint32* graveyard_zoneid = 0, float* graveyard_x = 0, float* graveyard_y = 0, float* graveyard_z = 0, float* graveyard_heading = 0);
|
||||
bool GetZoneLongName(const char* short_name, char** long_name, char* file_name = 0, float* safe_x = 0, float* safe_y = 0, float* safe_z = 0, uint32* graveyard_id = 0, uint32* maxclients = 0);
|
||||
bool LoadPTimers(uint32 charid, PTimerList &into);
|
||||
bool LoadZoneNames();
|
||||
|
||||
const char* GetZoneName(uint32 zoneID, bool ErrorUnknown = false);
|
||||
|
||||
uint32 GetZoneGraveyardID(uint32 zone_id, uint32 version);
|
||||
uint32 GetZoneID(const char* zonename);
|
||||
|
||||
uint8 GetPEQZone(uint32 zoneID, uint32 version);
|
||||
uint8 GetRaceSkill(uint8 skillid, uint8 in_race);
|
||||
@@ -288,6 +273,7 @@ public:
|
||||
void LoadLogSettings(EQEmuLogSys::LogSettings* log_settings);
|
||||
|
||||
private:
|
||||
std::map<uint32,std::string> zonename_array;
|
||||
|
||||
Mutex Mvarcache;
|
||||
VarCache_Struct varcache;
|
||||
|
||||
@@ -1,580 +0,0 @@
|
||||
/**
|
||||
* EQEmulator: Everquest Server Emulator
|
||||
* Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#include <string>
|
||||
#include <cstdio>
|
||||
#include <iterator>
|
||||
#include "database_dump_service.h"
|
||||
#include "../eqemu_logsys.h"
|
||||
#include "../string_util.h"
|
||||
#include "../eqemu_config.h"
|
||||
#include "../database_schema.h"
|
||||
#include "../file_util.h"
|
||||
|
||||
#include <ctime>
|
||||
|
||||
#if _WIN32
|
||||
#include <windows.h>
|
||||
#else
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
#endif
|
||||
|
||||
#define DATABASE_DUMP_PATH "backups/"
|
||||
|
||||
/**
|
||||
* @param cmd
|
||||
* @param return_result
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::execute(const std::string &cmd, bool return_result = true)
|
||||
{
|
||||
const char *file_name = "db-exec-result.txt";
|
||||
|
||||
if (return_result) {
|
||||
#ifdef _WINDOWS
|
||||
std::system((cmd + " > " + file_name + " 2>&1").c_str());
|
||||
#else
|
||||
std::system((cmd + " > " + file_name).c_str());
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
std::system((cmd).c_str());
|
||||
}
|
||||
|
||||
std::string result;
|
||||
|
||||
if (return_result) {
|
||||
std::ifstream file(file_name);
|
||||
result = {std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>()};
|
||||
std::remove(file_name);
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
bool DatabaseDumpService::IsMySQLInstalled()
|
||||
{
|
||||
std::string version_output = GetMySQLVersion();
|
||||
|
||||
return version_output.find("mysql") != std::string::npos && version_output.find("Ver") != std::string::npos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Linux
|
||||
* @return bool
|
||||
*/
|
||||
bool DatabaseDumpService::IsTarAvailable()
|
||||
{
|
||||
std::string version_output = execute("tar --version");
|
||||
|
||||
return version_output.find("GNU tar") != std::string::npos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Windows
|
||||
* @return bool
|
||||
*/
|
||||
bool DatabaseDumpService::Is7ZipAvailable()
|
||||
{
|
||||
std::string version_output = execute("7z --help");
|
||||
|
||||
return version_output.find("7-Zip") != std::string::npos;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
bool DatabaseDumpService::HasCompressionBinary()
|
||||
{
|
||||
return IsTarAvailable() || Is7ZipAvailable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetMySQLVersion()
|
||||
{
|
||||
std::string version_output = execute("mysql --version");
|
||||
|
||||
return trim(version_output);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetBaseMySQLDumpCommand()
|
||||
{
|
||||
auto config = EQEmuConfig::get();
|
||||
if (IsDumpContentTables() && !config->ContentDbHost.empty()) {
|
||||
return fmt::format(
|
||||
"mysqldump -u {} -p{} -h {} --port={} {}",
|
||||
config->ContentDbUsername,
|
||||
config->ContentDbPassword,
|
||||
config->ContentDbHost,
|
||||
config->ContentDbPort,
|
||||
config->ContentDbName
|
||||
);
|
||||
};
|
||||
|
||||
return fmt::format(
|
||||
"mysqldump -u {} -p{} -h {} --port={} {}",
|
||||
config->DatabaseUsername,
|
||||
config->DatabasePassword,
|
||||
config->DatabaseHost,
|
||||
config->DatabasePort,
|
||||
config->DatabaseDB
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetPlayerTablesList()
|
||||
{
|
||||
std::string tables_list;
|
||||
std::vector<std::string> tables = DatabaseSchema::GetPlayerTables();
|
||||
for (const auto &table : tables) {
|
||||
tables_list += table + " ";
|
||||
}
|
||||
|
||||
return trim(tables_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetLoginTableList()
|
||||
{
|
||||
std::string tables_list;
|
||||
std::vector<std::string> tables = DatabaseSchema::GetLoginTables();
|
||||
for (const auto &table : tables) {
|
||||
tables_list += table + " ";
|
||||
}
|
||||
|
||||
return trim(tables_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetQueryServTables()
|
||||
{
|
||||
std::string tables_list;
|
||||
std::vector<std::string> tables = DatabaseSchema::GetQueryServerTables();
|
||||
for (const auto &table : tables) {
|
||||
tables_list += table + " ";
|
||||
}
|
||||
|
||||
return trim(tables_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetSystemTablesList()
|
||||
{
|
||||
std::string tables_list;
|
||||
|
||||
std::vector<std::string> tables = DatabaseSchema::GetServerTables();
|
||||
for (const auto &table : tables) {
|
||||
tables_list += table + " ";
|
||||
}
|
||||
|
||||
tables = DatabaseSchema::GetVersionTables();
|
||||
for (const auto &table : tables) {
|
||||
tables_list += table + " ";
|
||||
}
|
||||
|
||||
return trim(tables_list);
|
||||
}
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetStateTablesList()
|
||||
{
|
||||
std::string tables_list;
|
||||
|
||||
std::vector<std::string> tables = DatabaseSchema::GetStateTables();
|
||||
for (const auto &table : tables) {
|
||||
tables_list += table + " ";
|
||||
}
|
||||
|
||||
return trim(tables_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetContentTablesList()
|
||||
{
|
||||
std::string tables_list;
|
||||
|
||||
std::vector<std::string> tables = DatabaseSchema::GetContentTables();
|
||||
for (const auto &table : tables) {
|
||||
tables_list += table + " ";
|
||||
}
|
||||
|
||||
return trim(tables_list);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string GetDumpDate()
|
||||
{
|
||||
|
||||
time_t now = time(nullptr);
|
||||
struct tm time_struct{};
|
||||
char buf[80];
|
||||
time_struct = *localtime(&now);
|
||||
strftime(buf, sizeof(buf), "%Y-%m-%d", &time_struct);
|
||||
|
||||
std::string time = buf;
|
||||
|
||||
return time;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetSetDumpPath()
|
||||
{
|
||||
return !GetDumpPath().empty() ? GetDumpPath() : DATABASE_DUMP_PATH;
|
||||
}
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
std::string DatabaseDumpService::GetDumpFileNameWithPath()
|
||||
{
|
||||
return GetSetDumpPath() + GetDumpFileName();
|
||||
}
|
||||
|
||||
void DatabaseDumpService::Dump()
|
||||
{
|
||||
if (!IsMySQLInstalled()) {
|
||||
LogError("MySQL is not installed; Please check your PATH for a valid MySQL installation");
|
||||
return;
|
||||
}
|
||||
|
||||
if (IsDumpDropTableSyntaxOnly()) {
|
||||
SetDumpOutputToConsole(true);
|
||||
}
|
||||
|
||||
if (IsDumpOutputToConsole()) {
|
||||
LogSys.SilenceConsoleLogging();
|
||||
}
|
||||
|
||||
LogInfo("MySQL installed [{}]", GetMySQLVersion());
|
||||
|
||||
SetDumpFileName(EQEmuConfig::get()->DatabaseDB + '-' + GetDumpDate());
|
||||
|
||||
auto config = EQEmuConfig::get();
|
||||
|
||||
LogInfo(
|
||||
"Database [{}] Host [{}] Username [{}]",
|
||||
config->DatabaseDB,
|
||||
config->DatabaseHost,
|
||||
config->DatabaseUsername
|
||||
);
|
||||
|
||||
std::string options = "--allow-keywords --extended-insert";
|
||||
|
||||
if (IsDumpWithNoData()) {
|
||||
options += " --no-data";
|
||||
}
|
||||
|
||||
if (!IsDumpTableLock()) {
|
||||
options += " --skip-lock-tables";
|
||||
}
|
||||
|
||||
std::string tables_to_dump;
|
||||
std::string dump_descriptor;
|
||||
|
||||
if (!IsDumpAllTables()) {
|
||||
if (IsDumpPlayerTables()) {
|
||||
tables_to_dump += GetPlayerTablesList() + " ";
|
||||
dump_descriptor += "-player";
|
||||
}
|
||||
|
||||
if (IsDumpSystemTables()) {
|
||||
tables_to_dump += GetSystemTablesList() + " ";
|
||||
dump_descriptor += "-system";
|
||||
}
|
||||
|
||||
if (IsDumpStateTables()) {
|
||||
tables_to_dump += GetStateTablesList() + " ";
|
||||
dump_descriptor += "-state";
|
||||
}
|
||||
|
||||
if (IsDumpContentTables()) {
|
||||
tables_to_dump += GetContentTablesList() + " ";
|
||||
dump_descriptor += "-content";
|
||||
}
|
||||
|
||||
if (IsDumpLoginServerTables()) {
|
||||
tables_to_dump += GetLoginTableList() + " ";
|
||||
dump_descriptor += "-login";
|
||||
}
|
||||
|
||||
if (IsDumpQueryServerTables()) {
|
||||
tables_to_dump += GetQueryServTables();
|
||||
dump_descriptor += "-queryserv";
|
||||
}
|
||||
}
|
||||
|
||||
if (!dump_descriptor.empty()) {
|
||||
SetDumpFileName(GetDumpFileName() + dump_descriptor);
|
||||
}
|
||||
|
||||
/**
|
||||
* If we are dumping to stdout then we don't generate a file
|
||||
*/
|
||||
std::string pipe_file;
|
||||
if (!IsDumpOutputToConsole()) {
|
||||
pipe_file = fmt::format(" > {}.sql", GetDumpFileNameWithPath());
|
||||
}
|
||||
|
||||
std::string execute_command = fmt::format(
|
||||
"{} {} {} {}",
|
||||
GetBaseMySQLDumpCommand(),
|
||||
options,
|
||||
tables_to_dump,
|
||||
pipe_file
|
||||
);
|
||||
|
||||
if (!FileUtil::exists(GetSetDumpPath()) && !IsDumpOutputToConsole()) {
|
||||
FileUtil::mkdir(GetSetDumpPath());
|
||||
}
|
||||
|
||||
if (IsDumpDropTableSyntaxOnly()) {
|
||||
std::vector<std::string> tables = SplitString(tables_to_dump, ' ');
|
||||
|
||||
for (auto &table : tables) {
|
||||
std::cout << "DROP TABLE IF EXISTS `" << table << "`;" << std::endl;
|
||||
}
|
||||
|
||||
if (tables_to_dump.empty()) {
|
||||
std::cerr << "No tables were specified" << std::endl;
|
||||
}
|
||||
}
|
||||
else {
|
||||
std::string execution_result = execute(execute_command, IsDumpOutputToConsole());
|
||||
if (!execution_result.empty()) {
|
||||
std::cout << execution_result;
|
||||
}
|
||||
}
|
||||
|
||||
if (!tables_to_dump.empty()) {
|
||||
LogInfo("Dumping Tables [{}]", tables_to_dump);
|
||||
}
|
||||
|
||||
LogInfo("Database dump created at [{}.sql]", GetDumpFileNameWithPath());
|
||||
|
||||
if (IsDumpWithCompression() && !IsDumpOutputToConsole()) {
|
||||
if (HasCompressionBinary()) {
|
||||
LogInfo("Compression requested... Compressing dump [{}.sql]", GetDumpFileNameWithPath());
|
||||
|
||||
if (IsTarAvailable()) {
|
||||
execute(
|
||||
fmt::format(
|
||||
"tar -zcvf {}.tar.gz -C {} {}.sql",
|
||||
GetDumpFileNameWithPath(),
|
||||
GetSetDumpPath(),
|
||||
GetDumpFileName()
|
||||
)
|
||||
);
|
||||
LogInfo("Compressed dump created at [{}.tar.gz]", GetDumpFileNameWithPath());
|
||||
}
|
||||
else if (Is7ZipAvailable()) {
|
||||
execute(
|
||||
fmt::format(
|
||||
"7z a -t7z {}.zip {}.sql",
|
||||
GetDumpFileNameWithPath(),
|
||||
GetDumpFileNameWithPath()
|
||||
)
|
||||
);
|
||||
LogInfo("Compressed dump created at [{}.zip]", GetDumpFileNameWithPath());
|
||||
}
|
||||
else {
|
||||
LogInfo("Compression requested, but no available compression binary was found");
|
||||
}
|
||||
}
|
||||
else {
|
||||
LogWarning("Compression requested but binary not found... Skipping...");
|
||||
}
|
||||
}
|
||||
|
||||
// LogDebug("[{}] dump-to-console", IsDumpOutputToConsole());
|
||||
// LogDebug("[{}] dump-path", GetSetDumpPath());
|
||||
// LogDebug("[{}] compression", (IsDumpWithCompression() ? "true" : "false"));
|
||||
// LogDebug("[{}] query-serv", (IsDumpQueryServerTables() ? "true" : "false"));
|
||||
// LogDebug("[{}] has-compression-binary", (HasCompressionBinary() ? "true" : "false"));
|
||||
// LogDebug("[{}] content", (IsDumpContentTables() ? "true" : "false"));
|
||||
// LogDebug("[{}] no-data", (IsDumpWithNoData() ? "true" : "false"));
|
||||
// LogDebug("[{}] login", (IsDumpLoginServerTables() ? "true" : "false"));
|
||||
// LogDebug("[{}] player", (IsDumpPlayerTables() ? "true" : "false"));
|
||||
// LogDebug("[{}] system", (IsDumpSystemTables() ? "true" : "false"));
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpSystemTables() const
|
||||
{
|
||||
return dump_system_tables;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpSystemTables(bool dump_system_tables)
|
||||
{
|
||||
DatabaseDumpService::dump_system_tables = dump_system_tables;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpContentTables() const
|
||||
{
|
||||
return dump_content_tables;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpContentTables(bool dump_content_tables)
|
||||
{
|
||||
DatabaseDumpService::dump_content_tables = dump_content_tables;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpPlayerTables() const
|
||||
{
|
||||
return dump_player_tables;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpPlayerTables(bool dump_player_tables)
|
||||
{
|
||||
DatabaseDumpService::dump_player_tables = dump_player_tables;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpLoginServerTables() const
|
||||
{
|
||||
return dump_login_server_tables;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpLoginServerTables(bool dump_login_server_tables)
|
||||
{
|
||||
DatabaseDumpService::dump_login_server_tables = dump_login_server_tables;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpWithNoData() const
|
||||
{
|
||||
return dump_with_no_data;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpWithNoData(bool dump_with_no_data)
|
||||
{
|
||||
DatabaseDumpService::dump_with_no_data = dump_with_no_data;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpAllTables() const
|
||||
{
|
||||
return dump_all_tables;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpAllTables(bool dump_all_tables)
|
||||
{
|
||||
DatabaseDumpService::dump_all_tables = dump_all_tables;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpTableLock() const
|
||||
{
|
||||
return dump_table_lock;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpTableLock(bool dump_table_lock)
|
||||
{
|
||||
DatabaseDumpService::dump_table_lock = dump_table_lock;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpWithCompression() const
|
||||
{
|
||||
return dump_with_compression;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpWithCompression(bool dump_with_compression)
|
||||
{
|
||||
DatabaseDumpService::dump_with_compression = dump_with_compression;
|
||||
}
|
||||
|
||||
const std::string &DatabaseDumpService::GetDumpPath() const
|
||||
{
|
||||
return dump_path;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpPath(const std::string &dump_path)
|
||||
{
|
||||
DatabaseDumpService::dump_path = dump_path;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpFileName(const std::string &dump_file_name)
|
||||
{
|
||||
DatabaseDumpService::dump_file_name = dump_file_name;
|
||||
}
|
||||
|
||||
const std::string &DatabaseDumpService::GetDumpFileName() const
|
||||
{
|
||||
return dump_file_name;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpQueryServerTables() const
|
||||
{
|
||||
return dump_query_server_tables;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpQueryServerTables(bool dump_query_server_tables)
|
||||
{
|
||||
DatabaseDumpService::dump_query_server_tables = dump_query_server_tables;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpOutputToConsole() const
|
||||
{
|
||||
return dump_output_to_console;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpOutputToConsole(bool dump_output_to_console)
|
||||
{
|
||||
DatabaseDumpService::dump_output_to_console = dump_output_to_console;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpDropTableSyntaxOnly() const
|
||||
{
|
||||
return dump_drop_table_syntax_only;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpDropTableSyntaxOnly(bool dump_drop_table_syntax_only)
|
||||
{
|
||||
DatabaseDumpService::dump_drop_table_syntax_only = dump_drop_table_syntax_only;
|
||||
}
|
||||
|
||||
bool DatabaseDumpService::IsDumpStateTables() const
|
||||
{
|
||||
return dump_state_tables;
|
||||
}
|
||||
|
||||
void DatabaseDumpService::SetDumpStateTables(bool dump_state_tables)
|
||||
{
|
||||
DatabaseDumpService::dump_state_tables = dump_state_tables;
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
/**
|
||||
* EQEmulator: Everquest Server Emulator
|
||||
* Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef EQEMU_DATABASE_DUMP_SERVICE_H
|
||||
#define EQEMU_DATABASE_DUMP_SERVICE_H
|
||||
|
||||
|
||||
class DatabaseDumpService {
|
||||
public:
|
||||
void Dump();
|
||||
bool IsDumpAllTables() const;
|
||||
void SetDumpAllTables(bool dump_all_tables);
|
||||
bool IsDumpWithNoData() const;
|
||||
void SetDumpWithNoData(bool dump_with_no_data);
|
||||
bool IsDumpSystemTables() const;
|
||||
void SetDumpSystemTables(bool dump_system_tables);
|
||||
bool IsDumpContentTables() const;
|
||||
void SetDumpContentTables(bool dump_content_tables);
|
||||
bool IsDumpPlayerTables() const;
|
||||
void SetDumpPlayerTables(bool dump_player_tables);
|
||||
bool IsDumpLoginServerTables() const;
|
||||
void SetDumpLoginServerTables(bool dump_login_server_tables);
|
||||
bool IsDumpTableLock() const;
|
||||
void SetDumpTableLock(bool dump_table_lock);
|
||||
bool IsDumpWithCompression() const;
|
||||
void SetDumpWithCompression(bool dump_with_compression);
|
||||
const std::string &GetDumpPath() const;
|
||||
void SetDumpPath(const std::string &dump_path);
|
||||
const std::string &GetDumpFileName() const;
|
||||
void SetDumpFileName(const std::string &dump_file_name);
|
||||
bool IsDumpQueryServerTables() const;
|
||||
void SetDumpQueryServerTables(bool dump_query_server_tables);
|
||||
bool IsDumpOutputToConsole() const;
|
||||
void SetDumpOutputToConsole(bool dump_output_to_console);
|
||||
bool IsDumpDropTableSyntaxOnly() const;
|
||||
void SetDumpDropTableSyntaxOnly(bool dump_drop_table_syntax_only);
|
||||
bool IsDumpStateTables() const;
|
||||
void SetDumpStateTables(bool dump_state_tables);
|
||||
|
||||
private:
|
||||
bool dump_all_tables = false;
|
||||
bool dump_state_tables = false;
|
||||
bool dump_system_tables = false;
|
||||
bool dump_content_tables = false;
|
||||
bool dump_player_tables = false;
|
||||
bool dump_query_server_tables = false;
|
||||
bool dump_login_server_tables = false;
|
||||
bool dump_with_no_data = false;
|
||||
bool dump_table_lock = false;
|
||||
bool dump_with_compression = false;
|
||||
bool dump_output_to_console = false;
|
||||
bool dump_drop_table_syntax_only = false;
|
||||
std::string dump_path;
|
||||
std::string dump_file_name;
|
||||
|
||||
std::string execute(const std::string &cmd, bool return_result);
|
||||
bool IsMySQLInstalled();
|
||||
std::string GetMySQLVersion();
|
||||
std::string GetBaseMySQLDumpCommand();
|
||||
std::string GetPlayerTablesList();
|
||||
std::string GetSystemTablesList();
|
||||
std::string GetStateTablesList();
|
||||
std::string GetContentTablesList();
|
||||
std::string GetLoginTableList();
|
||||
bool IsTarAvailable();
|
||||
bool Is7ZipAvailable();
|
||||
bool HasCompressionBinary();
|
||||
std::string GetDumpFileNameWithPath();
|
||||
std::string GetSetDumpPath();
|
||||
std::string GetQueryServTables();
|
||||
};
|
||||
|
||||
|
||||
#endif //EQEMU_DATABASE_DUMP_SERVICE_H
|
||||
@@ -189,7 +189,7 @@ namespace Convert {
|
||||
/*002*/ uint32 HP;
|
||||
/*006*/ uint32 Mana;
|
||||
/*010*/ Convert::SpellBuff_Struct Buffs[BUFF_COUNT];
|
||||
/*510*/ uint32 Items[EQ::textures::materialCount];
|
||||
/*510*/ uint32 Items[EQEmu::textures::materialCount];
|
||||
/*546*/ char Name[64];
|
||||
/*610*/
|
||||
};
|
||||
@@ -230,9 +230,9 @@ namespace Convert {
|
||||
/*0304*/ uint8 ability_time_minutes;
|
||||
/*0305*/ uint8 ability_time_hours; //place holder
|
||||
/*0306*/ uint8 unknown0306[6]; // @bp Spacer/Flag?
|
||||
/*0312*/ uint32 item_material[EQ::textures::materialCount]; // Item texture/material of worn/held items
|
||||
/*0312*/ uint32 item_material[EQEmu::textures::materialCount]; // Item texture/material of worn/held items
|
||||
/*0348*/ uint8 unknown0348[44];
|
||||
/*0392*/ Convert::Color_Struct item_tint[EQ::textures::materialCount];
|
||||
/*0392*/ Convert::Color_Struct item_tint[EQEmu::textures::materialCount];
|
||||
/*0428*/ Convert::AA_Array aa_array[MAX_PP_AA_ARRAY];
|
||||
/*2348*/ float unknown2384; //seen ~128, ~47
|
||||
/*2352*/ char servername[32]; // length probably not right
|
||||
@@ -1396,7 +1396,7 @@ bool Database::CheckDatabaseConvertPPDeblob(){
|
||||
if (rquery != ""){ results = QueryDatabase(rquery); }
|
||||
/* Run Material Color Convert */
|
||||
first_entry = 0; rquery = "";
|
||||
for (i = EQ::textures::textureBegin; i < EQ::textures::materialCount; i++){
|
||||
for (i = EQEmu::textures::textureBegin; i < EQEmu::textures::materialCount; i++){
|
||||
if (pp->item_tint[i].color > 0){
|
||||
if (first_entry != 1){
|
||||
rquery = StringFormat("REPLACE INTO `character_material` (id, slot, blue, green, red, use_tint, color) VALUES (%u, %u, %u, %u, %u, %u, %u)", character_id, i, pp->item_tint[i].rgb.blue, pp->item_tint[i].rgb.green, pp->item_tint[i].rgb.red, pp->item_tint[i].rgb.use_tint, pp->item_tint[i].color);
|
||||
|
||||
+90
-117
@@ -34,7 +34,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#define strcasecmp _stricmp
|
||||
#else
|
||||
#include "unix.h"
|
||||
#include "../zone/zonedb.h"
|
||||
#include <netinet/in.h>
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
@@ -98,53 +97,42 @@ bool Database::CheckInstanceExists(uint16 instance_id) {
|
||||
bool Database::CheckInstanceExpired(uint16 instance_id)
|
||||
{
|
||||
|
||||
int32 start_time = 0;
|
||||
int32 duration = 0;
|
||||
int32 start_time = 0;
|
||||
int32 duration = 0;
|
||||
uint32 never_expires = 0;
|
||||
|
||||
std::string query = StringFormat(
|
||||
"SELECT start_time, duration, never_expires FROM instance_list WHERE id=%u",
|
||||
instance_id
|
||||
);
|
||||
|
||||
std::string query = StringFormat("SELECT start_time, duration, never_expires FROM instance_list WHERE id=%u", instance_id);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success()) {
|
||||
if (!results.Success())
|
||||
return true;
|
||||
}
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
if (results.RowCount() == 0)
|
||||
return true;
|
||||
}
|
||||
|
||||
auto row = results.begin();
|
||||
|
||||
start_time = atoi(row[0]);
|
||||
duration = atoi(row[1]);
|
||||
start_time = atoi(row[0]);
|
||||
duration = atoi(row[1]);
|
||||
never_expires = atoi(row[2]);
|
||||
|
||||
if (never_expires == 1) {
|
||||
if (never_expires == 1)
|
||||
return false;
|
||||
}
|
||||
|
||||
timeval tv{};
|
||||
timeval tv;
|
||||
gettimeofday(&tv, nullptr);
|
||||
|
||||
return (start_time + duration) <= tv.tv_sec;
|
||||
if ((start_time + duration) <= tv.tv_sec)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Database::CreateInstance(uint16 instance_id, uint32 zone_id, uint32 version, uint32 duration)
|
||||
{
|
||||
std::string query = StringFormat(
|
||||
"INSERT INTO instance_list (id, zone, version, start_time, duration)"
|
||||
" values (%u, %u, %u, UNIX_TIMESTAMP(), %u)",
|
||||
instance_id,
|
||||
zone_id,
|
||||
version,
|
||||
duration
|
||||
);
|
||||
|
||||
std::string query = StringFormat("INSERT INTO instance_list (id, zone, version, start_time, duration)"
|
||||
" values(%lu, %lu, %lu, UNIX_TIMESTAMP(), %lu)",
|
||||
(unsigned long)instance_id, (unsigned long)zone_id, (unsigned long)version, (unsigned long)duration);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
return results.Success();
|
||||
@@ -152,84 +140,66 @@ bool Database::CreateInstance(uint16 instance_id, uint32 zone_id, uint32 version
|
||||
|
||||
bool Database::GetUnusedInstanceID(uint16 &instance_id)
|
||||
{
|
||||
uint32 max_reserved_instance_id = RuleI(Instances, ReservedInstances);
|
||||
uint32 max = 32000;
|
||||
|
||||
std::string query = StringFormat(
|
||||
"SELECT IFNULL(MAX(id),%u)+1 FROM instance_list WHERE id > %u",
|
||||
max_reserved_instance_id,
|
||||
max_reserved_instance_id
|
||||
);
|
||||
|
||||
if (RuleB(Instances, RecycleInstanceIds)) {
|
||||
query = (
|
||||
SQL(
|
||||
SELECT i.id + 1 AS next_available
|
||||
FROM instance_list i
|
||||
LEFT JOIN instance_list i2 ON i2.id = i.id + 1
|
||||
WHERE i2.id IS NULL
|
||||
ORDER BY i.id
|
||||
LIMIT 0, 1;
|
||||
|
||||
)
|
||||
);
|
||||
}
|
||||
uint32 count = RuleI(Zone, ReservedInstances);
|
||||
uint32 max = 65535;
|
||||
|
||||
std::string query = StringFormat("SELECT IFNULL(MAX(id),%u)+1 FROM instance_list WHERE id > %u", count, count);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success()) {
|
||||
if (!results.Success())
|
||||
{
|
||||
instance_id = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
instance_id = max_reserved_instance_id;
|
||||
return true;
|
||||
if (results.RowCount() == 0)
|
||||
{
|
||||
instance_id = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
auto row = results.begin();
|
||||
|
||||
if (atoi(row[0]) <= max) {
|
||||
if (atoi(row[0]) <= max)
|
||||
{
|
||||
instance_id = atoi(row[0]);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (instance_id < max_reserved_instance_id) {
|
||||
instance_id = max_reserved_instance_id;
|
||||
return true;
|
||||
}
|
||||
|
||||
query = StringFormat("SELECT id FROM instance_list where id > %u ORDER BY id", max_reserved_instance_id);
|
||||
query = StringFormat("SELECT id FROM instance_list where id > %u ORDER BY id", count);
|
||||
results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success()) {
|
||||
if (!results.Success())
|
||||
{
|
||||
instance_id = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
if (results.RowCount() == 0)
|
||||
{
|
||||
instance_id = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
max_reserved_instance_id++;
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
if (max_reserved_instance_id < atoi(row[0])) {
|
||||
instance_id = max_reserved_instance_id;
|
||||
count++;
|
||||
for (auto row = results.begin(); row != results.end(); ++row)
|
||||
{
|
||||
if (count < atoi(row[0]))
|
||||
{
|
||||
instance_id = count;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (max_reserved_instance_id > max) {
|
||||
if (count > max)
|
||||
{
|
||||
instance_id = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
max_reserved_instance_id++;
|
||||
count++;
|
||||
}
|
||||
|
||||
instance_id = max_reserved_instance_id;
|
||||
|
||||
instance_id = count;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -306,6 +276,36 @@ bool Database::VerifyZoneInstance(uint32 zone_id, uint16 instance_id)
|
||||
return true;
|
||||
}
|
||||
|
||||
uint16 Database::GetInstanceID(const char* zone, uint32 character_id, int16 version) {
|
||||
|
||||
std::string query = StringFormat(
|
||||
"SELECT "
|
||||
"instance_list.id "
|
||||
"FROM "
|
||||
"instance_list, "
|
||||
"instance_list_player "
|
||||
"WHERE "
|
||||
"instance_list.zone = %u "
|
||||
"AND instance_list.version = %u "
|
||||
"AND instance_list.id = instance_list_player.id "
|
||||
"AND instance_list_player.charid = %u "
|
||||
"LIMIT 1 ",
|
||||
GetZoneID(zone),
|
||||
version,
|
||||
character_id
|
||||
);
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success())
|
||||
return 0;
|
||||
|
||||
if (results.RowCount() == 0)
|
||||
return 0;
|
||||
|
||||
auto row = results.begin();
|
||||
return atoi(row[0]);
|
||||
}
|
||||
|
||||
uint16 Database::GetInstanceID(uint32 zone, uint32 character_id, int16 version)
|
||||
{
|
||||
if (!zone)
|
||||
@@ -472,18 +472,23 @@ void Database::AssignRaidToInstance(uint32 raid_id, uint32 instance_id)
|
||||
}
|
||||
|
||||
void Database::BuryCorpsesInInstance(uint16 instance_id) {
|
||||
QueryDatabase(
|
||||
fmt::format(
|
||||
"UPDATE character_corpses SET is_buried = 1, instance_id = 0 WHERE instance_id = {}",
|
||||
instance_id
|
||||
)
|
||||
);
|
||||
std::string query = StringFormat(
|
||||
"UPDATE `character_corpses` "
|
||||
"SET `is_buried` = 1, "
|
||||
"`instance_id` = 0 "
|
||||
"WHERE "
|
||||
"`instance_id` = %u ",
|
||||
instance_id
|
||||
);
|
||||
auto results = QueryDatabase(query);
|
||||
}
|
||||
|
||||
void Database::DeleteInstance(uint16 instance_id)
|
||||
{
|
||||
std::string query;
|
||||
|
||||
|
||||
std::string query = StringFormat("DELETE FROM instance_list WHERE id=%u", instance_id);
|
||||
QueryDatabase(query);
|
||||
|
||||
query = StringFormat("DELETE FROM instance_list_player WHERE id=%u", instance_id);
|
||||
QueryDatabase(query);
|
||||
|
||||
@@ -493,9 +498,6 @@ void Database::DeleteInstance(uint16 instance_id)
|
||||
query = StringFormat("DELETE FROM spawn_condition_values WHERE instance_id=%u", instance_id);
|
||||
QueryDatabase(query);
|
||||
|
||||
query = fmt::format("DELETE FROM dynamic_zones WHERE instance_id={}", instance_id);
|
||||
QueryDatabase(query);
|
||||
|
||||
BuryCorpsesInInstance(instance_id);
|
||||
}
|
||||
|
||||
@@ -546,46 +548,17 @@ void Database::GetCharactersInInstance(uint16 instance_id, std::list<uint32> &ch
|
||||
|
||||
void Database::PurgeExpiredInstances()
|
||||
{
|
||||
|
||||
/**
|
||||
* Delay purging by a day so that we can continue using adjacent free instance id's
|
||||
* from the table without risking the chance we immediately re-allocate a zone that freshly expired but
|
||||
* has not been fully de-allocated
|
||||
*/
|
||||
std::string query =
|
||||
SQL(
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
instance_list
|
||||
where
|
||||
(start_time + duration) <= (UNIX_TIMESTAMP() - 86400)
|
||||
and never_expires = 0
|
||||
);
|
||||
|
||||
std::string query("SELECT id FROM instance_list where (start_time+duration) <= UNIX_TIMESTAMP() and never_expires = 0");
|
||||
auto results = QueryDatabase(query);
|
||||
|
||||
if (!results.Success()) {
|
||||
if (!results.Success())
|
||||
return;
|
||||
}
|
||||
|
||||
if (results.RowCount() == 0) {
|
||||
if (results.RowCount() == 0)
|
||||
return;
|
||||
}
|
||||
|
||||
std::vector<std::string> instance_ids;
|
||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||
instance_ids.emplace_back(row[0]);
|
||||
}
|
||||
|
||||
std::string imploded_instance_ids = implode(",", instance_ids);
|
||||
|
||||
QueryDatabase(fmt::format("DELETE FROM instance_list WHERE id IN ({})", imploded_instance_ids));
|
||||
QueryDatabase(fmt::format("DELETE FROM instance_list_player WHERE id IN ({})", imploded_instance_ids));
|
||||
QueryDatabase(fmt::format("DELETE FROM respawn_times WHERE instance_id IN ({})", imploded_instance_ids));
|
||||
QueryDatabase(fmt::format("DELETE FROM spawn_condition_values WHERE instance_id IN ({})", imploded_instance_ids));
|
||||
QueryDatabase(fmt::format("UPDATE character_corpses SET is_buried = 1, instance_id = 0 WHERE instance_id IN ({})", imploded_instance_ids));
|
||||
QueryDatabase(fmt::format("DELETE FROM dynamic_zones WHERE instance_id IN ({})", imploded_instance_ids));
|
||||
for (auto row = results.begin(); row != results.end(); ++row)
|
||||
DeleteInstance(atoi(row[0]));
|
||||
}
|
||||
|
||||
void Database::SetInstanceDuration(uint16 instance_id, uint32 new_duration)
|
||||
@@ -593,4 +566,4 @@ void Database::SetInstanceDuration(uint16 instance_id, uint32 new_duration)
|
||||
std::string query = StringFormat("UPDATE `instance_list` SET start_time=UNIX_TIMESTAMP(), "
|
||||
"duration=%u WHERE id=%u", new_duration, instance_id);
|
||||
auto results = QueryDatabase(query);
|
||||
}
|
||||
}
|
||||
+46
-117
@@ -22,78 +22,17 @@
|
||||
#define EQEMU_DATABASE_SCHEMA_H
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
|
||||
namespace DatabaseSchema {
|
||||
|
||||
/**
|
||||
* Character-specific tables
|
||||
*
|
||||
* Does not included related meta-data tables such as 'guilds', 'accounts'
|
||||
* @return
|
||||
*/
|
||||
static std::map<std::string, std::string> GetCharacterTables()
|
||||
{
|
||||
return {
|
||||
{"adventure_stats", "player_id"},
|
||||
{"buyer", "charid"},
|
||||
{"char_recipe_list", "char_id"},
|
||||
{"character_activities", "charid"},
|
||||
{"character_alt_currency", "char_id"},
|
||||
{"character_alternate_abilities", "id"},
|
||||
{"character_auras", "id"},
|
||||
{"character_bandolier", "id"},
|
||||
{"character_bind", "id"},
|
||||
{"character_buffs", "character_id"},
|
||||
{"character_corpses", "id"},
|
||||
{"character_currency", "id"},
|
||||
{"character_data", "id"},
|
||||
{"character_disciplines", "id"},
|
||||
{"character_enabledtasks", "charid"},
|
||||
{"character_expedition_lockouts", "character_id"},
|
||||
{"character_inspect_messages", "id"},
|
||||
{"character_item_recast", "id"},
|
||||
{"character_languages", "id"},
|
||||
{"character_leadership_abilities", "id"},
|
||||
{"character_material", "id"},
|
||||
{"character_memmed_spells", "id"},
|
||||
{"character_pet_buffs", "char_id"},
|
||||
{"character_pet_info", "char_id"},
|
||||
{"character_pet_inventory", "char_id"},
|
||||
{"character_potionbelt", "id"},
|
||||
{"character_skills", "id"},
|
||||
{"character_spells", "id"},
|
||||
{"character_tasks", "charid"},
|
||||
{"character_tribute", "id"},
|
||||
{"completed_tasks", "charid"},
|
||||
{"data_buckets", "id"},
|
||||
{"faction_values", "char_id"},
|
||||
{"friends", "charid"},
|
||||
{"guild_members", "char_id"},
|
||||
{"guilds", "id"},
|
||||
{"instance_list_player", "id"},
|
||||
{"inventory", "charid"},
|
||||
{"inventory_snapshots", "charid"},
|
||||
{"keyring", "char_id"},
|
||||
{"mail", "charid"},
|
||||
{"player_titlesets", "char_id"},
|
||||
{"quest_globals", "charid"},
|
||||
{"timers", "char_id"},
|
||||
{"titles", "char_id"},
|
||||
{"trader", "char_id"},
|
||||
{"zone_flags", "charID"}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @description Gets all player and meta-data tables
|
||||
* @note These tables have no content in the PEQ daily dump
|
||||
* Gets player tables
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
static std::vector<std::string> GetPlayerTables()
|
||||
{
|
||||
return {
|
||||
std::vector<std::string> tables = {
|
||||
"account",
|
||||
"account_ip",
|
||||
"account_flags",
|
||||
@@ -115,7 +54,6 @@ namespace DatabaseSchema {
|
||||
"character_data",
|
||||
"character_disciplines",
|
||||
"character_enabledtasks",
|
||||
"character_expedition_lockouts",
|
||||
"character_inspect_messages",
|
||||
"character_item_recast",
|
||||
"character_languages",
|
||||
@@ -132,7 +70,6 @@ namespace DatabaseSchema {
|
||||
"character_tribute",
|
||||
"completed_tasks",
|
||||
"data_buckets",
|
||||
"discovered_items",
|
||||
"faction_values",
|
||||
"friends",
|
||||
"guild_bank",
|
||||
@@ -145,18 +82,17 @@ namespace DatabaseSchema {
|
||||
"inventory_snapshots",
|
||||
"keyring",
|
||||
"mail",
|
||||
"petitions",
|
||||
"player_titlesets",
|
||||
"quest_globals",
|
||||
"sharedbank",
|
||||
"spell_buckets",
|
||||
"spell_globals",
|
||||
"timers",
|
||||
"titles",
|
||||
"trader",
|
||||
"trader_audit",
|
||||
"zone_flags"
|
||||
};
|
||||
|
||||
return tables;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -166,14 +102,18 @@ namespace DatabaseSchema {
|
||||
*/
|
||||
static std::vector<std::string> GetContentTables()
|
||||
{
|
||||
return {
|
||||
std::vector<std::string> tables = {
|
||||
"aa_ability",
|
||||
"aa_actions",
|
||||
"aa_effects",
|
||||
"aa_rank_effects",
|
||||
"aa_rank_prereqs",
|
||||
"aa_ranks",
|
||||
"aa_required_level_cost",
|
||||
"adventure_template",
|
||||
"adventure_template_entry",
|
||||
"adventure_template_entry_flavor",
|
||||
"altadv_vars",
|
||||
"alternate_currency",
|
||||
"auras",
|
||||
"base_data",
|
||||
@@ -181,11 +121,13 @@ namespace DatabaseSchema {
|
||||
"books",
|
||||
"char_create_combinations",
|
||||
"char_create_point_allocations",
|
||||
"class_skill",
|
||||
"damageshieldtypes",
|
||||
"doors",
|
||||
"faction_base_data",
|
||||
"faction_list",
|
||||
"faction_list_mod",
|
||||
"fear_hints",
|
||||
"fishing",
|
||||
"forage",
|
||||
"global_loot",
|
||||
@@ -195,6 +137,7 @@ namespace DatabaseSchema {
|
||||
"grid_entries",
|
||||
"ground_spawns",
|
||||
"horses",
|
||||
"instance_list",
|
||||
"items",
|
||||
"ldon_trap_entries",
|
||||
"ldon_trap_templates",
|
||||
@@ -212,15 +155,19 @@ namespace DatabaseSchema {
|
||||
"npc_spells_effects_entries",
|
||||
"npc_spells_entries",
|
||||
"npc_types",
|
||||
"npc_types_metadata",
|
||||
"npc_types_tint",
|
||||
"object",
|
||||
"pets",
|
||||
"pets_equipmentset",
|
||||
"pets_equipmentset_entries",
|
||||
"proximities",
|
||||
"races",
|
||||
"skill_caps",
|
||||
"spawn2",
|
||||
"spawn_condition_values",
|
||||
"spawn_conditions",
|
||||
"spawn_events",
|
||||
"spawnentry",
|
||||
"spawngroup",
|
||||
"spells_new",
|
||||
@@ -229,6 +176,7 @@ namespace DatabaseSchema {
|
||||
"task_activities",
|
||||
"tasks",
|
||||
"tasksets",
|
||||
"titles",
|
||||
"tradeskill_recipe",
|
||||
"tradeskill_recipe_entries",
|
||||
"traps",
|
||||
@@ -237,7 +185,11 @@ namespace DatabaseSchema {
|
||||
"veteran_reward_templates",
|
||||
"zone",
|
||||
"zone_points",
|
||||
"zone_server",
|
||||
"zoneserver_auth",
|
||||
};
|
||||
|
||||
return tables;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -247,51 +199,34 @@ namespace DatabaseSchema {
|
||||
*/
|
||||
static std::vector<std::string> GetServerTables()
|
||||
{
|
||||
return {
|
||||
"chatchannels",
|
||||
std::vector<std::string> tables = {
|
||||
"banned_ips",
|
||||
"bugs",
|
||||
"bug_reports",
|
||||
"command_settings",
|
||||
"content_flags",
|
||||
"db_str",
|
||||
"discovered_items",
|
||||
"eqtime",
|
||||
"eventlog",
|
||||
"gm_ips",
|
||||
"hackers",
|
||||
"ip_exemptions",
|
||||
"launcher",
|
||||
"launcher_zones",
|
||||
"spawn_condition_values",
|
||||
"spawn_events",
|
||||
"level_exp_mods",
|
||||
"logsys_categories",
|
||||
"name_filter",
|
||||
"perl_event_export_settings",
|
||||
"petitions",
|
||||
"profanity_list",
|
||||
"reports",
|
||||
"rule_sets",
|
||||
"rule_values",
|
||||
"saylink",
|
||||
"variables",
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets QueryServer tables
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
static std::vector<std::string> GetQueryServerTables()
|
||||
{
|
||||
return {
|
||||
"qs_merchant_transaction_record",
|
||||
"qs_merchant_transaction_record_entries",
|
||||
"qs_player_aa_rate_hourly",
|
||||
"qs_player_delete_record",
|
||||
"qs_player_delete_record_entries",
|
||||
"qs_player_events",
|
||||
"qs_player_handin_record",
|
||||
"qs_player_handin_record_entries",
|
||||
"qs_player_move_record",
|
||||
"qs_player_move_record_entries",
|
||||
"qs_player_npc_kill_record",
|
||||
"qs_player_npc_kill_record_entries",
|
||||
"qs_player_speech",
|
||||
"qs_player_trade_record",
|
||||
"qs_player_trade_record_entries",
|
||||
};
|
||||
return tables;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -302,22 +237,11 @@ namespace DatabaseSchema {
|
||||
*/
|
||||
static std::vector<std::string> GetStateTables()
|
||||
{
|
||||
return {
|
||||
std::vector<std::string> tables = {
|
||||
"adventure_members",
|
||||
"banned_ips",
|
||||
"bug_reports",
|
||||
"bugs",
|
||||
"dynamic_zones",
|
||||
"eventlog",
|
||||
"expedition_lockouts",
|
||||
"expedition_members",
|
||||
"expeditions",
|
||||
"gm_ips",
|
||||
"chatchannels",
|
||||
"group_id",
|
||||
"group_leaders",
|
||||
"hackers",
|
||||
"ip_exemptions",
|
||||
"instance_list",
|
||||
"item_tick",
|
||||
"lfguild",
|
||||
"merchantlist_temp",
|
||||
@@ -325,11 +249,12 @@ namespace DatabaseSchema {
|
||||
"raid_details",
|
||||
"raid_leaders",
|
||||
"raid_members",
|
||||
"reports",
|
||||
"respawn_times",
|
||||
"saylink",
|
||||
|
||||
"spell_buckets",
|
||||
"spell_globals",
|
||||
};
|
||||
|
||||
return tables;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -339,13 +264,15 @@ namespace DatabaseSchema {
|
||||
*/
|
||||
static std::vector<std::string> GetLoginTables()
|
||||
{
|
||||
return {
|
||||
std::vector<std::string> tables = {
|
||||
"login_accounts",
|
||||
"login_api_tokens",
|
||||
"login_server_admins",
|
||||
"login_server_list_types",
|
||||
"login_world_servers",
|
||||
};
|
||||
|
||||
return tables;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -355,10 +282,12 @@ namespace DatabaseSchema {
|
||||
*/
|
||||
static std::vector<std::string> GetVersionTables()
|
||||
{
|
||||
return {
|
||||
std::vector<std::string> tables = {
|
||||
"db_version",
|
||||
"inventory_versions",
|
||||
};
|
||||
|
||||
return tables;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+20
-52
@@ -35,31 +35,17 @@
|
||||
DBcore::DBcore()
|
||||
{
|
||||
mysql_init(&mysql);
|
||||
pHost = nullptr;
|
||||
pUser = nullptr;
|
||||
pPassword = nullptr;
|
||||
pDatabase = nullptr;
|
||||
pCompress = false;
|
||||
pSSL = false;
|
||||
pStatus = Closed;
|
||||
pHost = 0;
|
||||
pUser = 0;
|
||||
pPassword = 0;
|
||||
pDatabase = 0;
|
||||
pCompress = false;
|
||||
pSSL = false;
|
||||
pStatus = Closed;
|
||||
}
|
||||
|
||||
DBcore::~DBcore()
|
||||
{
|
||||
/**
|
||||
* This prevents us from doing a double free in multi-tenancy setups where we
|
||||
* are re-using the default database connection pointer when we dont have an
|
||||
* external configuration setup ex: (content_database)
|
||||
*/
|
||||
std::string mysql_connection_host;
|
||||
if (mysql.host) {
|
||||
mysql_connection_host = mysql.host;
|
||||
}
|
||||
|
||||
if (GetOriginHost() != mysql_connection_host) {
|
||||
return;
|
||||
}
|
||||
|
||||
mysql_close(&mysql);
|
||||
safe_delete_array(pHost);
|
||||
safe_delete_array(pUser);
|
||||
@@ -83,13 +69,6 @@ MySQLRequestResult DBcore::QueryDatabase(std::string query, bool retryOnFailureO
|
||||
return QueryDatabase(query.c_str(), query.length(), retryOnFailureOnce);
|
||||
}
|
||||
|
||||
bool DBcore::DoesTableExist(std::string table_name)
|
||||
{
|
||||
auto results = QueryDatabase(fmt::format("SHOW TABLES LIKE '{}'", table_name));
|
||||
|
||||
return results.RowCount() > 0;
|
||||
}
|
||||
|
||||
MySQLRequestResult DBcore::QueryDatabase(const char *query, uint32 querylen, bool retryOnFailureOnce)
|
||||
{
|
||||
BenchTimer timer;
|
||||
@@ -102,8 +81,6 @@ MySQLRequestResult DBcore::QueryDatabase(const char *query, uint32 querylen, boo
|
||||
Open();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// request query. != 0 indicates some kind of error.
|
||||
if (mysql_real_query(&mysql, query, querylen) != 0) {
|
||||
unsigned int errorNumber = mysql_errno(&mysql);
|
||||
@@ -138,14 +115,14 @@ MySQLRequestResult DBcore::QueryDatabase(const char *query, uint32 querylen, boo
|
||||
auto errorBuffer = new char[MYSQL_ERRMSG_SIZE];
|
||||
snprintf(errorBuffer, MYSQL_ERRMSG_SIZE, "#%i: %s", mysql_errno(&mysql), mysql_error(&mysql));
|
||||
|
||||
/**
|
||||
* Error logging
|
||||
*/
|
||||
/* Implement Logging at the Root */
|
||||
if (mysql_errno(&mysql) > 0 && strlen(query) > 0) {
|
||||
LogMySQLError("[{}] [{}]\n[{}]", mysql_errno(&mysql), mysql_error(&mysql), query);
|
||||
if (LogSys.log_settings[Logs::MySQLError].is_category_enabled == 1)
|
||||
Log(Logs::General, Logs::MySQLError, "%i: %s \n %s", mysql_errno(&mysql), mysql_error(&mysql), query);
|
||||
}
|
||||
|
||||
return MySQLRequestResult(nullptr, 0, 0, 0, 0, mysql_errno(&mysql), errorBuffer);
|
||||
|
||||
}
|
||||
|
||||
// successful query. get results.
|
||||
@@ -166,7 +143,9 @@ MySQLRequestResult DBcore::QueryDatabase(const char *query, uint32 querylen, boo
|
||||
|
||||
if (LogSys.log_settings[Logs::MySQLQuery].is_category_enabled == 1) {
|
||||
if ((strncasecmp(query, "select", 6) == 0)) {
|
||||
LogMySQLQuery(
|
||||
LogF(
|
||||
Logs::General,
|
||||
Logs::MySQLQuery,
|
||||
"{0} ({1} row{2} returned) ({3}s)",
|
||||
query,
|
||||
requestResult.RowCount(),
|
||||
@@ -175,7 +154,9 @@ MySQLRequestResult DBcore::QueryDatabase(const char *query, uint32 querylen, boo
|
||||
);
|
||||
}
|
||||
else {
|
||||
LogMySQLQuery(
|
||||
LogF(
|
||||
Logs::General,
|
||||
Logs::MySQLQuery,
|
||||
"{0} ({1} row{2} affected) ({3}s)",
|
||||
query,
|
||||
requestResult.RowsAffected(),
|
||||
@@ -267,10 +248,6 @@ bool DBcore::Open(uint32 *errnum, char *errbuf)
|
||||
}
|
||||
if (mysql_real_connect(&mysql, pHost, pUser, pPassword, pDatabase, pPort, 0, flags)) {
|
||||
pStatus = Connected;
|
||||
|
||||
std::string connected_origin_host = pHost;
|
||||
SetOriginHost(connected_origin_host);
|
||||
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
@@ -285,17 +262,8 @@ bool DBcore::Open(uint32 *errnum, char *errbuf)
|
||||
}
|
||||
}
|
||||
|
||||
void DBcore::SetMysql(MYSQL *mysql)
|
||||
{
|
||||
DBcore::mysql = *mysql;
|
||||
}
|
||||
|
||||
const std::string &DBcore::GetOriginHost() const
|
||||
{
|
||||
return origin_host;
|
||||
}
|
||||
|
||||
void DBcore::SetOriginHost(const std::string &origin_host)
|
||||
{
|
||||
DBcore::origin_host = origin_host;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
+20
-41
@@ -2,8 +2,8 @@
|
||||
#define DBCORE_H
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include "../common/mutex.h"
|
||||
@@ -15,57 +15,36 @@
|
||||
|
||||
class DBcore {
|
||||
public:
|
||||
enum eStatus {
|
||||
Closed, Connected, Error
|
||||
};
|
||||
enum eStatus { Closed, Connected, Error };
|
||||
|
||||
DBcore();
|
||||
~DBcore();
|
||||
eStatus GetStatus() { return pStatus; }
|
||||
MySQLRequestResult QueryDatabase(const char *query, uint32 querylen, bool retryOnFailureOnce = true);
|
||||
MySQLRequestResult QueryDatabase(std::string query, bool retryOnFailureOnce = true);
|
||||
eStatus GetStatus() { return pStatus; }
|
||||
MySQLRequestResult QueryDatabase(const char* query, uint32 querylen, bool retryOnFailureOnce = true);
|
||||
MySQLRequestResult QueryDatabase(std::string query, bool retryOnFailureOnce = true);
|
||||
void TransactionBegin();
|
||||
void TransactionCommit();
|
||||
void TransactionRollback();
|
||||
uint32 DoEscapeString(char *tobuf, const char *frombuf, uint32 fromlen);
|
||||
void ping();
|
||||
MYSQL *getMySQL() { return &mysql; }
|
||||
void SetMysql(MYSQL *mysql);
|
||||
|
||||
const std::string &GetOriginHost() const;
|
||||
void SetOriginHost(const std::string &origin_host);
|
||||
|
||||
bool DoesTableExist(std::string table_name);
|
||||
uint32 DoEscapeString(char* tobuf, const char* frombuf, uint32 fromlen);
|
||||
void ping();
|
||||
MYSQL* getMySQL(){ return &mysql; }
|
||||
|
||||
protected:
|
||||
bool Open(
|
||||
const char *iHost,
|
||||
const char *iUser,
|
||||
const char *iPassword,
|
||||
const char *iDatabase,
|
||||
uint32 iPort,
|
||||
uint32 *errnum = 0,
|
||||
char *errbuf = 0,
|
||||
bool iCompress = false,
|
||||
bool iSSL = false
|
||||
);
|
||||
|
||||
bool Open(const char* iHost, const char* iUser, const char* iPassword, const char* iDatabase, uint32 iPort, uint32* errnum = 0, char* errbuf = 0, bool iCompress = false, bool iSSL = false);
|
||||
private:
|
||||
bool Open(uint32 *errnum = nullptr, char *errbuf = nullptr);
|
||||
bool Open(uint32* errnum = 0, char* errbuf = 0);
|
||||
|
||||
MYSQL mysql;
|
||||
Mutex MDatabase;
|
||||
MYSQL mysql;
|
||||
Mutex MDatabase;
|
||||
eStatus pStatus;
|
||||
|
||||
std::string origin_host;
|
||||
|
||||
char *pHost;
|
||||
char *pUser;
|
||||
char *pPassword;
|
||||
char *pDatabase;
|
||||
bool pCompress;
|
||||
uint32 pPort;
|
||||
bool pSSL;
|
||||
char* pHost;
|
||||
char* pUser;
|
||||
char* pPassword;
|
||||
char* pDatabase;
|
||||
bool pCompress;
|
||||
uint32 pPort;
|
||||
bool pSSL;
|
||||
|
||||
};
|
||||
|
||||
|
||||
+3
-3
@@ -20,7 +20,7 @@
|
||||
#include "deity.h"
|
||||
|
||||
|
||||
EQ::deity::DeityTypeBit EQ::deity::ConvertDeityTypeToDeityTypeBit(DeityType deity_type)
|
||||
EQEmu::deity::DeityTypeBit EQEmu::deity::ConvertDeityTypeToDeityTypeBit(DeityType deity_type)
|
||||
{
|
||||
switch (deity_type) {
|
||||
case DeityBertoxxulous:
|
||||
@@ -63,7 +63,7 @@ EQ::deity::DeityTypeBit EQ::deity::ConvertDeityTypeToDeityTypeBit(DeityType deit
|
||||
};
|
||||
}
|
||||
|
||||
EQ::deity::DeityType EQ::deity::ConvertDeityTypeBitToDeityType(DeityTypeBit deity_type_bit)
|
||||
EQEmu::deity::DeityType EQEmu::deity::ConvertDeityTypeBitToDeityType(DeityTypeBit deity_type_bit)
|
||||
{
|
||||
switch (deity_type_bit) {
|
||||
case bit_DeityAgnostic:
|
||||
@@ -105,7 +105,7 @@ EQ::deity::DeityType EQ::deity::ConvertDeityTypeBitToDeityType(DeityTypeBit deit
|
||||
};
|
||||
}
|
||||
|
||||
const char* EQ::deity::DeityName(DeityType deity_type)
|
||||
const char* EQEmu::deity::DeityName(DeityType deity_type)
|
||||
{
|
||||
switch (deity_type) {
|
||||
case DeityBertoxxulous:
|
||||
|
||||
+1
-1
@@ -23,7 +23,7 @@
|
||||
#include "types.h"
|
||||
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
namespace deity {
|
||||
enum DeityType {
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include "emu_constants.h"
|
||||
|
||||
|
||||
int16 EQ::invtype::GetInvTypeSize(int16 inv_type) {
|
||||
int16 EQEmu::invtype::GetInvTypeSize(int16 inv_type) {
|
||||
static const int16 local_array[] = {
|
||||
POSSESSIONS_SIZE,
|
||||
BANK_SIZE,
|
||||
@@ -55,7 +55,7 @@ int16 EQ::invtype::GetInvTypeSize(int16 inv_type) {
|
||||
return local_array[inv_type];
|
||||
}
|
||||
|
||||
const char* EQ::bug::CategoryIDToCategoryName(CategoryID category_id) {
|
||||
const char* EQEmu::bug::CategoryIDToCategoryName(CategoryID category_id) {
|
||||
switch (category_id) {
|
||||
case catVideo:
|
||||
return "Video";
|
||||
@@ -87,7 +87,7 @@ const char* EQ::bug::CategoryIDToCategoryName(CategoryID category_id) {
|
||||
}
|
||||
}
|
||||
|
||||
EQ::bug::CategoryID EQ::bug::CategoryNameToCategoryID(const char* category_name) {
|
||||
EQEmu::bug::CategoryID EQEmu::bug::CategoryNameToCategoryID(const char* category_name) {
|
||||
if (!category_name)
|
||||
return catOther;
|
||||
|
||||
@@ -119,7 +119,7 @@ EQ::bug::CategoryID EQ::bug::CategoryNameToCategoryID(const char* category_name)
|
||||
return catOther;
|
||||
}
|
||||
|
||||
const char *EQ::constants::GetStanceName(StanceType stance_type) {
|
||||
const char *EQEmu::constants::GetStanceName(StanceType stance_type) {
|
||||
switch (stance_type) {
|
||||
case stanceUnknown:
|
||||
return "Unknown";
|
||||
@@ -146,9 +146,9 @@ const char *EQ::constants::GetStanceName(StanceType stance_type) {
|
||||
}
|
||||
}
|
||||
|
||||
int EQ::constants::ConvertStanceTypeToIndex(StanceType stance_type) {
|
||||
if (stance_type >= EQ::constants::stancePassive && stance_type <= EQ::constants::stanceBurnAE)
|
||||
return (stance_type - EQ::constants::stancePassive);
|
||||
int EQEmu::constants::ConvertStanceTypeToIndex(StanceType stance_type) {
|
||||
if (stance_type >= EQEmu::constants::stancePassive && stance_type <= EQEmu::constants::stanceBurnAE)
|
||||
return (stance_type - EQEmu::constants::stancePassive);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+3
-12
@@ -27,7 +27,7 @@
|
||||
|
||||
|
||||
// local definitions are the result of using hybrid-client or server-only values and methods
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
using RoF2::IINVALID;
|
||||
using RoF2::INULL;
|
||||
@@ -193,7 +193,7 @@ namespace EQ
|
||||
} // namespace invaug
|
||||
|
||||
namespace constants {
|
||||
const EQ::versions::ClientVersion CHARACTER_CREATION_CLIENT = EQ::versions::ClientVersion::Titanium;
|
||||
const EQEmu::versions::ClientVersion CHARACTER_CREATION_CLIENT = EQEmu::versions::ClientVersion::Titanium;
|
||||
|
||||
using RoF2::constants::EXPANSION;
|
||||
using RoF2::constants::EXPANSION_BIT;
|
||||
@@ -317,21 +317,12 @@ namespace EQ
|
||||
QuestControlGrid = -1
|
||||
};
|
||||
|
||||
namespace consent {
|
||||
enum eConsentType : uint8 {
|
||||
Normal = 0,
|
||||
Group,
|
||||
Raid,
|
||||
Guild
|
||||
};
|
||||
}; // namespace consent
|
||||
|
||||
} /*EQEmu*/
|
||||
|
||||
#endif /*COMMON_EMU_CONSTANTS_H*/
|
||||
|
||||
/* hack list to prevent circular references
|
||||
|
||||
eq_limits.h:EQ::inventory::LookupEntry::InventoryTypeSize[n];
|
||||
eq_limits.h:EQEmu::inventory::LookupEntry::InventoryTypeSize[n];
|
||||
|
||||
*/
|
||||
|
||||
+5
-8
@@ -136,22 +136,20 @@ N(OP_Dye),
|
||||
N(OP_DynamicWall),
|
||||
N(OP_DzAddPlayer),
|
||||
N(OP_DzChooseZone),
|
||||
N(OP_DzChooseZoneReply),
|
||||
N(OP_DzCompass),
|
||||
N(OP_DzExpeditionEndsWarning),
|
||||
N(OP_DzExpeditionInfo),
|
||||
N(OP_DzExpeditionInvite),
|
||||
N(OP_DzExpeditionInviteResponse),
|
||||
N(OP_DzExpeditionLockoutTimers),
|
||||
N(OP_DzExpeditionList),
|
||||
N(OP_DzJoinExpeditionConfirm),
|
||||
N(OP_DzJoinExpeditionReply),
|
||||
N(OP_DzLeaderStatus),
|
||||
N(OP_DzListTimers),
|
||||
N(OP_DzMakeLeader),
|
||||
N(OP_DzMemberList),
|
||||
N(OP_DzMemberListName),
|
||||
N(OP_DzMemberListStatus),
|
||||
N(OP_DzMemberStatus),
|
||||
N(OP_DzPlayerList),
|
||||
N(OP_DzQuit),
|
||||
N(OP_DzRemovePlayer),
|
||||
N(OP_DzSetLeaderName),
|
||||
N(OP_DzSwapPlayer),
|
||||
N(OP_Emote),
|
||||
N(OP_EndLootRequest),
|
||||
@@ -273,7 +271,6 @@ N(OP_ItemVerifyRequest),
|
||||
N(OP_ItemViewUnknown),
|
||||
N(OP_Jump),
|
||||
N(OP_KeyRing),
|
||||
N(OP_KickPlayers),
|
||||
N(OP_KnowledgeBase),
|
||||
N(OP_LDoNButton),
|
||||
N(OP_LDoNDisarmTraps),
|
||||
|
||||
+31
-31
@@ -21,7 +21,7 @@
|
||||
#include "emu_constants.h"
|
||||
|
||||
|
||||
bool EQ::versions::IsValidClientVersion(ClientVersion client_version)
|
||||
bool EQEmu::versions::IsValidClientVersion(ClientVersion client_version)
|
||||
{
|
||||
if (client_version <= ClientVersion::Unknown || client_version > LastClientVersion)
|
||||
return false;
|
||||
@@ -29,7 +29,7 @@ bool EQ::versions::IsValidClientVersion(ClientVersion client_version)
|
||||
return true;
|
||||
}
|
||||
|
||||
EQ::versions::ClientVersion EQ::versions::ValidateClientVersion(ClientVersion client_version)
|
||||
EQEmu::versions::ClientVersion EQEmu::versions::ValidateClientVersion(ClientVersion client_version)
|
||||
{
|
||||
if (client_version <= ClientVersion::Unknown || client_version > LastClientVersion)
|
||||
return ClientVersion::Unknown;
|
||||
@@ -37,7 +37,7 @@ EQ::versions::ClientVersion EQ::versions::ValidateClientVersion(ClientVersion cl
|
||||
return client_version;
|
||||
}
|
||||
|
||||
const char* EQ::versions::ClientVersionName(ClientVersion client_version)
|
||||
const char* EQEmu::versions::ClientVersionName(ClientVersion client_version)
|
||||
{
|
||||
switch (client_version) {
|
||||
case ClientVersion::Unknown:
|
||||
@@ -61,7 +61,7 @@ const char* EQ::versions::ClientVersionName(ClientVersion client_version)
|
||||
};
|
||||
}
|
||||
|
||||
uint32 EQ::versions::ConvertClientVersionToClientVersionBit(ClientVersion client_version)
|
||||
uint32 EQEmu::versions::ConvertClientVersionToClientVersionBit(ClientVersion client_version)
|
||||
{
|
||||
switch (client_version) {
|
||||
case ClientVersion::Titanium:
|
||||
@@ -81,7 +81,7 @@ uint32 EQ::versions::ConvertClientVersionToClientVersionBit(ClientVersion client
|
||||
}
|
||||
}
|
||||
|
||||
EQ::versions::ClientVersion EQ::versions::ConvertClientVersionBitToClientVersion(uint32 client_version_bit)
|
||||
EQEmu::versions::ClientVersion EQEmu::versions::ConvertClientVersionBitToClientVersion(uint32 client_version_bit)
|
||||
{
|
||||
switch (client_version_bit) {
|
||||
case ((uint32)1 << (static_cast<unsigned int>(ClientVersion::Titanium) - 1)) :
|
||||
@@ -101,7 +101,7 @@ EQ::versions::ClientVersion EQ::versions::ConvertClientVersionBitToClientVersion
|
||||
}
|
||||
}
|
||||
|
||||
bool EQ::versions::IsValidMobVersion(MobVersion mob_version)
|
||||
bool EQEmu::versions::IsValidMobVersion(MobVersion mob_version)
|
||||
{
|
||||
if (mob_version <= MobVersion::Unknown || mob_version > LastMobVersion)
|
||||
return false;
|
||||
@@ -109,7 +109,7 @@ bool EQ::versions::IsValidMobVersion(MobVersion mob_version)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::versions::IsValidPCMobVersion(MobVersion mob_version)
|
||||
bool EQEmu::versions::IsValidPCMobVersion(MobVersion mob_version)
|
||||
{
|
||||
if (mob_version <= MobVersion::Unknown || mob_version > LastPCMobVersion)
|
||||
return false;
|
||||
@@ -117,7 +117,7 @@ bool EQ::versions::IsValidPCMobVersion(MobVersion mob_version)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::versions::IsValidNonPCMobVersion(MobVersion mob_version)
|
||||
bool EQEmu::versions::IsValidNonPCMobVersion(MobVersion mob_version)
|
||||
{
|
||||
if (mob_version <= LastPCMobVersion || mob_version > LastNonPCMobVersion)
|
||||
return false;
|
||||
@@ -125,7 +125,7 @@ bool EQ::versions::IsValidNonPCMobVersion(MobVersion mob_version)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::versions::IsValidOfflinePCMobVersion(MobVersion mob_version)
|
||||
bool EQEmu::versions::IsValidOfflinePCMobVersion(MobVersion mob_version)
|
||||
{
|
||||
if (mob_version <= LastNonPCMobVersion || mob_version > LastOfflinePCMobVersion)
|
||||
return false;
|
||||
@@ -133,7 +133,7 @@ bool EQ::versions::IsValidOfflinePCMobVersion(MobVersion mob_version)
|
||||
return true;
|
||||
}
|
||||
|
||||
EQ::versions::MobVersion EQ::versions::ValidateMobVersion(MobVersion mob_version)
|
||||
EQEmu::versions::MobVersion EQEmu::versions::ValidateMobVersion(MobVersion mob_version)
|
||||
{
|
||||
if (mob_version <= MobVersion::Unknown || mob_version > LastMobVersion)
|
||||
return MobVersion::Unknown;
|
||||
@@ -141,7 +141,7 @@ EQ::versions::MobVersion EQ::versions::ValidateMobVersion(MobVersion mob_version
|
||||
return mob_version;
|
||||
}
|
||||
|
||||
EQ::versions::MobVersion EQ::versions::ValidatePCMobVersion(MobVersion mob_version)
|
||||
EQEmu::versions::MobVersion EQEmu::versions::ValidatePCMobVersion(MobVersion mob_version)
|
||||
{
|
||||
if (mob_version <= MobVersion::Unknown || mob_version > LastPCMobVersion)
|
||||
return MobVersion::Unknown;
|
||||
@@ -149,7 +149,7 @@ EQ::versions::MobVersion EQ::versions::ValidatePCMobVersion(MobVersion mob_versi
|
||||
return mob_version;
|
||||
}
|
||||
|
||||
EQ::versions::MobVersion EQ::versions::ValidateNonPCMobVersion(MobVersion mob_version)
|
||||
EQEmu::versions::MobVersion EQEmu::versions::ValidateNonPCMobVersion(MobVersion mob_version)
|
||||
{
|
||||
if (mob_version <= LastPCMobVersion || mob_version > LastNonPCMobVersion)
|
||||
return MobVersion::Unknown;
|
||||
@@ -157,7 +157,7 @@ EQ::versions::MobVersion EQ::versions::ValidateNonPCMobVersion(MobVersion mob_ve
|
||||
return mob_version;
|
||||
}
|
||||
|
||||
EQ::versions::MobVersion EQ::versions::ValidateOfflinePCMobVersion(MobVersion mob_version)
|
||||
EQEmu::versions::MobVersion EQEmu::versions::ValidateOfflinePCMobVersion(MobVersion mob_version)
|
||||
{
|
||||
if (mob_version <= LastNonPCMobVersion || mob_version > LastOfflinePCMobVersion)
|
||||
return MobVersion::Unknown;
|
||||
@@ -165,7 +165,7 @@ EQ::versions::MobVersion EQ::versions::ValidateOfflinePCMobVersion(MobVersion mo
|
||||
return mob_version;
|
||||
}
|
||||
|
||||
const char* EQ::versions::MobVersionName(MobVersion mob_version)
|
||||
const char* EQEmu::versions::MobVersionName(MobVersion mob_version)
|
||||
{
|
||||
switch (mob_version) {
|
||||
case MobVersion::Unknown:
|
||||
@@ -217,7 +217,7 @@ const char* EQ::versions::MobVersionName(MobVersion mob_version)
|
||||
};
|
||||
}
|
||||
|
||||
EQ::versions::ClientVersion EQ::versions::ConvertMobVersionToClientVersion(MobVersion mob_version)
|
||||
EQEmu::versions::ClientVersion EQEmu::versions::ConvertMobVersionToClientVersion(MobVersion mob_version)
|
||||
{
|
||||
switch (mob_version) {
|
||||
case MobVersion::Unknown:
|
||||
@@ -240,7 +240,7 @@ EQ::versions::ClientVersion EQ::versions::ConvertMobVersionToClientVersion(MobVe
|
||||
}
|
||||
}
|
||||
|
||||
EQ::versions::MobVersion EQ::versions::ConvertClientVersionToMobVersion(ClientVersion client_version)
|
||||
EQEmu::versions::MobVersion EQEmu::versions::ConvertClientVersionToMobVersion(ClientVersion client_version)
|
||||
{
|
||||
switch (client_version) {
|
||||
case ClientVersion::Unknown:
|
||||
@@ -263,7 +263,7 @@ EQ::versions::MobVersion EQ::versions::ConvertClientVersionToMobVersion(ClientVe
|
||||
}
|
||||
}
|
||||
|
||||
EQ::versions::MobVersion EQ::versions::ConvertPCMobVersionToOfflinePCMobVersion(MobVersion mob_version)
|
||||
EQEmu::versions::MobVersion EQEmu::versions::ConvertPCMobVersionToOfflinePCMobVersion(MobVersion mob_version)
|
||||
{
|
||||
switch (mob_version) {
|
||||
case MobVersion::Titanium:
|
||||
@@ -283,7 +283,7 @@ EQ::versions::MobVersion EQ::versions::ConvertPCMobVersionToOfflinePCMobVersion(
|
||||
}
|
||||
}
|
||||
|
||||
EQ::versions::MobVersion EQ::versions::ConvertOfflinePCMobVersionToPCMobVersion(MobVersion mob_version)
|
||||
EQEmu::versions::MobVersion EQEmu::versions::ConvertOfflinePCMobVersionToPCMobVersion(MobVersion mob_version)
|
||||
{
|
||||
switch (mob_version) {
|
||||
case MobVersion::OfflineTitanium:
|
||||
@@ -303,7 +303,7 @@ EQ::versions::MobVersion EQ::versions::ConvertOfflinePCMobVersionToPCMobVersion(
|
||||
}
|
||||
}
|
||||
|
||||
EQ::versions::ClientVersion EQ::versions::ConvertOfflinePCMobVersionToClientVersion(MobVersion mob_version)
|
||||
EQEmu::versions::ClientVersion EQEmu::versions::ConvertOfflinePCMobVersionToClientVersion(MobVersion mob_version)
|
||||
{
|
||||
switch (mob_version) {
|
||||
case MobVersion::OfflineTitanium:
|
||||
@@ -323,7 +323,7 @@ EQ::versions::ClientVersion EQ::versions::ConvertOfflinePCMobVersionToClientVers
|
||||
}
|
||||
}
|
||||
|
||||
EQ::versions::MobVersion EQ::versions::ConvertClientVersionToOfflinePCMobVersion(ClientVersion client_version)
|
||||
EQEmu::versions::MobVersion EQEmu::versions::ConvertClientVersionToOfflinePCMobVersion(ClientVersion client_version)
|
||||
{
|
||||
switch (client_version) {
|
||||
case ClientVersion::Titanium:
|
||||
@@ -343,7 +343,7 @@ EQ::versions::MobVersion EQ::versions::ConvertClientVersionToOfflinePCMobVersion
|
||||
}
|
||||
}
|
||||
|
||||
const char* EQ::expansions::ExpansionName(Expansion expansion)
|
||||
const char* EQEmu::expansions::ExpansionName(Expansion expansion)
|
||||
{
|
||||
switch (expansion) {
|
||||
case Expansion::EverQuest:
|
||||
@@ -393,12 +393,12 @@ const char* EQ::expansions::ExpansionName(Expansion expansion)
|
||||
}
|
||||
}
|
||||
|
||||
const char* EQ::expansions::ExpansionName(uint32 expansion_bit)
|
||||
const char* EQEmu::expansions::ExpansionName(uint32 expansion_bit)
|
||||
{
|
||||
return ExpansionName(ConvertExpansionBitToExpansion(expansion_bit));
|
||||
}
|
||||
|
||||
uint32 EQ::expansions::ConvertExpansionToExpansionBit(Expansion expansion)
|
||||
uint32 EQEmu::expansions::ConvertExpansionToExpansionBit(Expansion expansion)
|
||||
{
|
||||
switch (expansion) {
|
||||
case Expansion::RoK:
|
||||
@@ -446,7 +446,7 @@ uint32 EQ::expansions::ConvertExpansionToExpansionBit(Expansion expansion)
|
||||
}
|
||||
}
|
||||
|
||||
EQ::expansions::Expansion EQ::expansions::ConvertExpansionBitToExpansion(uint32 expansion_bit)
|
||||
EQEmu::expansions::Expansion EQEmu::expansions::ConvertExpansionBitToExpansion(uint32 expansion_bit)
|
||||
{
|
||||
switch (expansion_bit) {
|
||||
case bitRoK:
|
||||
@@ -494,7 +494,7 @@ EQ::expansions::Expansion EQ::expansions::ConvertExpansionBitToExpansion(uint32
|
||||
}
|
||||
}
|
||||
|
||||
uint32 EQ::expansions::ConvertExpansionToExpansionsMask(Expansion expansion)
|
||||
uint32 EQEmu::expansions::ConvertExpansionToExpansionsMask(Expansion expansion)
|
||||
{
|
||||
switch (expansion) {
|
||||
case Expansion::RoK:
|
||||
@@ -542,17 +542,17 @@ uint32 EQ::expansions::ConvertExpansionToExpansionsMask(Expansion expansion)
|
||||
}
|
||||
}
|
||||
|
||||
EQ::expansions::Expansion EQ::expansions::ConvertClientVersionToExpansion(versions::ClientVersion client_version)
|
||||
EQEmu::expansions::Expansion EQEmu::expansions::ConvertClientVersionToExpansion(versions::ClientVersion client_version)
|
||||
{
|
||||
return EQ::constants::StaticLookup(client_version)->Expansion;
|
||||
return EQEmu::constants::StaticLookup(client_version)->Expansion;
|
||||
}
|
||||
|
||||
uint32 EQ::expansions::ConvertClientVersionToExpansionBit(versions::ClientVersion client_version)
|
||||
uint32 EQEmu::expansions::ConvertClientVersionToExpansionBit(versions::ClientVersion client_version)
|
||||
{
|
||||
return EQ::constants::StaticLookup(client_version)->ExpansionBit;
|
||||
return EQEmu::constants::StaticLookup(client_version)->ExpansionBit;
|
||||
}
|
||||
|
||||
uint32 EQ::expansions::ConvertClientVersionToExpansionsMask(versions::ClientVersion client_version)
|
||||
uint32 EQEmu::expansions::ConvertClientVersionToExpansionsMask(versions::ClientVersion client_version)
|
||||
{
|
||||
return EQ::constants::StaticLookup(client_version)->ExpansionsMask;
|
||||
return EQEmu::constants::StaticLookup(client_version)->ExpansionsMask;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
namespace versions {
|
||||
enum class ClientVersion : uint32 {
|
||||
|
||||
@@ -318,7 +318,7 @@ static const uint8 DamageTypeUnknown = 0xFF;
|
||||
**
|
||||
** (indexed by 'Skill' of SkillUseTypes)
|
||||
*/
|
||||
static const uint8 SkillDamageTypes[EQ::skills::HIGHEST_SKILL + 1] = // change to _SkillServerArraySize once activated
|
||||
static const uint8 SkillDamageTypes[EQEmu::skills::HIGHEST_SKILL + 1] = // change to _SkillServerArraySize once activated
|
||||
{
|
||||
/*1HBlunt*/ 0,
|
||||
/*1HSlashing*/ 1,
|
||||
|
||||
+168
-168
@@ -25,7 +25,7 @@
|
||||
|
||||
|
||||
static bool global_dictionary_init = false;
|
||||
void EQ::InitializeDynamicLookups() {
|
||||
void EQEmu::InitializeDynamicLookups() {
|
||||
if (global_dictionary_init == true)
|
||||
return;
|
||||
|
||||
@@ -37,12 +37,12 @@ void EQ::InitializeDynamicLookups() {
|
||||
global_dictionary_init = true;
|
||||
}
|
||||
|
||||
static std::unique_ptr<EQ::constants::LookupEntry> constants_dynamic_nongm_lookup_entries[EQ::versions::ClientVersionCount];
|
||||
static std::unique_ptr<EQ::constants::LookupEntry> constants_dynamic_gm_lookup_entries[EQ::versions::ClientVersionCount];
|
||||
static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::versions::ClientVersionCount] =
|
||||
static std::unique_ptr<EQEmu::constants::LookupEntry> constants_dynamic_nongm_lookup_entries[EQEmu::versions::ClientVersionCount];
|
||||
static std::unique_ptr<EQEmu::constants::LookupEntry> constants_dynamic_gm_lookup_entries[EQEmu::versions::ClientVersionCount];
|
||||
static const EQEmu::constants::LookupEntry constants_static_lookup_entries[EQEmu::versions::ClientVersionCount] =
|
||||
{
|
||||
/*[ClientVersion::Unknown] =*/
|
||||
EQ::constants::LookupEntry(
|
||||
EQEmu::constants::LookupEntry(
|
||||
ClientUnknown::constants::EXPANSION,
|
||||
ClientUnknown::constants::EXPANSION_BIT,
|
||||
ClientUnknown::constants::EXPANSIONS_MASK,
|
||||
@@ -50,7 +50,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
|
||||
ClientUnknown::INULL
|
||||
),
|
||||
/*[ClientVersion::Client62] =*/
|
||||
EQ::constants::LookupEntry(
|
||||
EQEmu::constants::LookupEntry(
|
||||
Client62::constants::EXPANSION,
|
||||
Client62::constants::EXPANSION_BIT,
|
||||
Client62::constants::EXPANSIONS_MASK,
|
||||
@@ -58,7 +58,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
|
||||
Client62::INULL
|
||||
),
|
||||
/*[ClientVersion::Titanium] =*/
|
||||
EQ::constants::LookupEntry(
|
||||
EQEmu::constants::LookupEntry(
|
||||
Titanium::constants::EXPANSION,
|
||||
Titanium::constants::EXPANSION_BIT,
|
||||
Titanium::constants::EXPANSIONS_MASK,
|
||||
@@ -66,7 +66,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
|
||||
Titanium::constants::SAY_LINK_BODY_SIZE
|
||||
),
|
||||
/*[ClientVersion::SoF] =*/
|
||||
EQ::constants::LookupEntry(
|
||||
EQEmu::constants::LookupEntry(
|
||||
SoF::constants::EXPANSION,
|
||||
SoF::constants::EXPANSION_BIT,
|
||||
SoF::constants::EXPANSIONS_MASK,
|
||||
@@ -74,7 +74,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
|
||||
SoF::constants::SAY_LINK_BODY_SIZE
|
||||
),
|
||||
/*[ClientVersion::SoD] =*/
|
||||
EQ::constants::LookupEntry(
|
||||
EQEmu::constants::LookupEntry(
|
||||
SoD::constants::EXPANSION,
|
||||
SoD::constants::EXPANSION_BIT,
|
||||
SoD::constants::EXPANSIONS_MASK,
|
||||
@@ -82,7 +82,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
|
||||
SoD::constants::SAY_LINK_BODY_SIZE
|
||||
),
|
||||
/*[ClientVersion::UF] =*/
|
||||
EQ::constants::LookupEntry(
|
||||
EQEmu::constants::LookupEntry(
|
||||
UF::constants::EXPANSION,
|
||||
UF::constants::EXPANSION_BIT,
|
||||
UF::constants::EXPANSIONS_MASK,
|
||||
@@ -90,7 +90,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
|
||||
UF::constants::SAY_LINK_BODY_SIZE
|
||||
),
|
||||
/*[ClientVersion::RoF] =*/
|
||||
EQ::constants::LookupEntry(
|
||||
EQEmu::constants::LookupEntry(
|
||||
RoF::constants::EXPANSION,
|
||||
RoF::constants::EXPANSION_BIT,
|
||||
RoF::constants::EXPANSIONS_MASK,
|
||||
@@ -98,7 +98,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
|
||||
RoF::constants::SAY_LINK_BODY_SIZE
|
||||
),
|
||||
/*[ClientVersion::RoF2] =*/
|
||||
EQ::constants::LookupEntry(
|
||||
EQEmu::constants::LookupEntry(
|
||||
RoF2::constants::EXPANSION,
|
||||
RoF2::constants::EXPANSION_BIT,
|
||||
RoF2::constants::EXPANSIONS_MASK,
|
||||
@@ -108,7 +108,7 @@ static const EQ::constants::LookupEntry constants_static_lookup_entries[EQ::vers
|
||||
};
|
||||
|
||||
static bool constants_dictionary_init = false;
|
||||
void EQ::constants::InitializeDynamicLookups() {
|
||||
void EQEmu::constants::InitializeDynamicLookups() {
|
||||
if (constants_dictionary_init == true)
|
||||
return;
|
||||
constants_dictionary_init = true;
|
||||
@@ -119,7 +119,7 @@ void EQ::constants::InitializeDynamicLookups() {
|
||||
// use static references for now
|
||||
}
|
||||
|
||||
const EQ::constants::LookupEntry* EQ::constants::DynamicLookup(versions::ClientVersion client_version, bool gm_flag)
|
||||
const EQEmu::constants::LookupEntry* EQEmu::constants::DynamicLookup(versions::ClientVersion client_version, bool gm_flag)
|
||||
{
|
||||
if (gm_flag)
|
||||
return DynamicGMLookup(client_version);
|
||||
@@ -127,7 +127,7 @@ const EQ::constants::LookupEntry* EQ::constants::DynamicLookup(versions::ClientV
|
||||
return DynamicNonGMLookup(client_version);
|
||||
}
|
||||
|
||||
const EQ::constants::LookupEntry* EQ::constants::DynamicNonGMLookup(versions::ClientVersion client_version)
|
||||
const EQEmu::constants::LookupEntry* EQEmu::constants::DynamicNonGMLookup(versions::ClientVersion client_version)
|
||||
{
|
||||
client_version = versions::ValidateClientVersion(client_version);
|
||||
if (constants_dynamic_nongm_lookup_entries[static_cast<int>(client_version)])
|
||||
@@ -136,7 +136,7 @@ const EQ::constants::LookupEntry* EQ::constants::DynamicNonGMLookup(versions::Cl
|
||||
return &constants_static_lookup_entries[static_cast<int>(client_version)];
|
||||
}
|
||||
|
||||
const EQ::constants::LookupEntry* EQ::constants::DynamicGMLookup(versions::ClientVersion client_version)
|
||||
const EQEmu::constants::LookupEntry* EQEmu::constants::DynamicGMLookup(versions::ClientVersion client_version)
|
||||
{
|
||||
client_version = versions::ValidateClientVersion(client_version);
|
||||
if (constants_dynamic_gm_lookup_entries[static_cast<int>(client_version)])
|
||||
@@ -145,18 +145,18 @@ const EQ::constants::LookupEntry* EQ::constants::DynamicGMLookup(versions::Clien
|
||||
return &constants_static_lookup_entries[static_cast<int>(client_version)];
|
||||
}
|
||||
|
||||
const EQ::constants::LookupEntry* EQ::constants::StaticLookup(versions::ClientVersion client_version)
|
||||
const EQEmu::constants::LookupEntry* EQEmu::constants::StaticLookup(versions::ClientVersion client_version)
|
||||
{
|
||||
return &constants_static_lookup_entries[static_cast<int>(versions::ValidateClientVersion(client_version))];
|
||||
}
|
||||
|
||||
static std::unique_ptr<EQ::inventory::LookupEntry> inventory_dynamic_nongm_lookup_entries[EQ::versions::MobVersionCount];
|
||||
static std::unique_ptr<EQ::inventory::LookupEntry> inventory_dynamic_gm_lookup_entries[EQ::versions::MobVersionCount];
|
||||
static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::versions::MobVersionCount] =
|
||||
static std::unique_ptr<EQEmu::inventory::LookupEntry> inventory_dynamic_nongm_lookup_entries[EQEmu::versions::MobVersionCount];
|
||||
static std::unique_ptr<EQEmu::inventory::LookupEntry> inventory_dynamic_gm_lookup_entries[EQEmu::versions::MobVersionCount];
|
||||
static const EQEmu::inventory::LookupEntry inventory_static_lookup_entries[EQEmu::versions::MobVersionCount] =
|
||||
{
|
||||
/*[MobVersion::Unknown] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL,
|
||||
ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL,
|
||||
ClientUnknown::INULL, ClientUnknown::INULL, ClientUnknown::INULL,
|
||||
@@ -182,8 +182,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::Client62] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
Client62::INULL, Client62::INULL, Client62::INULL,
|
||||
Client62::INULL, Client62::INULL, Client62::INULL,
|
||||
Client62::INULL, Client62::INULL, Client62::INULL,
|
||||
@@ -209,9 +209,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::Titanium] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, Titanium::invtype::BANK_SIZE, Titanium::invtype::SHARED_BANK_SIZE,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, Titanium::invtype::BANK_SIZE, Titanium::invtype::SHARED_BANK_SIZE,
|
||||
Titanium::invtype::TRADE_SIZE, Titanium::invtype::WORLD_SIZE, Titanium::invtype::LIMBO_SIZE,
|
||||
Titanium::invtype::TRIBUTE_SIZE, Titanium::INULL, Titanium::invtype::GUILD_TRIBUTE_SIZE,
|
||||
Titanium::invtype::MERCHANT_SIZE, Titanium::INULL, Titanium::invtype::CORPSE_SIZE,
|
||||
@@ -236,9 +236,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
Titanium::inventory::AllowOverLevelEquipment
|
||||
),
|
||||
/*[MobVersion::SoF] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, SoF::invtype::BANK_SIZE, SoF::invtype::SHARED_BANK_SIZE,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, SoF::invtype::BANK_SIZE, SoF::invtype::SHARED_BANK_SIZE,
|
||||
SoF::invtype::TRADE_SIZE, SoF::invtype::WORLD_SIZE, SoF::invtype::LIMBO_SIZE,
|
||||
SoF::invtype::TRIBUTE_SIZE, SoF::INULL, SoF::invtype::GUILD_TRIBUTE_SIZE,
|
||||
SoF::invtype::MERCHANT_SIZE, SoF::INULL, SoF::invtype::CORPSE_SIZE,
|
||||
@@ -263,9 +263,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
SoF::inventory::AllowOverLevelEquipment
|
||||
),
|
||||
/*[MobVersion::SoD] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, SoD::invtype::BANK_SIZE, SoD::invtype::SHARED_BANK_SIZE,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, SoD::invtype::BANK_SIZE, SoD::invtype::SHARED_BANK_SIZE,
|
||||
SoD::invtype::TRADE_SIZE, SoD::invtype::WORLD_SIZE, SoD::invtype::LIMBO_SIZE,
|
||||
SoD::invtype::TRIBUTE_SIZE, SoD::INULL, SoD::invtype::GUILD_TRIBUTE_SIZE,
|
||||
SoD::invtype::MERCHANT_SIZE, SoD::INULL, SoD::invtype::CORPSE_SIZE,
|
||||
@@ -290,9 +290,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
SoD::inventory::AllowOverLevelEquipment
|
||||
),
|
||||
/*[MobVersion::UF] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, UF::invtype::BANK_SIZE, UF::invtype::SHARED_BANK_SIZE,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, UF::invtype::BANK_SIZE, UF::invtype::SHARED_BANK_SIZE,
|
||||
UF::invtype::TRADE_SIZE, UF::invtype::WORLD_SIZE, UF::invtype::LIMBO_SIZE,
|
||||
UF::invtype::TRIBUTE_SIZE, UF::INULL, UF::invtype::GUILD_TRIBUTE_SIZE,
|
||||
UF::invtype::MERCHANT_SIZE, UF::INULL, UF::invtype::CORPSE_SIZE,
|
||||
@@ -317,9 +317,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
UF::inventory::AllowOverLevelEquipment
|
||||
),
|
||||
/*[MobVersion::RoF] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, RoF::invtype::BANK_SIZE, RoF::invtype::SHARED_BANK_SIZE,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, RoF::invtype::BANK_SIZE, RoF::invtype::SHARED_BANK_SIZE,
|
||||
RoF::invtype::TRADE_SIZE, RoF::invtype::WORLD_SIZE, RoF::invtype::LIMBO_SIZE,
|
||||
RoF::invtype::TRIBUTE_SIZE, RoF::invtype::TROPHY_TRIBUTE_SIZE, RoF::invtype::GUILD_TRIBUTE_SIZE,
|
||||
RoF::invtype::MERCHANT_SIZE, RoF::invtype::DELETED_SIZE, RoF::invtype::CORPSE_SIZE,
|
||||
@@ -344,9 +344,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
RoF::inventory::AllowOverLevelEquipment
|
||||
),
|
||||
/*[MobVersion::RoF2] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, RoF2::invtype::BANK_SIZE, RoF2::invtype::SHARED_BANK_SIZE,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, RoF2::invtype::BANK_SIZE, RoF2::invtype::SHARED_BANK_SIZE,
|
||||
RoF2::invtype::TRADE_SIZE, RoF2::invtype::WORLD_SIZE, RoF2::invtype::LIMBO_SIZE,
|
||||
RoF2::invtype::TRIBUTE_SIZE, RoF2::invtype::TROPHY_TRIBUTE_SIZE, RoF2::invtype::GUILD_TRIBUTE_SIZE,
|
||||
RoF2::invtype::MERCHANT_SIZE, RoF2::invtype::DELETED_SIZE, RoF2::invtype::CORPSE_SIZE,
|
||||
@@ -371,9 +371,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
RoF2::inventory::AllowOverLevelEquipment
|
||||
),
|
||||
/*[MobVersion::NPC] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL,
|
||||
EntityLimits::NPC::invtype::TRADE_SIZE, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL,
|
||||
EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL,
|
||||
EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, EntityLimits::NPC::INULL, /*InvTypeCorpseSize,*/
|
||||
@@ -389,8 +389,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
EntityLimits::NPC::INULL,
|
||||
EntityLimits::NPC::INULL,
|
||||
EntityLimits::NPC::INULL,
|
||||
0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQ::inventory::SocketCount, /*ItemAugSize,*/
|
||||
0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/
|
||||
|
||||
false,
|
||||
false,
|
||||
@@ -398,9 +398,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::NPCMerchant] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL,
|
||||
EntityLimits::NPCMerchant::invtype::TRADE_SIZE, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL,
|
||||
EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL,
|
||||
EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, EntityLimits::NPCMerchant::INULL, /*InvTypeCorpseSize,*/
|
||||
@@ -416,8 +416,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
EntityLimits::NPCMerchant::INULL,
|
||||
EntityLimits::NPCMerchant::INULL,
|
||||
EntityLimits::NPCMerchant::INULL,
|
||||
0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQ::inventory::SocketCount, /*ItemAugSize,*/
|
||||
0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/
|
||||
|
||||
false,
|
||||
false,
|
||||
@@ -425,9 +425,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::Merc] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::Merc::INULL, EntityLimits::Merc::INULL,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::Merc::INULL, EntityLimits::Merc::INULL,
|
||||
EntityLimits::Merc::invtype::TRADE_SIZE, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL,
|
||||
EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL,
|
||||
EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, EntityLimits::Merc::INULL, /*InvTypeCorpseSize,*/
|
||||
@@ -443,8 +443,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
EntityLimits::Merc::INULL,
|
||||
EntityLimits::Merc::INULL,
|
||||
EntityLimits::Merc::INULL,
|
||||
0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQ::inventory::SocketCount, /*ItemAugSize,*/
|
||||
0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/
|
||||
|
||||
false,
|
||||
false,
|
||||
@@ -452,9 +452,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::Bot] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::Bot::INULL, EntityLimits::Bot::INULL,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::Bot::INULL, EntityLimits::Bot::INULL,
|
||||
EntityLimits::Bot::invtype::TRADE_SIZE, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL,
|
||||
EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL,
|
||||
EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, EntityLimits::Bot::INULL, /*InvTypeCorpseSize,*/
|
||||
@@ -470,8 +470,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
EntityLimits::Bot::invslot::CURSOR_BITMASK,
|
||||
EntityLimits::Bot::invslot::POSSESSIONS_BITMASK,
|
||||
EntityLimits::Bot::INULL,
|
||||
0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
EQ::invaug::SOCKET_COUNT, //EQ::inventory::SocketCount, /*ItemAugSize,*/
|
||||
0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
EQEmu::invaug::SOCKET_COUNT, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/
|
||||
|
||||
false,
|
||||
false,
|
||||
@@ -479,9 +479,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::ClientPet] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL,
|
||||
EntityLimits::ClientPet::invtype::TRADE_SIZE, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL,
|
||||
EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL,
|
||||
EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, EntityLimits::ClientPet::INULL, /*InvTypeCorpseSize,*/
|
||||
@@ -497,8 +497,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
EntityLimits::ClientPet::INULL,
|
||||
EntityLimits::ClientPet::INULL,
|
||||
EntityLimits::ClientPet::INULL,
|
||||
0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQ::inventory::SocketCount, /*ItemAugSize,*/
|
||||
0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/
|
||||
|
||||
false,
|
||||
false,
|
||||
@@ -506,9 +506,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::NPCPet] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL,
|
||||
EntityLimits::NPCPet::invtype::TRADE_SIZE, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL,
|
||||
EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL,
|
||||
EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, EntityLimits::NPCPet::INULL, /*InvTypeCorpseSize,*/
|
||||
@@ -524,8 +524,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
EntityLimits::NPCPet::INULL,
|
||||
EntityLimits::NPCPet::INULL,
|
||||
EntityLimits::NPCPet::INULL,
|
||||
0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQ::inventory::SocketCount, /*ItemAugSize,*/
|
||||
0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/
|
||||
|
||||
false,
|
||||
false,
|
||||
@@ -533,9 +533,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::MercPet] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL,
|
||||
EntityLimits::MercPet::invtype::TRADE_SIZE, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL,
|
||||
EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL,
|
||||
EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, EntityLimits::MercPet::INULL, /*InvTypeCorpseSize,*/
|
||||
@@ -551,8 +551,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
EntityLimits::MercPet::INULL,
|
||||
EntityLimits::MercPet::INULL,
|
||||
EntityLimits::MercPet::INULL,
|
||||
0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQ::inventory::SocketCount, /*ItemAugSize,*/
|
||||
0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/
|
||||
|
||||
false,
|
||||
false,
|
||||
@@ -560,9 +560,9 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::BotPet] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQ::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL,
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::invtype::POSSESSIONS_SIZE, /*InvTypePossessionsSize,*/ EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL,
|
||||
EntityLimits::BotPet::invtype::TRADE_SIZE, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL,
|
||||
EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL,
|
||||
EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, EntityLimits::BotPet::INULL, /*InvTypeCorpseSize,*/
|
||||
@@ -578,8 +578,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
EntityLimits::BotPet::INULL,
|
||||
EntityLimits::BotPet::INULL,
|
||||
EntityLimits::BotPet::INULL,
|
||||
0, //EQ::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQ::inventory::SocketCount, /*ItemAugSize,*/
|
||||
0, //EQEmu::inventory::ContainerCount, /*ItemBagSize,*/
|
||||
0, //EQEmu::inventory::SocketCount, /*ItemAugSize,*/
|
||||
|
||||
false,
|
||||
false,
|
||||
@@ -587,8 +587,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::OfflineTitanium] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
Titanium::INULL, Titanium::INULL, Titanium::INULL,
|
||||
Titanium::invtype::TRADE_SIZE, Titanium::INULL, Titanium::INULL,
|
||||
Titanium::INULL, Titanium::INULL, Titanium::INULL,
|
||||
@@ -614,8 +614,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::OfflineSoF] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
SoF::INULL, SoF::INULL, SoF::INULL,
|
||||
SoF::invtype::TRADE_SIZE, SoF::INULL, SoF::INULL,
|
||||
SoF::INULL, SoF::INULL, SoF::INULL,
|
||||
@@ -641,8 +641,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::OfflineSoD] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
SoD::INULL, SoD::INULL, SoD::INULL,
|
||||
SoD::invtype::TRADE_SIZE, SoD::INULL, SoD::INULL,
|
||||
SoD::INULL, SoD::INULL, SoD::INULL,
|
||||
@@ -668,8 +668,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::OfflineUF] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
UF::INULL, UF::INULL, UF::INULL,
|
||||
UF::invtype::TRADE_SIZE, UF::INULL, UF::INULL,
|
||||
UF::INULL, UF::INULL, UF::INULL,
|
||||
@@ -695,8 +695,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::OfflineRoF] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
RoF::INULL, RoF::INULL, RoF::INULL,
|
||||
RoF::invtype::TRADE_SIZE, RoF::INULL, RoF::INULL,
|
||||
RoF::INULL, RoF::INULL, RoF::INULL,
|
||||
@@ -722,8 +722,8 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
false
|
||||
),
|
||||
/*[MobVersion::OfflineRoF2] =*/
|
||||
EQ::inventory::LookupEntry(
|
||||
EQ::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
EQEmu::inventory::LookupEntry(
|
||||
EQEmu::inventory::LookupEntry::InventoryTypeSize_Struct(
|
||||
RoF2::INULL, RoF2::INULL, RoF2::INULL,
|
||||
RoF2::invtype::TRADE_SIZE, RoF2::INULL, RoF2::INULL,
|
||||
RoF2::INULL, RoF2::INULL, RoF2::INULL,
|
||||
@@ -751,7 +751,7 @@ static const EQ::inventory::LookupEntry inventory_static_lookup_entries[EQ::vers
|
||||
};
|
||||
|
||||
static bool inventory_dictionary_init = false;
|
||||
void EQ::inventory::InitializeDynamicLookups() {
|
||||
void EQEmu::inventory::InitializeDynamicLookups() {
|
||||
if (inventory_dictionary_init == true)
|
||||
return;
|
||||
inventory_dictionary_init = true;
|
||||
@@ -774,9 +774,9 @@ void EQ::inventory::InitializeDynamicLookups() {
|
||||
|
||||
const uint32 dynamic_check_mask =
|
||||
(
|
||||
EQ::expansions::bitPoR |
|
||||
EQ::expansions::bitTBS |
|
||||
EQ::expansions::bitHoT
|
||||
EQEmu::expansions::bitPoR |
|
||||
EQEmu::expansions::bitTBS |
|
||||
EQEmu::expansions::bitHoT
|
||||
);
|
||||
|
||||
// if all of the above expansion bits are present, then static references will suffice
|
||||
@@ -784,7 +784,7 @@ void EQ::inventory::InitializeDynamicLookups() {
|
||||
return;
|
||||
|
||||
// Dynamic Lookups (promotive methodology) (all mob versions allowed)
|
||||
for (uint32 iter = static_cast<uint32>(EQ::versions::MobVersion::Unknown); iter <= static_cast<uint32>(EQ::versions::LastPCMobVersion); ++iter) {
|
||||
for (uint32 iter = static_cast<uint32>(EQEmu::versions::MobVersion::Unknown); iter <= static_cast<uint32>(EQEmu::versions::LastPCMobVersion); ++iter) {
|
||||
// no need to dynamic this condition since it is the lowest compatibility standard
|
||||
if ((dynamic_check_mask & ~constants_static_lookup_entries[iter].ExpansionsMask) == dynamic_check_mask)
|
||||
continue;
|
||||
@@ -803,21 +803,21 @@ void EQ::inventory::InitializeDynamicLookups() {
|
||||
inventory_dynamic_nongm_lookup_entries[iter]->PossessionsBitmask = 0; // we'll fix later
|
||||
inventory_dynamic_nongm_lookup_entries[iter]->CorpseBitmask = 0; // we'll fix later
|
||||
|
||||
if (RuleI(World, ExpansionSettings) & EQ::expansions::bitPoR) {
|
||||
if (RuleI(World, ExpansionSettings) & EQEmu::expansions::bitPoR) {
|
||||
// update bank size
|
||||
if (constants_static_lookup_entries[iter].ExpansionsMask & EQ::expansions::bitPoR)
|
||||
if (constants_static_lookup_entries[iter].ExpansionsMask & EQEmu::expansions::bitPoR)
|
||||
inventory_dynamic_nongm_lookup_entries[iter]->InventoryTypeSize.Bank = SoF::invtype::BANK_SIZE;
|
||||
}
|
||||
|
||||
if (RuleI(World, ExpansionSettings) & EQ::expansions::bitTBS) {
|
||||
if (RuleI(World, ExpansionSettings) & EQEmu::expansions::bitTBS) {
|
||||
// update power source
|
||||
if (constants_static_lookup_entries[iter].ExpansionsMask & EQ::expansions::bitTBS)
|
||||
if (constants_static_lookup_entries[iter].ExpansionsMask & EQEmu::expansions::bitTBS)
|
||||
inventory_dynamic_nongm_lookup_entries[iter]->EquipmentBitmask = SoF::invslot::EQUIPMENT_BITMASK;
|
||||
}
|
||||
|
||||
if (RuleI(World, ExpansionSettings) & EQ::expansions::bitHoT) {
|
||||
if (RuleI(World, ExpansionSettings) & EQEmu::expansions::bitHoT) {
|
||||
// update general size
|
||||
if (constants_static_lookup_entries[iter].ExpansionsMask & EQ::expansions::bitHoT)
|
||||
if (constants_static_lookup_entries[iter].ExpansionsMask & EQEmu::expansions::bitHoT)
|
||||
inventory_dynamic_nongm_lookup_entries[iter]->GeneralBitmask = RoF::invslot::GENERAL_BITMASK;
|
||||
}
|
||||
|
||||
@@ -841,7 +841,7 @@ void EQ::inventory::InitializeDynamicLookups() {
|
||||
}
|
||||
|
||||
// Dynamic GM Lookups (demotive methodology) (client-linked mob versions only)
|
||||
for (uint32 iter = static_cast<uint32>(EQ::versions::MobVersion::Unknown); iter <= static_cast<uint32>(EQ::versions::LastPCMobVersion); ++iter) {
|
||||
for (uint32 iter = static_cast<uint32>(EQEmu::versions::MobVersion::Unknown); iter <= static_cast<uint32>(EQEmu::versions::LastPCMobVersion); ++iter) {
|
||||
// no need to dynamic this condition since it is the lowest compatibility standard
|
||||
if ((dynamic_check_mask & ~constants_static_lookup_entries[iter].ExpansionsMask) == dynamic_check_mask)
|
||||
continue;
|
||||
@@ -869,13 +869,13 @@ void EQ::inventory::InitializeDynamicLookups() {
|
||||
inventory_dynamic_gm_lookup_entries[iter]->PossessionsBitmask = 0; // we'll fix later
|
||||
inventory_dynamic_gm_lookup_entries[iter]->CorpseBitmask = 0; // we'll fix later
|
||||
|
||||
if (~RuleI(World, ExpansionSettings) & EQ::expansions::bitPoR) {
|
||||
if (~RuleI(World, ExpansionSettings) & EQEmu::expansions::bitPoR) {
|
||||
// update bank size
|
||||
if (constants_static_lookup_entries[iter].ExpansionsMask & EQ::expansions::bitPoR)
|
||||
if (constants_static_lookup_entries[iter].ExpansionsMask & EQEmu::expansions::bitPoR)
|
||||
inventory_dynamic_gm_lookup_entries[iter]->InventoryTypeSize.Bank = Titanium::invtype::BANK_SIZE;
|
||||
}
|
||||
|
||||
if (~RuleI(World, ExpansionSettings) & EQ::expansions::bitTBS) {
|
||||
if (~RuleI(World, ExpansionSettings) & EQEmu::expansions::bitTBS) {
|
||||
// update power source
|
||||
switch (iter) {
|
||||
case versions::bitUF:
|
||||
@@ -890,7 +890,7 @@ void EQ::inventory::InitializeDynamicLookups() {
|
||||
}
|
||||
}
|
||||
|
||||
if (~RuleI(World, ExpansionSettings) & EQ::expansions::bitHoT) {
|
||||
if (~RuleI(World, ExpansionSettings) & EQEmu::expansions::bitHoT) {
|
||||
// update general size
|
||||
switch (iter) {
|
||||
case versions::bitUF:
|
||||
@@ -927,7 +927,7 @@ void EQ::inventory::InitializeDynamicLookups() {
|
||||
// only client versions that require a change from their static definitions have been given a dynamic (gm) lookup entry
|
||||
}
|
||||
|
||||
const EQ::inventory::LookupEntry* EQ::inventory::DynamicLookup(versions::MobVersion mob_version, bool gm_flag)
|
||||
const EQEmu::inventory::LookupEntry* EQEmu::inventory::DynamicLookup(versions::MobVersion mob_version, bool gm_flag)
|
||||
{
|
||||
if (gm_flag)
|
||||
return DynamicGMLookup(mob_version);
|
||||
@@ -935,7 +935,7 @@ const EQ::inventory::LookupEntry* EQ::inventory::DynamicLookup(versions::MobVers
|
||||
return DynamicNonGMLookup(mob_version);
|
||||
}
|
||||
|
||||
const EQ::inventory::LookupEntry* EQ::inventory::DynamicNonGMLookup(versions::MobVersion mob_version)
|
||||
const EQEmu::inventory::LookupEntry* EQEmu::inventory::DynamicNonGMLookup(versions::MobVersion mob_version)
|
||||
{
|
||||
mob_version = versions::ValidateMobVersion(mob_version);
|
||||
if (inventory_dynamic_nongm_lookup_entries[static_cast<int>(mob_version)])
|
||||
@@ -944,7 +944,7 @@ const EQ::inventory::LookupEntry* EQ::inventory::DynamicNonGMLookup(versions::Mo
|
||||
return &inventory_static_lookup_entries[static_cast<int>(mob_version)];
|
||||
}
|
||||
|
||||
const EQ::inventory::LookupEntry* EQ::inventory::DynamicGMLookup(versions::MobVersion mob_version)
|
||||
const EQEmu::inventory::LookupEntry* EQEmu::inventory::DynamicGMLookup(versions::MobVersion mob_version)
|
||||
{
|
||||
mob_version = versions::ValidateMobVersion(mob_version);
|
||||
if (inventory_dynamic_gm_lookup_entries[static_cast<int>(mob_version)])
|
||||
@@ -953,107 +953,107 @@ const EQ::inventory::LookupEntry* EQ::inventory::DynamicGMLookup(versions::MobVe
|
||||
return &inventory_static_lookup_entries[static_cast<int>(mob_version)];
|
||||
}
|
||||
|
||||
const EQ::inventory::LookupEntry* EQ::inventory::StaticLookup(versions::MobVersion mob_version)
|
||||
const EQEmu::inventory::LookupEntry* EQEmu::inventory::StaticLookup(versions::MobVersion mob_version)
|
||||
{
|
||||
return &inventory_static_lookup_entries[static_cast<int>(versions::ValidateMobVersion(mob_version))];
|
||||
}
|
||||
|
||||
static std::unique_ptr<EQ::behavior::LookupEntry> behavior_dynamic_nongm_lookup_entries[EQ::versions::MobVersionCount];
|
||||
static std::unique_ptr<EQ::behavior::LookupEntry> behavior_dynamic_gm_lookup_entries[EQ::versions::MobVersionCount];
|
||||
static const EQ::behavior::LookupEntry behavior_static_lookup_entries[EQ::versions::MobVersionCount] =
|
||||
static std::unique_ptr<EQEmu::behavior::LookupEntry> behavior_dynamic_nongm_lookup_entries[EQEmu::versions::MobVersionCount];
|
||||
static std::unique_ptr<EQEmu::behavior::LookupEntry> behavior_dynamic_gm_lookup_entries[EQEmu::versions::MobVersionCount];
|
||||
static const EQEmu::behavior::LookupEntry behavior_static_lookup_entries[EQEmu::versions::MobVersionCount] =
|
||||
{
|
||||
/*[MobVersion::Unknown] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
true
|
||||
),
|
||||
/*[MobVersion::Client62] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
true
|
||||
),
|
||||
/*[MobVersion::Titanium] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
Titanium::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::SoF] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
SoF::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::SoD] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
SoD::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::UF] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
UF::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::RoF] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
RoF::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::RoF2] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
RoF2::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::NPC] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQ::behavior::CoinHasWeight
|
||||
EQEmu::behavior::LookupEntry(
|
||||
EQEmu::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::NPCMerchant] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQ::behavior::CoinHasWeight
|
||||
EQEmu::behavior::LookupEntry(
|
||||
EQEmu::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::Merc] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQ::behavior::CoinHasWeight
|
||||
EQEmu::behavior::LookupEntry(
|
||||
EQEmu::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::Bot] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQ::behavior::CoinHasWeight
|
||||
EQEmu::behavior::LookupEntry(
|
||||
EQEmu::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::ClientPet] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQ::behavior::CoinHasWeight
|
||||
EQEmu::behavior::LookupEntry(
|
||||
EQEmu::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::NPCPet] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQ::behavior::CoinHasWeight
|
||||
EQEmu::behavior::LookupEntry(
|
||||
EQEmu::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::MercPet] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQ::behavior::CoinHasWeight
|
||||
EQEmu::behavior::LookupEntry(
|
||||
EQEmu::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::BotPet] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQ::behavior::CoinHasWeight
|
||||
EQEmu::behavior::LookupEntry(
|
||||
EQEmu::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::OfflineTitanium] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
Titanium::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::OfflineSoF] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
SoF::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::OfflineSoD] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
SoD::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::OfflineUF] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
UF::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::OfflineRoF] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
RoF::behavior::CoinHasWeight
|
||||
),
|
||||
/*[MobVersion::OfflineRoF2] =*/
|
||||
EQ::behavior::LookupEntry(
|
||||
EQEmu::behavior::LookupEntry(
|
||||
RoF2::behavior::CoinHasWeight
|
||||
)
|
||||
};
|
||||
|
||||
static bool behavior_dictionary_init = false;
|
||||
void EQ::behavior::InitializeDynamicLookups() {
|
||||
void EQEmu::behavior::InitializeDynamicLookups() {
|
||||
if (behavior_dictionary_init == true)
|
||||
return;
|
||||
behavior_dictionary_init = true;
|
||||
@@ -1064,7 +1064,7 @@ void EQ::behavior::InitializeDynamicLookups() {
|
||||
// use static references for now
|
||||
}
|
||||
|
||||
const EQ::behavior::LookupEntry* EQ::behavior::DynamicLookup(versions::MobVersion mob_version, bool gm_flag)
|
||||
const EQEmu::behavior::LookupEntry* EQEmu::behavior::DynamicLookup(versions::MobVersion mob_version, bool gm_flag)
|
||||
{
|
||||
if (gm_flag)
|
||||
return DynamicGMLookup(mob_version);
|
||||
@@ -1072,7 +1072,7 @@ const EQ::behavior::LookupEntry* EQ::behavior::DynamicLookup(versions::MobVersio
|
||||
return DynamicNonGMLookup(mob_version);
|
||||
}
|
||||
|
||||
const EQ::behavior::LookupEntry* EQ::behavior::DynamicNonGMLookup(versions::MobVersion mob_version)
|
||||
const EQEmu::behavior::LookupEntry* EQEmu::behavior::DynamicNonGMLookup(versions::MobVersion mob_version)
|
||||
{
|
||||
mob_version = versions::ValidateMobVersion(mob_version);
|
||||
if (behavior_dynamic_nongm_lookup_entries[static_cast<int>(mob_version)])
|
||||
@@ -1081,7 +1081,7 @@ const EQ::behavior::LookupEntry* EQ::behavior::DynamicNonGMLookup(versions::MobV
|
||||
return &behavior_static_lookup_entries[static_cast<int>(mob_version)];
|
||||
}
|
||||
|
||||
const EQ::behavior::LookupEntry* EQ::behavior::DynamicGMLookup(versions::MobVersion mob_version)
|
||||
const EQEmu::behavior::LookupEntry* EQEmu::behavior::DynamicGMLookup(versions::MobVersion mob_version)
|
||||
{
|
||||
mob_version = versions::ValidateMobVersion(mob_version);
|
||||
if (behavior_dynamic_gm_lookup_entries[static_cast<int>(mob_version)])
|
||||
@@ -1090,17 +1090,17 @@ const EQ::behavior::LookupEntry* EQ::behavior::DynamicGMLookup(versions::MobVers
|
||||
return &behavior_static_lookup_entries[static_cast<int>(mob_version)];
|
||||
}
|
||||
|
||||
const EQ::behavior::LookupEntry* EQ::behavior::StaticLookup(versions::MobVersion mob_version)
|
||||
const EQEmu::behavior::LookupEntry* EQEmu::behavior::StaticLookup(versions::MobVersion mob_version)
|
||||
{
|
||||
return &behavior_static_lookup_entries[static_cast<int>(versions::ValidateMobVersion(mob_version))];
|
||||
}
|
||||
|
||||
static std::unique_ptr<EQ::spells::LookupEntry> spells_dynamic_nongm_lookup_entries[EQ::versions::ClientVersionCount];
|
||||
static std::unique_ptr<EQ::spells::LookupEntry> spells_dynamic_gm_lookup_entries[EQ::versions::ClientVersionCount];
|
||||
static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::ClientVersionCount] =
|
||||
static std::unique_ptr<EQEmu::spells::LookupEntry> spells_dynamic_nongm_lookup_entries[EQEmu::versions::ClientVersionCount];
|
||||
static std::unique_ptr<EQEmu::spells::LookupEntry> spells_dynamic_gm_lookup_entries[EQEmu::versions::ClientVersionCount];
|
||||
static const EQEmu::spells::LookupEntry spells_static_lookup_entries[EQEmu::versions::ClientVersionCount] =
|
||||
{
|
||||
/*[ClientVersion::Unknown] =*/
|
||||
EQ::spells::LookupEntry(
|
||||
EQEmu::spells::LookupEntry(
|
||||
ClientUnknown::INULL,
|
||||
ClientUnknown::INULL,
|
||||
ClientUnknown::INULL,
|
||||
@@ -1113,7 +1113,7 @@ static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::
|
||||
ClientUnknown::INULL
|
||||
),
|
||||
/*[ClientVersion::Client62] =*/
|
||||
EQ::spells::LookupEntry(
|
||||
EQEmu::spells::LookupEntry(
|
||||
Client62::INULL,
|
||||
Client62::INULL,
|
||||
Client62::INULL,
|
||||
@@ -1126,7 +1126,7 @@ static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::
|
||||
Client62::INULL
|
||||
),
|
||||
/*[ClientVersion::Titanium] =*/
|
||||
EQ::spells::LookupEntry(
|
||||
EQEmu::spells::LookupEntry(
|
||||
Titanium::spells::SPELL_ID_MAX,
|
||||
Titanium::spells::SPELLBOOK_SIZE,
|
||||
Titanium::spells::SPELL_GEM_COUNT,
|
||||
@@ -1139,7 +1139,7 @@ static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::
|
||||
Titanium::spells::MERC_BUFFS
|
||||
),
|
||||
/*[ClientVersion::SoF] =*/
|
||||
EQ::spells::LookupEntry(
|
||||
EQEmu::spells::LookupEntry(
|
||||
SoF::spells::SPELL_ID_MAX,
|
||||
SoF::spells::SPELLBOOK_SIZE,
|
||||
SoF::spells::SPELL_GEM_COUNT,
|
||||
@@ -1152,7 +1152,7 @@ static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::
|
||||
SoF::spells::MERC_BUFFS
|
||||
),
|
||||
/*[ClientVersion::SoD] =*/
|
||||
EQ::spells::LookupEntry(
|
||||
EQEmu::spells::LookupEntry(
|
||||
SoD::spells::SPELL_ID_MAX,
|
||||
SoD::spells::SPELLBOOK_SIZE,
|
||||
SoD::spells::SPELL_GEM_COUNT,
|
||||
@@ -1165,7 +1165,7 @@ static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::
|
||||
SoD::spells::MERC_BUFFS
|
||||
),
|
||||
/*[ClientVersion::UF] =*/
|
||||
EQ::spells::LookupEntry(
|
||||
EQEmu::spells::LookupEntry(
|
||||
UF::spells::SPELL_ID_MAX,
|
||||
UF::spells::SPELLBOOK_SIZE,
|
||||
UF::spells::SPELL_GEM_COUNT,
|
||||
@@ -1178,7 +1178,7 @@ static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::
|
||||
UF::spells::MERC_BUFFS
|
||||
),
|
||||
/*[ClientVersion::RoF] =*/
|
||||
EQ::spells::LookupEntry(
|
||||
EQEmu::spells::LookupEntry(
|
||||
RoF::spells::SPELL_ID_MAX,
|
||||
RoF::spells::SPELLBOOK_SIZE,
|
||||
UF::spells::SPELL_GEM_COUNT, // client translators are setup to allow the max value a client supports..however, the top 4 indices are not valid in this case
|
||||
@@ -1191,7 +1191,7 @@ static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::
|
||||
RoF::spells::MERC_BUFFS
|
||||
),
|
||||
/*[ClientVersion::RoF2] =*/
|
||||
EQ::spells::LookupEntry(
|
||||
EQEmu::spells::LookupEntry(
|
||||
RoF2::spells::SPELL_ID_MAX,
|
||||
RoF2::spells::SPELLBOOK_SIZE,
|
||||
UF::spells::SPELL_GEM_COUNT, // client translators are setup to allow the max value a client supports..however, the top 4 indices are not valid in this case
|
||||
@@ -1206,7 +1206,7 @@ static const EQ::spells::LookupEntry spells_static_lookup_entries[EQ::versions::
|
||||
};
|
||||
|
||||
static bool spells_dictionary_init = false;
|
||||
void EQ::spells::InitializeDynamicLookups() {
|
||||
void EQEmu::spells::InitializeDynamicLookups() {
|
||||
if (spells_dictionary_init == true)
|
||||
return;
|
||||
spells_dictionary_init = true;
|
||||
@@ -1217,7 +1217,7 @@ void EQ::spells::InitializeDynamicLookups() {
|
||||
// use static references for now
|
||||
}
|
||||
|
||||
const EQ::spells::LookupEntry* EQ::spells::DynamicLookup(versions::ClientVersion client_version, bool gm_flag)
|
||||
const EQEmu::spells::LookupEntry* EQEmu::spells::DynamicLookup(versions::ClientVersion client_version, bool gm_flag)
|
||||
{
|
||||
if (gm_flag)
|
||||
return DynamicGMLookup(client_version);
|
||||
@@ -1225,7 +1225,7 @@ const EQ::spells::LookupEntry* EQ::spells::DynamicLookup(versions::ClientVersion
|
||||
return DynamicNonGMLookup(client_version);
|
||||
}
|
||||
|
||||
const EQ::spells::LookupEntry* EQ::spells::DynamicNonGMLookup(versions::ClientVersion client_version)
|
||||
const EQEmu::spells::LookupEntry* EQEmu::spells::DynamicNonGMLookup(versions::ClientVersion client_version)
|
||||
{
|
||||
client_version = versions::ValidateClientVersion(client_version);
|
||||
if (spells_dynamic_nongm_lookup_entries[static_cast<int>(client_version)])
|
||||
@@ -1234,7 +1234,7 @@ const EQ::spells::LookupEntry* EQ::spells::DynamicNonGMLookup(versions::ClientVe
|
||||
return &spells_static_lookup_entries[static_cast<int>(client_version)];
|
||||
}
|
||||
|
||||
const EQ::spells::LookupEntry* EQ::spells::DynamicGMLookup(versions::ClientVersion client_version)
|
||||
const EQEmu::spells::LookupEntry* EQEmu::spells::DynamicGMLookup(versions::ClientVersion client_version)
|
||||
{
|
||||
client_version = versions::ValidateClientVersion(client_version);
|
||||
if (spells_dynamic_gm_lookup_entries[static_cast<int>(client_version)])
|
||||
@@ -1243,7 +1243,7 @@ const EQ::spells::LookupEntry* EQ::spells::DynamicGMLookup(versions::ClientVersi
|
||||
return &spells_static_lookup_entries[static_cast<int>(client_version)];
|
||||
}
|
||||
|
||||
const EQ::spells::LookupEntry* EQ::spells::StaticLookup(versions::ClientVersion client_version)
|
||||
const EQEmu::spells::LookupEntry* EQEmu::spells::StaticLookup(versions::ClientVersion client_version)
|
||||
{
|
||||
return &spells_static_lookup_entries[static_cast<int>(versions::ValidateClientVersion(client_version))];
|
||||
}
|
||||
|
||||
+10
-10
@@ -31,13 +31,13 @@
|
||||
#include "../common/patches/rof2_limits.h"
|
||||
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
void InitializeDynamicLookups();
|
||||
|
||||
namespace constants {
|
||||
struct LookupEntry {
|
||||
EQ::expansions::Expansion Expansion;
|
||||
EQEmu::expansions::Expansion Expansion;
|
||||
uint32 ExpansionBit;
|
||||
uint32 ExpansionsMask;
|
||||
int16 CharacterCreationLimit;
|
||||
@@ -45,7 +45,7 @@ namespace EQ
|
||||
|
||||
LookupEntry(const LookupEntry *lookup_entry) { }
|
||||
LookupEntry(
|
||||
EQ::expansions::Expansion Expansion,
|
||||
EQEmu::expansions::Expansion Expansion,
|
||||
uint32 ExpansionBit,
|
||||
uint32 ExpansionsMask,
|
||||
int16 CharacterCreationLimit,
|
||||
@@ -111,7 +111,7 @@ namespace EQ
|
||||
|
||||
union {
|
||||
InventoryTypeSize_Struct InventoryTypeSize;
|
||||
int16 InventoryTypeSizeArray[25]; // should reflect EQ::invtype::TYPE_COUNT referenced in emu_constants.h
|
||||
int16 InventoryTypeSizeArray[25]; // should reflect EQEmu::invtype::TYPE_COUNT referenced in emu_constants.h
|
||||
};
|
||||
|
||||
uint64 EquipmentBitmask;
|
||||
@@ -244,9 +244,9 @@ namespace ClientUnknown
|
||||
const int16 INULL = 0;
|
||||
|
||||
namespace constants {
|
||||
const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::EverQuest;
|
||||
const uint32 EXPANSION_BIT = EQ::expansions::bitEverQuest;
|
||||
const uint32 EXPANSIONS_MASK = EQ::expansions::maskEverQuest;
|
||||
const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::EverQuest;
|
||||
const uint32 EXPANSION_BIT = EQEmu::expansions::bitEverQuest;
|
||||
const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskEverQuest;
|
||||
|
||||
} // namespace constants
|
||||
|
||||
@@ -258,9 +258,9 @@ namespace Client62
|
||||
const int16 INULL = 0;
|
||||
|
||||
namespace constants {
|
||||
const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::EverQuest;
|
||||
const uint32 EXPANSION_BIT = EQ::expansions::bitEverQuest;
|
||||
const uint32 EXPANSIONS_MASK = EQ::expansions::maskEverQuest;
|
||||
const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::EverQuest;
|
||||
const uint32 EXPANSION_BIT = EQEmu::expansions::bitEverQuest;
|
||||
const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskEverQuest;
|
||||
|
||||
} // namespace constants
|
||||
|
||||
|
||||
+77
-183
@@ -35,8 +35,6 @@ static const uint32 MAX_MERC = 100;
|
||||
static const uint32 MAX_MERC_GRADES = 10;
|
||||
static const uint32 MAX_MERC_STANCES = 10;
|
||||
static const uint32 BLOCKED_BUFF_COUNT = 20;
|
||||
static const uint32 QUESTREWARD_COUNT = 8;
|
||||
static const uint32 ADVANCED_LORE_LENGTH = 8192;
|
||||
|
||||
|
||||
/*
|
||||
@@ -129,7 +127,7 @@ struct LDoNTrapTemplate
|
||||
|
||||
// All clients translate the character select information to some degree
|
||||
|
||||
struct CharSelectEquip : EQ::textures::Texture_Struct, EQ::textures::Tint_Struct {};
|
||||
struct CharSelectEquip : EQEmu::textures::Texture_Struct, EQEmu::textures::Tint_Struct {};
|
||||
|
||||
// RoF2-based hybrid struct
|
||||
struct CharacterSelectEntry_Struct
|
||||
@@ -144,7 +142,7 @@ struct CharacterSelectEntry_Struct
|
||||
uint16 Instance;
|
||||
uint8 Gender;
|
||||
uint8 Face;
|
||||
CharSelectEquip Equip[EQ::textures::materialCount];
|
||||
CharSelectEquip Equip[EQEmu::textures::materialCount];
|
||||
uint8 Unknown15; // Seen FF
|
||||
uint8 Unknown19; // Seen FF
|
||||
uint32 DrakkinTattoo;
|
||||
@@ -253,7 +251,7 @@ struct Spawn_Struct {
|
||||
/*0189*/ uint32 petOwnerId; // If this is a pet, the spawn id of owner
|
||||
/*0193*/ uint8 guildrank; // 0=normal, 1=officer, 2=leader
|
||||
/*0194*/ uint8 unknown0194[3];
|
||||
/*0197*/ EQ::TextureProfile equipment;
|
||||
/*0197*/ EQEmu::TextureProfile equipment;
|
||||
/*0233*/ float runspeed; // Speed when running
|
||||
/*0036*/ uint8 afk; // 0=no, 1=afk
|
||||
/*0238*/ uint32 guildID; // Current guild
|
||||
@@ -284,7 +282,7 @@ union
|
||||
/*0340*/ uint32 spawnId; // Spawn Id
|
||||
/*0344*/ float bounding_radius; // used in melee, overrides calc
|
||||
/*0347*/ uint8 IsMercenary;
|
||||
/*0348*/ EQ::TintProfile equipment_tint;
|
||||
/*0348*/ EQEmu::TintProfile equipment_tint;
|
||||
/*0384*/ uint8 lfg; // 0=off, 1=lfg on
|
||||
/*0385*/
|
||||
|
||||
@@ -375,16 +373,13 @@ struct NewZone_Struct {
|
||||
/*0686*/ uint16 zone_instance;
|
||||
/*0688*/ uint32 unknown688;
|
||||
/*0692*/ uint8 unknown692[8];
|
||||
// Titanium doesn't have a translator, but we can still safely add stuff under here without issues since client memcpy's only what it knows
|
||||
// Just wastes some bandwidth sending to tit clients /shrug
|
||||
/*0700*/ float fog_density;
|
||||
/*0704*/ uint32 SuspendBuffs;
|
||||
/*0708*/ uint32 FastRegenHP;
|
||||
/*0712*/ uint32 FastRegenMana;
|
||||
/*0716*/ uint32 FastRegenEndurance;
|
||||
/*0720*/ uint32 NPCAggroMaxDist;
|
||||
/*0724*/ uint32 underworld_teleport_index; // > 0 teleports w/ zone point index, invalid succors, if this value is 0, it prevents you from running off edges that would end up underworld
|
||||
/*0728*/
|
||||
/*0724*/
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -739,7 +734,7 @@ struct BandolierItem_Struct
|
||||
struct Bandolier_Struct
|
||||
{
|
||||
char Name[32];
|
||||
BandolierItem_Struct Items[EQ::profile::BANDOLIER_ITEM_COUNT];
|
||||
BandolierItem_Struct Items[EQEmu::profile::BANDOLIER_ITEM_COUNT];
|
||||
};
|
||||
|
||||
//len = 72
|
||||
@@ -753,7 +748,7 @@ struct PotionBeltItem_Struct
|
||||
//len = 288
|
||||
struct PotionBelt_Struct
|
||||
{
|
||||
PotionBeltItem_Struct Items[EQ::profile::POTION_BELT_SIZE];
|
||||
PotionBeltItem_Struct Items[EQEmu::profile::POTION_BELT_SIZE];
|
||||
};
|
||||
|
||||
struct MovePotionToBelt_Struct
|
||||
@@ -844,7 +839,7 @@ struct SuspendedMinion_Struct
|
||||
/*002*/ uint32 HP;
|
||||
/*006*/ uint32 Mana;
|
||||
/*010*/ SpellBuff_Struct Buffs[BUFF_COUNT];
|
||||
/*510*/ EQ::TextureMaterialProfile Items;
|
||||
/*510*/ EQEmu::TextureMaterialProfile Items;
|
||||
/*546*/ char Name[64];
|
||||
/*610*/
|
||||
};
|
||||
@@ -936,7 +931,7 @@ struct PlayerProfile_Struct
|
||||
/*0245*/ uint8 guildbanker;
|
||||
/*0246*/ uint8 unknown0246[6]; //
|
||||
/*0252*/ uint32 intoxication;
|
||||
/*0256*/ uint32 spellSlotRefresh[EQ::spells::SPELL_GEM_COUNT]; //in ms
|
||||
/*0256*/ uint32 spellSlotRefresh[EQEmu::spells::SPELL_GEM_COUNT]; //in ms
|
||||
/*0292*/ uint32 abilitySlotRefresh;
|
||||
/*0296*/ uint8 haircolor; // Player hair color
|
||||
/*0297*/ uint8 beardcolor; // Player beard color
|
||||
@@ -949,9 +944,9 @@ struct PlayerProfile_Struct
|
||||
/*0304*/ uint8 ability_time_minutes;
|
||||
/*0305*/ uint8 ability_time_hours; //place holder
|
||||
/*0306*/ uint8 unknown0306[6]; // @bp Spacer/Flag?
|
||||
/*0312*/ EQ::TextureMaterialProfile item_material; // Item texture/material of worn/held items
|
||||
/*0312*/ EQEmu::TextureMaterialProfile item_material; // Item texture/material of worn/held items
|
||||
/*0348*/ uint8 unknown0348[44];
|
||||
/*0392*/ EQ::TintProfile item_tint;
|
||||
/*0392*/ EQEmu::TintProfile item_tint;
|
||||
/*0428*/ AA_Array aa_array[MAX_PP_AA_ARRAY];
|
||||
/*2348*/ float unknown2384; //seen ~128, ~47
|
||||
/*2352*/ char servername[32]; // length probably not right
|
||||
@@ -975,9 +970,9 @@ struct PlayerProfile_Struct
|
||||
/*2505*/ uint8 unknown2541[47]; // ?
|
||||
/*2552*/ uint8 languages[MAX_PP_LANGUAGE];
|
||||
/*2580*/ uint8 unknown2616[4];
|
||||
/*2584*/ uint32 spell_book[EQ::spells::SPELLBOOK_SIZE];
|
||||
/*2584*/ uint32 spell_book[EQEmu::spells::SPELLBOOK_SIZE];
|
||||
/*4504*/ uint8 unknown4540[128]; // Was [428] all 0xff
|
||||
/*4632*/ uint32 mem_spells[EQ::spells::SPELL_GEM_COUNT];
|
||||
/*4632*/ uint32 mem_spells[EQEmu::spells::SPELL_GEM_COUNT];
|
||||
/*4668*/ uint8 unknown4704[32]; //
|
||||
/*4700*/ float y; // Player y position
|
||||
/*4704*/ float x; // Player x position
|
||||
@@ -1053,7 +1048,7 @@ struct PlayerProfile_Struct
|
||||
/*7212*/ uint32 tribute_points;
|
||||
/*7216*/ uint32 unknown7252;
|
||||
/*7220*/ uint32 tribute_active; //1=active
|
||||
/*7224*/ Tribute_Struct tributes[EQ::invtype::TRIBUTE_SIZE];
|
||||
/*7224*/ Tribute_Struct tributes[EQEmu::invtype::TRIBUTE_SIZE];
|
||||
/*7264*/ Disciplines_Struct disciplines;
|
||||
/*7664*/ uint32 recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
|
||||
/*7744*/ char unknown7780[160];
|
||||
@@ -1080,7 +1075,7 @@ struct PlayerProfile_Struct
|
||||
/*12800*/ uint32 expAA;
|
||||
/*12804*/ uint32 aapoints; //avaliable, unspent
|
||||
/*12808*/ uint8 unknown12844[36];
|
||||
/*12844*/ Bandolier_Struct bandoliers[EQ::profile::BANDOLIERS_SIZE];
|
||||
/*12844*/ Bandolier_Struct bandoliers[EQEmu::profile::BANDOLIERS_SIZE];
|
||||
/*14124*/ uint8 unknown14160[4506];
|
||||
/*18630*/ SuspendedMinion_Struct SuspendedMinion; // No longer in use
|
||||
/*19240*/ uint32 timeentitledonaccount;
|
||||
@@ -1098,16 +1093,16 @@ struct PlayerProfile_Struct
|
||||
/*19568*/
|
||||
|
||||
// All player profile packets are translated and this overhead is ignored in out-bound packets
|
||||
PlayerProfile_Struct() : m_player_profile_version(EQ::versions::MobVersion::Unknown) { }
|
||||
PlayerProfile_Struct() : m_player_profile_version(EQEmu::versions::MobVersion::Unknown) { }
|
||||
|
||||
EQ::versions::MobVersion PlayerProfileVersion() { return m_player_profile_version; }
|
||||
void SetPlayerProfileVersion(EQ::versions::MobVersion mob_version) { m_player_profile_version = EQ::versions::ValidateMobVersion(mob_version); }
|
||||
void SetPlayerProfileVersion(EQ::versions::ClientVersion client_version) { SetPlayerProfileVersion(EQ::versions::ConvertClientVersionToMobVersion(client_version)); }
|
||||
EQEmu::versions::MobVersion PlayerProfileVersion() { return m_player_profile_version; }
|
||||
void SetPlayerProfileVersion(EQEmu::versions::MobVersion mob_version) { m_player_profile_version = EQEmu::versions::ValidateMobVersion(mob_version); }
|
||||
void SetPlayerProfileVersion(EQEmu::versions::ClientVersion client_version) { SetPlayerProfileVersion(EQEmu::versions::ConvertClientVersionToMobVersion(client_version)); }
|
||||
|
||||
private:
|
||||
// No need for gm flag since pp already has one
|
||||
// No need for lookup pointer since this struct is not tied to any one system
|
||||
EQ::versions::MobVersion m_player_profile_version;
|
||||
EQEmu::versions::MobVersion m_player_profile_version;
|
||||
};
|
||||
|
||||
|
||||
@@ -1218,7 +1213,7 @@ struct WearChange_Struct {
|
||||
/*010*/ uint32 elite_material; // 1 for Drakkin Elite Material
|
||||
/*014*/ uint32 hero_forge_model; // New to VoA
|
||||
/*018*/ uint32 unknown18; // New to RoF
|
||||
/*022*/ EQ::textures::Tint_Struct color;
|
||||
/*022*/ EQEmu::textures::Tint_Struct color;
|
||||
/*026*/ uint8 wear_slot_id;
|
||||
/*027*/
|
||||
};
|
||||
@@ -2126,7 +2121,7 @@ struct AdventureLeaderboard_Struct
|
||||
/*struct Item_Shop_Struct {
|
||||
uint16 merchantid;
|
||||
uint8 itemtype;
|
||||
EQ::ItemData item;
|
||||
EQEmu::ItemData item;
|
||||
uint8 iss_unknown001[6];
|
||||
};*/
|
||||
|
||||
@@ -2152,7 +2147,7 @@ struct Illusion_Struct { //size: 256 - SoF
|
||||
/*092*/ uint32 drakkin_heritage; //
|
||||
/*096*/ uint32 drakkin_tattoo; //
|
||||
/*100*/ uint32 drakkin_details; //
|
||||
/*104*/ EQ::TintProfile armor_tint; //
|
||||
/*104*/ EQEmu::TintProfile armor_tint; //
|
||||
/*140*/ uint8 eyecolor1; // Field Not Identified in any Illusion Struct
|
||||
/*141*/ uint8 eyecolor2; // Field Not Identified in any Illusion Struct
|
||||
/*142*/ uint8 unknown138[114]; //
|
||||
@@ -2185,7 +2180,14 @@ struct QuestReward_Struct
|
||||
/*024*/ uint32 silver; // Gives silver to the client
|
||||
/*028*/ uint32 gold; // Gives gold to the client
|
||||
/*032*/ uint32 platinum; // Gives platinum to the client
|
||||
/*036*/ int32 item_id[QUESTREWARD_COUNT]; // -1 for nothing
|
||||
/*036*/ uint32 item_id;
|
||||
/*040*/ uint32 unknown040;
|
||||
/*044*/ uint32 unknown044;
|
||||
/*048*/ uint32 unknown048;
|
||||
/*052*/ uint32 unknown052;
|
||||
/*056*/ uint32 unknown056;
|
||||
/*060*/ uint32 unknown060;
|
||||
/*064*/ uint32 unknown064;
|
||||
/*068*/
|
||||
};
|
||||
|
||||
@@ -2970,12 +2972,6 @@ struct ItemViewRequest_Struct {
|
||||
/*046*/ char unknown046[2];
|
||||
};
|
||||
|
||||
struct ItemAdvancedLoreText_Struct {
|
||||
int32 item_id;
|
||||
char item_name[64];
|
||||
char advanced_lore[ADVANCED_LORE_LENGTH];
|
||||
};
|
||||
|
||||
struct LDONItemViewRequest_Struct {
|
||||
uint32 item_id;
|
||||
uint8 unknown004[4];
|
||||
@@ -3492,8 +3488,8 @@ struct SelectTributeReply_Struct {
|
||||
|
||||
struct TributeInfo_Struct {
|
||||
uint32 active; //0 == inactive, 1 == active
|
||||
uint32 tributes[EQ::invtype::TRIBUTE_SIZE]; //-1 == NONE
|
||||
uint32 tiers[EQ::invtype::TRIBUTE_SIZE]; //all 00's
|
||||
uint32 tributes[EQEmu::invtype::TRIBUTE_SIZE]; //-1 == NONE
|
||||
uint32 tiers[EQEmu::invtype::TRIBUTE_SIZE]; //all 00's
|
||||
uint32 tribute_master_id;
|
||||
};
|
||||
|
||||
@@ -4404,7 +4400,7 @@ struct AnnoyingZoneUnknown_Struct {
|
||||
};
|
||||
|
||||
struct LoadSpellSet_Struct {
|
||||
uint32 spell[EQ::spells::SPELL_GEM_COUNT]; // 0xFFFFFFFF if no action, slot number if to unmem starting at 0
|
||||
uint32 spell[EQEmu::spells::SPELL_GEM_COUNT]; // 0xFFFFFFFF if no action, slot number if to unmem starting at 0
|
||||
uint32 unknown; //there seems to be an extra field in this packet...
|
||||
};
|
||||
|
||||
@@ -4835,98 +4831,17 @@ struct BuffIcon_Struct
|
||||
BuffIconEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct ExpeditionInvite_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id; // unique character id
|
||||
/*004*/ uint32 unknown004; // added after titanium
|
||||
/*008*/ char inviter_name[64];
|
||||
/*072*/ char expedition_name[128];
|
||||
/*200*/ uint8 swapping; // 0: adding 1: swapping
|
||||
/*201*/ char swap_name[64]; // if swapping, swap name being removed
|
||||
/*265*/ uint8 padding[3];
|
||||
/*268*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||
/*270*/ uint16 dz_instance_id;
|
||||
};
|
||||
|
||||
struct ExpeditionInviteResponse_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*004*/ uint32 unknown004; // added after titanium
|
||||
/*008*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||
/*010*/ uint16 dz_instance_id;
|
||||
/*012*/ uint8 accepted; // 0: declined 1: accepted
|
||||
/*013*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||
/*014*/ char swap_name[64]; // swap name sent in invite
|
||||
/*078*/ uint8 unknown078; // padding garbage?
|
||||
/*079*/ uint8 unknown079; // padding garbage?
|
||||
};
|
||||
|
||||
struct ExpeditionInfo_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004; // added after titanium
|
||||
/*008*/ uint32 assigned; // padded bool, 0: not in expedition (clear data), 1: in expedition
|
||||
/*012*/ uint32 max_players;
|
||||
/*016*/ char expedition_name[128];
|
||||
/*144*/ char leader_name[64];
|
||||
/*000*/ uint32 max_players;
|
||||
/*004*/ char expedition_name[128];
|
||||
/*132*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionMemberEntry_Struct
|
||||
struct ExpeditionJoinPrompt_Struct
|
||||
{
|
||||
/*000*/ char name[64]; // variable length, null terminated, max 0x40 (64)
|
||||
/*064*/ uint8 expedition_status; // 0: unknown, 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||
};
|
||||
|
||||
struct ExpeditionMemberList_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 member_count;
|
||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||
};
|
||||
|
||||
struct ExpeditionMemberListName_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||
/*012*/ char name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionLockoutTimerEntry_Struct
|
||||
{
|
||||
/*000*/ char expedition_name[128]; // variable length, null terminated, max 0x80 (128)
|
||||
/*000*/ uint32 seconds_remaining;
|
||||
/*000*/ int32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||
/*000*/ char event_name[256]; // variable length, null terminated, max 0x100 (256)
|
||||
};
|
||||
|
||||
struct ExpeditionLockoutTimers_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||
};
|
||||
|
||||
struct ExpeditionSetLeaderName_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCommand_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCommandSwap_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char add_player_name[64]; // swap to (player must confirm)
|
||||
/*072*/ char rem_player_name[64]; // swap from
|
||||
/*000*/ char player_name[64];
|
||||
/*064*/ char expedition_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionExpireWarning
|
||||
@@ -4934,67 +4849,48 @@ struct ExpeditionExpireWarning
|
||||
/*008*/ uint32 minutes_remaining;
|
||||
};
|
||||
|
||||
struct DynamicZoneCompassEntry_Struct
|
||||
struct ExpeditionCompassEntry_Struct
|
||||
{
|
||||
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||
/*002*/ uint16 dz_instance_id;
|
||||
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||
/*008*/ uint32 unknown008;
|
||||
/*012*/ float y;
|
||||
/*016*/ float x;
|
||||
/*020*/ float z;
|
||||
/*000*/ uint32 enabled; //guess
|
||||
/*004*/ float y;
|
||||
/*008*/ float x;
|
||||
/*012*/ float z;
|
||||
};
|
||||
|
||||
struct DynamicZoneCompass_Struct
|
||||
struct ExpeditionCompass_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*000*/ uint32 count;
|
||||
/*004*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||
/*004*/ ExpeditionCompassEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZoneEntry_Struct
|
||||
struct ExpeditionMemberEntry_Struct
|
||||
{
|
||||
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||
/*002*/ uint16 dz_instance_id;
|
||||
/*004*/ uint32 unknown_id1; // seen 28 00 00 00 (40), sent back in reply
|
||||
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||
/*016*/ char description[128]; // variable length, null terminated
|
||||
/*144*/ char leader_name[64]; // variable length, null terminated
|
||||
char name[64];
|
||||
char status;
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZone_Struct
|
||||
struct ExpeditionMemberList_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||
/*000*/ uint32 count;
|
||||
/*004*/ ExpeditionMemberEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZoneReply_Struct
|
||||
struct ExpeditionLockoutEntry_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000; // ff ff ff ff
|
||||
/*004*/ uint32 unknown004; // seen 69 00 00 00
|
||||
/*008*/ uint32 unknown008; // ff ff ff ff
|
||||
/*012*/ uint32 unknown_id1; // from choose zone entry message
|
||||
/*016*/ uint16 dz_zone_id; // dz_id pair
|
||||
/*018*/ uint16 dz_instance_id;
|
||||
/*020*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||
/*024*/ uint32 unknown_id2; // from choose zone entry message
|
||||
/*028*/ uint32 unknown028; // 00 00 00 00
|
||||
/*032*/ uint32 unknown032; // always same as unknown044
|
||||
/*036*/ uint32 unknown036;
|
||||
/*040*/ uint32 unknown040;
|
||||
/*044*/ uint32 unknown044; // always same as unknown032
|
||||
/*048*/ uint32 unknown048; // seen 01 00 00 00 and 02 00 00 00
|
||||
/*000*/ uint32 time_left;
|
||||
/*004*/ char expedition[128];
|
||||
/*132*/ char expedition_event[128];
|
||||
};
|
||||
|
||||
struct KickPlayers_Struct
|
||||
struct ExpeditionLockoutList_Struct
|
||||
{
|
||||
/*000*/ char char_name[64];
|
||||
/*064*/ uint32 unknown064; // always 0
|
||||
/*068*/ uint8 kick_expedition; // true if /kickplayers exp
|
||||
/*069*/ uint8 kick_task; // true if /kickplayers task
|
||||
/*070*/ uint8 padding[2];
|
||||
/*000*/ uint32 count;
|
||||
/*004*/ ExpeditionLockoutEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct ExpeditionLeaderSet_Struct
|
||||
{
|
||||
/*000*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct CorpseDrag_Struct
|
||||
@@ -5444,20 +5340,18 @@ struct MercenaryMerchantResponse_Struct {
|
||||
|
||||
struct ServerLootItem_Struct {
|
||||
uint32 item_id; // uint32 item_id;
|
||||
int16 equip_slot; // int16 equip_slot;
|
||||
uint16 charges; // uint8 charges;
|
||||
uint16 lootslot; // uint16 lootslot;
|
||||
uint32 aug_1; // uint32 aug_1;
|
||||
uint32 aug_2; // uint32 aug_2;
|
||||
uint32 aug_3; // uint32 aug_3;
|
||||
uint32 aug_4; // uint32 aug_4;
|
||||
uint32 aug_5; // uint32 aug_5;
|
||||
uint32 aug_6; // uint32 aug_5;
|
||||
uint8 attuned;
|
||||
uint16 trivial_min_level;
|
||||
uint16 trivial_max_level;
|
||||
uint16 npc_min_level;
|
||||
uint16 npc_max_level;
|
||||
int16 equip_slot; // int16 equip_slot;
|
||||
uint16 charges; // uint8 charges;
|
||||
uint16 lootslot; // uint16 lootslot;
|
||||
uint32 aug_1; // uint32 aug_1;
|
||||
uint32 aug_2; // uint32 aug_2;
|
||||
uint32 aug_3; // uint32 aug_3;
|
||||
uint32 aug_4; // uint32 aug_4;
|
||||
uint32 aug_5; // uint32 aug_5;
|
||||
uint32 aug_6; // uint32 aug_5;
|
||||
uint8 attuned;
|
||||
uint8 min_level;
|
||||
uint8 max_level;
|
||||
};
|
||||
|
||||
//Found in client near a ref to the string:
|
||||
|
||||
@@ -100,7 +100,7 @@ public:
|
||||
virtual MatchState CheckSignature(const Signature *sig) { return MatchFailed; }
|
||||
virtual EQStreamState GetState() = 0;
|
||||
virtual void SetOpcodeManager(OpcodeManager **opm) = 0;
|
||||
virtual const EQ::versions::ClientVersion ClientVersion() const { return EQ::versions::ClientVersion::Unknown; }
|
||||
virtual const EQEmu::versions::ClientVersion ClientVersion() const { return EQEmu::versions::ClientVersion::Unknown; }
|
||||
virtual Stats GetStats() const = 0;
|
||||
virtual void ResetStats() = 0;
|
||||
virtual EQStreamManagerInterface* GetManager() const = 0;
|
||||
|
||||
@@ -22,7 +22,7 @@ std::string EQStreamProxy::Describe() const {
|
||||
return(m_structs->Describe());
|
||||
}
|
||||
|
||||
const EQ::versions::ClientVersion EQStreamProxy::ClientVersion() const
|
||||
const EQEmu::versions::ClientVersion EQStreamProxy::ClientVersion() const
|
||||
{
|
||||
return m_structs->ClientVersion();
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public:
|
||||
virtual void RemoveData();
|
||||
virtual bool CheckState(EQStreamState state);
|
||||
virtual std::string Describe() const;
|
||||
virtual const EQ::versions::ClientVersion ClientVersion() const;
|
||||
virtual const EQEmu::versions::ClientVersion ClientVersion() const;
|
||||
virtual EQStreamState GetState();
|
||||
virtual void SetOpcodeManager(OpcodeManager **opm);
|
||||
virtual Stats GetStats() const;
|
||||
|
||||
@@ -104,15 +104,6 @@ void EQEmuConfig::parse_config()
|
||||
DatabasePort = atoi(_root["server"]["database"].get("port", "3306").asString().c_str());
|
||||
DatabaseDB = _root["server"]["database"].get("db", "eq").asString();
|
||||
|
||||
/**
|
||||
* Content Database
|
||||
*/
|
||||
ContentDbUsername = _root["server"]["content_database"].get("username", "").asString();
|
||||
ContentDbPassword = _root["server"]["content_database"].get("password", "").asString();
|
||||
ContentDbHost = _root["server"]["content_database"].get("host", "").asString();
|
||||
ContentDbPort = atoi(_root["server"]["content_database"].get("port", 0).asString().c_str());
|
||||
ContentDbName = _root["server"]["content_database"].get("db", "").asString();
|
||||
|
||||
/**
|
||||
* QS
|
||||
*/
|
||||
|
||||
@@ -74,13 +74,6 @@ class EQEmuConfig
|
||||
std::string DatabaseDB;
|
||||
uint16 DatabasePort;
|
||||
|
||||
// From <content_database/>
|
||||
std::string ContentDbHost;
|
||||
std::string ContentDbUsername;
|
||||
std::string ContentDbPassword;
|
||||
std::string ContentDbName;
|
||||
uint16 ContentDbPort;
|
||||
|
||||
// From <qsdatabase> // QueryServ
|
||||
std::string QSDatabaseHost;
|
||||
std::string QSDatabaseUsername;
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
#include "eqemu_exception.h"
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
Exception::Exception(const char* name, const std::string& description, const char* file, long line)
|
||||
: line_(line),
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <sstream>
|
||||
#include <exception>
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
//! EQEmu Exception Class
|
||||
/*!
|
||||
@@ -104,7 +104,7 @@ namespace EQ
|
||||
} // EQEmu
|
||||
|
||||
#ifndef EQ_EXCEPT
|
||||
#define EQ_EXCEPT(n, d) throw EQ::Exception(n, d, __FILE__, __LINE__)
|
||||
#define EQ_EXCEPT(n, d) throw EQEmu::Exception(n, d, __FILE__, __LINE__)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -124,9 +124,6 @@ void EQEmuLogSys::LoadLogSettingsDefaults()
|
||||
log_settings[Logs::Loginserver].log_to_console = static_cast<uint8>(Logs::General);
|
||||
log_settings[Logs::HeadlessClient].log_to_console = static_cast<uint8>(Logs::General);
|
||||
log_settings[Logs::NPCScaling].log_to_gmsay = static_cast<uint8>(Logs::General);
|
||||
log_settings[Logs::HotReload].log_to_gmsay = static_cast<uint8>(Logs::General);
|
||||
log_settings[Logs::HotReload].log_to_console = static_cast<uint8>(Logs::General);
|
||||
log_settings[Logs::Loot].log_to_gmsay = static_cast<uint8>(Logs::General);
|
||||
|
||||
/**
|
||||
* RFC 5424
|
||||
|
||||
@@ -113,14 +113,6 @@ namespace Logs {
|
||||
AoeCast,
|
||||
EntityManagement,
|
||||
Flee,
|
||||
Aura,
|
||||
HotReload,
|
||||
Merchants,
|
||||
ZonePoints,
|
||||
Loot,
|
||||
Expeditions,
|
||||
DynamicZones,
|
||||
Group,
|
||||
MaxCategoryID /* Don't Remove this */
|
||||
};
|
||||
|
||||
@@ -193,14 +185,6 @@ namespace Logs {
|
||||
"AOE Cast",
|
||||
"Entity Management",
|
||||
"Flee",
|
||||
"Aura",
|
||||
"HotReload",
|
||||
"Merchants",
|
||||
"ZonePoints",
|
||||
"Loot",
|
||||
"Expeditions",
|
||||
"DynamicZones",
|
||||
"Group",
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -161,16 +161,6 @@
|
||||
OutF(LogSys, Logs::Detail, Logs::Doors, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogGroup(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Group].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::General, Logs::Group, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogGroupDetail(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Group].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::Detail, Logs::Group, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogGuilds(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Guilds].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::General, Logs::Guilds, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
@@ -561,81 +551,6 @@
|
||||
OutF(LogSys, Logs::Detail, Logs::Flee, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogAura(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Aura].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::General, Logs::Aura, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogAuraDetail(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Aura].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::Detail, Logs::Aura, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogHotReload(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::HotReload].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::General, Logs::HotReload, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogHotReloadDetail(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::HotReload].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::Detail, Logs::HotReload, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogMerchants(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Merchants].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::General, Logs::Merchants, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogMerchantsDetail(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Merchants].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::Detail, Logs::Merchants, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogZonePoints(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::ZonePoints].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::General, Logs::ZonePoints, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogZonePointsDetail(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::ZonePoints].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::Detail, Logs::ZonePoints, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogLoot(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Loot].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::General, Logs::Loot, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogLootDetail(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Loot].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::Detail, Logs::Loot, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogExpeditions(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Expeditions].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::General, Logs::Expeditions, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogExpeditionsModerate(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Expeditions].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::Moderate, Logs::Expeditions, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogExpeditionsDetail(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::Expeditions].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::Detail, Logs::Expeditions, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogDynamicZones(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::DynamicZones].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::General, Logs::DynamicZones, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define LogDynamicZonesDetail(message, ...) do {\
|
||||
if (LogSys.log_settings[Logs::DynamicZones].is_category_enabled == 1)\
|
||||
OutF(LogSys, Logs::Detail, Logs::DynamicZones, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
} while (0)
|
||||
|
||||
#define Log(debug_level, log_category, message, ...) do {\
|
||||
if (LogSys.log_settings[log_category].is_category_enabled == 1)\
|
||||
LogSys.Out(debug_level, log_category, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||
@@ -729,12 +644,6 @@
|
||||
#define LogDoorsDetail(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogGroup(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogGroupDetail(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogGuilds(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
@@ -969,45 +878,6 @@
|
||||
#define LogFleeDetail(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogAura(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogAuraDetail(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogHotReload(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogHotReloadDetail(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogMerchants(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogMerchantsDetail(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogZonePoints(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogZonePointsDetail(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogExpeditions(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogExpeditionsModerate(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogExpeditionsDetail(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogDynamicZones(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define LogDynamicZonesDetail(message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
#define Log(debug_level, log_category, message, ...) do {\
|
||||
} while (0)
|
||||
|
||||
@@ -1015,4 +885,4 @@
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#endif //EQEMU_EQEMU_LOGSYS_LOG_ALIASES_H
|
||||
#endif //EQEMU_EQEMU_LOGSYS_LOG_ALIASES_H
|
||||
@@ -25,10 +25,6 @@ namespace EQ
|
||||
uv_run(&m_loop, UV_RUN_DEFAULT);
|
||||
}
|
||||
|
||||
void Shutdown() {
|
||||
uv_stop(&m_loop);
|
||||
}
|
||||
|
||||
uv_loop_t* Handle() { return &m_loop; }
|
||||
|
||||
private:
|
||||
|
||||
+3
-3
@@ -8,7 +8,7 @@ namespace EQ {
|
||||
class Task
|
||||
{
|
||||
public:
|
||||
typedef std::function<void(const EQ::Any&)> ResolveFn;
|
||||
typedef std::function<void(const EQEmu::Any&)> ResolveFn;
|
||||
typedef std::function<void(const std::exception&)> RejectFn;
|
||||
typedef std::function<void()> FinallyFn;
|
||||
typedef std::function<void(ResolveFn, RejectFn)> TaskFn;
|
||||
@@ -19,7 +19,7 @@ namespace EQ {
|
||||
RejectFn on_catch;
|
||||
FinallyFn on_finally;
|
||||
bool has_result;
|
||||
EQ::Any result;
|
||||
EQEmu::Any result;
|
||||
bool has_error;
|
||||
std::exception error;
|
||||
};
|
||||
@@ -63,7 +63,7 @@ namespace EQ {
|
||||
uv_queue_work(EventLoop::Get().Handle(), m_work, [](uv_work_t* req) {
|
||||
TaskBaton *baton = (TaskBaton*)req->data;
|
||||
|
||||
baton->fn([baton](const EQ::Any& result) {
|
||||
baton->fn([baton](const EQEmu::Any& result) {
|
||||
baton->has_error = false;
|
||||
baton->has_result = true;
|
||||
baton->result = result;
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ struct ExtendedProfile_Struct {
|
||||
uint16 old_pet_hp; /* Not Used */
|
||||
uint16 old_pet_mana; /* Not Used */
|
||||
SpellBuff_Struct pet_buffs[BUFF_COUNT]; /* Not Used */
|
||||
EQ::TextureMaterialProfile pet_items; /* Not Used */
|
||||
EQEmu::TextureMaterialProfile pet_items; /* Not Used */
|
||||
char merc_name[64]; /* Used */
|
||||
|
||||
uint32 aa_effects; /* Used */
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
/**
|
||||
* EQEmulator: Everquest Server Emulator
|
||||
* Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#include <fstream>
|
||||
#include "file_util.h"
|
||||
|
||||
#ifdef _WINDOWS
|
||||
#include <direct.h>
|
||||
#include <conio.h>
|
||||
#include <iostream>
|
||||
#include <dos.h>
|
||||
#include <windows.h>
|
||||
#include <process.h>
|
||||
#else
|
||||
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
bool FileUtil::exists(const std::string &name)
|
||||
{
|
||||
std::ifstream f(name.c_str());
|
||||
|
||||
return f.good();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param directory_name
|
||||
*/
|
||||
void FileUtil::mkdir(const std::string& directory_name)
|
||||
{
|
||||
|
||||
#ifdef _WINDOWS
|
||||
struct _stat st;
|
||||
if (_stat(directory_name.c_str(), &st) == 0) // exists
|
||||
return;
|
||||
_mkdir(directory_name.c_str());
|
||||
#else
|
||||
struct stat st{};
|
||||
if (stat(directory_name.c_str(), &st) == 0) { // exists
|
||||
return;
|
||||
}
|
||||
::mkdir(directory_name.c_str(), 0755);
|
||||
#endif
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
/**
|
||||
* EQEmulator: Everquest Server Emulator
|
||||
* Copyright (C) 2001-2020 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef EQEMU_FILE_UTIL_H
|
||||
#define EQEMU_FILE_UTIL_H
|
||||
|
||||
|
||||
class FileUtil {
|
||||
public:
|
||||
static bool exists(const std::string &name);
|
||||
static void mkdir(const std::string& directory_name);
|
||||
};
|
||||
|
||||
|
||||
#endif //EQEMU_FILE_UTIL_H
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "eqemu_exception.h"
|
||||
#include "types.h"
|
||||
|
||||
namespace EQ {
|
||||
namespace EQEmu {
|
||||
|
||||
/*! Simple HashSet designed to be used in fixed memory that may be difficult to use an
|
||||
allocator for (shared memory), we assume all keys are unsigned int
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "eqemu_exception.h"
|
||||
#include "types.h"
|
||||
|
||||
namespace EQ {
|
||||
namespace EQEmu {
|
||||
|
||||
/*! Simple HashSet designed to be used in fixed memory that may be difficult to use an
|
||||
allocator for (shared memory), we assume all keys are unsigned int, values are a pointer and size
|
||||
|
||||
@@ -912,7 +912,7 @@ bool BaseGuildManager::GetEntireGuild(uint32 guild_id, std::vector<CharGuildInfo
|
||||
return(false);
|
||||
|
||||
//load up the rank info for each guild.
|
||||
std::string query = StringFormat(GuildMemberBaseQuery " WHERE g.guild_id=%d AND c.deleted_at IS NULL", guild_id);
|
||||
std::string query = StringFormat(GuildMemberBaseQuery " WHERE g.guild_id=%d", guild_id);
|
||||
auto results = m_db->QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
return false;
|
||||
@@ -941,7 +941,7 @@ bool BaseGuildManager::GetCharInfo(const char *char_name, CharGuildInfo &into) {
|
||||
m_db->DoEscapeString(esc, char_name, nl);
|
||||
|
||||
//load up the rank info for each guild.
|
||||
std::string query = StringFormat(GuildMemberBaseQuery " WHERE c.name='%s' AND c.deleted_at IS NULL", esc);
|
||||
std::string query = StringFormat(GuildMemberBaseQuery " WHERE c.name='%s'", esc);
|
||||
safe_delete_array(esc);
|
||||
auto results = m_db->QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
@@ -969,9 +969,9 @@ bool BaseGuildManager::GetCharInfo(uint32 char_id, CharGuildInfo &into) {
|
||||
//load up the rank info for each guild.
|
||||
std::string query;
|
||||
#ifdef BOTS
|
||||
query = StringFormat(GuildMemberBaseQuery " WHERE c.id=%d AND c.mob_type = 'C' AND c.deleted_at IS NULL", char_id);
|
||||
query = StringFormat(GuildMemberBaseQuery " WHERE c.id=%d AND c.mob_type = 'C'", char_id);
|
||||
#else
|
||||
query = StringFormat(GuildMemberBaseQuery " WHERE c.id=%d AND c.deleted_at IS NULL", char_id);
|
||||
query = StringFormat(GuildMemberBaseQuery " WHERE c.id=%d", char_id);
|
||||
#endif
|
||||
auto results = m_db->QueryDatabase(query);
|
||||
if (!results.Success()) {
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
|
||||
#include <iostream>
|
||||
|
||||
std::list<EQ::ItemInstance*> dirty_inst;
|
||||
std::list<EQEmu::ItemInstance*> dirty_inst;
|
||||
|
||||
|
||||
//
|
||||
@@ -48,50 +48,50 @@ ItemInstQueue::~ItemInstQueue()
|
||||
}
|
||||
|
||||
// Put item onto back of queue
|
||||
void ItemInstQueue::push(EQ::ItemInstance* inst)
|
||||
void ItemInstQueue::push(EQEmu::ItemInstance* inst)
|
||||
{
|
||||
m_list.push_back(inst);
|
||||
}
|
||||
|
||||
// Put item onto front of queue
|
||||
void ItemInstQueue::push_front(EQ::ItemInstance* inst)
|
||||
void ItemInstQueue::push_front(EQEmu::ItemInstance* inst)
|
||||
{
|
||||
m_list.push_front(inst);
|
||||
}
|
||||
|
||||
// Remove item from front of queue
|
||||
EQ::ItemInstance* ItemInstQueue::pop()
|
||||
EQEmu::ItemInstance* ItemInstQueue::pop()
|
||||
{
|
||||
if (m_list.empty())
|
||||
return nullptr;
|
||||
|
||||
EQ::ItemInstance* inst = m_list.front();
|
||||
EQEmu::ItemInstance* inst = m_list.front();
|
||||
m_list.pop_front();
|
||||
return inst;
|
||||
}
|
||||
|
||||
// Remove item from back of queue
|
||||
EQ::ItemInstance* ItemInstQueue::pop_back()
|
||||
EQEmu::ItemInstance* ItemInstQueue::pop_back()
|
||||
{
|
||||
if (m_list.empty())
|
||||
return nullptr;
|
||||
|
||||
EQ::ItemInstance* inst = m_list.back();
|
||||
EQEmu::ItemInstance* inst = m_list.back();
|
||||
m_list.pop_back();
|
||||
return inst;
|
||||
}
|
||||
|
||||
// Look at item at front of queue
|
||||
EQ::ItemInstance* ItemInstQueue::peek_front() const
|
||||
EQEmu::ItemInstance* ItemInstQueue::peek_front() const
|
||||
{
|
||||
return (m_list.empty()) ? nullptr : m_list.front();
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// class EQ::InventoryProfile
|
||||
// class EQEmu::InventoryProfile
|
||||
//
|
||||
EQ::InventoryProfile::~InventoryProfile()
|
||||
EQEmu::InventoryProfile::~InventoryProfile()
|
||||
{
|
||||
for (auto iter = m_worn.begin(); iter != m_worn.end(); ++iter) {
|
||||
safe_delete(iter->second);
|
||||
@@ -119,18 +119,18 @@ EQ::InventoryProfile::~InventoryProfile()
|
||||
m_trade.clear();
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::SetInventoryVersion(versions::MobVersion inventory_version) {
|
||||
void EQEmu::InventoryProfile::SetInventoryVersion(versions::MobVersion inventory_version) {
|
||||
m_mob_version = versions::ValidateMobVersion(inventory_version);
|
||||
SetGMInventory(m_gm_inventory);
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::SetGMInventory(bool gmi_flag) {
|
||||
void EQEmu::InventoryProfile::SetGMInventory(bool gmi_flag) {
|
||||
m_gm_inventory = gmi_flag;
|
||||
|
||||
m_lookup = inventory::DynamicLookup(m_mob_version, gmi_flag);
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::CleanDirty() {
|
||||
void EQEmu::InventoryProfile::CleanDirty() {
|
||||
auto iter = dirty_inst.begin();
|
||||
while (iter != dirty_inst.end()) {
|
||||
delete (*iter);
|
||||
@@ -139,14 +139,14 @@ void EQ::InventoryProfile::CleanDirty() {
|
||||
dirty_inst.clear();
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::MarkDirty(ItemInstance *inst) {
|
||||
void EQEmu::InventoryProfile::MarkDirty(ItemInstance *inst) {
|
||||
if (inst) {
|
||||
dirty_inst.push_back(inst);
|
||||
}
|
||||
}
|
||||
|
||||
// Retrieve item at specified slot; returns false if item not found
|
||||
EQ::ItemInstance* EQ::InventoryProfile::GetItem(int16 slot_id) const
|
||||
EQEmu::ItemInstance* EQEmu::InventoryProfile::GetItem(int16 slot_id) const
|
||||
{
|
||||
ItemInstance* result = nullptr;
|
||||
|
||||
@@ -219,31 +219,31 @@ EQ::ItemInstance* EQ::InventoryProfile::GetItem(int16 slot_id) const
|
||||
}
|
||||
|
||||
// Retrieve item at specified position within bag
|
||||
EQ::ItemInstance* EQ::InventoryProfile::GetItem(int16 slot_id, uint8 bagidx) const
|
||||
EQEmu::ItemInstance* EQEmu::InventoryProfile::GetItem(int16 slot_id, uint8 bagidx) const
|
||||
{
|
||||
return GetItem(InventoryProfile::CalcSlotId(slot_id, bagidx));
|
||||
}
|
||||
|
||||
// Put an item snto specified slot
|
||||
int16 EQ::InventoryProfile::PutItem(int16 slot_id, const ItemInstance& inst)
|
||||
int16 EQEmu::InventoryProfile::PutItem(int16 slot_id, const ItemInstance& inst)
|
||||
{
|
||||
if (slot_id <= EQ::invslot::POSSESSIONS_END && slot_id >= EQ::invslot::POSSESSIONS_BEGIN) {
|
||||
if (slot_id <= EQEmu::invslot::POSSESSIONS_END && slot_id >= EQEmu::invslot::POSSESSIONS_BEGIN) {
|
||||
if ((((uint64)1 << slot_id) & m_lookup->PossessionsBitmask) == 0)
|
||||
return EQ::invslot::SLOT_INVALID;
|
||||
return EQEmu::invslot::SLOT_INVALID;
|
||||
}
|
||||
else if (slot_id <= EQ::invbag::GENERAL_BAGS_END && slot_id >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
||||
auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((slot_id - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT);
|
||||
else if (slot_id <= EQEmu::invbag::GENERAL_BAGS_END && slot_id >= EQEmu::invbag::GENERAL_BAGS_BEGIN) {
|
||||
auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((slot_id - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT);
|
||||
if ((((uint64)1 << temp_slot) & m_lookup->PossessionsBitmask) == 0)
|
||||
return EQ::invslot::SLOT_INVALID;
|
||||
return EQEmu::invslot::SLOT_INVALID;
|
||||
}
|
||||
else if (slot_id <= EQ::invslot::BANK_END && slot_id >= EQ::invslot::BANK_BEGIN) {
|
||||
if ((slot_id - EQ::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank)
|
||||
return EQ::invslot::SLOT_INVALID;
|
||||
else if (slot_id <= EQEmu::invslot::BANK_END && slot_id >= EQEmu::invslot::BANK_BEGIN) {
|
||||
if ((slot_id - EQEmu::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank)
|
||||
return EQEmu::invslot::SLOT_INVALID;
|
||||
}
|
||||
else if (slot_id <= EQ::invbag::BANK_BAGS_END && slot_id >= EQ::invbag::BANK_BAGS_BEGIN) {
|
||||
auto temp_slot = (slot_id - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT;
|
||||
else if (slot_id <= EQEmu::invbag::BANK_BAGS_END && slot_id >= EQEmu::invbag::BANK_BAGS_BEGIN) {
|
||||
auto temp_slot = (slot_id - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT;
|
||||
if (temp_slot >= m_lookup->InventoryTypeSize.Bank)
|
||||
return EQ::invslot::SLOT_INVALID;
|
||||
return EQEmu::invslot::SLOT_INVALID;
|
||||
}
|
||||
|
||||
// Clean up item already in slot (if exists)
|
||||
@@ -259,17 +259,17 @@ int16 EQ::InventoryProfile::PutItem(int16 slot_id, const ItemInstance& inst)
|
||||
return _PutItem(slot_id, inst.Clone());
|
||||
}
|
||||
|
||||
int16 EQ::InventoryProfile::PushCursor(const ItemInstance &inst) {
|
||||
int16 EQEmu::InventoryProfile::PushCursor(const ItemInstance &inst) {
|
||||
m_cursor.push(inst.Clone());
|
||||
return invslot::slotCursor;
|
||||
}
|
||||
|
||||
EQ::ItemInstance* EQ::InventoryProfile::GetCursorItem() {
|
||||
EQEmu::ItemInstance* EQEmu::InventoryProfile::GetCursorItem() {
|
||||
return m_cursor.peek_front();
|
||||
}
|
||||
|
||||
// Swap items in inventory
|
||||
bool EQ::InventoryProfile::SwapItem(
|
||||
bool EQEmu::InventoryProfile::SwapItem(
|
||||
int16 source_slot,
|
||||
int16 destination_slot,
|
||||
SwapItemFailState &fail_state,
|
||||
@@ -280,54 +280,54 @@ bool EQ::InventoryProfile::SwapItem(
|
||||
) {
|
||||
fail_state = swapInvalid;
|
||||
|
||||
if (source_slot <= EQ::invslot::POSSESSIONS_END && source_slot >= EQ::invslot::POSSESSIONS_BEGIN) {
|
||||
if (source_slot <= EQEmu::invslot::POSSESSIONS_END && source_slot >= EQEmu::invslot::POSSESSIONS_BEGIN) {
|
||||
if ((((uint64) 1 << source_slot) & m_lookup->PossessionsBitmask) == 0) {
|
||||
fail_state = swapNotAllowed;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (source_slot <= EQ::invbag::GENERAL_BAGS_END && source_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
||||
auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((source_slot - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT);
|
||||
else if (source_slot <= EQEmu::invbag::GENERAL_BAGS_END && source_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) {
|
||||
auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((source_slot - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT);
|
||||
if ((((uint64)1 << temp_slot) & m_lookup->PossessionsBitmask) == 0) {
|
||||
fail_state = swapNotAllowed;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (source_slot <= EQ::invslot::BANK_END && source_slot >= EQ::invslot::BANK_BEGIN) {
|
||||
if ((source_slot - EQ::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) {
|
||||
else if (source_slot <= EQEmu::invslot::BANK_END && source_slot >= EQEmu::invslot::BANK_BEGIN) {
|
||||
if ((source_slot - EQEmu::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) {
|
||||
fail_state = swapNotAllowed;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (source_slot <= EQ::invbag::BANK_BAGS_END && source_slot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
||||
auto temp_slot = (source_slot - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT;
|
||||
else if (source_slot <= EQEmu::invbag::BANK_BAGS_END && source_slot >= EQEmu::invbag::BANK_BAGS_BEGIN) {
|
||||
auto temp_slot = (source_slot - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT;
|
||||
if (temp_slot >= m_lookup->InventoryTypeSize.Bank) {
|
||||
fail_state = swapNotAllowed;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (destination_slot <= EQ::invslot::POSSESSIONS_END && destination_slot >= EQ::invslot::POSSESSIONS_BEGIN) {
|
||||
if (destination_slot <= EQEmu::invslot::POSSESSIONS_END && destination_slot >= EQEmu::invslot::POSSESSIONS_BEGIN) {
|
||||
if ((((uint64)1 << destination_slot) & m_lookup->PossessionsBitmask) == 0) {
|
||||
fail_state = swapNotAllowed;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (destination_slot <= EQ::invbag::GENERAL_BAGS_END && destination_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
||||
auto temp_slot = EQ::invslot::GENERAL_BEGIN + ((destination_slot - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT);
|
||||
else if (destination_slot <= EQEmu::invbag::GENERAL_BAGS_END && destination_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) {
|
||||
auto temp_slot = EQEmu::invslot::GENERAL_BEGIN + ((destination_slot - EQEmu::invbag::GENERAL_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT);
|
||||
if ((((uint64)1 << temp_slot) & m_lookup->PossessionsBitmask) == 0) {
|
||||
fail_state = swapNotAllowed;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (destination_slot <= EQ::invslot::BANK_END && destination_slot >= EQ::invslot::BANK_BEGIN) {
|
||||
if ((destination_slot - EQ::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) {
|
||||
else if (destination_slot <= EQEmu::invslot::BANK_END && destination_slot >= EQEmu::invslot::BANK_BEGIN) {
|
||||
if ((destination_slot - EQEmu::invslot::BANK_BEGIN) >= m_lookup->InventoryTypeSize.Bank) {
|
||||
fail_state = swapNotAllowed;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (destination_slot <= EQ::invbag::BANK_BAGS_END && destination_slot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
||||
auto temp_slot = (destination_slot - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT;
|
||||
else if (destination_slot <= EQEmu::invbag::BANK_BAGS_END && destination_slot >= EQEmu::invbag::BANK_BAGS_BEGIN) {
|
||||
auto temp_slot = (destination_slot - EQEmu::invbag::BANK_BAGS_BEGIN) / EQEmu::invbag::SLOT_COUNT;
|
||||
if (temp_slot >= m_lookup->InventoryTypeSize.Bank) {
|
||||
fail_state = swapNotAllowed;
|
||||
return false;
|
||||
@@ -399,7 +399,7 @@ bool EQ::InventoryProfile::SwapItem(
|
||||
}
|
||||
|
||||
// Remove item from inventory (with memory delete)
|
||||
bool EQ::InventoryProfile::DeleteItem(int16 slot_id, uint8 quantity) {
|
||||
bool EQEmu::InventoryProfile::DeleteItem(int16 slot_id, uint8 quantity) {
|
||||
// Pop item out of inventory map (or queue)
|
||||
ItemInstance *item_to_delete = PopItem(slot_id);
|
||||
|
||||
@@ -434,7 +434,7 @@ bool EQ::InventoryProfile::DeleteItem(int16 slot_id, uint8 quantity) {
|
||||
}
|
||||
|
||||
// Checks All items in a bag for No Drop
|
||||
bool EQ::InventoryProfile::CheckNoDrop(int16 slot_id, bool recurse)
|
||||
bool EQEmu::InventoryProfile::CheckNoDrop(int16 slot_id, bool recurse)
|
||||
{
|
||||
ItemInstance* inst = GetItem(slot_id);
|
||||
if (!inst)
|
||||
@@ -445,7 +445,7 @@ bool EQ::InventoryProfile::CheckNoDrop(int16 slot_id, bool recurse)
|
||||
|
||||
// Remove item from bucket without memory delete
|
||||
// Returns item pointer if full delete was successful
|
||||
EQ::ItemInstance* EQ::InventoryProfile::PopItem(int16 slot_id)
|
||||
EQEmu::ItemInstance* EQEmu::InventoryProfile::PopItem(int16 slot_id)
|
||||
{
|
||||
ItemInstance* p = nullptr;
|
||||
|
||||
@@ -488,7 +488,7 @@ EQ::ItemInstance* EQ::InventoryProfile::PopItem(int16 slot_id)
|
||||
return p;
|
||||
}
|
||||
|
||||
bool EQ::InventoryProfile::HasSpaceForItem(const ItemData *ItemToTry, int16 Quantity) {
|
||||
bool EQEmu::InventoryProfile::HasSpaceForItem(const ItemData *ItemToTry, int16 Quantity) {
|
||||
|
||||
if (ItemToTry->Stackable) {
|
||||
|
||||
@@ -592,7 +592,7 @@ bool EQ::InventoryProfile::HasSpaceForItem(const ItemData *ItemToTry, int16 Quan
|
||||
|
||||
//This function has a flaw in that it only returns the last stack that it looked at
|
||||
//when quantity is greater than 1 and not all of quantity can be found in 1 stack.
|
||||
int16 EQ::InventoryProfile::HasItem(uint32 item_id, uint8 quantity, uint8 where)
|
||||
int16 EQEmu::InventoryProfile::HasItem(uint32 item_id, uint8 quantity, uint8 where)
|
||||
{
|
||||
int16 slot_id = INVALID_INDEX;
|
||||
|
||||
@@ -642,7 +642,7 @@ int16 EQ::InventoryProfile::HasItem(uint32 item_id, uint8 quantity, uint8 where)
|
||||
}
|
||||
|
||||
//this function has the same quantity flaw mentioned above in HasItem()
|
||||
int16 EQ::InventoryProfile::HasItemByUse(uint8 use, uint8 quantity, uint8 where)
|
||||
int16 EQEmu::InventoryProfile::HasItemByUse(uint8 use, uint8 quantity, uint8 where)
|
||||
{
|
||||
int16 slot_id = INVALID_INDEX;
|
||||
|
||||
@@ -688,7 +688,7 @@ int16 EQ::InventoryProfile::HasItemByUse(uint8 use, uint8 quantity, uint8 where)
|
||||
return slot_id;
|
||||
}
|
||||
|
||||
int16 EQ::InventoryProfile::HasItemByLoreGroup(uint32 loregroup, uint8 where)
|
||||
int16 EQEmu::InventoryProfile::HasItemByLoreGroup(uint32 loregroup, uint8 where)
|
||||
{
|
||||
int16 slot_id = INVALID_INDEX;
|
||||
|
||||
@@ -736,7 +736,7 @@ int16 EQ::InventoryProfile::HasItemByLoreGroup(uint32 loregroup, uint8 where)
|
||||
|
||||
// Locate an available inventory slot
|
||||
// Returns slot_id when there's one available, else SLOT_INVALID
|
||||
int16 EQ::InventoryProfile::FindFreeSlot(bool for_bag, bool try_cursor, uint8 min_size, bool is_arrow)
|
||||
int16 EQEmu::InventoryProfile::FindFreeSlot(bool for_bag, bool try_cursor, uint8 min_size, bool is_arrow)
|
||||
{
|
||||
// Check basic inventory
|
||||
for (int16 i = invslot::GENERAL_BEGIN; i <= invslot::GENERAL_END; i++) {
|
||||
@@ -786,7 +786,7 @@ int16 EQ::InventoryProfile::FindFreeSlot(bool for_bag, bool try_cursor, uint8 mi
|
||||
}
|
||||
|
||||
// This is a mix of HasSpaceForItem and FindFreeSlot..due to existing coding behavior, it was better to add a new helper function...
|
||||
int16 EQ::InventoryProfile::FindFreeSlotForTradeItem(const ItemInstance* inst, int16 general_start, uint8 bag_start) {
|
||||
int16 EQEmu::InventoryProfile::FindFreeSlotForTradeItem(const ItemInstance* inst, int16 general_start, uint8 bag_start) {
|
||||
// Do not arbitrarily use this function..it is designed for use with Client::ResetTrade() and Client::FinishTrade().
|
||||
// If you have a need, use it..but, understand it is not a suitable replacement for InventoryProfile::FindFreeSlot().
|
||||
//
|
||||
@@ -924,7 +924,7 @@ int16 EQ::InventoryProfile::FindFreeSlotForTradeItem(const ItemInstance* inst, i
|
||||
}
|
||||
|
||||
// Opposite of below: Get parent bag slot_id from a slot inside of bag
|
||||
int16 EQ::InventoryProfile::CalcSlotId(int16 slot_id) {
|
||||
int16 EQEmu::InventoryProfile::CalcSlotId(int16 slot_id) {
|
||||
int16 parent_slot_id = INVALID_INDEX;
|
||||
|
||||
// this is not a bag range... using this risks over-writing existing items
|
||||
@@ -952,7 +952,7 @@ int16 EQ::InventoryProfile::CalcSlotId(int16 slot_id) {
|
||||
}
|
||||
|
||||
// Calculate slot_id for an item within a bag
|
||||
int16 EQ::InventoryProfile::CalcSlotId(int16 bagslot_id, uint8 bagidx) {
|
||||
int16 EQEmu::InventoryProfile::CalcSlotId(int16 bagslot_id, uint8 bagidx) {
|
||||
if (!InventoryProfile::SupportsContainers(bagslot_id))
|
||||
return INVALID_INDEX;
|
||||
|
||||
@@ -977,7 +977,7 @@ int16 EQ::InventoryProfile::CalcSlotId(int16 bagslot_id, uint8 bagidx) {
|
||||
return slot_id;
|
||||
}
|
||||
|
||||
uint8 EQ::InventoryProfile::CalcBagIdx(int16 slot_id) {
|
||||
uint8 EQEmu::InventoryProfile::CalcBagIdx(int16 slot_id) {
|
||||
uint8 index = 0;
|
||||
|
||||
// this is not a bag range... using this risks over-writing existing items
|
||||
@@ -1006,7 +1006,7 @@ uint8 EQ::InventoryProfile::CalcBagIdx(int16 slot_id) {
|
||||
return index;
|
||||
}
|
||||
|
||||
int16 EQ::InventoryProfile::CalcSlotFromMaterial(uint8 material)
|
||||
int16 EQEmu::InventoryProfile::CalcSlotFromMaterial(uint8 material)
|
||||
{
|
||||
switch (material)
|
||||
{
|
||||
@@ -1033,7 +1033,7 @@ int16 EQ::InventoryProfile::CalcSlotFromMaterial(uint8 material)
|
||||
}
|
||||
}
|
||||
|
||||
uint8 EQ::InventoryProfile::CalcMaterialFromSlot(int16 equipslot)
|
||||
uint8 EQEmu::InventoryProfile::CalcMaterialFromSlot(int16 equipslot)
|
||||
{
|
||||
switch (equipslot)
|
||||
{
|
||||
@@ -1061,7 +1061,7 @@ uint8 EQ::InventoryProfile::CalcMaterialFromSlot(int16 equipslot)
|
||||
}
|
||||
}
|
||||
|
||||
bool EQ::InventoryProfile::CanItemFitInContainer(const ItemData *ItemToTry, const ItemData *Container) {
|
||||
bool EQEmu::InventoryProfile::CanItemFitInContainer(const ItemData *ItemToTry, const ItemData *Container) {
|
||||
|
||||
if (!ItemToTry || !Container)
|
||||
return false;
|
||||
@@ -1078,7 +1078,7 @@ bool EQ::InventoryProfile::CanItemFitInContainer(const ItemData *ItemToTry, cons
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::InventoryProfile::SupportsClickCasting(int16 slot_id)
|
||||
bool EQEmu::InventoryProfile::SupportsClickCasting(int16 slot_id)
|
||||
{
|
||||
// there are a few non-potion items that identify as ItemTypePotion..so, we still need to ubiquitously include the equipment range
|
||||
if (slot_id >= invslot::EQUIPMENT_BEGIN && slot_id <= invslot::EQUIPMENT_END) {
|
||||
@@ -1095,7 +1095,7 @@ bool EQ::InventoryProfile::SupportsClickCasting(int16 slot_id)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EQ::InventoryProfile::SupportsPotionBeltCasting(int16 slot_id)
|
||||
bool EQEmu::InventoryProfile::SupportsPotionBeltCasting(int16 slot_id)
|
||||
{
|
||||
// does this have the same criteria as 'SupportsClickCasting' above? (bag clicking per client)
|
||||
if (slot_id >= invslot::EQUIPMENT_BEGIN && slot_id <= invslot::EQUIPMENT_END) {
|
||||
@@ -1112,7 +1112,7 @@ bool EQ::InventoryProfile::SupportsPotionBeltCasting(int16 slot_id)
|
||||
}
|
||||
|
||||
// Test whether a given slot can support a container item
|
||||
bool EQ::InventoryProfile::SupportsContainers(int16 slot_id)
|
||||
bool EQEmu::InventoryProfile::SupportsContainers(int16 slot_id)
|
||||
{
|
||||
if ((slot_id == invslot::slotCursor) ||
|
||||
(slot_id >= invslot::GENERAL_BEGIN && slot_id <= invslot::GENERAL_END) ||
|
||||
@@ -1126,7 +1126,7 @@ bool EQ::InventoryProfile::SupportsContainers(int16 slot_id)
|
||||
return false;
|
||||
}
|
||||
|
||||
int EQ::InventoryProfile::GetSlotByItemInst(ItemInstance *inst) {
|
||||
int EQEmu::InventoryProfile::GetSlotByItemInst(ItemInstance *inst) {
|
||||
if (!inst)
|
||||
return INVALID_INDEX;
|
||||
|
||||
@@ -1162,7 +1162,7 @@ int EQ::InventoryProfile::GetSlotByItemInst(ItemInstance *inst) {
|
||||
return INVALID_INDEX;
|
||||
}
|
||||
|
||||
uint8 EQ::InventoryProfile::FindBrightestLightType()
|
||||
uint8 EQEmu::InventoryProfile::FindBrightestLightType()
|
||||
{
|
||||
uint8 brightest_light_type = 0;
|
||||
|
||||
@@ -1213,7 +1213,7 @@ uint8 EQ::InventoryProfile::FindBrightestLightType()
|
||||
return brightest_light_type;
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::dumpEntireInventory() {
|
||||
void EQEmu::InventoryProfile::dumpEntireInventory() {
|
||||
|
||||
dumpWornItems();
|
||||
dumpInventory();
|
||||
@@ -1223,29 +1223,29 @@ void EQ::InventoryProfile::dumpEntireInventory() {
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::dumpWornItems() {
|
||||
void EQEmu::InventoryProfile::dumpWornItems() {
|
||||
std::cout << "Worn items:" << std::endl;
|
||||
dumpItemCollection(m_worn);
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::dumpInventory() {
|
||||
void EQEmu::InventoryProfile::dumpInventory() {
|
||||
std::cout << "Inventory items:" << std::endl;
|
||||
dumpItemCollection(m_inv);
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::dumpBankItems() {
|
||||
void EQEmu::InventoryProfile::dumpBankItems() {
|
||||
|
||||
std::cout << "Bank items:" << std::endl;
|
||||
dumpItemCollection(m_bank);
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::dumpSharedBankItems() {
|
||||
void EQEmu::InventoryProfile::dumpSharedBankItems() {
|
||||
|
||||
std::cout << "Shared Bank items:" << std::endl;
|
||||
dumpItemCollection(m_shbank);
|
||||
}
|
||||
|
||||
int EQ::InventoryProfile::GetSlotByItemInstCollection(const std::map<int16, ItemInstance*> &collection, ItemInstance *inst) {
|
||||
int EQEmu::InventoryProfile::GetSlotByItemInstCollection(const std::map<int16, ItemInstance*> &collection, ItemInstance *inst) {
|
||||
for (auto iter = collection.begin(); iter != collection.end(); ++iter) {
|
||||
ItemInstance *t_inst = iter->second;
|
||||
if (t_inst == inst) {
|
||||
@@ -1261,10 +1261,10 @@ int EQ::InventoryProfile::GetSlotByItemInstCollection(const std::map<int16, Item
|
||||
}
|
||||
}
|
||||
|
||||
return EQ::invslot::SLOT_INVALID;
|
||||
return EQEmu::invslot::SLOT_INVALID;
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::dumpItemCollection(const std::map<int16, ItemInstance*> &collection)
|
||||
void EQEmu::InventoryProfile::dumpItemCollection(const std::map<int16, ItemInstance*> &collection)
|
||||
{
|
||||
for (auto it = collection.cbegin(); it != collection.cend(); ++it) {
|
||||
auto inst = it->second;
|
||||
@@ -1278,7 +1278,7 @@ void EQ::InventoryProfile::dumpItemCollection(const std::map<int16, ItemInstance
|
||||
}
|
||||
}
|
||||
|
||||
void EQ::InventoryProfile::dumpBagContents(ItemInstance *inst, std::map<int16, ItemInstance*>::const_iterator *it)
|
||||
void EQEmu::InventoryProfile::dumpBagContents(ItemInstance *inst, std::map<int16, ItemInstance*>::const_iterator *it)
|
||||
{
|
||||
if (!inst || !inst->IsClassBag())
|
||||
return;
|
||||
@@ -1297,14 +1297,14 @@ void EQ::InventoryProfile::dumpBagContents(ItemInstance *inst, std::map<int16, I
|
||||
}
|
||||
|
||||
// Internal Method: Retrieves item within an inventory bucket
|
||||
EQ::ItemInstance* EQ::InventoryProfile::_GetItem(const std::map<int16, ItemInstance*>& bucket, int16 slot_id) const
|
||||
EQEmu::ItemInstance* EQEmu::InventoryProfile::_GetItem(const std::map<int16, ItemInstance*>& bucket, int16 slot_id) const
|
||||
{
|
||||
if (slot_id <= EQ::invslot::POSSESSIONS_END && slot_id >= EQ::invslot::POSSESSIONS_BEGIN) {
|
||||
if (slot_id <= EQEmu::invslot::POSSESSIONS_END && slot_id >= EQEmu::invslot::POSSESSIONS_BEGIN) {
|
||||
if ((((uint64)1 << slot_id) & m_lookup->PossessionsBitmask) == 0)
|
||||
return nullptr;
|
||||
}
|
||||
else if (slot_id <= EQ::invslot::BANK_END && slot_id >= EQ::invslot::BANK_BEGIN) {
|
||||
if (slot_id - EQ::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank)
|
||||
else if (slot_id <= EQEmu::invslot::BANK_END && slot_id >= EQEmu::invslot::BANK_BEGIN) {
|
||||
if (slot_id - EQEmu::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -1319,7 +1319,7 @@ EQ::ItemInstance* EQ::InventoryProfile::_GetItem(const std::map<int16, ItemInsta
|
||||
|
||||
// Internal Method: "put" item into bucket, without regard for what is currently in bucket
|
||||
// Assumes item has already been allocated
|
||||
int16 EQ::InventoryProfile::_PutItem(int16 slot_id, ItemInstance* inst)
|
||||
int16 EQEmu::InventoryProfile::_PutItem(int16 slot_id, ItemInstance* inst)
|
||||
{
|
||||
// What happens here when we _PutItem(MainCursor)? Bad things..really bad things...
|
||||
//
|
||||
@@ -1356,7 +1356,7 @@ int16 EQ::InventoryProfile::_PutItem(int16 slot_id, ItemInstance* inst)
|
||||
result = slot_id;
|
||||
}
|
||||
else if (slot_id >= invslot::BANK_BEGIN && slot_id <= invslot::BANK_END) {
|
||||
if (slot_id - EQ::invslot::BANK_BEGIN < m_lookup->InventoryTypeSize.Bank) {
|
||||
if (slot_id - EQEmu::invslot::BANK_BEGIN < m_lookup->InventoryTypeSize.Bank) {
|
||||
m_bank[slot_id] = inst;
|
||||
result = slot_id;
|
||||
}
|
||||
@@ -1389,17 +1389,17 @@ int16 EQ::InventoryProfile::_PutItem(int16 slot_id, ItemInstance* inst)
|
||||
}
|
||||
|
||||
// Internal Method: Checks an inventory bucket for a particular item
|
||||
int16 EQ::InventoryProfile::_HasItem(std::map<int16, ItemInstance*>& bucket, uint32 item_id, uint8 quantity)
|
||||
int16 EQEmu::InventoryProfile::_HasItem(std::map<int16, ItemInstance*>& bucket, uint32 item_id, uint8 quantity)
|
||||
{
|
||||
uint32 quantity_found = 0;
|
||||
|
||||
for (auto iter = bucket.begin(); iter != bucket.end(); ++iter) {
|
||||
if (iter->first <= EQ::invslot::POSSESSIONS_END && iter->first >= EQ::invslot::POSSESSIONS_BEGIN) {
|
||||
if (iter->first <= EQEmu::invslot::POSSESSIONS_END && iter->first >= EQEmu::invslot::POSSESSIONS_BEGIN) {
|
||||
if ((((uint64)1 << iter->first) & m_lookup->PossessionsBitmask) == 0)
|
||||
continue;
|
||||
}
|
||||
else if (iter->first <= EQ::invslot::BANK_END && iter->first >= EQ::invslot::BANK_BEGIN) {
|
||||
if (iter->first - EQ::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank)
|
||||
else if (iter->first <= EQEmu::invslot::BANK_END && iter->first >= EQEmu::invslot::BANK_BEGIN) {
|
||||
if (iter->first - EQEmu::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank)
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1440,7 +1440,7 @@ int16 EQ::InventoryProfile::_HasItem(std::map<int16, ItemInstance*>& bucket, uin
|
||||
}
|
||||
|
||||
// Internal Method: Checks an inventory queue type bucket for a particular item
|
||||
int16 EQ::InventoryProfile::_HasItem(ItemInstQueue& iqueue, uint32 item_id, uint8 quantity)
|
||||
int16 EQEmu::InventoryProfile::_HasItem(ItemInstQueue& iqueue, uint32 item_id, uint8 quantity)
|
||||
{
|
||||
// The downfall of this (these) queue procedure is that callers presume that when an item is
|
||||
// found, it is presented as being available on the cursor. In cases of a parity check, this
|
||||
@@ -1491,17 +1491,17 @@ int16 EQ::InventoryProfile::_HasItem(ItemInstQueue& iqueue, uint32 item_id, uint
|
||||
}
|
||||
|
||||
// Internal Method: Checks an inventory bucket for a particular item
|
||||
int16 EQ::InventoryProfile::_HasItemByUse(std::map<int16, ItemInstance*>& bucket, uint8 use, uint8 quantity)
|
||||
int16 EQEmu::InventoryProfile::_HasItemByUse(std::map<int16, ItemInstance*>& bucket, uint8 use, uint8 quantity)
|
||||
{
|
||||
uint32 quantity_found = 0;
|
||||
|
||||
for (auto iter = bucket.begin(); iter != bucket.end(); ++iter) {
|
||||
if (iter->first <= EQ::invslot::POSSESSIONS_END && iter->first >= EQ::invslot::POSSESSIONS_BEGIN) {
|
||||
if (iter->first <= EQEmu::invslot::POSSESSIONS_END && iter->first >= EQEmu::invslot::POSSESSIONS_BEGIN) {
|
||||
if ((((uint64)1 << iter->first) & m_lookup->PossessionsBitmask) == 0)
|
||||
continue;
|
||||
}
|
||||
else if (iter->first <= EQ::invslot::BANK_END && iter->first >= EQ::invslot::BANK_BEGIN) {
|
||||
if (iter->first - EQ::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank)
|
||||
else if (iter->first <= EQEmu::invslot::BANK_END && iter->first >= EQEmu::invslot::BANK_BEGIN) {
|
||||
if (iter->first - EQEmu::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank)
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1532,7 +1532,7 @@ int16 EQ::InventoryProfile::_HasItemByUse(std::map<int16, ItemInstance*>& bucket
|
||||
}
|
||||
|
||||
// Internal Method: Checks an inventory queue type bucket for a particular item
|
||||
int16 EQ::InventoryProfile::_HasItemByUse(ItemInstQueue& iqueue, uint8 use, uint8 quantity)
|
||||
int16 EQEmu::InventoryProfile::_HasItemByUse(ItemInstQueue& iqueue, uint8 use, uint8 quantity)
|
||||
{
|
||||
uint32 quantity_found = 0;
|
||||
|
||||
@@ -1566,15 +1566,15 @@ int16 EQ::InventoryProfile::_HasItemByUse(ItemInstQueue& iqueue, uint8 use, uint
|
||||
return INVALID_INDEX;
|
||||
}
|
||||
|
||||
int16 EQ::InventoryProfile::_HasItemByLoreGroup(std::map<int16, ItemInstance*>& bucket, uint32 loregroup)
|
||||
int16 EQEmu::InventoryProfile::_HasItemByLoreGroup(std::map<int16, ItemInstance*>& bucket, uint32 loregroup)
|
||||
{
|
||||
for (auto iter = bucket.begin(); iter != bucket.end(); ++iter) {
|
||||
if (iter->first <= EQ::invslot::POSSESSIONS_END && iter->first >= EQ::invslot::POSSESSIONS_BEGIN) {
|
||||
if (iter->first <= EQEmu::invslot::POSSESSIONS_END && iter->first >= EQEmu::invslot::POSSESSIONS_BEGIN) {
|
||||
if ((((uint64)1 << iter->first) & m_lookup->PossessionsBitmask) == 0)
|
||||
continue;
|
||||
}
|
||||
else if (iter->first <= EQ::invslot::BANK_END && iter->first >= EQ::invslot::BANK_BEGIN) {
|
||||
if (iter->first - EQ::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank)
|
||||
else if (iter->first <= EQEmu::invslot::BANK_END && iter->first >= EQEmu::invslot::BANK_BEGIN) {
|
||||
if (iter->first - EQEmu::invslot::BANK_BEGIN >= m_lookup->InventoryTypeSize.Bank)
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1611,11 +1611,11 @@ int16 EQ::InventoryProfile::_HasItemByLoreGroup(std::map<int16, ItemInstance*>&
|
||||
}
|
||||
}
|
||||
|
||||
return EQ::invslot::SLOT_INVALID;
|
||||
return EQEmu::invslot::SLOT_INVALID;
|
||||
}
|
||||
|
||||
// Internal Method: Checks an inventory queue type bucket for a particular item
|
||||
int16 EQ::InventoryProfile::_HasItemByLoreGroup(ItemInstQueue& iqueue, uint32 loregroup)
|
||||
int16 EQEmu::InventoryProfile::_HasItemByLoreGroup(ItemInstQueue& iqueue, uint32 loregroup)
|
||||
{
|
||||
for (auto iter = iqueue.cbegin(); iter != iqueue.cend(); ++iter) {
|
||||
auto inst = *iter;
|
||||
@@ -1654,5 +1654,5 @@ int16 EQ::InventoryProfile::_HasItemByLoreGroup(ItemInstQueue& iqueue, uint32 lo
|
||||
break;
|
||||
}
|
||||
|
||||
return EQ::invslot::SLOT_INVALID;
|
||||
return EQEmu::invslot::SLOT_INVALID;
|
||||
}
|
||||
|
||||
+10
-10
@@ -52,30 +52,30 @@ public:
|
||||
// Public Methods
|
||||
/////////////////////////
|
||||
|
||||
inline std::list<EQ::ItemInstance*>::const_iterator cbegin() { return m_list.cbegin(); }
|
||||
inline std::list<EQ::ItemInstance*>::const_iterator cend() { return m_list.cend(); }
|
||||
inline std::list<EQEmu::ItemInstance*>::const_iterator cbegin() { return m_list.cbegin(); }
|
||||
inline std::list<EQEmu::ItemInstance*>::const_iterator cend() { return m_list.cend(); }
|
||||
|
||||
inline int size() { return static_cast<int>(m_list.size()); } // TODO: change to size_t
|
||||
inline bool empty() { return m_list.empty(); }
|
||||
|
||||
void push(EQ::ItemInstance* inst);
|
||||
void push_front(EQ::ItemInstance* inst);
|
||||
EQ::ItemInstance* pop();
|
||||
EQ::ItemInstance* pop_back();
|
||||
EQ::ItemInstance* peek_front() const;
|
||||
void push(EQEmu::ItemInstance* inst);
|
||||
void push_front(EQEmu::ItemInstance* inst);
|
||||
EQEmu::ItemInstance* pop();
|
||||
EQEmu::ItemInstance* pop_back();
|
||||
EQEmu::ItemInstance* peek_front() const;
|
||||
|
||||
protected:
|
||||
/////////////////////////
|
||||
// Protected Members
|
||||
/////////////////////////
|
||||
|
||||
std::list<EQ::ItemInstance*> m_list;
|
||||
std::list<EQEmu::ItemInstance*> m_list;
|
||||
};
|
||||
|
||||
// ########################################
|
||||
// Class: EQ::InventoryProfile
|
||||
// Class: EQEmu::InventoryProfile
|
||||
// Character inventory
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
class InventoryProfile
|
||||
{
|
||||
|
||||
+31
-31
@@ -22,7 +22,7 @@
|
||||
#include "string_util.h"
|
||||
|
||||
|
||||
int8 EQ::inventory::ConvertEquipmentIndexToTextureIndex(int16 slot_index)
|
||||
int8 EQEmu::inventory::ConvertEquipmentIndexToTextureIndex(int16 slot_index)
|
||||
{
|
||||
switch (slot_index) {
|
||||
case invslot::slotHead:
|
||||
@@ -48,7 +48,7 @@ int8 EQ::inventory::ConvertEquipmentIndexToTextureIndex(int16 slot_index)
|
||||
}
|
||||
}
|
||||
|
||||
int8 EQ::inventory::ConvertEquipmentSlotToTextureIndex(const InventorySlot& inventory_slot)
|
||||
int8 EQEmu::inventory::ConvertEquipmentSlotToTextureIndex(const InventorySlot& inventory_slot)
|
||||
{
|
||||
if ((!inventory_slot.Typeless() && !inventory_slot.IsTypeIndex(invtype::typePossessions)) || !inventory_slot.IsContainerIndex(invbag::SLOT_INVALID) || !inventory_slot.IsSocketIndex(invaug::SOCKET_INVALID))
|
||||
return textures::textureInvalid;
|
||||
@@ -56,7 +56,7 @@ int8 EQ::inventory::ConvertEquipmentSlotToTextureIndex(const InventorySlot& inve
|
||||
return ConvertEquipmentIndexToTextureIndex(inventory_slot.SlotIndex());
|
||||
}
|
||||
|
||||
int16 EQ::inventory::ConvertTextureIndexToEquipmentIndex(int8 texture_index)
|
||||
int16 EQEmu::inventory::ConvertTextureIndexToEquipmentIndex(int8 texture_index)
|
||||
{
|
||||
switch (texture_index) {
|
||||
case textures::armorHead:
|
||||
@@ -82,7 +82,7 @@ int16 EQ::inventory::ConvertTextureIndexToEquipmentIndex(int8 texture_index)
|
||||
}
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsValidSlot() const
|
||||
bool EQEmu::InventorySlot::IsValidSlot() const
|
||||
{
|
||||
if (_typeless)
|
||||
return false;
|
||||
@@ -100,7 +100,7 @@ bool EQ::InventorySlot::IsValidSlot() const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsDeleteSlot() const
|
||||
bool EQEmu::InventorySlot::IsDeleteSlot() const
|
||||
{
|
||||
if (_typeless)
|
||||
return (_slot_index == invslot::SLOT_INVALID && _container_index == invbag::SLOT_INVALID && _socket_index == invaug::SOCKET_INVALID);
|
||||
@@ -108,7 +108,7 @@ bool EQ::InventorySlot::IsDeleteSlot() const
|
||||
return (_type_index == invtype::TYPE_INVALID && _slot_index == invslot::SLOT_INVALID && _container_index == invbag::SLOT_INVALID && _socket_index == invaug::SOCKET_INVALID);
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsEquipmentIndex(int16 slot_index)
|
||||
bool EQEmu::InventorySlot::IsEquipmentIndex(int16 slot_index)
|
||||
{
|
||||
if (slot_index < invslot::EQUIPMENT_BEGIN || slot_index > invslot::EQUIPMENT_END)
|
||||
return false;
|
||||
@@ -116,7 +116,7 @@ bool EQ::InventorySlot::IsEquipmentIndex(int16 slot_index)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsGeneralIndex(int16 slot_index)
|
||||
bool EQEmu::InventorySlot::IsGeneralIndex(int16 slot_index)
|
||||
{
|
||||
if (slot_index < invslot::GENERAL_BEGIN || slot_index > invslot::GENERAL_END)
|
||||
return false;
|
||||
@@ -124,7 +124,7 @@ bool EQ::InventorySlot::IsGeneralIndex(int16 slot_index)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsCursorIndex(int16 slot_index)
|
||||
bool EQEmu::InventorySlot::IsCursorIndex(int16 slot_index)
|
||||
{
|
||||
if (slot_index == invslot::slotCursor)
|
||||
return true;
|
||||
@@ -132,7 +132,7 @@ bool EQ::InventorySlot::IsCursorIndex(int16 slot_index)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsWeaponIndex(int16 slot_index)
|
||||
bool EQEmu::InventorySlot::IsWeaponIndex(int16 slot_index)
|
||||
{
|
||||
if (slot_index == invslot::slotPrimary || slot_index == invslot::slotSecondary || slot_index == invslot::slotRange)
|
||||
return true;
|
||||
@@ -140,7 +140,7 @@ bool EQ::InventorySlot::IsWeaponIndex(int16 slot_index)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsTextureIndex(int16 slot_index)
|
||||
bool EQEmu::InventorySlot::IsTextureIndex(int16 slot_index)
|
||||
{
|
||||
switch (slot_index) {
|
||||
case invslot::slotHead:
|
||||
@@ -158,7 +158,7 @@ bool EQ::InventorySlot::IsTextureIndex(int16 slot_index)
|
||||
}
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsTintableIndex(int16 slot_index)
|
||||
bool EQEmu::InventorySlot::IsTintableIndex(int16 slot_index)
|
||||
{
|
||||
switch (slot_index) {
|
||||
case invslot::slotHead:
|
||||
@@ -174,7 +174,7 @@ bool EQ::InventorySlot::IsTintableIndex(int16 slot_index)
|
||||
}
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsEquipmentSlot() const
|
||||
bool EQEmu::InventorySlot::IsEquipmentSlot() const
|
||||
{
|
||||
if (!_typeless && (_type_index != invtype::typePossessions))
|
||||
return false;
|
||||
@@ -185,7 +185,7 @@ bool EQ::InventorySlot::IsEquipmentSlot() const
|
||||
return IsEquipmentIndex(_slot_index);
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsGeneralSlot() const
|
||||
bool EQEmu::InventorySlot::IsGeneralSlot() const
|
||||
{
|
||||
if (!_typeless && (_type_index != invtype::typePossessions))
|
||||
return false;
|
||||
@@ -196,7 +196,7 @@ bool EQ::InventorySlot::IsGeneralSlot() const
|
||||
return IsGeneralIndex(_socket_index);
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsCursorSlot() const
|
||||
bool EQEmu::InventorySlot::IsCursorSlot() const
|
||||
{
|
||||
if (!_typeless && (_type_index != invtype::typePossessions))
|
||||
return false;
|
||||
@@ -207,7 +207,7 @@ bool EQ::InventorySlot::IsCursorSlot() const
|
||||
return IsCursorIndex(_slot_index);
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsWeaponSlot() const
|
||||
bool EQEmu::InventorySlot::IsWeaponSlot() const
|
||||
{
|
||||
if (!_typeless && (_type_index != invtype::typePossessions))
|
||||
return false;
|
||||
@@ -218,7 +218,7 @@ bool EQ::InventorySlot::IsWeaponSlot() const
|
||||
return IsWeaponIndex(_slot_index);
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsTextureSlot() const
|
||||
bool EQEmu::InventorySlot::IsTextureSlot() const
|
||||
{
|
||||
if (!_typeless && (_type_index != invtype::typePossessions))
|
||||
return false;
|
||||
@@ -229,7 +229,7 @@ bool EQ::InventorySlot::IsTextureSlot() const
|
||||
return IsTextureIndex(_slot_index);
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsTintableSlot() const
|
||||
bool EQEmu::InventorySlot::IsTintableSlot() const
|
||||
{
|
||||
if (!_typeless && (_type_index != invtype::typePossessions))
|
||||
return false;
|
||||
@@ -240,7 +240,7 @@ bool EQ::InventorySlot::IsTintableSlot() const
|
||||
return IsTintableIndex(_slot_index);
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsSlot() const
|
||||
bool EQEmu::InventorySlot::IsSlot() const
|
||||
{
|
||||
if (!_typeless && (_type_index == invtype::TYPE_INVALID))
|
||||
return false;
|
||||
@@ -254,7 +254,7 @@ bool EQ::InventorySlot::IsSlot() const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsSlotSocket() const
|
||||
bool EQEmu::InventorySlot::IsSlotSocket() const
|
||||
{
|
||||
if (!_typeless && (_type_index == invtype::TYPE_INVALID))
|
||||
return false;
|
||||
@@ -268,7 +268,7 @@ bool EQ::InventorySlot::IsSlotSocket() const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsContainer() const
|
||||
bool EQEmu::InventorySlot::IsContainer() const
|
||||
{
|
||||
if (!_typeless && (_type_index == invtype::TYPE_INVALID))
|
||||
return false;
|
||||
@@ -282,7 +282,7 @@ bool EQ::InventorySlot::IsContainer() const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::IsContainerSocket() const
|
||||
bool EQEmu::InventorySlot::IsContainerSocket() const
|
||||
{
|
||||
if (!_typeless && (_type_index == invtype::TYPE_INVALID))
|
||||
return false;
|
||||
@@ -296,12 +296,12 @@ bool EQ::InventorySlot::IsContainerSocket() const
|
||||
return true;
|
||||
}
|
||||
|
||||
EQ::InventorySlot EQ::InventorySlot::ToTopOwner() const
|
||||
EQEmu::InventorySlot EQEmu::InventorySlot::ToTopOwner() const
|
||||
{
|
||||
return InventorySlot(_type_index, _slot_index);
|
||||
}
|
||||
|
||||
EQ::InventorySlot EQ::InventorySlot::ToOwner() const
|
||||
EQEmu::InventorySlot EQEmu::InventorySlot::ToOwner() const
|
||||
{
|
||||
if (IsSlot() || IsSlotSocket() || IsContainer())
|
||||
return InventorySlot(_type_index, _slot_index);
|
||||
@@ -312,17 +312,17 @@ EQ::InventorySlot EQ::InventorySlot::ToOwner() const
|
||||
return InventorySlot();
|
||||
}
|
||||
|
||||
const std::string EQ::InventorySlot::ToString() const
|
||||
const std::string EQEmu::InventorySlot::ToString() const
|
||||
{
|
||||
return StringFormat("(%i%s, %i, %i, %i)", _type_index, (_typeless ? " [typeless]" : ""), _slot_index, _container_index, _socket_index);
|
||||
}
|
||||
|
||||
const std::string EQ::InventorySlot::ToName() const
|
||||
const std::string EQEmu::InventorySlot::ToName() const
|
||||
{
|
||||
return StringFormat("InventorySlot - _type_index: %i%s, _slot_index: %i, _container_index: %i, _socket_index: %i", _type_index, (_typeless ? " [typeless]" : ""), _slot_index, _container_index, _socket_index);
|
||||
}
|
||||
|
||||
void EQ::InventorySlot::SetInvalidSlot()
|
||||
void EQEmu::InventorySlot::SetInvalidSlot()
|
||||
{
|
||||
_type_index = invtype::TYPE_INVALID;
|
||||
_slot_index = invslot::SLOT_INVALID;
|
||||
@@ -330,7 +330,7 @@ void EQ::InventorySlot::SetInvalidSlot()
|
||||
_socket_index = invaug::SOCKET_INVALID;
|
||||
}
|
||||
|
||||
//bool EQ::InventorySlot::IsBonusIndex(int16 slot_index)
|
||||
//bool EQEmu::InventorySlot::IsBonusIndex(int16 slot_index)
|
||||
//{
|
||||
// if ((slot_index >= inventory::EquipmentBegin) && (slot_index <= inventory::EquipmentEnd) && (slot_index != inventory::slotAmmo))
|
||||
// return true;
|
||||
@@ -338,7 +338,7 @@ void EQ::InventorySlot::SetInvalidSlot()
|
||||
// return false;
|
||||
//}
|
||||
|
||||
//bool EQ::InventorySlot::IsBonusSlot() const
|
||||
//bool EQEmu::InventorySlot::IsBonusSlot() const
|
||||
//{
|
||||
// if ((_type_index != inventory::typePossessions) || (_container_index != inventory::containerInvalid) || (_socket_index != inventory::socketInvalid))
|
||||
// return false;
|
||||
@@ -346,7 +346,7 @@ void EQ::InventorySlot::SetInvalidSlot()
|
||||
// return IsBonusIndex(_slot_index);
|
||||
//}
|
||||
|
||||
bool inventory_slot_typeless_lessthan(const EQ::InventorySlot& lhs, const EQ::InventorySlot& rhs)
|
||||
bool inventory_slot_typeless_lessthan(const EQEmu::InventorySlot& lhs, const EQEmu::InventorySlot& rhs)
|
||||
{
|
||||
if (lhs.SlotIndex() < rhs.SlotIndex())
|
||||
return true;
|
||||
@@ -360,7 +360,7 @@ bool inventory_slot_typeless_lessthan(const EQ::InventorySlot& lhs, const EQ::In
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EQ::InventorySlot::operator<(const InventorySlot& rhs) const
|
||||
bool EQEmu::InventorySlot::operator<(const InventorySlot& rhs) const
|
||||
{
|
||||
if (Typeless() || rhs.Typeless())
|
||||
return inventory_slot_typeless_lessthan(*this, rhs);
|
||||
@@ -380,7 +380,7 @@ bool EQ::InventorySlot::operator<(const InventorySlot& rhs) const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EQ::operator==(const InventorySlot& lhs, const InventorySlot& rhs)
|
||||
bool EQEmu::operator==(const InventorySlot& lhs, const InventorySlot& rhs)
|
||||
{
|
||||
if (lhs.Typeless() || rhs.Typeless())
|
||||
return ((lhs.SlotIndex() == rhs.SlotIndex()) && (lhs.ContainerIndex() == rhs.ContainerIndex()) && (lhs.SocketIndex() == rhs.SocketIndex()));
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "emu_constants.h"
|
||||
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
class InventorySlot;
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "eqemu_exception.h"
|
||||
#include "eqemu_config.h"
|
||||
|
||||
namespace EQ {
|
||||
namespace EQEmu {
|
||||
struct IPCMutex::Implementation {
|
||||
#ifdef _WINDOWS
|
||||
HANDLE mut_;
|
||||
|
||||
+1
-1
@@ -21,7 +21,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace EQ {
|
||||
namespace EQEmu {
|
||||
|
||||
//! Interprocess Named Binary Semaphore (Mutex)
|
||||
/*!
|
||||
|
||||
+10
-10
@@ -23,7 +23,7 @@
|
||||
//#include "deity.h"
|
||||
|
||||
|
||||
uint32 EQ::item::ConvertAugTypeToAugTypeBit(uint8 aug_type)
|
||||
uint32 EQEmu::item::ConvertAugTypeToAugTypeBit(uint8 aug_type)
|
||||
{
|
||||
switch (aug_type) {
|
||||
case AugTypeGeneralSingleStat:
|
||||
@@ -95,7 +95,7 @@ uint32 EQ::item::ConvertAugTypeToAugTypeBit(uint8 aug_type)
|
||||
}
|
||||
}
|
||||
|
||||
uint8 EQ::item::ConvertAugTypeBitToAugType(uint32 aug_type_bit)
|
||||
uint8 EQEmu::item::ConvertAugTypeBitToAugType(uint32 aug_type_bit)
|
||||
{
|
||||
switch (aug_type_bit) {
|
||||
case bit_AugTypeGeneralSingleStat:
|
||||
@@ -167,7 +167,7 @@ uint8 EQ::item::ConvertAugTypeBitToAugType(uint32 aug_type_bit)
|
||||
}
|
||||
}
|
||||
|
||||
bool EQ::ItemData::IsEquipable(uint16 race_id, uint16 class_id) const
|
||||
bool EQEmu::ItemData::IsEquipable(uint16 race_id, uint16 class_id) const
|
||||
{
|
||||
if (!(Races & GetPlayerRaceBit(race_id)))
|
||||
return false;
|
||||
@@ -178,37 +178,37 @@ bool EQ::ItemData::IsEquipable(uint16 race_id, uint16 class_id) const
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EQ::ItemData::IsClassCommon() const
|
||||
bool EQEmu::ItemData::IsClassCommon() const
|
||||
{
|
||||
return (ItemClass == item::ItemClassCommon);
|
||||
}
|
||||
|
||||
bool EQ::ItemData::IsClassBag() const
|
||||
bool EQEmu::ItemData::IsClassBag() const
|
||||
{
|
||||
return (ItemClass == item::ItemClassBag);
|
||||
}
|
||||
|
||||
bool EQ::ItemData::IsClassBook() const
|
||||
bool EQEmu::ItemData::IsClassBook() const
|
||||
{
|
||||
return (ItemClass == item::ItemClassBook);
|
||||
}
|
||||
|
||||
bool EQ::ItemData::IsType1HWeapon() const
|
||||
bool EQEmu::ItemData::IsType1HWeapon() const
|
||||
{
|
||||
return ((ItemType == item::ItemType1HBlunt) || (ItemType == item::ItemType1HSlash) || (ItemType == item::ItemType1HPiercing) || (ItemType == item::ItemTypeMartial));
|
||||
}
|
||||
|
||||
bool EQ::ItemData::IsType2HWeapon() const
|
||||
bool EQEmu::ItemData::IsType2HWeapon() const
|
||||
{
|
||||
return ((ItemType == item::ItemType2HBlunt) || (ItemType == item::ItemType2HSlash) || (ItemType == item::ItemType2HPiercing));
|
||||
}
|
||||
|
||||
bool EQ::ItemData::IsTypeShield() const
|
||||
bool EQEmu::ItemData::IsTypeShield() const
|
||||
{
|
||||
return (ItemType == item::ItemTypeShield);
|
||||
}
|
||||
|
||||
bool EQ::ItemData::CheckLoreConflict(const ItemData* l_item, const ItemData* r_item)
|
||||
bool EQEmu::ItemData::CheckLoreConflict(const ItemData* l_item, const ItemData* r_item)
|
||||
{
|
||||
if (!l_item || !r_item)
|
||||
return false;
|
||||
|
||||
+1
-2
@@ -47,7 +47,7 @@
|
||||
#include "emu_constants.h"
|
||||
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
namespace item {
|
||||
enum ItemClass {
|
||||
@@ -434,7 +434,6 @@ namespace EQ
|
||||
//uint32 Unk054;
|
||||
int16 MaxCharges; // Maximum charges items can hold: -1 if not a chargeable item
|
||||
uint8 ItemType; // Item Type/Skill (itemClass* from above)
|
||||
int32 SubType; // Some items have sub types that can be used for other things (unbreakable fishing poles, SE_FFItemClass)
|
||||
uint8 Material; // Item material type
|
||||
uint32 HerosForgeModel;// Hero's Forge Armor Model Type (2-13?)
|
||||
float SellRate; // Sell rate
|
||||
|
||||
@@ -203,4 +203,3 @@ F(procname)
|
||||
F(wornname)
|
||||
F(focusname)
|
||||
F(scrollname)
|
||||
F(subtype)
|
||||
|
||||
+109
-109
@@ -54,9 +54,9 @@ static inline int32 GetNextItemInstSerialNumber() {
|
||||
}
|
||||
|
||||
//
|
||||
// class EQ::ItemInstance
|
||||
// class EQEmu::ItemInstance
|
||||
//
|
||||
EQ::ItemInstance::ItemInstance(const ItemData* item, int16 charges) {
|
||||
EQEmu::ItemInstance::ItemInstance(const ItemData* item, int16 charges) {
|
||||
m_use_type = ItemInstNormal;
|
||||
if(item) {
|
||||
m_item = new ItemData(*item);
|
||||
@@ -87,7 +87,7 @@ EQ::ItemInstance::ItemInstance(const ItemData* item, int16 charges) {
|
||||
m_new_id_file = 0;
|
||||
}
|
||||
|
||||
EQ::ItemInstance::ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges) {
|
||||
EQEmu::ItemInstance::ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges) {
|
||||
m_use_type = ItemInstNormal;
|
||||
m_item = db->GetItem(item_id);
|
||||
if(m_item) {
|
||||
@@ -121,7 +121,7 @@ EQ::ItemInstance::ItemInstance(SharedDatabase *db, uint32 item_id, int16 charges
|
||||
m_new_id_file = 0;
|
||||
}
|
||||
|
||||
EQ::ItemInstance::ItemInstance(ItemInstTypes use_type) {
|
||||
EQEmu::ItemInstance::ItemInstance(ItemInstTypes use_type) {
|
||||
m_use_type = use_type;
|
||||
m_item = nullptr;
|
||||
m_charges = 0;
|
||||
@@ -143,8 +143,8 @@ EQ::ItemInstance::ItemInstance(ItemInstTypes use_type) {
|
||||
m_new_id_file = 0;
|
||||
}
|
||||
|
||||
// Make a copy of an EQ::ItemInstance object
|
||||
EQ::ItemInstance::ItemInstance(const ItemInstance& copy)
|
||||
// Make a copy of an EQEmu::ItemInstance object
|
||||
EQEmu::ItemInstance::ItemInstance(const ItemInstance& copy)
|
||||
{
|
||||
m_use_type=copy.m_use_type;
|
||||
if(copy.m_item)
|
||||
@@ -202,7 +202,7 @@ EQ::ItemInstance::ItemInstance(const ItemInstance& copy)
|
||||
}
|
||||
|
||||
// Clean up container contents
|
||||
EQ::ItemInstance::~ItemInstance()
|
||||
EQEmu::ItemInstance::~ItemInstance()
|
||||
{
|
||||
Clear();
|
||||
safe_delete(m_item);
|
||||
@@ -211,7 +211,7 @@ EQ::ItemInstance::~ItemInstance()
|
||||
}
|
||||
|
||||
// Query item type
|
||||
bool EQ::ItemInstance::IsType(item::ItemClass item_class) const
|
||||
bool EQEmu::ItemInstance::IsType(item::ItemClass item_class) const
|
||||
{
|
||||
// IsType(<ItemClassTypes>) does not protect against 'm_item = nullptr'
|
||||
|
||||
@@ -225,23 +225,23 @@ bool EQ::ItemInstance::IsType(item::ItemClass item_class) const
|
||||
return (m_item->ItemClass == item_class);
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsClassCommon() const
|
||||
bool EQEmu::ItemInstance::IsClassCommon() const
|
||||
{
|
||||
return (m_item && m_item->IsClassCommon());
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsClassBag() const
|
||||
bool EQEmu::ItemInstance::IsClassBag() const
|
||||
{
|
||||
return (m_item && m_item->IsClassBag());
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsClassBook() const
|
||||
bool EQEmu::ItemInstance::IsClassBook() const
|
||||
{
|
||||
return (m_item && m_item->IsClassBook());
|
||||
}
|
||||
|
||||
// Is item stackable?
|
||||
bool EQ::ItemInstance::IsStackable() const
|
||||
bool EQEmu::ItemInstance::IsStackable() const
|
||||
{
|
||||
if (!m_item)
|
||||
return false;
|
||||
@@ -249,7 +249,7 @@ bool EQ::ItemInstance::IsStackable() const
|
||||
return m_item->Stackable;
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsCharged() const
|
||||
bool EQEmu::ItemInstance::IsCharged() const
|
||||
{
|
||||
if (!m_item)
|
||||
return false;
|
||||
@@ -261,7 +261,7 @@ bool EQ::ItemInstance::IsCharged() const
|
||||
}
|
||||
|
||||
// Can item be equipped?
|
||||
bool EQ::ItemInstance::IsEquipable(uint16 race, uint16 class_) const
|
||||
bool EQEmu::ItemInstance::IsEquipable(uint16 race, uint16 class_) const
|
||||
{
|
||||
if (!m_item || (m_item->Slots == 0))
|
||||
return false;
|
||||
@@ -270,18 +270,18 @@ bool EQ::ItemInstance::IsEquipable(uint16 race, uint16 class_) const
|
||||
}
|
||||
|
||||
// Can equip at this slot?
|
||||
bool EQ::ItemInstance::IsEquipable(int16 slot_id) const
|
||||
bool EQEmu::ItemInstance::IsEquipable(int16 slot_id) const
|
||||
{
|
||||
if (!m_item)
|
||||
return false;
|
||||
|
||||
if (slot_id < EQ::invslot::EQUIPMENT_BEGIN || slot_id > EQ::invslot::EQUIPMENT_END)
|
||||
if (slot_id < EQEmu::invslot::EQUIPMENT_BEGIN || slot_id > EQEmu::invslot::EQUIPMENT_END)
|
||||
return false;
|
||||
|
||||
return ((m_item->Slots & (1 << slot_id)) != 0);
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsAugmentable() const
|
||||
bool EQEmu::ItemInstance::IsAugmentable() const
|
||||
{
|
||||
if (!m_item)
|
||||
return false;
|
||||
@@ -294,7 +294,7 @@ bool EQ::ItemInstance::IsAugmentable() const
|
||||
return false;
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::AvailableWearSlot(uint32 aug_wear_slots) const {
|
||||
bool EQEmu::ItemInstance::AvailableWearSlot(uint32 aug_wear_slots) const {
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return false;
|
||||
|
||||
@@ -306,10 +306,10 @@ bool EQ::ItemInstance::AvailableWearSlot(uint32 aug_wear_slots) const {
|
||||
}
|
||||
}
|
||||
|
||||
return (index <= EQ::invslot::EQUIPMENT_END);
|
||||
return (index <= EQEmu::invslot::EQUIPMENT_END);
|
||||
}
|
||||
|
||||
int8 EQ::ItemInstance::AvailableAugmentSlot(int32 augtype) const
|
||||
int8 EQEmu::ItemInstance::AvailableAugmentSlot(int32 augtype) const
|
||||
{
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return INVALID_INDEX;
|
||||
@@ -324,7 +324,7 @@ int8 EQ::ItemInstance::AvailableAugmentSlot(int32 augtype) const
|
||||
return (index <= invaug::SOCKET_END) ? index : INVALID_INDEX;
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsAugmentSlotAvailable(int32 augtype, uint8 slot) const
|
||||
bool EQEmu::ItemInstance::IsAugmentSlotAvailable(int32 augtype, uint8 slot) const
|
||||
{
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return false;
|
||||
@@ -336,7 +336,7 @@ bool EQ::ItemInstance::IsAugmentSlotAvailable(int32 augtype, uint8 slot) const
|
||||
}
|
||||
|
||||
// Retrieve item inside container
|
||||
EQ::ItemInstance* EQ::ItemInstance::GetItem(uint8 index) const
|
||||
EQEmu::ItemInstance* EQEmu::ItemInstance::GetItem(uint8 index) const
|
||||
{
|
||||
auto it = m_contents.find(index);
|
||||
if (it != m_contents.end()) {
|
||||
@@ -346,7 +346,7 @@ EQ::ItemInstance* EQ::ItemInstance::GetItem(uint8 index) const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
uint32 EQ::ItemInstance::GetItemID(uint8 slot) const
|
||||
uint32 EQEmu::ItemInstance::GetItemID(uint8 slot) const
|
||||
{
|
||||
ItemInstance *item = GetItem(slot);
|
||||
if (item)
|
||||
@@ -355,7 +355,7 @@ uint32 EQ::ItemInstance::GetItemID(uint8 slot) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::PutItem(uint8 index, const ItemInstance& inst)
|
||||
void EQEmu::ItemInstance::PutItem(uint8 index, const ItemInstance& inst)
|
||||
{
|
||||
// Clean up item already in slot (if exists)
|
||||
DeleteItem(index);
|
||||
@@ -365,7 +365,7 @@ void EQ::ItemInstance::PutItem(uint8 index, const ItemInstance& inst)
|
||||
}
|
||||
|
||||
// Remove item inside container
|
||||
void EQ::ItemInstance::DeleteItem(uint8 index)
|
||||
void EQEmu::ItemInstance::DeleteItem(uint8 index)
|
||||
{
|
||||
ItemInstance* inst = PopItem(index);
|
||||
safe_delete(inst);
|
||||
@@ -373,7 +373,7 @@ void EQ::ItemInstance::DeleteItem(uint8 index)
|
||||
|
||||
// Remove item from container without memory delete
|
||||
// Hands over memory ownership to client of this function call
|
||||
EQ::ItemInstance* EQ::ItemInstance::PopItem(uint8 index)
|
||||
EQEmu::ItemInstance* EQEmu::ItemInstance::PopItem(uint8 index)
|
||||
{
|
||||
auto iter = m_contents.find(index);
|
||||
if (iter != m_contents.end()) {
|
||||
@@ -386,7 +386,7 @@ EQ::ItemInstance* EQ::ItemInstance::PopItem(uint8 index)
|
||||
}
|
||||
|
||||
// Remove all items from container
|
||||
void EQ::ItemInstance::Clear()
|
||||
void EQEmu::ItemInstance::Clear()
|
||||
{
|
||||
// Destroy container contents
|
||||
for (auto iter = m_contents.begin(); iter != m_contents.end(); ++iter) {
|
||||
@@ -396,7 +396,7 @@ void EQ::ItemInstance::Clear()
|
||||
}
|
||||
|
||||
// Remove all items from container
|
||||
void EQ::ItemInstance::ClearByFlags(byFlagSetting is_nodrop, byFlagSetting is_norent)
|
||||
void EQEmu::ItemInstance::ClearByFlags(byFlagSetting is_nodrop, byFlagSetting is_norent)
|
||||
{
|
||||
// TODO: This needs work...
|
||||
|
||||
@@ -458,7 +458,7 @@ void EQ::ItemInstance::ClearByFlags(byFlagSetting is_nodrop, byFlagSetting is_no
|
||||
}
|
||||
}
|
||||
|
||||
uint8 EQ::ItemInstance::FirstOpenSlot() const
|
||||
uint8 EQEmu::ItemInstance::FirstOpenSlot() const
|
||||
{
|
||||
if (!m_item)
|
||||
return INVALID_INDEX;
|
||||
@@ -472,7 +472,7 @@ uint8 EQ::ItemInstance::FirstOpenSlot() const
|
||||
return (i < slots) ? i : INVALID_INDEX;
|
||||
}
|
||||
|
||||
uint8 EQ::ItemInstance::GetTotalItemCount() const
|
||||
uint8 EQEmu::ItemInstance::GetTotalItemCount() const
|
||||
{
|
||||
if (!m_item)
|
||||
return 0;
|
||||
@@ -486,7 +486,7 @@ uint8 EQ::ItemInstance::GetTotalItemCount() const
|
||||
return item_count;
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsNoneEmptyContainer()
|
||||
bool EQEmu::ItemInstance::IsNoneEmptyContainer()
|
||||
{
|
||||
if (!m_item || !m_item->IsClassBag())
|
||||
return false;
|
||||
@@ -500,7 +500,7 @@ bool EQ::ItemInstance::IsNoneEmptyContainer()
|
||||
}
|
||||
|
||||
// Retrieve augment inside item
|
||||
EQ::ItemInstance* EQ::ItemInstance::GetAugment(uint8 slot) const
|
||||
EQEmu::ItemInstance* EQEmu::ItemInstance::GetAugment(uint8 slot) const
|
||||
{
|
||||
if (m_item && m_item->IsClassCommon())
|
||||
return GetItem(slot);
|
||||
@@ -508,7 +508,7 @@ EQ::ItemInstance* EQ::ItemInstance::GetAugment(uint8 slot) const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
EQ::ItemInstance* EQ::ItemInstance::GetOrnamentationAug(int32 ornamentationAugtype) const
|
||||
EQEmu::ItemInstance* EQEmu::ItemInstance::GetOrnamentationAug(int32 ornamentationAugtype) const
|
||||
{
|
||||
if (!m_item || !m_item->IsClassCommon()) { return nullptr; }
|
||||
if (ornamentationAugtype == 0) { return nullptr; }
|
||||
@@ -533,7 +533,7 @@ EQ::ItemInstance* EQ::ItemInstance::GetOrnamentationAug(int32 ornamentationAugty
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
uint32 EQ::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const {
|
||||
uint32 EQEmu::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const {
|
||||
// Not a Hero Forge item.
|
||||
if (m_ornament_hero_model == 0 || material_slot < 0)
|
||||
return 0;
|
||||
@@ -546,7 +546,7 @@ uint32 EQ::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const {
|
||||
return (m_ornament_hero_model * 100) + material_slot;
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::UpdateOrnamentationInfo() {
|
||||
bool EQEmu::ItemInstance::UpdateOrnamentationInfo() {
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return false;
|
||||
|
||||
@@ -582,7 +582,7 @@ bool EQ::ItemInstance::UpdateOrnamentationInfo() {
|
||||
return ornamentSet;
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::CanTransform(const ItemData *ItemToTry, const ItemData *Container, bool AllowAll) {
|
||||
bool EQEmu::ItemInstance::CanTransform(const ItemData *ItemToTry, const ItemData *Container, bool AllowAll) {
|
||||
if (!ItemToTry || !Container) return false;
|
||||
|
||||
if (ItemToTry->ItemType == item::ItemTypeArrow || strnlen(Container->CharmFile, 30) == 0)
|
||||
@@ -629,7 +629,7 @@ bool EQ::ItemInstance::CanTransform(const ItemData *ItemToTry, const ItemData *C
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32 EQ::ItemInstance::GetAugmentItemID(uint8 slot) const
|
||||
uint32 EQEmu::ItemInstance::GetAugmentItemID(uint8 slot) const
|
||||
{
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return 0;
|
||||
@@ -638,7 +638,7 @@ uint32 EQ::ItemInstance::GetAugmentItemID(uint8 slot) const
|
||||
}
|
||||
|
||||
// Add an augment to the item
|
||||
void EQ::ItemInstance::PutAugment(uint8 slot, const ItemInstance& augment)
|
||||
void EQEmu::ItemInstance::PutAugment(uint8 slot, const ItemInstance& augment)
|
||||
{
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return;
|
||||
@@ -646,7 +646,7 @@ void EQ::ItemInstance::PutAugment(uint8 slot, const ItemInstance& augment)
|
||||
PutItem(slot, augment);
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::PutAugment(SharedDatabase *db, uint8 slot, uint32 item_id)
|
||||
void EQEmu::ItemInstance::PutAugment(SharedDatabase *db, uint8 slot, uint32 item_id)
|
||||
{
|
||||
if (item_id == 0) { return; }
|
||||
if (db == nullptr) { return; /* TODO: add log message for nullptr */ }
|
||||
@@ -659,7 +659,7 @@ void EQ::ItemInstance::PutAugment(SharedDatabase *db, uint8 slot, uint32 item_id
|
||||
}
|
||||
|
||||
// Remove augment from item and destroy it
|
||||
void EQ::ItemInstance::DeleteAugment(uint8 index)
|
||||
void EQEmu::ItemInstance::DeleteAugment(uint8 index)
|
||||
{
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return;
|
||||
@@ -668,7 +668,7 @@ void EQ::ItemInstance::DeleteAugment(uint8 index)
|
||||
}
|
||||
|
||||
// Remove augment from item and return it
|
||||
EQ::ItemInstance* EQ::ItemInstance::RemoveAugment(uint8 index)
|
||||
EQEmu::ItemInstance* EQEmu::ItemInstance::RemoveAugment(uint8 index)
|
||||
{
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return nullptr;
|
||||
@@ -676,7 +676,7 @@ EQ::ItemInstance* EQ::ItemInstance::RemoveAugment(uint8 index)
|
||||
return PopItem(index);
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsAugmented()
|
||||
bool EQEmu::ItemInstance::IsAugmented()
|
||||
{
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return false;
|
||||
@@ -690,7 +690,7 @@ bool EQ::ItemInstance::IsAugmented()
|
||||
}
|
||||
|
||||
// Has attack/delay?
|
||||
bool EQ::ItemInstance::IsWeapon() const
|
||||
bool EQEmu::ItemInstance::IsWeapon() const
|
||||
{
|
||||
if (!m_item || !m_item->IsClassCommon())
|
||||
return false;
|
||||
@@ -701,7 +701,7 @@ bool EQ::ItemInstance::IsWeapon() const
|
||||
return ((m_item->Damage != 0) && (m_item->Delay != 0));
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsAmmo() const
|
||||
bool EQEmu::ItemInstance::IsAmmo() const
|
||||
{
|
||||
if (!m_item)
|
||||
return false;
|
||||
@@ -717,7 +717,7 @@ bool EQ::ItemInstance::IsAmmo() const
|
||||
|
||||
}
|
||||
|
||||
const EQ::ItemData* EQ::ItemInstance::GetItem() const
|
||||
const EQEmu::ItemData* EQEmu::ItemInstance::GetItem() const
|
||||
{
|
||||
if (!m_item)
|
||||
return nullptr;
|
||||
@@ -728,13 +728,13 @@ const EQ::ItemData* EQ::ItemInstance::GetItem() const
|
||||
return m_item;
|
||||
}
|
||||
|
||||
const EQ::ItemData* EQ::ItemInstance::GetUnscaledItem() const
|
||||
const EQEmu::ItemData* EQEmu::ItemInstance::GetUnscaledItem() const
|
||||
{
|
||||
// No operator calls and defaults to nullptr
|
||||
return m_item;
|
||||
}
|
||||
|
||||
std::string EQ::ItemInstance::GetCustomDataString() const {
|
||||
std::string EQEmu::ItemInstance::GetCustomDataString() const {
|
||||
std::string ret_val;
|
||||
auto iter = m_custom_data.begin();
|
||||
while (iter != m_custom_data.end()) {
|
||||
@@ -753,7 +753,7 @@ std::string EQ::ItemInstance::GetCustomDataString() const {
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
std::string EQ::ItemInstance::GetCustomData(std::string identifier) {
|
||||
std::string EQEmu::ItemInstance::GetCustomData(std::string identifier) {
|
||||
std::map<std::string, std::string>::const_iterator iter = m_custom_data.find(identifier);
|
||||
if (iter != m_custom_data.end()) {
|
||||
return iter->second;
|
||||
@@ -762,49 +762,49 @@ std::string EQ::ItemInstance::GetCustomData(std::string identifier) {
|
||||
return "";
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::SetCustomData(std::string identifier, std::string value) {
|
||||
void EQEmu::ItemInstance::SetCustomData(std::string identifier, std::string value) {
|
||||
DeleteCustomData(identifier);
|
||||
m_custom_data[identifier] = value;
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::SetCustomData(std::string identifier, int value) {
|
||||
void EQEmu::ItemInstance::SetCustomData(std::string identifier, int value) {
|
||||
DeleteCustomData(identifier);
|
||||
std::stringstream ss;
|
||||
ss << value;
|
||||
m_custom_data[identifier] = ss.str();
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::SetCustomData(std::string identifier, float value) {
|
||||
void EQEmu::ItemInstance::SetCustomData(std::string identifier, float value) {
|
||||
DeleteCustomData(identifier);
|
||||
std::stringstream ss;
|
||||
ss << value;
|
||||
m_custom_data[identifier] = ss.str();
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::SetCustomData(std::string identifier, bool value) {
|
||||
void EQEmu::ItemInstance::SetCustomData(std::string identifier, bool value) {
|
||||
DeleteCustomData(identifier);
|
||||
std::stringstream ss;
|
||||
ss << value;
|
||||
m_custom_data[identifier] = ss.str();
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::DeleteCustomData(std::string identifier) {
|
||||
void EQEmu::ItemInstance::DeleteCustomData(std::string identifier) {
|
||||
auto iter = m_custom_data.find(identifier);
|
||||
if (iter != m_custom_data.end()) {
|
||||
m_custom_data.erase(iter);
|
||||
}
|
||||
}
|
||||
|
||||
// Clone a type of EQ::ItemInstance object
|
||||
// Clone a type of EQEmu::ItemInstance object
|
||||
// c++ doesn't allow a polymorphic copy constructor,
|
||||
// so we have to resort to a polymorphic Clone()
|
||||
EQ::ItemInstance* EQ::ItemInstance::Clone() const
|
||||
EQEmu::ItemInstance* EQEmu::ItemInstance::Clone() const
|
||||
{
|
||||
// Pseudo-polymorphic copy constructor
|
||||
return new ItemInstance(*this);
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsSlotAllowed(int16 slot_id) const {
|
||||
bool EQEmu::ItemInstance::IsSlotAllowed(int16 slot_id) const {
|
||||
if (!m_item) { return false; }
|
||||
else if (InventoryProfile::SupportsContainers(slot_id)) { return true; }
|
||||
else if (m_item->Slots & (1 << slot_id)) { return true; }
|
||||
@@ -812,7 +812,7 @@ bool EQ::ItemInstance::IsSlotAllowed(int16 slot_id) const {
|
||||
else { return false; }
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::IsDroppable(bool recurse) const
|
||||
bool EQEmu::ItemInstance::IsDroppable(bool recurse) const
|
||||
{
|
||||
if (!m_item)
|
||||
return false;
|
||||
@@ -838,7 +838,7 @@ bool EQ::ItemInstance::IsDroppable(bool recurse) const
|
||||
return true;
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::Initialize(SharedDatabase *db) {
|
||||
void EQEmu::ItemInstance::Initialize(SharedDatabase *db) {
|
||||
// if there's no actual item, don't do anything
|
||||
if (!m_item)
|
||||
return;
|
||||
@@ -855,7 +855,7 @@ void EQ::ItemInstance::Initialize(SharedDatabase *db) {
|
||||
}
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::ScaleItem() {
|
||||
void EQEmu::ItemInstance::ScaleItem() {
|
||||
if (!m_item)
|
||||
return;
|
||||
|
||||
@@ -939,18 +939,18 @@ void EQ::ItemInstance::ScaleItem() {
|
||||
m_scaledItem->CharmFileID = 0; // this stops the client from trying to scale the item itself.
|
||||
}
|
||||
|
||||
bool EQ::ItemInstance::EvolveOnAllKills() const {
|
||||
bool EQEmu::ItemInstance::EvolveOnAllKills() const {
|
||||
return (m_evolveInfo && m_evolveInfo->AllKills);
|
||||
}
|
||||
|
||||
int8 EQ::ItemInstance::GetMaxEvolveLvl() const {
|
||||
int8 EQEmu::ItemInstance::GetMaxEvolveLvl() const {
|
||||
if (m_evolveInfo)
|
||||
return m_evolveInfo->MaxLvl;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32 EQ::ItemInstance::GetKillsNeeded(uint8 currentlevel) {
|
||||
uint32 EQEmu::ItemInstance::GetKillsNeeded(uint8 currentlevel) {
|
||||
uint32 kills = -1; // default to -1 (max uint32 value) because this value is usually divided by, so we don't want to ever return zero.
|
||||
if (m_evolveInfo)
|
||||
if (currentlevel != m_evolveInfo->MaxLvl)
|
||||
@@ -962,24 +962,24 @@ uint32 EQ::ItemInstance::GetKillsNeeded(uint8 currentlevel) {
|
||||
return kills;
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::SetTimer(std::string name, uint32 time) {
|
||||
void EQEmu::ItemInstance::SetTimer(std::string name, uint32 time) {
|
||||
Timer t(time);
|
||||
t.Start(time, false);
|
||||
m_timers[name] = t;
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::StopTimer(std::string name) {
|
||||
void EQEmu::ItemInstance::StopTimer(std::string name) {
|
||||
auto iter = m_timers.find(name);
|
||||
if(iter != m_timers.end()) {
|
||||
m_timers.erase(iter);
|
||||
}
|
||||
}
|
||||
|
||||
void EQ::ItemInstance::ClearTimers() {
|
||||
void EQEmu::ItemInstance::ClearTimers() {
|
||||
m_timers.clear();
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemArmorClass(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemArmorClass(bool augments) const
|
||||
{
|
||||
int ac = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -993,7 +993,7 @@ int EQ::ItemInstance::GetItemArmorClass(bool augments) const
|
||||
return ac;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemElementalDamage(int &magic, int &fire, int &cold, int &poison, int &disease, int &chromatic, int &prismatic, int &physical, int &corruption, bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemElementalDamage(int &magic, int &fire, int &cold, int &poison, int &disease, int &chromatic, int &prismatic, int &physical, int &corruption, bool augments) const
|
||||
{
|
||||
const auto item = GetItem();
|
||||
if (item) {
|
||||
@@ -1035,7 +1035,7 @@ int EQ::ItemInstance::GetItemElementalDamage(int &magic, int &fire, int &cold, i
|
||||
return magic + fire + cold + poison + disease + chromatic + prismatic + physical + corruption;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemElementalFlag(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemElementalFlag(bool augments) const
|
||||
{
|
||||
int flag = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1056,7 +1056,7 @@ int EQ::ItemInstance::GetItemElementalFlag(bool augments) const
|
||||
return flag;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemElementalDamage(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemElementalDamage(bool augments) const
|
||||
{
|
||||
int damage = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1077,7 +1077,7 @@ int EQ::ItemInstance::GetItemElementalDamage(bool augments) const
|
||||
return damage;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemRecommendedLevel(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemRecommendedLevel(bool augments) const
|
||||
{
|
||||
int level = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1099,7 +1099,7 @@ int EQ::ItemInstance::GetItemRecommendedLevel(bool augments) const
|
||||
return level;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemRequiredLevel(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemRequiredLevel(bool augments) const
|
||||
{
|
||||
int level = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1121,7 +1121,7 @@ int EQ::ItemInstance::GetItemRequiredLevel(bool augments) const
|
||||
return level;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemWeaponDamage(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemWeaponDamage(bool augments) const
|
||||
{
|
||||
int damage = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1137,7 +1137,7 @@ int EQ::ItemInstance::GetItemWeaponDamage(bool augments) const
|
||||
return damage;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemBackstabDamage(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemBackstabDamage(bool augments) const
|
||||
{
|
||||
int damage = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1153,7 +1153,7 @@ int EQ::ItemInstance::GetItemBackstabDamage(bool augments) const
|
||||
return damage;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemBaneDamageBody(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemBaneDamageBody(bool augments) const
|
||||
{
|
||||
int body = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1174,7 +1174,7 @@ int EQ::ItemInstance::GetItemBaneDamageBody(bool augments) const
|
||||
return body;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemBaneDamageRace(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemBaneDamageRace(bool augments) const
|
||||
{
|
||||
int race = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1195,7 +1195,7 @@ int EQ::ItemInstance::GetItemBaneDamageRace(bool augments) const
|
||||
return race;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemBaneDamageBody(bodyType against, bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemBaneDamageBody(bodyType against, bool augments) const
|
||||
{
|
||||
int damage = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1212,7 +1212,7 @@ int EQ::ItemInstance::GetItemBaneDamageBody(bodyType against, bool augments) con
|
||||
return damage;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemBaneDamageRace(uint16 against, bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemBaneDamageRace(uint16 against, bool augments) const
|
||||
{
|
||||
int damage = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1229,7 +1229,7 @@ int EQ::ItemInstance::GetItemBaneDamageRace(uint16 against, bool augments) const
|
||||
return damage;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemMagical(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemMagical(bool augments) const
|
||||
{
|
||||
const auto item = GetItem();
|
||||
if (item) {
|
||||
@@ -1245,7 +1245,7 @@ int EQ::ItemInstance::GetItemMagical(bool augments) const
|
||||
return 0;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHP(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHP(bool augments) const
|
||||
{
|
||||
int hp = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1259,7 +1259,7 @@ int EQ::ItemInstance::GetItemHP(bool augments) const
|
||||
return hp;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemMana(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemMana(bool augments) const
|
||||
{
|
||||
int mana = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1273,7 +1273,7 @@ int EQ::ItemInstance::GetItemMana(bool augments) const
|
||||
return mana;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemEndur(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemEndur(bool augments) const
|
||||
{
|
||||
int endur = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1287,7 +1287,7 @@ int EQ::ItemInstance::GetItemEndur(bool augments) const
|
||||
return endur;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemAttack(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemAttack(bool augments) const
|
||||
{
|
||||
int atk = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1301,7 +1301,7 @@ int EQ::ItemInstance::GetItemAttack(bool augments) const
|
||||
return atk;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemStr(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemStr(bool augments) const
|
||||
{
|
||||
int str = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1315,7 +1315,7 @@ int EQ::ItemInstance::GetItemStr(bool augments) const
|
||||
return str;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemSta(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemSta(bool augments) const
|
||||
{
|
||||
int sta = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1329,7 +1329,7 @@ int EQ::ItemInstance::GetItemSta(bool augments) const
|
||||
return sta;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemDex(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemDex(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1343,7 +1343,7 @@ int EQ::ItemInstance::GetItemDex(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemAgi(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemAgi(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1357,7 +1357,7 @@ int EQ::ItemInstance::GetItemAgi(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemInt(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemInt(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1371,7 +1371,7 @@ int EQ::ItemInstance::GetItemInt(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemWis(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemWis(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1385,7 +1385,7 @@ int EQ::ItemInstance::GetItemWis(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemCha(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemCha(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1399,7 +1399,7 @@ int EQ::ItemInstance::GetItemCha(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemMR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemMR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1413,7 +1413,7 @@ int EQ::ItemInstance::GetItemMR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemFR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemFR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1427,7 +1427,7 @@ int EQ::ItemInstance::GetItemFR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemCR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemCR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1441,7 +1441,7 @@ int EQ::ItemInstance::GetItemCR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemPR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemPR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1455,7 +1455,7 @@ int EQ::ItemInstance::GetItemPR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemDR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemDR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1469,7 +1469,7 @@ int EQ::ItemInstance::GetItemDR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemCorrup(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemCorrup(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1483,7 +1483,7 @@ int EQ::ItemInstance::GetItemCorrup(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicStr(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicStr(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1497,7 +1497,7 @@ int EQ::ItemInstance::GetItemHeroicStr(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicSta(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicSta(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1511,7 +1511,7 @@ int EQ::ItemInstance::GetItemHeroicSta(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicDex(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicDex(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1525,7 +1525,7 @@ int EQ::ItemInstance::GetItemHeroicDex(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicAgi(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicAgi(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1539,7 +1539,7 @@ int EQ::ItemInstance::GetItemHeroicAgi(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicInt(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicInt(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1553,7 +1553,7 @@ int EQ::ItemInstance::GetItemHeroicInt(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicWis(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicWis(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1567,7 +1567,7 @@ int EQ::ItemInstance::GetItemHeroicWis(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicCha(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicCha(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1581,7 +1581,7 @@ int EQ::ItemInstance::GetItemHeroicCha(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicMR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicMR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1595,7 +1595,7 @@ int EQ::ItemInstance::GetItemHeroicMR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicFR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicFR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1609,7 +1609,7 @@ int EQ::ItemInstance::GetItemHeroicFR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicCR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicCR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1623,7 +1623,7 @@ int EQ::ItemInstance::GetItemHeroicCR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicPR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicPR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1637,7 +1637,7 @@ int EQ::ItemInstance::GetItemHeroicPR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicDR(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicDR(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1651,7 +1651,7 @@ int EQ::ItemInstance::GetItemHeroicDR(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHeroicCorrup(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHeroicCorrup(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
@@ -1665,7 +1665,7 @@ int EQ::ItemInstance::GetItemHeroicCorrup(bool augments) const
|
||||
return total;
|
||||
}
|
||||
|
||||
int EQ::ItemInstance::GetItemHaste(bool augments) const
|
||||
int EQEmu::ItemInstance::GetItemHaste(bool augments) const
|
||||
{
|
||||
int total = 0;
|
||||
const auto item = GetItem();
|
||||
|
||||
@@ -38,7 +38,7 @@ class EvolveInfo; // Stores information about an evolving item family
|
||||
#include <map>
|
||||
|
||||
|
||||
// Specifies usage type for item inside EQ::ItemInstance
|
||||
// Specifies usage type for item inside EQEmu::ItemInstance
|
||||
enum ItemInstTypes
|
||||
{
|
||||
ItemInstNormal = 0,
|
||||
@@ -54,14 +54,14 @@ typedef enum {
|
||||
class SharedDatabase;
|
||||
|
||||
// ########################################
|
||||
// Class: EQ::ItemInstance
|
||||
// Class: EQEmu::ItemInstance
|
||||
// Base class for an instance of an item
|
||||
// An item instance encapsulates item data + data specific
|
||||
// to an item instance (includes dye, augments, charges, etc)
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
class InventoryProfile;
|
||||
|
||||
|
||||
class ItemInstance {
|
||||
public:
|
||||
/////////////////////////
|
||||
@@ -222,7 +222,7 @@ namespace EQ
|
||||
inline int32 GetSerialNumber() const { return m_SerialNumber; }
|
||||
inline void SetSerialNumber(int32 id) { m_SerialNumber = id; }
|
||||
|
||||
std::map<std::string, ::Timer>& GetTimers() { return m_timers; }
|
||||
std::map<std::string, Timer>& GetTimers() { return m_timers; }
|
||||
void SetTimer(std::string name, uint32 time);
|
||||
void StopTimer(std::string name);
|
||||
void ClearTimers();
|
||||
@@ -316,13 +316,13 @@ namespace EQ
|
||||
// Items inside of this item (augs or contents);
|
||||
std::map<uint8, ItemInstance*> m_contents; // Zero-based index: min=0, max=9
|
||||
std::map<std::string, std::string> m_custom_data;
|
||||
std::map<std::string, ::Timer> m_timers;
|
||||
std::map<std::string, Timer> m_timers;
|
||||
};
|
||||
}
|
||||
|
||||
class EvolveInfo {
|
||||
public:
|
||||
friend class EQ::ItemInstance;
|
||||
friend class EQEmu::ItemInstance;
|
||||
//temporary
|
||||
uint16 LvlKills[9];
|
||||
uint32 FirstItem;
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <string.h>
|
||||
|
||||
|
||||
uint8 EQ::lightsource::TypeToLevel(uint8 light_type)
|
||||
uint8 EQEmu::lightsource::TypeToLevel(uint8 light_type)
|
||||
{
|
||||
switch (light_type) {
|
||||
case LightTypeGlobeOfStars:
|
||||
@@ -55,7 +55,7 @@ uint8 EQ::lightsource::TypeToLevel(uint8 light_type)
|
||||
}
|
||||
}
|
||||
|
||||
bool EQ::lightsource::IsLevelGreater(uint8 left_type, uint8 right_type)
|
||||
bool EQEmu::lightsource::IsLevelGreater(uint8 left_type, uint8 right_type)
|
||||
{
|
||||
static const uint8 light_levels[LightTypeCount] = {
|
||||
LightLevelUnlit, /* LightTypeNone */
|
||||
@@ -82,17 +82,17 @@ bool EQ::lightsource::IsLevelGreater(uint8 left_type, uint8 right_type)
|
||||
return (light_levels[left_type] > light_levels[right_type]);
|
||||
}
|
||||
|
||||
EQ::LightSource_Struct::LightSource_Struct()
|
||||
EQEmu::LightSource_Struct::LightSource_Struct()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
void EQ::LightSource_Struct::Clear()
|
||||
void EQEmu::LightSource_Struct::Clear()
|
||||
{
|
||||
memset(&Slot, 0, (sizeof(uint8) * lightsource::LightCount));
|
||||
}
|
||||
|
||||
void EQ::LightSourceProfile::Clear()
|
||||
void EQEmu::LightSourceProfile::Clear()
|
||||
{
|
||||
Type.Clear();
|
||||
Level.Clear();
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include "types.h"
|
||||
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
namespace lightsource {
|
||||
enum LightSlot {
|
||||
|
||||
+7
-9
@@ -39,15 +39,13 @@ struct LootTable_Struct {
|
||||
};
|
||||
|
||||
struct LootDropEntries_Struct {
|
||||
uint32 item_id;
|
||||
int8 item_charges;
|
||||
uint8 equip_item;
|
||||
float chance;
|
||||
uint16 trivial_min_level;
|
||||
uint16 trivial_max_level;
|
||||
uint16 npc_min_level;
|
||||
uint16 npc_max_level;
|
||||
uint8 multiplier;
|
||||
uint32 item_id;
|
||||
int8 item_charges;
|
||||
uint8 equip_item;
|
||||
float chance;
|
||||
uint8 minlevel;
|
||||
uint8 maxlevel;
|
||||
uint8 multiplier;
|
||||
};
|
||||
|
||||
struct LootDrop_Struct {
|
||||
|
||||
+24
-24
@@ -20,7 +20,7 @@
|
||||
#include "memory_buffer.h"
|
||||
|
||||
|
||||
EQ::MemoryBuffer::MemoryBuffer()
|
||||
EQEmu::MemoryBuffer::MemoryBuffer()
|
||||
{
|
||||
buffer_ = nullptr;
|
||||
size_ = 0;
|
||||
@@ -29,7 +29,7 @@ EQ::MemoryBuffer::MemoryBuffer()
|
||||
write_pos_ = 0;
|
||||
}
|
||||
|
||||
EQ::MemoryBuffer::MemoryBuffer(size_t sz)
|
||||
EQEmu::MemoryBuffer::MemoryBuffer(size_t sz)
|
||||
{
|
||||
buffer_ = nullptr;
|
||||
size_ = 0;
|
||||
@@ -39,7 +39,7 @@ EQ::MemoryBuffer::MemoryBuffer(size_t sz)
|
||||
Resize(sz);
|
||||
}
|
||||
|
||||
EQ::MemoryBuffer::MemoryBuffer(const MemoryBuffer &other)
|
||||
EQEmu::MemoryBuffer::MemoryBuffer(const MemoryBuffer &other)
|
||||
{
|
||||
if(other.capacity_) {
|
||||
buffer_ = new uchar[other.capacity_];
|
||||
@@ -54,7 +54,7 @@ EQ::MemoryBuffer::MemoryBuffer(const MemoryBuffer &other)
|
||||
read_pos_ = other.read_pos_;
|
||||
}
|
||||
|
||||
EQ::MemoryBuffer::MemoryBuffer(MemoryBuffer &&other)
|
||||
EQEmu::MemoryBuffer::MemoryBuffer(MemoryBuffer &&other)
|
||||
{
|
||||
uchar *tbuf = other.buffer_;
|
||||
size_t tsz = other.size_;
|
||||
@@ -75,7 +75,7 @@ EQ::MemoryBuffer::MemoryBuffer(MemoryBuffer &&other)
|
||||
read_pos_ = tread_pos;
|
||||
}
|
||||
|
||||
EQ::MemoryBuffer& EQ::MemoryBuffer::operator=(const MemoryBuffer &other)
|
||||
EQEmu::MemoryBuffer& EQEmu::MemoryBuffer::operator=(const MemoryBuffer &other)
|
||||
{
|
||||
if(this == &other) {
|
||||
return *this;
|
||||
@@ -100,7 +100,7 @@ EQ::MemoryBuffer& EQ::MemoryBuffer::operator=(const MemoryBuffer &other)
|
||||
return *this;
|
||||
}
|
||||
|
||||
EQ::MemoryBuffer& EQ::MemoryBuffer::operator=(MemoryBuffer &&other)
|
||||
EQEmu::MemoryBuffer& EQEmu::MemoryBuffer::operator=(MemoryBuffer &&other)
|
||||
{
|
||||
uchar *tbuf = other.buffer_;
|
||||
size_t tsz = other.size_;
|
||||
@@ -122,7 +122,7 @@ EQ::MemoryBuffer& EQ::MemoryBuffer::operator=(MemoryBuffer &&other)
|
||||
return *this;
|
||||
}
|
||||
|
||||
EQ::MemoryBuffer& EQ::MemoryBuffer::operator+=(const MemoryBuffer &rhs)
|
||||
EQEmu::MemoryBuffer& EQEmu::MemoryBuffer::operator+=(const MemoryBuffer &rhs)
|
||||
{
|
||||
if(!rhs.buffer_) {
|
||||
return *this;
|
||||
@@ -142,52 +142,52 @@ EQ::MemoryBuffer& EQ::MemoryBuffer::operator+=(const MemoryBuffer &rhs)
|
||||
return *this;
|
||||
}
|
||||
|
||||
EQ::MemoryBuffer::~MemoryBuffer()
|
||||
EQEmu::MemoryBuffer::~MemoryBuffer()
|
||||
{
|
||||
Clear();
|
||||
}
|
||||
|
||||
uchar& EQ::MemoryBuffer::operator[](size_t pos)
|
||||
uchar& EQEmu::MemoryBuffer::operator[](size_t pos)
|
||||
{
|
||||
return buffer_[pos];
|
||||
}
|
||||
|
||||
const uchar& EQ::MemoryBuffer::operator[](size_t pos) const
|
||||
const uchar& EQEmu::MemoryBuffer::operator[](size_t pos) const
|
||||
{
|
||||
return buffer_[pos];
|
||||
}
|
||||
|
||||
bool EQ::MemoryBuffer::Empty()
|
||||
bool EQEmu::MemoryBuffer::Empty()
|
||||
{
|
||||
return size_ == 0;
|
||||
}
|
||||
|
||||
bool EQ::MemoryBuffer::Empty() const
|
||||
bool EQEmu::MemoryBuffer::Empty() const
|
||||
{
|
||||
return size_ == 0;
|
||||
}
|
||||
|
||||
size_t EQ::MemoryBuffer::Size()
|
||||
size_t EQEmu::MemoryBuffer::Size()
|
||||
{
|
||||
return size_;
|
||||
}
|
||||
|
||||
size_t EQ::MemoryBuffer::Size() const
|
||||
size_t EQEmu::MemoryBuffer::Size() const
|
||||
{
|
||||
return size_;
|
||||
}
|
||||
|
||||
size_t EQ::MemoryBuffer::Capacity()
|
||||
size_t EQEmu::MemoryBuffer::Capacity()
|
||||
{
|
||||
return capacity_;
|
||||
}
|
||||
|
||||
size_t EQ::MemoryBuffer::Capacity() const
|
||||
size_t EQEmu::MemoryBuffer::Capacity() const
|
||||
{
|
||||
return capacity_;
|
||||
}
|
||||
|
||||
void EQ::MemoryBuffer::Resize(size_t sz)
|
||||
void EQEmu::MemoryBuffer::Resize(size_t sz)
|
||||
{
|
||||
if(!buffer_) {
|
||||
size_t new_size = sz + 64;
|
||||
@@ -213,7 +213,7 @@ void EQ::MemoryBuffer::Resize(size_t sz)
|
||||
}
|
||||
}
|
||||
|
||||
void EQ::MemoryBuffer::Clear()
|
||||
void EQEmu::MemoryBuffer::Clear()
|
||||
{
|
||||
if(buffer_) {
|
||||
delete[] buffer_;
|
||||
@@ -226,14 +226,14 @@ void EQ::MemoryBuffer::Clear()
|
||||
read_pos_ = 0;
|
||||
}
|
||||
|
||||
void EQ::MemoryBuffer::Zero()
|
||||
void EQEmu::MemoryBuffer::Zero()
|
||||
{
|
||||
if(buffer_) {
|
||||
memset(buffer_, 0, capacity_);
|
||||
}
|
||||
}
|
||||
|
||||
void EQ::MemoryBuffer::Write(const char *val, size_t len)
|
||||
void EQEmu::MemoryBuffer::Write(const char *val, size_t len)
|
||||
{
|
||||
size_t size_needed = write_pos_ + len;
|
||||
Resize(size_needed);
|
||||
@@ -242,20 +242,20 @@ void EQ::MemoryBuffer::Write(const char *val, size_t len)
|
||||
write_pos_ += len;
|
||||
}
|
||||
|
||||
void EQ::MemoryBuffer::Read(uchar *buf, size_t len)
|
||||
void EQEmu::MemoryBuffer::Read(uchar *buf, size_t len)
|
||||
{
|
||||
memcpy(buf, &buffer_[read_pos_], len);
|
||||
read_pos_ += len;
|
||||
}
|
||||
|
||||
void EQ::MemoryBuffer::Read(char *str)
|
||||
void EQEmu::MemoryBuffer::Read(char *str)
|
||||
{
|
||||
size_t len = strlen((const char*)&buffer_[read_pos_]);
|
||||
memcpy(str, &buffer_[read_pos_], len);
|
||||
read_pos_ += len;
|
||||
}
|
||||
|
||||
void EQ::OutBuffer::overwrite(OutBuffer::pos_type position, const char *_Str, std::streamsize _Count)
|
||||
void EQEmu::OutBuffer::overwrite(OutBuffer::pos_type position, const char *_Str, std::streamsize _Count)
|
||||
{
|
||||
auto last_pos = tellp();
|
||||
seekp(position);
|
||||
@@ -263,7 +263,7 @@ void EQ::OutBuffer::overwrite(OutBuffer::pos_type position, const char *_Str, st
|
||||
seekp(last_pos);
|
||||
}
|
||||
|
||||
uchar* EQ::OutBuffer::detach()
|
||||
uchar* EQEmu::OutBuffer::detach()
|
||||
{
|
||||
size_t buffer_size = tellp();
|
||||
if (buffer_size == 0)
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
#include <sstream>
|
||||
|
||||
|
||||
namespace EQ
|
||||
namespace EQEmu
|
||||
{
|
||||
class MemoryBuffer {
|
||||
public:
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
namespace EQ {
|
||||
namespace EQEmu {
|
||||
|
||||
struct MemoryMappedFile::Implementation {
|
||||
#ifdef _WINDOWS
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#include <string>
|
||||
#include "types.h"
|
||||
|
||||
namespace EQ {
|
||||
namespace EQEmu {
|
||||
|
||||
//! Memory Backed Shared Memory
|
||||
/*!
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
/* EQEMu: Everquest Server Emulator
|
||||
|
||||
Copyright (C) 2001-2020 EQEMu Development Team (http://eqemulator.net)
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
*/
|
||||
|
||||
#ifndef METRIC_EVENT_H
|
||||
#define METRIC_EVENT_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace EQEmu
|
||||
{
|
||||
class MetricEvent {
|
||||
public:
|
||||
|
||||
enum class EventType {
|
||||
eventNone,
|
||||
eventNpcStatsMonitor
|
||||
};
|
||||
|
||||
MetricEvent() {
|
||||
|
||||
m_finalized = false;
|
||||
m_expired = false;
|
||||
m_event_id = 0;
|
||||
}
|
||||
|
||||
virtual EventType GetEventType() const = 0;
|
||||
|
||||
virtual void Process() = 0;
|
||||
virtual void Flush() = 0;
|
||||
|
||||
virtual void Finalize() { m_finalized = true; } // invoke MetricEvent::Finalize() inside of derived class function if not handled locally
|
||||
bool IsFinalized() const { return m_finalized; }
|
||||
|
||||
virtual void Expire() { m_finalized = true; m_expired = true; } // invoke MetricEvent::Expire() inside of derived class function if not handled locally
|
||||
bool IsExpired() const { return m_expired; }
|
||||
|
||||
void SetEventId(int value) { if (m_event_id == 0) { m_event_id = value; } }
|
||||
int GetEventId() const { return m_event_id; }
|
||||
|
||||
private:
|
||||
|
||||
bool m_finalized;
|
||||
bool m_expired;
|
||||
int m_event_id;
|
||||
};
|
||||
|
||||
} // EQEmu
|
||||
|
||||
#endif // METRIC_EVENT_H
|
||||
@@ -0,0 +1,112 @@
|
||||
/* EQEMu: Everquest Server Emulator
|
||||
|
||||
Copyright (C) 2001-2020 EQEMu Development Team (http://eqemulator.net)
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
*/
|
||||
|
||||
#include "metric_manager.h"
|
||||
#include "metric_event.h"
|
||||
|
||||
EQEmu::MetricManager::MetricManager() {
|
||||
|
||||
m_current_event_id = 0;
|
||||
}
|
||||
|
||||
void EQEmu::MetricManager::Process() {
|
||||
|
||||
for (std::list<MetricEvent*>::iterator iter = m_event_list.begin(); iter != m_event_list.end(); ) {
|
||||
|
||||
if ((*iter)->IsExpired()) {
|
||||
|
||||
iter = m_event_list.erase(iter);
|
||||
continue;
|
||||
}
|
||||
|
||||
(*iter)->Process();
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
|
||||
int EQEmu::MetricManager::RegisterEvent(MetricEvent* event_object) {
|
||||
|
||||
if (event_object == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
event_object->SetEventId(get_next_event_id());
|
||||
m_event_list.push_back(event_object);
|
||||
|
||||
return event_object->GetEventId();
|
||||
}
|
||||
|
||||
void EQEmu::MetricManager::FlushAll() {
|
||||
|
||||
for (auto iter : m_event_list) {
|
||||
iter->Flush();
|
||||
}
|
||||
}
|
||||
|
||||
void EQEmu::MetricManager::FlushById(int event_id) {
|
||||
|
||||
for (auto iter : m_event_list) {
|
||||
if (iter->GetEventId() == event_id) {
|
||||
|
||||
iter->Flush();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EQEmu::MetricManager::FinalizeAll() {
|
||||
|
||||
for (auto iter : m_event_list) {
|
||||
iter->Finalize();
|
||||
}
|
||||
}
|
||||
|
||||
void EQEmu::MetricManager::FinalizeById(int event_id) {
|
||||
|
||||
for (auto iter : m_event_list) {
|
||||
if (iter->GetEventId() == event_id) {
|
||||
|
||||
iter->Finalize();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EQEmu::MetricManager::ExpireAll() {
|
||||
|
||||
for (auto iter : m_event_list) {
|
||||
iter->Expire();
|
||||
}
|
||||
}
|
||||
|
||||
void EQEmu::MetricManager::ExpireById(int event_id) {
|
||||
|
||||
for (auto iter : m_event_list) {
|
||||
if (iter->GetEventId() == event_id) {
|
||||
|
||||
iter->Expire();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int EQEmu::MetricManager::get_next_event_id() {
|
||||
|
||||
return ++m_current_event_id;
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
/* EQEMu: Everquest Server Emulator
|
||||
|
||||
Copyright (C) 2001-2020 EQEMu Development Team (http://eqemulator.net)
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
*/
|
||||
|
||||
#ifndef METRIC_MANAGER_H
|
||||
#define METRIC_MANAGER_H
|
||||
|
||||
#include <list>
|
||||
|
||||
namespace EQEmu
|
||||
{
|
||||
class MetricEvent;
|
||||
|
||||
class MetricManager {
|
||||
public:
|
||||
|
||||
MetricManager();
|
||||
|
||||
void Process();
|
||||
|
||||
int RegisterEvent(MetricEvent*);
|
||||
|
||||
void FlushAll();
|
||||
void FlushById(int);
|
||||
|
||||
void FinalizeAll();
|
||||
void FinalizeById(int);
|
||||
|
||||
void ExpireAll();
|
||||
void ExpireById(int);
|
||||
|
||||
private:
|
||||
|
||||
int get_next_event_id();
|
||||
|
||||
int m_current_event_id;
|
||||
|
||||
std::list<MetricEvent*> m_event_list;
|
||||
};
|
||||
|
||||
} // EQEmu
|
||||
|
||||
#endif // METRIC_MANAGER_H
|
||||
@@ -605,8 +605,6 @@ void EQ::Net::DaybreakConnection::ProcessDecodedPacket(const Packet &p)
|
||||
ProcessDecodedPacket(StaticPacket(current, subpacket_length));
|
||||
current += subpacket_length;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case OP_SessionRequest:
|
||||
@@ -1049,14 +1047,12 @@ void EQ::Net::DaybreakConnection::Compress(Packet &p, size_t offset, size_t leng
|
||||
uint8_t new_buffer[2048] = { 0 };
|
||||
uint8_t *buffer = (uint8_t*)p.Data() + offset;
|
||||
uint32_t new_length = 0;
|
||||
bool send_uncompressed = true;
|
||||
|
||||
if (length > 30) {
|
||||
new_length = Deflate(buffer, (uint32_t)length, new_buffer + 1, 2048) + 1;
|
||||
new_buffer[0] = 0x5a;
|
||||
send_uncompressed = (new_length > length);
|
||||
}
|
||||
if (send_uncompressed) {
|
||||
else {
|
||||
memcpy(new_buffer + 1, buffer, length);
|
||||
new_buffer[0] = 0xa5;
|
||||
new_length = length + 1;
|
||||
@@ -1103,7 +1099,7 @@ void EQ::Net::DaybreakConnection::ProcessResend(int stream)
|
||||
InternalBufferedSend(p);
|
||||
entry.second.last_sent = now;
|
||||
entry.second.times_resent++;
|
||||
entry.second.resend_delay = EQ::Clamp(entry.second.resend_delay * 2, m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max);
|
||||
entry.second.resend_delay = EQEmu::Clamp(entry.second.resend_delay * 2, m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max);
|
||||
resends++;
|
||||
}
|
||||
}
|
||||
@@ -1132,7 +1128,7 @@ void EQ::Net::DaybreakConnection::ProcessResend(int stream)
|
||||
InternalBufferedSend(p);
|
||||
entry.second.last_sent = now;
|
||||
entry.second.times_resent++;
|
||||
entry.second.resend_delay = EQ::Clamp(entry.second.resend_delay * 2, m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max);
|
||||
entry.second.resend_delay = EQEmu::Clamp(entry.second.resend_delay * 2, m_owner->m_options.resend_delay_min, m_owner->m_options.resend_delay_max);
|
||||
resends++;
|
||||
}
|
||||
}
|
||||
@@ -1184,7 +1180,7 @@ void EQ::Net::DaybreakConnection::OutOfOrderAck(int stream, uint16_t seq)
|
||||
void EQ::Net::DaybreakConnection::UpdateDataBudget(double budget_add)
|
||||
{
|
||||
auto outgoing_data_rate = m_owner->m_options.outgoing_data_rate;
|
||||
m_outgoing_budget = EQ::ClampUpper(m_outgoing_budget + budget_add, outgoing_data_rate);
|
||||
m_outgoing_budget = EQEmu::ClampUpper(m_outgoing_budget + budget_add, outgoing_data_rate);
|
||||
}
|
||||
|
||||
void EQ::Net::DaybreakConnection::SendAck(int stream_id, uint16_t seq)
|
||||
@@ -1384,7 +1380,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id,
|
||||
}
|
||||
|
||||
auto stream = &m_streams[stream_id];
|
||||
auto max_raw_size = m_max_packet_size - m_crc_bytes - DaybreakReliableHeader::size() - 1; // -1 for compress flag
|
||||
auto max_raw_size = m_max_packet_size - m_crc_bytes - DaybreakReliableHeader::size();
|
||||
size_t length = p.Length();
|
||||
if (length > max_raw_size) {
|
||||
DaybreakReliableFragmentHeader first_header;
|
||||
@@ -1405,7 +1401,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id,
|
||||
sent.last_sent = Clock::now();
|
||||
sent.first_sent = Clock::now();
|
||||
sent.times_resent = 0;
|
||||
sent.resend_delay = EQ::Clamp(
|
||||
sent.resend_delay = EQEmu::Clamp(
|
||||
static_cast<size_t>((m_rolling_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms),
|
||||
m_owner->m_options.resend_delay_min,
|
||||
m_owner->m_options.resend_delay_max);
|
||||
@@ -1437,7 +1433,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id,
|
||||
sent.last_sent = Clock::now();
|
||||
sent.first_sent = Clock::now();
|
||||
sent.times_resent = 0;
|
||||
sent.resend_delay = EQ::Clamp(
|
||||
sent.resend_delay = EQEmu::Clamp(
|
||||
static_cast<size_t>((m_rolling_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms),
|
||||
m_owner->m_options.resend_delay_min,
|
||||
m_owner->m_options.resend_delay_max);
|
||||
@@ -1461,7 +1457,7 @@ void EQ::Net::DaybreakConnection::InternalQueuePacket(Packet &p, int stream_id,
|
||||
sent.last_sent = Clock::now();
|
||||
sent.first_sent = Clock::now();
|
||||
sent.times_resent = 0;
|
||||
sent.resend_delay = EQ::Clamp(
|
||||
sent.resend_delay = EQEmu::Clamp(
|
||||
static_cast<size_t>((m_rolling_ping * m_owner->m_options.resend_delay_factor) + m_owner->m_options.resend_delay_ms),
|
||||
m_owner->m_options.resend_delay_min,
|
||||
m_owner->m_options.resend_delay_max);
|
||||
|
||||
@@ -318,7 +318,7 @@ namespace EQ
|
||||
void Attach(uv_loop_t *loop);
|
||||
void Detach();
|
||||
|
||||
EQ::Random m_rand;
|
||||
EQEmu::Random m_rand;
|
||||
uv_timer_t m_timer;
|
||||
uv_udp_t m_socket;
|
||||
uv_loop_t *m_attached;
|
||||
|
||||
+4
-4
@@ -89,9 +89,9 @@ namespace EQ {
|
||||
public:
|
||||
StaticPacket(void *data, size_t size) { m_data = data; m_data_length = size; m_max_data_length = size; }
|
||||
virtual ~StaticPacket() { }
|
||||
StaticPacket(const StaticPacket &o) { m_data = o.m_data; m_data_length = o.m_data_length; m_max_data_length = o.m_max_data_length; }
|
||||
StaticPacket(const StaticPacket &o) { m_data = o.m_data; m_data_length = o.m_data_length; }
|
||||
StaticPacket& operator=(const StaticPacket &o) { m_data = o.m_data; m_data_length = o.m_data_length; return *this; }
|
||||
StaticPacket(StaticPacket &&o) noexcept { m_data = o.m_data; m_data_length = o.m_data_length; }
|
||||
StaticPacket(StaticPacket &&o) { m_data = o.m_data; m_data_length = o.m_data_length; }
|
||||
|
||||
virtual const void *Data() const { return m_data; }
|
||||
virtual void *Data() { return m_data; }
|
||||
@@ -112,7 +112,7 @@ namespace EQ {
|
||||
public:
|
||||
DynamicPacket() { }
|
||||
virtual ~DynamicPacket() { }
|
||||
DynamicPacket(DynamicPacket &&o) noexcept { m_data = std::move(o.m_data); }
|
||||
DynamicPacket(DynamicPacket &&o) { m_data = std::move(o.m_data); }
|
||||
DynamicPacket(const DynamicPacket &o) { m_data = o.m_data; }
|
||||
DynamicPacket& operator=(const DynamicPacket &o) { m_data = o.m_data; return *this; }
|
||||
|
||||
@@ -127,4 +127,4 @@ namespace EQ {
|
||||
std::vector<char> m_data;
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
+249
-364
File diff suppressed because it is too large
Load Diff
@@ -43,7 +43,7 @@ namespace RoF
|
||||
protected:
|
||||
|
||||
virtual std::string Describe() const;
|
||||
virtual const EQ::versions::ClientVersion ClientVersion() const;
|
||||
virtual const EQEmu::versions::ClientVersion ClientVersion() const;
|
||||
|
||||
//magic macro to declare our opcode processors
|
||||
#include "ss_declare.h"
|
||||
|
||||
+249
-364
File diff suppressed because it is too large
Load Diff
@@ -43,7 +43,7 @@ namespace RoF2
|
||||
protected:
|
||||
|
||||
virtual std::string Describe() const;
|
||||
virtual const EQ::versions::ClientVersion ClientVersion() const;
|
||||
virtual const EQEmu::versions::ClientVersion ClientVersion() const;
|
||||
|
||||
//magic macro to declare our opcode processors
|
||||
#include "ss_declare.h"
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace RoF2
|
||||
const int16 INULL = 0;
|
||||
|
||||
namespace inventory {
|
||||
inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetInventoryRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
const bool ConcatenateInvTypeLimbo = false;
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace RoF2
|
||||
} /*inventory*/
|
||||
|
||||
namespace invtype {
|
||||
inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetInvTypeRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
namespace enum_ {
|
||||
enum InventoryTypes : int16 {
|
||||
@@ -118,7 +118,7 @@ namespace RoF2
|
||||
} /*invtype*/
|
||||
|
||||
namespace invslot {
|
||||
inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetInvSlotRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
namespace enum_ {
|
||||
enum InventorySlots : int16 {
|
||||
@@ -196,7 +196,7 @@ namespace RoF2
|
||||
} /*invslot*/
|
||||
|
||||
namespace invbag {
|
||||
inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetInvBagRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
const int16 SLOT_INVALID = IINVALID;
|
||||
const int16 SLOT_BEGIN = INULL;
|
||||
@@ -208,7 +208,7 @@ namespace RoF2
|
||||
} /*invbag*/
|
||||
|
||||
namespace invaug {
|
||||
inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetInvAugRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
const int16 SOCKET_INVALID = IINVALID;
|
||||
const int16 SOCKET_BEGIN = INULL;
|
||||
@@ -220,7 +220,7 @@ namespace RoF2
|
||||
} /*invaug*/
|
||||
|
||||
namespace item {
|
||||
inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetItemRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
//enum Unknown : int { // looks like item class..but, RoF has it too - nothing in UF-
|
||||
// Unknown1 = 0,
|
||||
@@ -249,7 +249,7 @@ namespace RoF2
|
||||
} /*item*/
|
||||
|
||||
namespace profile {
|
||||
inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetProfileRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
const int16 BANDOLIERS_SIZE = 20; // number of bandolier instances
|
||||
const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance
|
||||
@@ -261,11 +261,11 @@ namespace RoF2
|
||||
} /*profile*/
|
||||
|
||||
namespace constants {
|
||||
inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::RoF;
|
||||
const uint32 EXPANSION_BIT = EQ::expansions::bitRoF;
|
||||
const uint32 EXPANSIONS_MASK = EQ::expansions::maskRoF;
|
||||
const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::RoF;
|
||||
const uint32 EXPANSION_BIT = EQEmu::expansions::bitRoF;
|
||||
const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskRoF;
|
||||
|
||||
const size_t CHARACTER_CREATION_LIMIT = 12;
|
||||
|
||||
@@ -274,21 +274,21 @@ namespace RoF2
|
||||
} /*constants*/
|
||||
|
||||
namespace behavior {
|
||||
inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetBehaviorRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
const bool CoinHasWeight = false;
|
||||
|
||||
} /*behavior*/
|
||||
|
||||
namespace skills {
|
||||
inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
const size_t LastUsableSkill = EQ::skills::Skill2HPiercing;
|
||||
const size_t LastUsableSkill = EQEmu::skills::Skill2HPiercing;
|
||||
|
||||
} /*skills*/
|
||||
|
||||
namespace spells {
|
||||
inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::RoF2; }
|
||||
inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::RoF2; }
|
||||
|
||||
enum class CastingSlot : uint32 {
|
||||
Gem1 = 0,
|
||||
|
||||
@@ -58,16 +58,13 @@ E(OP_DeleteCharge)
|
||||
E(OP_DeleteItem)
|
||||
E(OP_DeleteSpawn)
|
||||
E(OP_DisciplineUpdate)
|
||||
E(OP_DzChooseZone)
|
||||
E(OP_DzCompass)
|
||||
E(OP_DzExpeditionEndsWarning)
|
||||
E(OP_DzExpeditionInfo)
|
||||
E(OP_DzExpeditionInvite)
|
||||
E(OP_DzExpeditionLockoutTimers)
|
||||
E(OP_DzExpeditionList)
|
||||
E(OP_DzJoinExpeditionConfirm)
|
||||
E(OP_DzLeaderStatus)
|
||||
E(OP_DzMemberList)
|
||||
E(OP_DzMemberListName)
|
||||
E(OP_DzMemberListStatus)
|
||||
E(OP_DzSetLeaderName)
|
||||
E(OP_Emote)
|
||||
E(OP_ExpansionInfo)
|
||||
E(OP_FormattedMessage)
|
||||
@@ -162,12 +159,6 @@ D(OP_ConsiderCorpse)
|
||||
D(OP_Consume)
|
||||
D(OP_Damage)
|
||||
D(OP_DeleteItem)
|
||||
D(OP_DzAddPlayer)
|
||||
D(OP_DzChooseZoneReply)
|
||||
D(OP_DzExpeditionInviteResponse)
|
||||
D(OP_DzMakeLeader)
|
||||
D(OP_DzRemovePlayer)
|
||||
D(OP_DzSwapPlayer)
|
||||
D(OP_Emote)
|
||||
D(OP_EnvDamage)
|
||||
D(OP_FaceChange)
|
||||
|
||||
+33
-150
@@ -190,7 +190,7 @@ struct TintProfile
|
||||
Tint_Struct Primary;
|
||||
Tint_Struct Secondary;
|
||||
};
|
||||
Tint_Struct Slot[EQ::textures::materialCount];
|
||||
Tint_Struct Slot[EQEmu::textures::materialCount];
|
||||
};
|
||||
};
|
||||
|
||||
@@ -222,7 +222,7 @@ struct Texture_Struct
|
||||
// Texture_Struct Primary;
|
||||
// Texture_Struct Secondary;
|
||||
// };
|
||||
// Texture_Struct Slot[EQ::textures::TextureCount];
|
||||
// Texture_Struct Slot[EQEmu::textures::TextureCount];
|
||||
// };
|
||||
//
|
||||
// TextureProfile();
|
||||
@@ -628,7 +628,7 @@ struct NewZone_Struct {
|
||||
/*0856*/ uint32 scriptNPCReceivedanItem;
|
||||
/*0860*/ uint32 bCheck; // padded bool
|
||||
/*0864*/ uint32 scriptIDSomething;
|
||||
/*0868*/ uint32 underworld_teleport_index; // > 0 teleports w/ zone point index, invalid succors, -1 affects some collisions
|
||||
/*0868*/ uint32 scriptIDSomething2;
|
||||
/*0872*/ uint32 scriptIDSomething3;
|
||||
/*0876*/ uint32 SuspendBuffs; // padded bool
|
||||
/*0880*/ uint32 LavaDamage; // LavaDamage value
|
||||
@@ -1113,7 +1113,7 @@ union
|
||||
/*00184*/ Texture_Struct equipment[22]; // Total Slots
|
||||
};
|
||||
/*00624*/ uint32 equip2_count; // Seen 9
|
||||
/*00628*/ Texture_Struct equipment2[EQ::textures::materialCount]; // Appears to be Visible slots, but all 0s
|
||||
/*00628*/ Texture_Struct equipment2[EQEmu::textures::materialCount]; // Appears to be Visible slots, but all 0s
|
||||
/*00808*/ uint32 tint_count; // Seen 9
|
||||
/*00812*/ TintProfile item_tint; // RR GG BB 00
|
||||
/*00848*/ uint32 tint_count2; // Seen 9
|
||||
@@ -4401,7 +4401,7 @@ struct SendAA_Struct {
|
||||
/*0104*/ uint32 special_category;
|
||||
/*0108*/ uint8 shroud;
|
||||
/*0109*/ uint8 unknown109;
|
||||
/*0110*/ uint8 reset_on_death; // timer is reset on death
|
||||
/*0110*/ uint8 layonhands; // 1 for lay on hands -- doesn't seem to matter?
|
||||
/*0111*/ uint8 unknown111;
|
||||
/*0112*/ uint32 total_abilities;
|
||||
/*0116*/ AA_Ability abilities[0];
|
||||
@@ -4804,8 +4804,8 @@ struct ItemQuaternaryBodyStruct
|
||||
int32 HealAmt;
|
||||
int32 SpellDmg;
|
||||
int32 Clairvoyance;
|
||||
int32 SubType;
|
||||
uint8 evolve_string; // Some String, but being evolution related is just a guess
|
||||
uint8 unknown18; //Power Source Capacity or evolve filename?
|
||||
uint32 evolve_string; // Some String, but being evolution related is just a guess
|
||||
uint8 unknown19;
|
||||
uint16 unknown20;
|
||||
uint8 unknown21;
|
||||
@@ -4882,169 +4882,52 @@ struct VeteranClaim
|
||||
/*076*/ uint32 action;
|
||||
};
|
||||
|
||||
struct ExpeditionInvite_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id; // unique character id
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char inviter_name[64];
|
||||
/*072*/ char expedition_name[128];
|
||||
/*200*/ uint8 swapping; // 0: adding 1: swapping
|
||||
/*201*/ char swap_name[64]; // if swapping, swap name being removed
|
||||
/*265*/ uint8 padding[3];
|
||||
/*268*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||
/*270*/ uint16 dz_instance_id;
|
||||
};
|
||||
|
||||
struct ExpeditionInviteResponse_Struct
|
||||
struct ExpeditionEntryHeader_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*000*/ uint32 number_of_entries;
|
||||
};
|
||||
|
||||
struct ExpeditionJoinPrompt_Struct
|
||||
{
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||
/*010*/ uint16 dz_instance_id;
|
||||
/*012*/ uint8 accepted; // 0: declined 1: accepted
|
||||
/*013*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||
/*014*/ char swap_name[64]; // swap name sent in invite
|
||||
/*078*/ uint8 unknown078; // padding garbage?
|
||||
/*079*/ uint8 unknown079; // padding garbage?
|
||||
};
|
||||
|
||||
struct ExpeditionInfo_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 assigned; // padded bool, 0: not in expedition (clear data), 1: in expedition
|
||||
/*012*/ uint32 max_players;
|
||||
/*016*/ char expedition_name[128];
|
||||
/*144*/ char leader_name[64];
|
||||
//*208*/ uint32 unknown208; // live sends 01 00 00 00 here but client doesn't read it
|
||||
};
|
||||
|
||||
struct ExpeditionMemberEntry_Struct
|
||||
{
|
||||
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||
/*000*/ uint8 expedition_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||
};
|
||||
|
||||
struct ExpeditionMemberList_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 member_count; // number of players in window
|
||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||
};
|
||||
|
||||
struct ExpeditionMemberListName_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||
/*012*/ char name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionLockoutTimerEntry_Struct
|
||||
{
|
||||
/*000*/ char expedition_name[1]; // variable length, null terminated, max 0x80 (128)
|
||||
/*000*/ uint32 seconds_remaining;
|
||||
/*000*/ int32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||
/*000*/ char event_name[1]; // variable length, null terminated, max 0x100 (256)
|
||||
};
|
||||
|
||||
struct ExpeditionLockoutTimers_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||
};
|
||||
|
||||
struct ExpeditionSetLeaderName_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCommand_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCommandSwap_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char add_player_name[64]; // swap to (player must confirm)
|
||||
/*072*/ char rem_player_name[64]; // swap from
|
||||
/*008*/ char player_name[64];
|
||||
/*072*/ char expedition_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionExpireWarning
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 minutes_remaining;
|
||||
};
|
||||
|
||||
struct DynamicZoneCompassEntry_Struct
|
||||
struct ExpeditionInfo_Struct
|
||||
{
|
||||
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||
/*002*/ uint16 dz_instance_id;
|
||||
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 unknown008;
|
||||
/*012*/ uint32 max_players;
|
||||
/*016*/ char expedition_name[128];
|
||||
/*142*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCompassEntry_Struct
|
||||
{
|
||||
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
|
||||
/*004*/ uint32 enabled; //guess
|
||||
/*008*/ uint32 unknown008; //seen 1019
|
||||
/*012*/ float y;
|
||||
/*016*/ float x;
|
||||
/*020*/ float z;
|
||||
};
|
||||
|
||||
struct DynamicZoneCompass_Struct
|
||||
struct ExpeditionCompass_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZoneEntry_Struct
|
||||
{
|
||||
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||
/*002*/ uint16 dz_instance_id;
|
||||
/*004*/ uint32 unknown_id1; // seen 28 00 00 00 (40), sent back in reply
|
||||
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||
/*016*/ char description[1]; // variable length, null terminated, max 0x80 (128)
|
||||
/*000*/ char leader_name[1]; // variable length, null terminated, max 0x40 (64)
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZone_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZoneReply_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000; // ff ff ff ff
|
||||
/*004*/ uint32 unknown004; // seen 69 00 00 00
|
||||
/*008*/ uint32 unknown008; // ff ff ff ff
|
||||
/*012*/ uint32 unknown_id1; // from choose zone entry message
|
||||
/*016*/ uint16 dz_zone_id; // dz_id pair
|
||||
/*018*/ uint16 dz_instance_id;
|
||||
/*020*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||
/*024*/ uint32 unknown_id2; // from choose zone entry message
|
||||
/*028*/ uint32 unknown028; // 00 00 00 00
|
||||
/*032*/ uint32 unknown032; // always same as unknown044
|
||||
/*036*/ uint32 unknown036;
|
||||
/*040*/ uint32 unknown040;
|
||||
/*044*/ uint32 unknown044; // always same as unknown032
|
||||
/*048*/ uint32 unknown048; // seen 01 00 00 00 and 02 00 00 00
|
||||
};
|
||||
|
||||
struct KickPlayers_Struct
|
||||
{
|
||||
/*000*/ char char_name[64];
|
||||
/*064*/ uint32 unknown064; // always 0
|
||||
/*068*/ uint8 kick_expedition; // true if /kickplayers exp
|
||||
/*069*/ uint8 kick_task; // true if /kickplayers task
|
||||
/*070*/ uint8 padding[2];
|
||||
/*008*/ ExpeditionCompassEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct MaxCharacters_Struct
|
||||
|
||||
+15
-15
@@ -31,7 +31,7 @@ namespace RoF
|
||||
const int16 INULL = 0;
|
||||
|
||||
namespace inventory {
|
||||
inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetInventoryRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
const bool ConcatenateInvTypeLimbo = false;
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace RoF
|
||||
} /*inventory*/
|
||||
|
||||
namespace invtype {
|
||||
inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetInvTypeRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
namespace enum_ {
|
||||
enum InventoryTypes : int16 {
|
||||
@@ -116,7 +116,7 @@ namespace RoF
|
||||
} /*invtype*/
|
||||
|
||||
namespace invslot {
|
||||
inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetInvSlotRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
namespace enum_ {
|
||||
enum InventorySlots : int16 {
|
||||
@@ -194,7 +194,7 @@ namespace RoF
|
||||
} /*invslot*/
|
||||
|
||||
namespace invbag {
|
||||
inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetInvBagRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
const int16 SLOT_INVALID = IINVALID;
|
||||
const int16 SLOT_BEGIN = INULL;
|
||||
@@ -206,7 +206,7 @@ namespace RoF
|
||||
} /*invbag*/
|
||||
|
||||
namespace invaug {
|
||||
inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetInvAugRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
const int16 SOCKET_INVALID = IINVALID;
|
||||
const int16 SOCKET_BEGIN = INULL;
|
||||
@@ -218,7 +218,7 @@ namespace RoF
|
||||
} /*invaug*/
|
||||
|
||||
namespace item {
|
||||
inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetItemRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
enum ItemPacketType : int {
|
||||
ItemPacketMerchant = 100,
|
||||
@@ -240,7 +240,7 @@ namespace RoF
|
||||
} /*item*/
|
||||
|
||||
namespace profile {
|
||||
inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetProfileRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
const int16 BANDOLIERS_SIZE = 20; // number of bandolier instances
|
||||
const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance
|
||||
@@ -252,11 +252,11 @@ namespace RoF
|
||||
} /*profile*/
|
||||
|
||||
namespace constants {
|
||||
inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::RoF;
|
||||
const uint32 EXPANSION_BIT = EQ::expansions::bitRoF;
|
||||
const uint32 EXPANSIONS_MASK = EQ::expansions::maskRoF;
|
||||
const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::RoF;
|
||||
const uint32 EXPANSION_BIT = EQEmu::expansions::bitRoF;
|
||||
const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskRoF;
|
||||
|
||||
const size_t CHARACTER_CREATION_LIMIT = 12;
|
||||
|
||||
@@ -265,21 +265,21 @@ namespace RoF
|
||||
} /*constants*/
|
||||
|
||||
namespace behavior {
|
||||
inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetBehaviorRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
const bool CoinHasWeight = false;
|
||||
|
||||
} /*behavior*/
|
||||
|
||||
namespace skills {
|
||||
inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
const size_t LastUsableSkill = EQ::skills::SkillTripleAttack;
|
||||
const size_t LastUsableSkill = EQEmu::skills::SkillTripleAttack;
|
||||
|
||||
} /*skills*/
|
||||
|
||||
namespace spells {
|
||||
inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::RoF; }
|
||||
inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::RoF; }
|
||||
|
||||
enum class CastingSlot : uint32 {
|
||||
Gem1 = 0,
|
||||
|
||||
@@ -44,16 +44,13 @@ E(OP_DeleteCharge)
|
||||
E(OP_DeleteItem)
|
||||
E(OP_DeleteSpawn)
|
||||
E(OP_DisciplineUpdate)
|
||||
E(OP_DzChooseZone)
|
||||
E(OP_DzCompass)
|
||||
E(OP_DzExpeditionEndsWarning)
|
||||
E(OP_DzExpeditionInfo)
|
||||
E(OP_DzExpeditionInvite)
|
||||
E(OP_DzExpeditionLockoutTimers)
|
||||
E(OP_DzExpeditionList)
|
||||
E(OP_DzJoinExpeditionConfirm)
|
||||
E(OP_DzLeaderStatus)
|
||||
E(OP_DzMemberList)
|
||||
E(OP_DzMemberListName)
|
||||
E(OP_DzMemberListStatus)
|
||||
E(OP_DzSetLeaderName)
|
||||
E(OP_Emote)
|
||||
E(OP_ExpansionInfo)
|
||||
E(OP_FormattedMessage)
|
||||
@@ -148,12 +145,6 @@ D(OP_ConsiderCorpse)
|
||||
D(OP_Consume)
|
||||
D(OP_Damage)
|
||||
D(OP_DeleteItem)
|
||||
D(OP_DzAddPlayer)
|
||||
D(OP_DzChooseZoneReply)
|
||||
D(OP_DzExpeditionInviteResponse)
|
||||
D(OP_DzMakeLeader)
|
||||
D(OP_DzRemovePlayer)
|
||||
D(OP_DzSwapPlayer)
|
||||
D(OP_Emote)
|
||||
D(OP_EnvDamage)
|
||||
D(OP_FaceChange)
|
||||
|
||||
+32
-143
@@ -190,7 +190,7 @@ struct TintProfile
|
||||
Tint_Struct Primary;
|
||||
Tint_Struct Secondary;
|
||||
};
|
||||
Tint_Struct Slot[EQ::textures::materialCount];
|
||||
Tint_Struct Slot[EQEmu::textures::materialCount];
|
||||
};
|
||||
};
|
||||
|
||||
@@ -222,7 +222,7 @@ struct Texture_Struct
|
||||
// Texture_Struct Primary;
|
||||
// Texture_Struct Secondary;
|
||||
// };
|
||||
// Texture_Struct Slot[EQ::textures::TextureCount];
|
||||
// Texture_Struct Slot[EQEmu::textures::TextureCount];
|
||||
// };
|
||||
//
|
||||
// TextureProfile();
|
||||
@@ -575,11 +575,7 @@ struct NewZone_Struct {
|
||||
/*0848*/ int32 unknown848;
|
||||
/*0852*/ uint16 zone_id;
|
||||
/*0854*/ uint16 zone_instance;
|
||||
/*0856*/ uint32 scriptNPCReceivedanItem;
|
||||
/*0860*/ uint32 bCheck; // padded bool
|
||||
/*0864*/ uint32 scriptIDSomething;
|
||||
/*0868*/ uint32 underworld_teleport_index; // > 0 teleports w/ zone point index, invalid succors, -1 affects some collisions
|
||||
/*0872*/ uint32 scriptIDSomething3;
|
||||
/*0856*/ char unknown856[20];
|
||||
/*0876*/ uint32 SuspendBuffs;
|
||||
/*0880*/ uint32 unknown880; // Seen 50
|
||||
/*0884*/ uint32 unknown884; // Seen 10
|
||||
@@ -4345,7 +4341,7 @@ struct SendAA_Struct {
|
||||
/*0104*/ uint32 special_category;
|
||||
/*0108*/ uint8 shroud;
|
||||
/*0109*/ uint8 unknown109;
|
||||
/*0110*/ uint8 reset_on_death; // timer is reset on death
|
||||
/*0110*/ uint8 layonhands; // 1 for lay on hands -- doesn't seem to matter?
|
||||
/*0111*/ uint8 unknown111;
|
||||
/*0112*/ uint32 total_abilities;
|
||||
/*0116*/ AA_Ability abilities[0];
|
||||
@@ -4748,8 +4744,8 @@ struct ItemQuaternaryBodyStruct
|
||||
int32 HealAmt;
|
||||
int32 SpellDmg;
|
||||
int32 Clairvoyance;
|
||||
int32 SubType;
|
||||
uint8 evolve_string; // Some String, but being evolution related is just a guess
|
||||
uint8 unknown18; //Power Source Capacity or evolve filename?
|
||||
uint32 evolve_string; // Some String, but being evolution related is just a guess
|
||||
uint8 unknown19;
|
||||
uint32 unknown20; // Bard Stuff?
|
||||
//uint32 unknown21;
|
||||
@@ -4815,159 +4811,52 @@ struct VeteranClaim
|
||||
/*076*/ uint32 action;
|
||||
};
|
||||
|
||||
struct ExpeditionInvite_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id; // unique character id
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char inviter_name[64];
|
||||
/*072*/ char expedition_name[128];
|
||||
/*200*/ uint8 swapping; // 0: adding 1: swapping
|
||||
/*201*/ char swap_name[64]; // if swapping, swap name being removed
|
||||
/*265*/ uint8 padding[3];
|
||||
/*268*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||
/*270*/ uint16 dz_instance_id;
|
||||
};
|
||||
|
||||
struct ExpeditionInviteResponse_Struct
|
||||
struct ExpeditionEntryHeader_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*000*/ uint32 number_of_entries;
|
||||
};
|
||||
|
||||
struct ExpeditionJoinPrompt_Struct
|
||||
{
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||
/*010*/ uint16 dz_instance_id;
|
||||
/*012*/ uint8 accepted; // 0: declined 1: accepted
|
||||
/*013*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||
/*014*/ char swap_name[64]; // swap name sent in invite
|
||||
/*078*/ uint8 unknown078; // padding garbage?
|
||||
/*079*/ uint8 unknown079; // padding garbage?
|
||||
};
|
||||
|
||||
struct ExpeditionInfo_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 assigned; // padded bool
|
||||
/*012*/ uint32 max_players;
|
||||
/*016*/ char expedition_name[128];
|
||||
/*144*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionMemberEntry_Struct
|
||||
{
|
||||
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||
/*000*/ uint8 expedition_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||
};
|
||||
|
||||
struct ExpeditionMemberList_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 member_count; // number of players in window
|
||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||
};
|
||||
|
||||
struct ExpeditionMemberListName_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||
/*012*/ char name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionLockoutTimerEntry_Struct
|
||||
{
|
||||
/*000*/ char expedition_name[1]; // variable length, null terminated, max 0x80 (128)
|
||||
/*000*/ uint32 seconds_remaining;
|
||||
/*000*/ int32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||
/*000*/ char event_name[1]; // variable length, null terminated, max 0x100 (256)
|
||||
};
|
||||
|
||||
struct ExpeditionLockoutTimers_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||
};
|
||||
|
||||
struct ExpeditionSetLeaderName_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCommand_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCommandSwap_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char add_player_name[64]; // swap to (player must confirm)
|
||||
/*072*/ char rem_player_name[64]; // swap from
|
||||
/*008*/ char player_name[64];
|
||||
/*072*/ char expedition_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionExpireWarning
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 minutes_remaining;
|
||||
};
|
||||
|
||||
struct DynamicZoneCompassEntry_Struct
|
||||
struct ExpeditionInfo_Struct
|
||||
{
|
||||
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||
/*002*/ uint16 dz_instance_id;
|
||||
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 unknown008;
|
||||
/*012*/ uint32 max_players;
|
||||
/*016*/ char expedition_name[128];
|
||||
/*142*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCompassEntry_Struct
|
||||
{
|
||||
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
|
||||
/*004*/ uint32 enabled; //guess
|
||||
/*008*/ uint32 unknown008; //seen 1019
|
||||
/*012*/ float y;
|
||||
/*016*/ float x;
|
||||
/*020*/ float z;
|
||||
};
|
||||
|
||||
struct DynamicZoneCompass_Struct
|
||||
struct ExpeditionCompass_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZoneEntry_Struct
|
||||
{
|
||||
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||
/*002*/ uint16 dz_instance_id;
|
||||
/*004*/ uint32 unknown_id1; // sent back in reply
|
||||
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||
/*016*/ char description[1]; // variable length, null terminated, max 0x80 (128)
|
||||
/*000*/ char leader_name[1]; // variable length, null terminated, max 0x40 (64)
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZone_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZoneReply_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000; // ff ff ff ff
|
||||
/*004*/ uint32 unknown004; // seen 69 00 00 00
|
||||
/*008*/ uint32 unknown008; // ff ff ff ff
|
||||
/*012*/ uint32 unknown_id1; // from choose zone entry message
|
||||
/*016*/ uint16 dz_zone_id; // dz_id pair
|
||||
/*018*/ uint16 dz_instance_id;
|
||||
/*020*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||
/*024*/ uint32 unknown_id2; // from choose zone entry message
|
||||
/*028*/ uint32 unknown028; // 00 00 00 00
|
||||
/*032*/ uint32 unknown032; // always same as unknown044
|
||||
/*036*/ uint32 unknown036;
|
||||
/*040*/ uint32 unknown040;
|
||||
/*044*/ uint32 unknown044; // always same as unknown032
|
||||
/*048*/ uint32 unknown048; // seen 01 00 00 00 and 02 00 00 00
|
||||
/*008*/ ExpeditionCompassEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct MaxCharacters_Struct
|
||||
|
||||
+176
-291
@@ -43,7 +43,7 @@ namespace SoD
|
||||
static OpcodeManager *opcodes = nullptr;
|
||||
static Strategy struct_strategy;
|
||||
|
||||
void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id, uint8 depth);
|
||||
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth);
|
||||
|
||||
// server to client inventory location converters
|
||||
static inline uint32 ServerToSoDSlot(uint32 server_slot);
|
||||
@@ -59,8 +59,8 @@ namespace SoD
|
||||
// client to server say link converter
|
||||
static inline void SoDToServerSayLink(std::string &server_saylink, const std::string &sod_saylink);
|
||||
|
||||
static inline spells::CastingSlot ServerToSoDCastingSlot(EQ::spells::CastingSlot slot);
|
||||
static inline EQ::spells::CastingSlot SoDToServerCastingSlot(spells::CastingSlot slot);
|
||||
static inline spells::CastingSlot ServerToSoDCastingSlot(EQEmu::spells::CastingSlot slot);
|
||||
static inline EQEmu::spells::CastingSlot SoDToServerCastingSlot(spells::CastingSlot slot);
|
||||
|
||||
static inline int ServerToSoDBuffSlot(int index);
|
||||
static inline int SoDToServerBuffSlot(int index);
|
||||
@@ -144,9 +144,9 @@ namespace SoD
|
||||
return(r);
|
||||
}
|
||||
|
||||
const EQ::versions::ClientVersion Strategy::ClientVersion() const
|
||||
const EQEmu::versions::ClientVersion Strategy::ClientVersion() const
|
||||
{
|
||||
return EQ::versions::ClientVersion::SoD;
|
||||
return EQEmu::versions::ClientVersion::SoD;
|
||||
}
|
||||
|
||||
#include "ss_define.h"
|
||||
@@ -381,24 +381,24 @@ namespace SoD
|
||||
//store away the emu struct
|
||||
uchar* __emu_buffer = in->pBuffer;
|
||||
|
||||
int item_count = in->size / sizeof(EQ::InternalSerializedItem_Struct);
|
||||
if (!item_count || (in->size % sizeof(EQ::InternalSerializedItem_Struct)) != 0) {
|
||||
int item_count = in->size / sizeof(EQEmu::InternalSerializedItem_Struct);
|
||||
if (!item_count || (in->size % sizeof(EQEmu::InternalSerializedItem_Struct)) != 0) {
|
||||
Log(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
||||
opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQ::InternalSerializedItem_Struct));
|
||||
opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQEmu::InternalSerializedItem_Struct));
|
||||
|
||||
delete in;
|
||||
return;
|
||||
}
|
||||
|
||||
EQ::InternalSerializedItem_Struct* eq = (EQ::InternalSerializedItem_Struct*)in->pBuffer;
|
||||
EQEmu::InternalSerializedItem_Struct* eq = (EQEmu::InternalSerializedItem_Struct*)in->pBuffer;
|
||||
|
||||
EQ::OutBuffer ob;
|
||||
EQ::OutBuffer::pos_type last_pos = ob.tellp();
|
||||
EQEmu::OutBuffer ob;
|
||||
EQEmu::OutBuffer::pos_type last_pos = ob.tellp();
|
||||
|
||||
ob.write((const char*)&item_count, sizeof(uint32));
|
||||
|
||||
for (int index = 0; index < item_count; ++index, ++eq) {
|
||||
SerializeItem(ob, (const EQ::ItemInstance*)eq->inst, eq->slot_id, 0);
|
||||
SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0);
|
||||
if (ob.tellp() == last_pos)
|
||||
LogNetcode("SoD::ENCODE(OP_CharInventory) Serialization failed on item slot [{}] during OP_CharInventory. Item skipped", eq->slot_id);
|
||||
|
||||
@@ -483,48 +483,15 @@ namespace SoD
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzChooseZone)
|
||||
{
|
||||
SETUP_VAR_ENCODE(DynamicZoneChooseZone_Struct);
|
||||
|
||||
SerializeBuffer buf;
|
||||
buf.WriteUInt32(emu->client_id);
|
||||
buf.WriteUInt32(emu->count);
|
||||
|
||||
for (uint32 i = 0; i < emu->count; ++i)
|
||||
{
|
||||
buf.WriteUInt16(emu->choices[i].dz_zone_id);
|
||||
buf.WriteUInt16(emu->choices[i].dz_instance_id);
|
||||
buf.WriteUInt32(emu->choices[i].unknown_id1);
|
||||
buf.WriteUInt32(emu->choices[i].dz_type);
|
||||
buf.WriteUInt32(emu->choices[i].unknown_id2);
|
||||
buf.WriteString(emu->choices[i].description);
|
||||
buf.WriteString(emu->choices[i].leader_name);
|
||||
}
|
||||
|
||||
__packet->size = buf.size();
|
||||
__packet->pBuffer = new unsigned char[__packet->size];
|
||||
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzCompass)
|
||||
{
|
||||
SETUP_VAR_ENCODE(DynamicZoneCompass_Struct);
|
||||
ALLOC_VAR_ENCODE(structs::DynamicZoneCompass_Struct,
|
||||
sizeof(structs::DynamicZoneCompass_Struct) +
|
||||
sizeof(structs::DynamicZoneCompassEntry_Struct) * emu->count
|
||||
);
|
||||
SETUP_VAR_ENCODE(ExpeditionCompass_Struct);
|
||||
ALLOC_VAR_ENCODE(structs::ExpeditionCompass_Struct, sizeof(structs::ExpeditionInfo_Struct) + sizeof(structs::ExpeditionCompassEntry_Struct) * emu->count);
|
||||
|
||||
OUT(client_id);
|
||||
OUT(count);
|
||||
|
||||
for (uint32 i = 0; i < emu->count; ++i)
|
||||
{
|
||||
OUT(entries[i].dz_zone_id);
|
||||
OUT(entries[i].dz_instance_id);
|
||||
OUT(entries[i].dz_type);
|
||||
OUT(entries[i].x);
|
||||
OUT(entries[i].y);
|
||||
OUT(entries[i].z);
|
||||
@@ -548,60 +515,81 @@ namespace SoD
|
||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
||||
|
||||
OUT(client_id);
|
||||
OUT(assigned);
|
||||
OUT(max_players);
|
||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||
eq->unknown004 = 785316192;
|
||||
eq->unknown008 = 435601;
|
||||
strcpy(eq->expedition_name, emu->expedition_name);
|
||||
strcpy(eq->leader_name, emu->leader_name);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzExpeditionInvite)
|
||||
ENCODE(OP_DzExpeditionList)
|
||||
{
|
||||
ENCODE_LENGTH_EXACT(ExpeditionInvite_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionInvite_Struct, structs::ExpeditionInvite_Struct);
|
||||
SETUP_VAR_ENCODE(ExpeditionLockoutList_Struct);
|
||||
|
||||
OUT(client_id);
|
||||
strn0cpy(eq->inviter_name, emu->inviter_name, sizeof(eq->inviter_name));
|
||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||
OUT(swapping);
|
||||
strn0cpy(eq->swap_name, emu->swap_name, sizeof(eq->swap_name));
|
||||
OUT(dz_zone_id);
|
||||
OUT(dz_instance_id);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzExpeditionLockoutTimers)
|
||||
{
|
||||
SETUP_VAR_ENCODE(ExpeditionLockoutTimers_Struct);
|
||||
|
||||
SerializeBuffer buf;
|
||||
buf.WriteUInt32(emu->client_id);
|
||||
buf.WriteUInt32(emu->count);
|
||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
||||
uint32 client_id = 0;
|
||||
uint8 null_term = 0;
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
||||
for (uint32 i = 0; i < emu->count; ++i)
|
||||
{
|
||||
buf.WriteString(emu->timers[i].expedition_name);
|
||||
buf.WriteUInt32(emu->timers[i].seconds_remaining);
|
||||
buf.WriteInt32(emu->timers[i].event_type);
|
||||
buf.WriteString(emu->timers[i].event_name);
|
||||
ss.write(emu->entries[i].expedition, strlen(emu->entries[i].expedition));
|
||||
ss.write((const char*)&null_term, sizeof(char));
|
||||
ss.write((const char*)&emu->entries[i].time_left, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write(emu->entries[i].expedition_event, strlen(emu->entries[i].expedition_event));
|
||||
ss.write((const char*)&null_term, sizeof(char));
|
||||
}
|
||||
|
||||
__packet->size = buf.size();
|
||||
__packet->size = ss.str().length();
|
||||
__packet->pBuffer = new unsigned char[__packet->size];
|
||||
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzSetLeaderName)
|
||||
ENCODE(OP_DzJoinExpeditionConfirm)
|
||||
{
|
||||
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
||||
ENCODE_LENGTH_EXACT(ExpeditionJoinPrompt_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionJoinPrompt_Struct, structs::ExpeditionJoinPrompt_Struct);
|
||||
|
||||
OUT(client_id);
|
||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||
strcpy(eq->expedition_name, emu->expedition_name);
|
||||
strcpy(eq->player_name, emu->player_name);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzLeaderStatus)
|
||||
{
|
||||
SETUP_VAR_ENCODE(ExpeditionLeaderSet_Struct);
|
||||
|
||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
||||
uint32 client_id = 0;
|
||||
uint8 null_term = 0;
|
||||
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write(emu->leader_name, strlen(emu->leader_name));
|
||||
ss.write((const char*)&null_term, sizeof(char));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));//0xffffffff
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));//1
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
|
||||
__packet->size = ss.str().length();
|
||||
__packet->pBuffer = new unsigned char[__packet->size];
|
||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
@@ -610,44 +598,26 @@ namespace SoD
|
||||
{
|
||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
||||
|
||||
SerializeBuffer buf;
|
||||
buf.WriteUInt32(emu->client_id);
|
||||
buf.WriteUInt32(emu->member_count);
|
||||
for (uint32 i = 0; i < emu->member_count; ++i)
|
||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
||||
|
||||
uint32 client_id = 0;
|
||||
uint8 null_term = 0;
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
||||
for (uint32 i = 0; i < emu->count; ++i)
|
||||
{
|
||||
buf.WriteString(emu->members[i].name);
|
||||
buf.WriteUInt8(emu->members[i].expedition_status);
|
||||
ss.write(emu->entries[i].name, strlen(emu->entries[i].name));
|
||||
ss.write((const char*)&null_term, sizeof(char));
|
||||
ss.write((const char*)&emu->entries[i].status, sizeof(char));
|
||||
}
|
||||
|
||||
__packet->size = buf.size();
|
||||
__packet->size = ss.str().length();
|
||||
__packet->pBuffer = new unsigned char[__packet->size];
|
||||
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzMemberListName)
|
||||
{
|
||||
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
||||
|
||||
OUT(client_id);
|
||||
OUT(add_name);
|
||||
strn0cpy(eq->name, emu->name, sizeof(eq->name));
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzMemberListStatus)
|
||||
{
|
||||
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
||||
if (emu->member_count == 1)
|
||||
{
|
||||
ENCODE_FORWARD(OP_DzMemberList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ENCODE(OP_Emote)
|
||||
{
|
||||
EQApplicationPacket *in = *p;
|
||||
@@ -1090,14 +1060,14 @@ namespace SoD
|
||||
//store away the emu struct
|
||||
uchar* __emu_buffer = in->pBuffer;
|
||||
|
||||
EQ::InternalSerializedItem_Struct* int_struct = (EQ::InternalSerializedItem_Struct*)(&__emu_buffer[4]);
|
||||
EQEmu::InternalSerializedItem_Struct* int_struct = (EQEmu::InternalSerializedItem_Struct*)(&__emu_buffer[4]);
|
||||
|
||||
EQ::OutBuffer ob;
|
||||
EQ::OutBuffer::pos_type last_pos = ob.tellp();
|
||||
EQEmu::OutBuffer ob;
|
||||
EQEmu::OutBuffer::pos_type last_pos = ob.tellp();
|
||||
|
||||
ob.write((const char*)__emu_buffer, 4);
|
||||
|
||||
SerializeItem(ob, (const EQ::ItemInstance*)int_struct->inst, int_struct->slot_id, 0);
|
||||
SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0);
|
||||
if (ob.tellp() == last_pos) {
|
||||
LogNetcode("SoD::ENCODE(OP_ItemPacket) Serialization failed on item slot [{}]", int_struct->slot_id);
|
||||
delete in;
|
||||
@@ -1383,7 +1353,6 @@ namespace SoD
|
||||
OUT(FastRegenHP);
|
||||
OUT(FastRegenMana);
|
||||
OUT(FastRegenEndurance);
|
||||
OUT(underworld_teleport_index);
|
||||
|
||||
/*fill in some unknowns with observed values, hopefully it will help */
|
||||
eq->unknown800 = -1;
|
||||
@@ -1494,7 +1463,7 @@ namespace SoD
|
||||
OUT(hairstyle);
|
||||
OUT(beard);
|
||||
// OUT(unknown00178[10]);
|
||||
for (r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) {
|
||||
for (r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) {
|
||||
eq->equipment.Slot[r].Material = emu->item_material.Slot[r].Material;
|
||||
eq->equipment.Slot[r].Unknown1 = 0;
|
||||
eq->equipment.Slot[r].EliteMaterial = 0;
|
||||
@@ -1524,7 +1493,7 @@ namespace SoD
|
||||
OUT(face);
|
||||
// OUT(unknown02264[47]);
|
||||
|
||||
if (spells::SPELLBOOK_SIZE <= EQ::spells::SPELLBOOK_SIZE) {
|
||||
if (spells::SPELLBOOK_SIZE <= EQEmu::spells::SPELLBOOK_SIZE) {
|
||||
for (uint32 r = 0; r < spells::SPELLBOOK_SIZE; r++) {
|
||||
if (emu->spell_book[r] <= spells::SPELL_ID_MAX)
|
||||
eq->spell_book[r] = emu->spell_book[r];
|
||||
@@ -1533,14 +1502,14 @@ namespace SoD
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (uint32 r = 0; r < EQ::spells::SPELLBOOK_SIZE; r++) {
|
||||
for (uint32 r = 0; r < EQEmu::spells::SPELLBOOK_SIZE; r++) {
|
||||
if (emu->spell_book[r] <= spells::SPELL_ID_MAX)
|
||||
eq->spell_book[r] = emu->spell_book[r];
|
||||
else
|
||||
eq->spell_book[r] = 0xFFFFFFFFU;
|
||||
}
|
||||
// invalidate the rest of the spellbook slots
|
||||
memset(&eq->spell_book[EQ::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQ::spells::SPELLBOOK_SIZE)));
|
||||
memset(&eq->spell_book[EQEmu::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQEmu::spells::SPELLBOOK_SIZE)));
|
||||
}
|
||||
|
||||
// OUT(unknown4184[128]);
|
||||
@@ -1584,7 +1553,7 @@ namespace SoD
|
||||
// OUT(unknown06160[4]);
|
||||
|
||||
// Copy bandoliers where server and client indices converge
|
||||
for (r = 0; r < EQ::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) {
|
||||
for (r = 0; r < EQEmu::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) {
|
||||
OUT_str(bandoliers[r].Name);
|
||||
for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true
|
||||
OUT(bandoliers[r].Items[k].ID);
|
||||
@@ -1593,7 +1562,7 @@ namespace SoD
|
||||
}
|
||||
}
|
||||
// Nullify bandoliers where server and client indices diverge, with a client bias
|
||||
for (r = EQ::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) {
|
||||
for (r = EQEmu::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) {
|
||||
eq->bandoliers[r].Name[0] = '\0';
|
||||
for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true
|
||||
eq->bandoliers[r].Items[k].ID = 0;
|
||||
@@ -1605,13 +1574,13 @@ namespace SoD
|
||||
// OUT(unknown07444[5120]);
|
||||
|
||||
// Copy potion belt where server and client indices converge
|
||||
for (r = 0; r < EQ::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) {
|
||||
for (r = 0; r < EQEmu::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) {
|
||||
OUT(potionbelt.Items[r].ID);
|
||||
OUT(potionbelt.Items[r].Icon);
|
||||
OUT_str(potionbelt.Items[r].Name);
|
||||
}
|
||||
// Nullify potion belt where server and client indices diverge, with a client bias
|
||||
for (r = EQ::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) {
|
||||
for (r = EQEmu::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) {
|
||||
eq->potionbelt.Items[r].ID = 0;
|
||||
eq->potionbelt.Items[r].Icon = 0;
|
||||
eq->potionbelt.Items[r].Name[0] = '\0';
|
||||
@@ -1954,7 +1923,7 @@ namespace SoD
|
||||
eq_cse->HairColor = emu_cse->HairColor;
|
||||
eq_cse->Face = emu_cse->Face;
|
||||
|
||||
for (int equip_index = EQ::textures::textureBegin; equip_index < EQ::textures::materialCount; equip_index++) {
|
||||
for (int equip_index = EQEmu::textures::textureBegin; equip_index < EQEmu::textures::materialCount; equip_index++) {
|
||||
eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material;
|
||||
eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1;
|
||||
eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteModel;
|
||||
@@ -2515,7 +2484,7 @@ namespace SoD
|
||||
float SpawnSize = emu->size;
|
||||
if (!((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522)))
|
||||
{
|
||||
PacketSize -= (sizeof(structs::Texture_Struct) * EQ::textures::materialCount);
|
||||
PacketSize -= (sizeof(structs::Texture_Struct) * EQEmu::textures::materialCount);
|
||||
|
||||
if (emu->size == 0)
|
||||
{
|
||||
@@ -2712,7 +2681,7 @@ namespace SoD
|
||||
|
||||
if ((emu->NPC == 0) || (emu->race <= 12) || (emu->race == 128) || (emu->race == 130) || (emu->race == 330) || (emu->race == 522))
|
||||
{
|
||||
for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; ++k)
|
||||
for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; ++k)
|
||||
{
|
||||
{
|
||||
VARSTRUCT_ENCODE_TYPE(uint32, Buffer, emu->equipment_tint.Slot[k].Color);
|
||||
@@ -2739,13 +2708,13 @@ namespace SoD
|
||||
{
|
||||
structs::Texture_Struct *Equipment = (structs::Texture_Struct *)Buffer;
|
||||
|
||||
for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) {
|
||||
for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) {
|
||||
Equipment[k].Material = emu->equipment.Slot[k].Material;
|
||||
Equipment[k].Unknown1 = emu->equipment.Slot[k].Unknown1;
|
||||
Equipment[k].EliteMaterial = emu->equipment.Slot[k].EliteModel;
|
||||
}
|
||||
|
||||
Buffer += (sizeof(structs::Texture_Struct) * EQ::textures::materialCount);
|
||||
Buffer += (sizeof(structs::Texture_Struct) * EQEmu::textures::materialCount);
|
||||
}
|
||||
if (strlen(emu->title))
|
||||
{
|
||||
@@ -3004,84 +2973,6 @@ namespace SoD
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzAddPlayer)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||
|
||||
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzChooseZoneReply)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::DynamicZoneChooseZoneReply_Struct);
|
||||
SETUP_DIRECT_DECODE(DynamicZoneChooseZoneReply_Struct, structs::DynamicZoneChooseZoneReply_Struct);
|
||||
|
||||
IN(unknown000);
|
||||
IN(unknown004);
|
||||
IN(unknown008);
|
||||
IN(unknown_id1);
|
||||
IN(dz_zone_id);
|
||||
IN(dz_instance_id);
|
||||
IN(dz_type);
|
||||
IN(unknown_id2);
|
||||
IN(unknown028);
|
||||
IN(unknown032);
|
||||
IN(unknown036);
|
||||
IN(unknown040);
|
||||
IN(unknown044);
|
||||
IN(unknown048);
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzExpeditionInviteResponse)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionInviteResponse_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionInviteResponse_Struct, structs::ExpeditionInviteResponse_Struct);
|
||||
|
||||
IN(dz_zone_id);
|
||||
IN(dz_instance_id);
|
||||
IN(accepted);
|
||||
IN(swapping);
|
||||
strn0cpy(emu->swap_name, eq->swap_name, sizeof(emu->swap_name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzMakeLeader)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||
|
||||
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzRemovePlayer)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||
|
||||
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzSwapPlayer)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionCommandSwap_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionCommandSwap_Struct, structs::ExpeditionCommandSwap_Struct);
|
||||
|
||||
strn0cpy(emu->add_player_name, eq->add_player_name, sizeof(emu->add_player_name));
|
||||
strn0cpy(emu->rem_player_name, eq->rem_player_name, sizeof(emu->rem_player_name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_Emote)
|
||||
{
|
||||
unsigned char *__eq_buffer = __packet->pBuffer;
|
||||
@@ -3255,7 +3146,7 @@ namespace SoD
|
||||
|
||||
for (int i = 0; i < spells::SPELL_GEM_COUNT; ++i)
|
||||
emu->spell[i] = eq->spell[i];
|
||||
for (int i = spells::SPELL_GEM_COUNT; i < EQ::spells::SPELL_GEM_COUNT; ++i)
|
||||
for (int i = spells::SPELL_GEM_COUNT; i < EQEmu::spells::SPELL_GEM_COUNT; ++i)
|
||||
emu->spell[i] = 0xFFFFFFFF;
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
@@ -3549,9 +3440,9 @@ namespace SoD
|
||||
return NextItemInstSerialNumber;
|
||||
}
|
||||
|
||||
void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id_in, uint8 depth)
|
||||
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth)
|
||||
{
|
||||
const EQ::ItemData *item = inst->GetUnscaledItem();
|
||||
const EQEmu::ItemData *item = inst->GetUnscaledItem();
|
||||
|
||||
SoD::structs::ItemSerializationHeader hdr;
|
||||
|
||||
@@ -3740,12 +3631,6 @@ namespace SoD
|
||||
itbs.no_transfer = item->NoTransfer;
|
||||
itbs.expendablearrow = item->ExpendableArrow;
|
||||
|
||||
// Done to hack older clients to label expendable fishing poles as such
|
||||
// July 28th, 2018 patch
|
||||
if (item->ItemType == EQ::item::ItemTypeFishingPole && item->SubType == 0) {
|
||||
itbs.expendablearrow = 1;
|
||||
}
|
||||
|
||||
ob.write((const char*)&itbs, sizeof(SoD::structs::ItemTertiaryBodyStruct));
|
||||
|
||||
// Effect Structures Broken down to allow variable length strings for effect names
|
||||
@@ -3866,30 +3751,30 @@ namespace SoD
|
||||
|
||||
ob.write((const char*)&iqbs, sizeof(SoD::structs::ItemQuaternaryBodyStruct));
|
||||
|
||||
EQ::OutBuffer::pos_type count_pos = ob.tellp();
|
||||
EQEmu::OutBuffer::pos_type count_pos = ob.tellp();
|
||||
uint32 subitem_count = 0;
|
||||
|
||||
ob.write((const char*)&subitem_count, sizeof(uint32));
|
||||
|
||||
// moved outside of loop since it is not modified within that scope
|
||||
int16 SubSlotNumber = EQ::invbag::SLOT_INVALID;
|
||||
int16 SubSlotNumber = EQEmu::invbag::SLOT_INVALID;
|
||||
|
||||
if (slot_id_in <= EQ::invslot::slotGeneral8 && slot_id_in >= EQ::invslot::GENERAL_BEGIN)
|
||||
SubSlotNumber = EQ::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQ::invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT);
|
||||
else if (slot_id_in <= EQ::invslot::GENERAL_END && slot_id_in >= EQ::invslot::slotGeneral9)
|
||||
SubSlotNumber = EQ::invbag::SLOT_INVALID;
|
||||
else if (slot_id_in == EQ::invslot::slotCursor)
|
||||
SubSlotNumber = EQ::invbag::CURSOR_BAG_BEGIN;
|
||||
else if (slot_id_in <= EQ::invslot::BANK_END && slot_id_in >= EQ::invslot::BANK_BEGIN)
|
||||
SubSlotNumber = EQ::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::BANK_BEGIN) * EQ::invbag::SLOT_COUNT);
|
||||
else if (slot_id_in <= EQ::invslot::SHARED_BANK_END && slot_id_in >= EQ::invslot::SHARED_BANK_BEGIN)
|
||||
SubSlotNumber = EQ::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::SHARED_BANK_BEGIN) * EQ::invbag::SLOT_COUNT);
|
||||
if (slot_id_in <= EQEmu::invslot::slotGeneral8 && slot_id_in >= EQEmu::invslot::GENERAL_BEGIN)
|
||||
SubSlotNumber = EQEmu::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT);
|
||||
else if (slot_id_in <= EQEmu::invslot::GENERAL_END && slot_id_in >= EQEmu::invslot::slotGeneral9)
|
||||
SubSlotNumber = EQEmu::invbag::SLOT_INVALID;
|
||||
else if (slot_id_in == EQEmu::invslot::slotCursor)
|
||||
SubSlotNumber = EQEmu::invbag::CURSOR_BAG_BEGIN;
|
||||
else if (slot_id_in <= EQEmu::invslot::BANK_END && slot_id_in >= EQEmu::invslot::BANK_BEGIN)
|
||||
SubSlotNumber = EQEmu::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT);
|
||||
else if (slot_id_in <= EQEmu::invslot::SHARED_BANK_END && slot_id_in >= EQEmu::invslot::SHARED_BANK_BEGIN)
|
||||
SubSlotNumber = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::SHARED_BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT);
|
||||
else
|
||||
SubSlotNumber = slot_id_in; // not sure if this is the best way to handle this..leaving for now
|
||||
|
||||
if (SubSlotNumber != EQ::invbag::SLOT_INVALID) {
|
||||
for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) {
|
||||
EQ::ItemInstance* sub = inst->GetItem(index);
|
||||
if (SubSlotNumber != EQEmu::invbag::SLOT_INVALID) {
|
||||
for (uint32 index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; ++index) {
|
||||
EQEmu::ItemInstance* sub = inst->GetItem(index);
|
||||
if (!sub)
|
||||
continue;
|
||||
|
||||
@@ -3908,59 +3793,59 @@ namespace SoD
|
||||
{
|
||||
uint32 SoDSlot = invslot::SLOT_INVALID;
|
||||
|
||||
if (serverSlot <= EQ::invslot::slotGeneral8) {
|
||||
if (serverSlot <= EQEmu::invslot::slotGeneral8) {
|
||||
SoDSlot = serverSlot;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invslot::CORPSE_END && serverSlot >= EQ::invslot::slotCursor) {
|
||||
else if (serverSlot <= EQEmu::invslot::CORPSE_END && serverSlot >= EQEmu::invslot::slotCursor) {
|
||||
SoDSlot = serverSlot - 2;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invbag::GENERAL_BAGS_8_END && serverSlot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invbag::GENERAL_BAGS_8_END && serverSlot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) {
|
||||
SoDSlot = serverSlot + 11;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invbag::CURSOR_BAG_END && serverSlot >= EQ::invbag::CURSOR_BAG_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invbag::CURSOR_BAG_END && serverSlot >= EQEmu::invbag::CURSOR_BAG_BEGIN) {
|
||||
SoDSlot = serverSlot - 9;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invslot::TRIBUTE_END && serverSlot >= EQ::invslot::TRIBUTE_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invslot::TRIBUTE_END && serverSlot >= EQEmu::invslot::TRIBUTE_BEGIN) {
|
||||
SoDSlot = serverSlot;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invslot::GUILD_TRIBUTE_END && serverSlot >= EQ::invslot::GUILD_TRIBUTE_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invslot::GUILD_TRIBUTE_END && serverSlot >= EQEmu::invslot::GUILD_TRIBUTE_BEGIN) {
|
||||
SoDSlot = serverSlot;
|
||||
}
|
||||
|
||||
else if (serverSlot == EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) {
|
||||
else if (serverSlot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) {
|
||||
SoDSlot = serverSlot;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invslot::BANK_END && serverSlot >= EQ::invslot::BANK_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invslot::BANK_END && serverSlot >= EQEmu::invslot::BANK_BEGIN) {
|
||||
SoDSlot = serverSlot;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invbag::BANK_BAGS_END && serverSlot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invbag::BANK_BAGS_END && serverSlot >= EQEmu::invbag::BANK_BAGS_BEGIN) {
|
||||
SoDSlot = serverSlot + 1;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invslot::SHARED_BANK_END && serverSlot >= EQ::invslot::SHARED_BANK_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invslot::SHARED_BANK_END && serverSlot >= EQEmu::invslot::SHARED_BANK_BEGIN) {
|
||||
SoDSlot = serverSlot;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invbag::SHARED_BANK_BAGS_END && serverSlot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invbag::SHARED_BANK_BAGS_END && serverSlot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||
SoDSlot = serverSlot + 1;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invslot::TRADE_END && serverSlot >= EQ::invslot::TRADE_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invslot::TRADE_END && serverSlot >= EQEmu::invslot::TRADE_BEGIN) {
|
||||
SoDSlot = serverSlot;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invbag::TRADE_BAGS_END && serverSlot >= EQ::invbag::TRADE_BAGS_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invbag::TRADE_BAGS_END && serverSlot >= EQEmu::invbag::TRADE_BAGS_BEGIN) {
|
||||
SoDSlot = serverSlot;
|
||||
}
|
||||
|
||||
else if (serverSlot <= EQ::invslot::WORLD_END && serverSlot >= EQ::invslot::WORLD_BEGIN) {
|
||||
else if (serverSlot <= EQEmu::invslot::WORLD_END && serverSlot >= EQEmu::invslot::WORLD_BEGIN) {
|
||||
SoDSlot = serverSlot;
|
||||
}
|
||||
|
||||
@@ -3973,11 +3858,11 @@ namespace SoD
|
||||
{
|
||||
uint32 SoDSlot = invslot::SLOT_INVALID;
|
||||
|
||||
if (server_corpse_slot <= EQ::invslot::slotGeneral8 && server_corpse_slot >= EQ::invslot::slotGeneral1) {
|
||||
if (server_corpse_slot <= EQEmu::invslot::slotGeneral8 && server_corpse_slot >= EQEmu::invslot::slotGeneral1) {
|
||||
SoDSlot = server_corpse_slot;
|
||||
}
|
||||
|
||||
else if (server_corpse_slot <= EQ::invslot::CORPSE_END && server_corpse_slot >= EQ::invslot::slotCursor) {
|
||||
else if (server_corpse_slot <= EQEmu::invslot::CORPSE_END && server_corpse_slot >= EQEmu::invslot::slotCursor) {
|
||||
SoDSlot = server_corpse_slot - 2;
|
||||
}
|
||||
|
||||
@@ -3988,7 +3873,7 @@ namespace SoD
|
||||
|
||||
static inline uint32 SoDToServerSlot(uint32 sod_slot)
|
||||
{
|
||||
uint32 server_slot = EQ::invslot::SLOT_INVALID;
|
||||
uint32 server_slot = EQEmu::invslot::SLOT_INVALID;
|
||||
|
||||
if (sod_slot <= invslot::slotGeneral8) {
|
||||
server_slot = sod_slot;
|
||||
@@ -4053,7 +3938,7 @@ namespace SoD
|
||||
|
||||
static inline uint32 SoDToServerCorpseSlot(uint32 sod_corpse_slot)
|
||||
{
|
||||
uint32 server_slot = EQ::invslot::SLOT_INVALID;
|
||||
uint32 server_slot = EQEmu::invslot::SLOT_INVALID;
|
||||
|
||||
if (sod_corpse_slot <= invslot::slotGeneral8 && sod_corpse_slot >= invslot::slotGeneral1) {
|
||||
server_slot = sod_corpse_slot;
|
||||
@@ -4070,7 +3955,7 @@ namespace SoD
|
||||
|
||||
static inline void ServerToSoDSayLink(std::string &sod_saylink, const std::string &server_saylink)
|
||||
{
|
||||
if ((constants::SAY_LINK_BODY_SIZE == EQ::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) {
|
||||
if ((constants::SAY_LINK_BODY_SIZE == EQEmu::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) {
|
||||
sod_saylink = server_saylink;
|
||||
return;
|
||||
}
|
||||
@@ -4079,7 +3964,7 @@ namespace SoD
|
||||
|
||||
for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) {
|
||||
if (segment_iter & 1) {
|
||||
if (segments[segment_iter].length() <= EQ::constants::SAY_LINK_BODY_SIZE) {
|
||||
if (segments[segment_iter].length() <= EQEmu::constants::SAY_LINK_BODY_SIZE) {
|
||||
sod_saylink.append(segments[segment_iter]);
|
||||
// TODO: log size mismatch error
|
||||
continue;
|
||||
@@ -4110,7 +3995,7 @@ namespace SoD
|
||||
|
||||
static inline void SoDToServerSayLink(std::string &server_saylink, const std::string &sod_saylink)
|
||||
{
|
||||
if ((EQ::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (sod_saylink.find('\x12') == std::string::npos)) {
|
||||
if ((EQEmu::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (sod_saylink.find('\x12') == std::string::npos)) {
|
||||
server_saylink = sod_saylink;
|
||||
return;
|
||||
}
|
||||
@@ -4144,84 +4029,84 @@ namespace SoD
|
||||
}
|
||||
}
|
||||
|
||||
static inline spells::CastingSlot ServerToSoDCastingSlot(EQ::spells::CastingSlot slot)
|
||||
static inline spells::CastingSlot ServerToSoDCastingSlot(EQEmu::spells::CastingSlot slot)
|
||||
{
|
||||
switch (slot) {
|
||||
case EQ::spells::CastingSlot::Gem1:
|
||||
case EQEmu::spells::CastingSlot::Gem1:
|
||||
return spells::CastingSlot::Gem1;
|
||||
case EQ::spells::CastingSlot::Gem2:
|
||||
case EQEmu::spells::CastingSlot::Gem2:
|
||||
return spells::CastingSlot::Gem2;
|
||||
case EQ::spells::CastingSlot::Gem3:
|
||||
case EQEmu::spells::CastingSlot::Gem3:
|
||||
return spells::CastingSlot::Gem3;
|
||||
case EQ::spells::CastingSlot::Gem4:
|
||||
case EQEmu::spells::CastingSlot::Gem4:
|
||||
return spells::CastingSlot::Gem4;
|
||||
case EQ::spells::CastingSlot::Gem5:
|
||||
case EQEmu::spells::CastingSlot::Gem5:
|
||||
return spells::CastingSlot::Gem5;
|
||||
case EQ::spells::CastingSlot::Gem6:
|
||||
case EQEmu::spells::CastingSlot::Gem6:
|
||||
return spells::CastingSlot::Gem6;
|
||||
case EQ::spells::CastingSlot::Gem7:
|
||||
case EQEmu::spells::CastingSlot::Gem7:
|
||||
return spells::CastingSlot::Gem7;
|
||||
case EQ::spells::CastingSlot::Gem8:
|
||||
case EQEmu::spells::CastingSlot::Gem8:
|
||||
return spells::CastingSlot::Gem8;
|
||||
case EQ::spells::CastingSlot::Gem9:
|
||||
case EQEmu::spells::CastingSlot::Gem9:
|
||||
return spells::CastingSlot::Gem9;
|
||||
case EQ::spells::CastingSlot::Gem10:
|
||||
case EQEmu::spells::CastingSlot::Gem10:
|
||||
return spells::CastingSlot::Gem10;
|
||||
case EQ::spells::CastingSlot::Item:
|
||||
case EQ::spells::CastingSlot::PotionBelt:
|
||||
case EQEmu::spells::CastingSlot::Item:
|
||||
case EQEmu::spells::CastingSlot::PotionBelt:
|
||||
return spells::CastingSlot::Item;
|
||||
case EQ::spells::CastingSlot::Discipline:
|
||||
case EQEmu::spells::CastingSlot::Discipline:
|
||||
return spells::CastingSlot::Discipline;
|
||||
case EQ::spells::CastingSlot::AltAbility:
|
||||
case EQEmu::spells::CastingSlot::AltAbility:
|
||||
return spells::CastingSlot::AltAbility;
|
||||
default: // we shouldn't have any issues with other slots ... just return something
|
||||
return spells::CastingSlot::Discipline;
|
||||
}
|
||||
}
|
||||
|
||||
static inline EQ::spells::CastingSlot SoDToServerCastingSlot(spells::CastingSlot slot)
|
||||
static inline EQEmu::spells::CastingSlot SoDToServerCastingSlot(spells::CastingSlot slot)
|
||||
{
|
||||
switch (slot) {
|
||||
case spells::CastingSlot::Gem1:
|
||||
return EQ::spells::CastingSlot::Gem1;
|
||||
return EQEmu::spells::CastingSlot::Gem1;
|
||||
case spells::CastingSlot::Gem2:
|
||||
return EQ::spells::CastingSlot::Gem2;
|
||||
return EQEmu::spells::CastingSlot::Gem2;
|
||||
case spells::CastingSlot::Gem3:
|
||||
return EQ::spells::CastingSlot::Gem3;
|
||||
return EQEmu::spells::CastingSlot::Gem3;
|
||||
case spells::CastingSlot::Gem4:
|
||||
return EQ::spells::CastingSlot::Gem4;
|
||||
return EQEmu::spells::CastingSlot::Gem4;
|
||||
case spells::CastingSlot::Gem5:
|
||||
return EQ::spells::CastingSlot::Gem5;
|
||||
return EQEmu::spells::CastingSlot::Gem5;
|
||||
case spells::CastingSlot::Gem6:
|
||||
return EQ::spells::CastingSlot::Gem6;
|
||||
return EQEmu::spells::CastingSlot::Gem6;
|
||||
case spells::CastingSlot::Gem7:
|
||||
return EQ::spells::CastingSlot::Gem7;
|
||||
return EQEmu::spells::CastingSlot::Gem7;
|
||||
case spells::CastingSlot::Gem8:
|
||||
return EQ::spells::CastingSlot::Gem8;
|
||||
return EQEmu::spells::CastingSlot::Gem8;
|
||||
case spells::CastingSlot::Gem9:
|
||||
return EQ::spells::CastingSlot::Gem9;
|
||||
return EQEmu::spells::CastingSlot::Gem9;
|
||||
case spells::CastingSlot::Gem10:
|
||||
return EQ::spells::CastingSlot::Gem10;
|
||||
return EQEmu::spells::CastingSlot::Gem10;
|
||||
case spells::CastingSlot::Discipline:
|
||||
return EQ::spells::CastingSlot::Discipline;
|
||||
return EQEmu::spells::CastingSlot::Discipline;
|
||||
case spells::CastingSlot::Item:
|
||||
return EQ::spells::CastingSlot::Item;
|
||||
return EQEmu::spells::CastingSlot::Item;
|
||||
case spells::CastingSlot::AltAbility:
|
||||
return EQ::spells::CastingSlot::AltAbility;
|
||||
return EQEmu::spells::CastingSlot::AltAbility;
|
||||
default: // we shouldn't have any issues with other slots ... just return something
|
||||
return EQ::spells::CastingSlot::Discipline;
|
||||
return EQEmu::spells::CastingSlot::Discipline;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int ServerToSoDBuffSlot(int index)
|
||||
{
|
||||
// we're a disc
|
||||
if (index >= EQ::spells::LONG_BUFFS + EQ::spells::SHORT_BUFFS)
|
||||
return index - EQ::spells::LONG_BUFFS - EQ::spells::SHORT_BUFFS +
|
||||
if (index >= EQEmu::spells::LONG_BUFFS + EQEmu::spells::SHORT_BUFFS)
|
||||
return index - EQEmu::spells::LONG_BUFFS - EQEmu::spells::SHORT_BUFFS +
|
||||
spells::LONG_BUFFS + spells::SHORT_BUFFS;
|
||||
// we're a song
|
||||
if (index >= EQ::spells::LONG_BUFFS)
|
||||
return index - EQ::spells::LONG_BUFFS + spells::LONG_BUFFS;
|
||||
if (index >= EQEmu::spells::LONG_BUFFS)
|
||||
return index - EQEmu::spells::LONG_BUFFS + spells::LONG_BUFFS;
|
||||
// we're a normal buff
|
||||
return index; // as long as we guard against bad slots server side, we should be fine
|
||||
}
|
||||
@@ -4230,11 +4115,11 @@ namespace SoD
|
||||
{
|
||||
// we're a disc
|
||||
if (index >= spells::LONG_BUFFS + spells::SHORT_BUFFS)
|
||||
return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQ::spells::LONG_BUFFS +
|
||||
EQ::spells::SHORT_BUFFS;
|
||||
return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQEmu::spells::LONG_BUFFS +
|
||||
EQEmu::spells::SHORT_BUFFS;
|
||||
// we're a song
|
||||
if (index >= spells::LONG_BUFFS)
|
||||
return index - spells::LONG_BUFFS + EQ::spells::LONG_BUFFS;
|
||||
return index - spells::LONG_BUFFS + EQEmu::spells::LONG_BUFFS;
|
||||
// we're a normal buff
|
||||
return index; // as long as we guard against bad slots server side, we should be fine
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace SoD
|
||||
protected:
|
||||
|
||||
virtual std::string Describe() const;
|
||||
virtual const EQ::versions::ClientVersion ClientVersion() const;
|
||||
virtual const EQEmu::versions::ClientVersion ClientVersion() const;
|
||||
|
||||
//magic macro to declare our opcode processors
|
||||
#include "ss_declare.h"
|
||||
|
||||
+15
-15
@@ -31,7 +31,7 @@ namespace SoD
|
||||
const int16 INULL = 0;
|
||||
|
||||
namespace inventory {
|
||||
inline EQ::versions::ClientVersion GetInventoryRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetInventoryRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
const bool ConcatenateInvTypeLimbo = true;
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace SoD
|
||||
} /*inventory*/
|
||||
|
||||
namespace invtype {
|
||||
inline EQ::versions::ClientVersion GetInvTypeRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetInvTypeRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
namespace enum_ {
|
||||
enum InventoryTypes : int16 {
|
||||
@@ -106,7 +106,7 @@ namespace SoD
|
||||
} /*invtype*/
|
||||
|
||||
namespace invslot {
|
||||
inline EQ::versions::ClientVersion GetInvSlotRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetInvSlotRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
namespace enum_ {
|
||||
enum InventorySlots : int16 {
|
||||
@@ -205,7 +205,7 @@ namespace SoD
|
||||
} /*invslot*/
|
||||
|
||||
namespace invbag {
|
||||
inline EQ::versions::ClientVersion GetInvBagRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetInvBagRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
const int16 SLOT_INVALID = IINVALID;
|
||||
const int16 SLOT_BEGIN = INULL;
|
||||
@@ -237,7 +237,7 @@ namespace SoD
|
||||
} /*invbag*/
|
||||
|
||||
namespace invaug {
|
||||
inline EQ::versions::ClientVersion GetInvAugRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetInvAugRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
const int16 SOCKET_INVALID = IINVALID;
|
||||
const int16 SOCKET_BEGIN = INULL;
|
||||
@@ -249,7 +249,7 @@ namespace SoD
|
||||
} /*invaug*/
|
||||
|
||||
namespace item {
|
||||
inline EQ::versions::ClientVersion GetItemRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetItemRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
enum ItemPacketType : int {
|
||||
ItemPacketMerchant = 100,
|
||||
@@ -267,7 +267,7 @@ namespace SoD
|
||||
} /*item*/
|
||||
|
||||
namespace profile {
|
||||
inline EQ::versions::ClientVersion GetProfileRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetProfileRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
const int16 BANDOLIERS_SIZE = 20; // number of bandolier instances
|
||||
const int16 BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance
|
||||
@@ -279,11 +279,11 @@ namespace SoD
|
||||
} /*profile*/
|
||||
|
||||
namespace constants {
|
||||
inline EQ::versions::ClientVersion GetConstantsRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetConstantsRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
const EQ::expansions::Expansion EXPANSION = EQ::expansions::Expansion::SoD;
|
||||
const uint32 EXPANSION_BIT = EQ::expansions::bitSoD;
|
||||
const uint32 EXPANSIONS_MASK = EQ::expansions::maskSoD;
|
||||
const EQEmu::expansions::Expansion EXPANSION = EQEmu::expansions::Expansion::SoD;
|
||||
const uint32 EXPANSION_BIT = EQEmu::expansions::bitSoD;
|
||||
const uint32 EXPANSIONS_MASK = EQEmu::expansions::maskSoD;
|
||||
|
||||
const size_t CHARACTER_CREATION_LIMIT = 12;
|
||||
|
||||
@@ -292,21 +292,21 @@ namespace SoD
|
||||
} /*constants*/
|
||||
|
||||
namespace behavior {
|
||||
inline EQ::versions::ClientVersion GetBehaviorRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetBehaviorRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
const bool CoinHasWeight = false;
|
||||
|
||||
} /*behavior*/
|
||||
|
||||
namespace skills {
|
||||
inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
const size_t LastUsableSkill = EQ::skills::SkillTripleAttack;
|
||||
const size_t LastUsableSkill = EQEmu::skills::SkillTripleAttack;
|
||||
|
||||
} /*skills*/
|
||||
|
||||
namespace spells {
|
||||
inline EQ::versions::ClientVersion GetSkillsRef() { return EQ::versions::ClientVersion::SoD; }
|
||||
inline EQEmu::versions::ClientVersion GetSkillsRef() { return EQEmu::versions::ClientVersion::SoD; }
|
||||
|
||||
enum class CastingSlot : uint32 {
|
||||
Gem1 = 0,
|
||||
|
||||
@@ -35,16 +35,13 @@ E(OP_Consider)
|
||||
E(OP_Damage)
|
||||
E(OP_DeleteCharge)
|
||||
E(OP_DeleteItem)
|
||||
E(OP_DzChooseZone)
|
||||
E(OP_DzCompass)
|
||||
E(OP_DzExpeditionEndsWarning)
|
||||
E(OP_DzExpeditionInfo)
|
||||
E(OP_DzExpeditionInvite)
|
||||
E(OP_DzExpeditionLockoutTimers)
|
||||
E(OP_DzExpeditionList)
|
||||
E(OP_DzJoinExpeditionConfirm)
|
||||
E(OP_DzLeaderStatus)
|
||||
E(OP_DzMemberList)
|
||||
E(OP_DzMemberListName)
|
||||
E(OP_DzMemberListStatus)
|
||||
E(OP_DzSetLeaderName)
|
||||
E(OP_Emote)
|
||||
E(OP_ExpansionInfo)
|
||||
E(OP_FormattedMessage)
|
||||
@@ -114,12 +111,6 @@ D(OP_Consider)
|
||||
D(OP_ConsiderCorpse)
|
||||
D(OP_Consume)
|
||||
D(OP_DeleteItem)
|
||||
D(OP_DzAddPlayer)
|
||||
D(OP_DzChooseZoneReply)
|
||||
D(OP_DzExpeditionInviteResponse)
|
||||
D(OP_DzMakeLeader)
|
||||
D(OP_DzRemovePlayer)
|
||||
D(OP_DzSwapPlayer)
|
||||
D(OP_Emote)
|
||||
D(OP_FaceChange)
|
||||
D(OP_FindPersonRequest)
|
||||
|
||||
+31
-143
@@ -149,7 +149,7 @@ struct TintProfile
|
||||
Tint_Struct Primary;
|
||||
Tint_Struct Secondary;
|
||||
};
|
||||
Tint_Struct Slot[EQ::textures::materialCount];
|
||||
Tint_Struct Slot[EQEmu::textures::materialCount];
|
||||
};
|
||||
};
|
||||
|
||||
@@ -178,7 +178,7 @@ struct TextureProfile
|
||||
Texture_Struct Primary;
|
||||
Texture_Struct Secondary;
|
||||
};
|
||||
Texture_Struct Slot[EQ::textures::materialCount];
|
||||
Texture_Struct Slot[EQEmu::textures::materialCount];
|
||||
};
|
||||
|
||||
TextureProfile();
|
||||
@@ -195,7 +195,7 @@ struct CharacterSelectEntry_Struct
|
||||
/*0000*/ uint8 Beard; //
|
||||
/*0001*/ uint8 HairColor; //
|
||||
/*0000*/ uint8 Face; //
|
||||
/*0000*/ CharSelectEquip Equip[EQ::textures::materialCount];
|
||||
/*0000*/ CharSelectEquip Equip[EQEmu::textures::materialCount];
|
||||
/*0000*/ uint32 PrimaryIDFile; //
|
||||
/*0000*/ uint32 SecondaryIDFile; //
|
||||
/*0000*/ uint8 Unknown15; // 0xff
|
||||
@@ -444,11 +444,7 @@ struct NewZone_Struct {
|
||||
/*0848*/ int32 unknown848;
|
||||
/*0852*/ uint16 zone_id;
|
||||
/*0854*/ uint16 zone_instance;
|
||||
/*0856*/ uint32 scriptNPCReceivedanItem;
|
||||
/*0860*/ uint32 bCheck; // padded bool
|
||||
/*0864*/ uint32 scriptIDSomething;
|
||||
/*0868*/ uint32 underworld_teleport_index; // > 0 teleports w/ zone point index, invalid succors, -1 affects some collisions
|
||||
/*0872*/ uint32 scriptIDSomething3;
|
||||
/*0856*/ char unknown856[20];
|
||||
/*0876*/ uint32 SuspendBuffs;
|
||||
/*0880*/ uint32 unknown880; //seen 50
|
||||
/*0884*/ uint32 unknown884; //seen 10
|
||||
@@ -3784,7 +3780,7 @@ struct SendAA_Struct {
|
||||
/*0092*/ uint32 special_category;
|
||||
/*0096*/ uint8 shroud;
|
||||
/*0097*/ uint8 unknown97;
|
||||
/*0098*/ uint8 reset_on_death; // timer is reset on death
|
||||
/*0098*/ uint8 layonhands; // 1 for lay on hands -- doesn't seem to matter?
|
||||
/*0099*/ uint8 unknown99;
|
||||
/*0100*/ uint32 total_abilities;
|
||||
/*0104*/ AA_Ability abilities[0];
|
||||
@@ -4169,160 +4165,52 @@ struct VeteranReward
|
||||
/*012*/ VeteranRewardItem items[8];
|
||||
};
|
||||
|
||||
|
||||
struct ExpeditionInvite_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id; // unique character id
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char inviter_name[64];
|
||||
/*072*/ char expedition_name[128];
|
||||
/*200*/ uint8 swapping; // 0: adding 1: swapping
|
||||
/*201*/ char swap_name[64]; // if swapping, swap name being removed
|
||||
/*265*/ uint8 padding[3];
|
||||
/*268*/ uint16 dz_zone_id; // dz_id zone/instance pair, sent back in reply
|
||||
/*270*/ uint16 dz_instance_id;
|
||||
};
|
||||
|
||||
struct ExpeditionInviteResponse_Struct
|
||||
struct ExpeditionEntryHeader_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*000*/ uint32 number_of_entries;
|
||||
};
|
||||
|
||||
struct ExpeditionJoinPrompt_Struct
|
||||
{
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint16 dz_zone_id; // dz_id pair sent in invite
|
||||
/*010*/ uint16 dz_instance_id;
|
||||
/*012*/ uint8 accepted; // 0: declined 1: accepted
|
||||
/*013*/ uint8 swapping; // 0: adding 1: swapping (sent in invite)
|
||||
/*014*/ char swap_name[64]; // swap name sent in invite
|
||||
/*078*/ uint8 unknown078; // padding garbage?
|
||||
/*079*/ uint8 unknown079; // padding garbage?
|
||||
};
|
||||
|
||||
struct ExpeditionInfo_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 assigned; // padded bool
|
||||
/*012*/ uint32 max_players;
|
||||
/*016*/ char expedition_name[128];
|
||||
/*144*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionMemberEntry_Struct
|
||||
{
|
||||
/*000*/ char name[1]; // variable length, null terminated, max 0x40 (64)
|
||||
/*000*/ uint8 expedition_status; // 0: unknown 1: Online, 2: Offline, 3: In Dynamic Zone, 4: Link Dead
|
||||
};
|
||||
|
||||
struct ExpeditionMemberList_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 member_count; // number of players in window
|
||||
/*008*/ ExpeditionMemberEntry_Struct members[0]; // variable length
|
||||
};
|
||||
|
||||
struct ExpeditionMemberListName_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 add_name; // padded bool, 0: remove name, 1: add name with unknown status
|
||||
/*012*/ char name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionLockoutTimerEntry_Struct
|
||||
{
|
||||
/*000*/ char expedition_name[1]; // variable length, null terminated, max 0x80 (128)
|
||||
/*000*/ uint32 seconds_remaining;
|
||||
/*000*/ int32 event_type; // seen -1 (0xffffffff) for replay timers and 1 for event timers
|
||||
/*000*/ char event_name[1]; // variable length, null terminated, max 0x100 (256)
|
||||
};
|
||||
|
||||
struct ExpeditionLockoutTimers_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ ExpeditionLockoutTimerEntry_Struct timers[0];
|
||||
};
|
||||
|
||||
struct ExpeditionSetLeaderName_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCommand_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCommandSwap_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ char add_player_name[64]; // swap to (player must confirm)
|
||||
/*072*/ char rem_player_name[64]; // swap from
|
||||
/*008*/ char player_name[64];
|
||||
/*072*/ char expedition_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionExpireWarning
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 minutes_remaining;
|
||||
};
|
||||
|
||||
struct DynamicZoneCompassEntry_Struct
|
||||
struct ExpeditionInfo_Struct
|
||||
{
|
||||
/*000*/ uint16 dz_zone_id; // target dz id pair
|
||||
/*002*/ uint16 dz_instance_id;
|
||||
/*004*/ uint32 dz_type; // 1: Expedition, 2: Tutorial (purple), 3: Task, 4: Mission, 5: Quest (green)
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 unknown004;
|
||||
/*008*/ uint32 unknown008;
|
||||
/*012*/ uint32 max_players;
|
||||
/*016*/ char expedition_name[128];
|
||||
/*142*/ char leader_name[64];
|
||||
};
|
||||
|
||||
struct ExpeditionCompassEntry_Struct
|
||||
{
|
||||
/*000*/ float unknown000; //seen *((uint32*)) = 1584791871
|
||||
/*004*/ uint32 enabled; //guess
|
||||
/*008*/ uint32 unknown008; //seen 1019
|
||||
/*012*/ float y;
|
||||
/*016*/ float x;
|
||||
/*020*/ float z;
|
||||
};
|
||||
|
||||
struct DynamicZoneCompass_Struct
|
||||
struct ExpeditionCompass_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*000*/ uint32 clientid;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ DynamicZoneCompassEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZoneEntry_Struct
|
||||
{
|
||||
/*000*/ uint16 dz_zone_id; // dz_id pair
|
||||
/*002*/ uint16 dz_instance_id;
|
||||
/*004*/ uint32 unknown_id1; // sent back in reply
|
||||
/*008*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest -- sent back in reply
|
||||
/*012*/ uint32 unknown_id2; // possibly an id based on dz type, for expeditions this was same as dz_id (zone|instance) but task dz was different
|
||||
/*016*/ char description[1]; // variable length, null terminated, max 0x80 (128)
|
||||
/*000*/ char leader_name[1]; // variable length, null terminated, max 0x40 (64)
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZone_Struct
|
||||
{
|
||||
/*000*/ uint32 client_id;
|
||||
/*004*/ uint32 count;
|
||||
/*008*/ DynamicZoneChooseZoneEntry_Struct choices[0];
|
||||
};
|
||||
|
||||
struct DynamicZoneChooseZoneReply_Struct
|
||||
{
|
||||
/*000*/ uint32 unknown000; // ff ff ff ff
|
||||
/*004*/ uint32 unknown004; // seen 69 00 00 00
|
||||
/*008*/ uint32 unknown008; // ff ff ff ff
|
||||
/*012*/ uint32 unknown_id1; // from choose zone entry message
|
||||
/*016*/ uint16 dz_zone_id; // dz_id pair
|
||||
/*018*/ uint16 dz_instance_id;
|
||||
/*020*/ uint32 dz_type; // 1: Expedition, 2: Tutorial, 3: Task, 4: Mission, 5: Quest
|
||||
/*024*/ uint32 unknown_id2; // from choose zone entry message
|
||||
/*028*/ uint32 unknown028; // 00 00 00 00
|
||||
/*032*/ uint32 unknown032; // always same as unknown044
|
||||
/*036*/ uint32 unknown036;
|
||||
/*040*/ uint32 unknown040;
|
||||
/*044*/ uint32 unknown044; // always same as unknown032
|
||||
/*048*/ uint32 unknown048; // seen 01 00 00 00 and 02 00 00 00
|
||||
/*008*/ ExpeditionCompassEntry_Struct entries[0];
|
||||
};
|
||||
|
||||
struct AltCurrencySelectItem_Struct {
|
||||
|
||||
+176
-291
@@ -43,7 +43,7 @@ namespace SoF
|
||||
static OpcodeManager *opcodes = nullptr;
|
||||
static Strategy struct_strategy;
|
||||
|
||||
void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id, uint8 depth);
|
||||
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id, uint8 depth);
|
||||
|
||||
// server to client inventory location converters
|
||||
static inline uint32 ServerToSoFSlot(uint32 server_slot);
|
||||
@@ -59,8 +59,8 @@ namespace SoF
|
||||
// client to server say link converter
|
||||
static inline void SoFToServerSayLink(std::string &server_saylink, const std::string &sof_saylink);
|
||||
|
||||
static inline spells::CastingSlot ServerToSoFCastingSlot(EQ::spells::CastingSlot slot);
|
||||
static inline EQ::spells::CastingSlot SoFToServerCastingSlot(spells::CastingSlot slot, uint32 item_location);
|
||||
static inline spells::CastingSlot ServerToSoFCastingSlot(EQEmu::spells::CastingSlot slot);
|
||||
static inline EQEmu::spells::CastingSlot SoFToServerCastingSlot(spells::CastingSlot slot, uint32 item_location);
|
||||
|
||||
static inline int ServerToSoFBuffSlot(int index);
|
||||
static inline int SoFToServerBuffSlot(int index);
|
||||
@@ -142,9 +142,9 @@ namespace SoF
|
||||
return(r);
|
||||
}
|
||||
|
||||
const EQ::versions::ClientVersion Strategy::ClientVersion() const
|
||||
const EQEmu::versions::ClientVersion Strategy::ClientVersion() const
|
||||
{
|
||||
return EQ::versions::ClientVersion::SoF;
|
||||
return EQEmu::versions::ClientVersion::SoF;
|
||||
}
|
||||
|
||||
#include "ss_define.h"
|
||||
@@ -361,24 +361,24 @@ namespace SoF
|
||||
//store away the emu struct
|
||||
uchar* __emu_buffer = in->pBuffer;
|
||||
|
||||
int item_count = in->size / sizeof(EQ::InternalSerializedItem_Struct);
|
||||
if (!item_count || (in->size % sizeof(EQ::InternalSerializedItem_Struct)) != 0) {
|
||||
int item_count = in->size / sizeof(EQEmu::InternalSerializedItem_Struct);
|
||||
if (!item_count || (in->size % sizeof(EQEmu::InternalSerializedItem_Struct)) != 0) {
|
||||
Log(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
||||
opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQ::InternalSerializedItem_Struct));
|
||||
opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(EQEmu::InternalSerializedItem_Struct));
|
||||
|
||||
delete in;
|
||||
return;
|
||||
}
|
||||
|
||||
EQ::InternalSerializedItem_Struct* eq = (EQ::InternalSerializedItem_Struct*)in->pBuffer;
|
||||
EQEmu::InternalSerializedItem_Struct* eq = (EQEmu::InternalSerializedItem_Struct*)in->pBuffer;
|
||||
|
||||
EQ::OutBuffer ob;
|
||||
EQ::OutBuffer::pos_type last_pos = ob.tellp();
|
||||
EQEmu::OutBuffer ob;
|
||||
EQEmu::OutBuffer::pos_type last_pos = ob.tellp();
|
||||
|
||||
ob.write((const char*)&item_count, sizeof(uint32));
|
||||
|
||||
for (int index = 0; index < item_count; ++index, ++eq) {
|
||||
SerializeItem(ob, (const EQ::ItemInstance*)eq->inst, eq->slot_id, 0);
|
||||
SerializeItem(ob, (const EQEmu::ItemInstance*)eq->inst, eq->slot_id, 0);
|
||||
if (ob.tellp() == last_pos)
|
||||
LogNetcode("SoF::ENCODE(OP_CharInventory) Serialization failed on item slot [{}] during OP_CharInventory. Item skipped", eq->slot_id);
|
||||
|
||||
@@ -471,48 +471,14 @@ namespace SoF
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzChooseZone)
|
||||
{
|
||||
SETUP_VAR_ENCODE(DynamicZoneChooseZone_Struct);
|
||||
|
||||
SerializeBuffer buf;
|
||||
buf.WriteUInt32(emu->client_id);
|
||||
buf.WriteUInt32(emu->count);
|
||||
|
||||
for (uint32 i = 0; i < emu->count; ++i)
|
||||
{
|
||||
buf.WriteUInt16(emu->choices[i].dz_zone_id);
|
||||
buf.WriteUInt16(emu->choices[i].dz_instance_id);
|
||||
buf.WriteUInt32(emu->choices[i].unknown_id1);
|
||||
buf.WriteUInt32(emu->choices[i].dz_type);
|
||||
buf.WriteUInt32(emu->choices[i].unknown_id2);
|
||||
buf.WriteString(emu->choices[i].description);
|
||||
buf.WriteString(emu->choices[i].leader_name);
|
||||
}
|
||||
|
||||
__packet->size = buf.size();
|
||||
__packet->pBuffer = new unsigned char[__packet->size];
|
||||
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzCompass)
|
||||
{
|
||||
SETUP_VAR_ENCODE(DynamicZoneCompass_Struct);
|
||||
ALLOC_VAR_ENCODE(structs::DynamicZoneCompass_Struct,
|
||||
sizeof(structs::DynamicZoneCompass_Struct) +
|
||||
sizeof(structs::DynamicZoneCompassEntry_Struct) * emu->count
|
||||
);
|
||||
|
||||
OUT(client_id);
|
||||
SETUP_VAR_ENCODE(ExpeditionCompass_Struct);
|
||||
ALLOC_VAR_ENCODE(structs::ExpeditionCompass_Struct, sizeof(structs::ExpeditionInfo_Struct) + sizeof(structs::ExpeditionCompassEntry_Struct) * emu->count);
|
||||
OUT(count);
|
||||
|
||||
for (uint32 i = 0; i < emu->count; ++i)
|
||||
{
|
||||
OUT(entries[i].dz_zone_id);
|
||||
OUT(entries[i].dz_instance_id);
|
||||
OUT(entries[i].dz_type);
|
||||
OUT(entries[i].x);
|
||||
OUT(entries[i].y);
|
||||
OUT(entries[i].z);
|
||||
@@ -536,60 +502,80 @@ namespace SoF
|
||||
ENCODE_LENGTH_EXACT(ExpeditionInfo_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionInfo_Struct, structs::ExpeditionInfo_Struct);
|
||||
|
||||
OUT(client_id);
|
||||
OUT(assigned);
|
||||
OUT(max_players);
|
||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||
eq->enabled_max = 1;
|
||||
strcpy(eq->expedition_name, emu->expedition_name);
|
||||
strcpy(eq->leader_name, emu->leader_name);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzExpeditionInvite)
|
||||
ENCODE(OP_DzExpeditionList)
|
||||
{
|
||||
ENCODE_LENGTH_EXACT(ExpeditionInvite_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionInvite_Struct, structs::ExpeditionInvite_Struct);
|
||||
SETUP_VAR_ENCODE(ExpeditionLockoutList_Struct);
|
||||
|
||||
OUT(client_id);
|
||||
strn0cpy(eq->inviter_name, emu->inviter_name, sizeof(eq->inviter_name));
|
||||
strn0cpy(eq->expedition_name, emu->expedition_name, sizeof(eq->expedition_name));
|
||||
OUT(swapping);
|
||||
strn0cpy(eq->swap_name, emu->swap_name, sizeof(eq->swap_name));
|
||||
OUT(dz_zone_id);
|
||||
OUT(dz_instance_id);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzExpeditionLockoutTimers)
|
||||
{
|
||||
SETUP_VAR_ENCODE(ExpeditionLockoutTimers_Struct);
|
||||
|
||||
SerializeBuffer buf;
|
||||
buf.WriteUInt32(emu->client_id);
|
||||
buf.WriteUInt32(emu->count);
|
||||
for (uint32 i = 0; i < emu->count; ++i)
|
||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
||||
uint32 client_id = 0;
|
||||
uint8 null_term = 0;
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
||||
for (int i = 0; i < emu->count; ++i)
|
||||
{
|
||||
buf.WriteString(emu->timers[i].expedition_name);
|
||||
buf.WriteUInt32(emu->timers[i].seconds_remaining);
|
||||
buf.WriteInt32(emu->timers[i].event_type);
|
||||
buf.WriteString(emu->timers[i].event_name);
|
||||
ss.write(emu->entries[i].expedition, strlen(emu->entries[i].expedition));
|
||||
ss.write((const char*)&null_term, sizeof(char));
|
||||
ss.write((const char*)&emu->entries[i].time_left, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write(emu->entries[i].expedition_event, strlen(emu->entries[i].expedition_event));
|
||||
ss.write((const char*)&null_term, sizeof(char));
|
||||
}
|
||||
|
||||
__packet->size = buf.size();
|
||||
__packet->size = ss.str().length();
|
||||
__packet->pBuffer = new unsigned char[__packet->size];
|
||||
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzSetLeaderName)
|
||||
ENCODE(OP_DzJoinExpeditionConfirm)
|
||||
{
|
||||
ENCODE_LENGTH_EXACT(ExpeditionSetLeaderName_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionSetLeaderName_Struct, structs::ExpeditionSetLeaderName_Struct);
|
||||
ENCODE_LENGTH_EXACT(ExpeditionJoinPrompt_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionJoinPrompt_Struct, structs::ExpeditionJoinPrompt_Struct);
|
||||
|
||||
OUT(client_id);
|
||||
strn0cpy(eq->leader_name, emu->leader_name, sizeof(eq->leader_name));
|
||||
strcpy(eq->expedition_name, emu->expedition_name);
|
||||
strcpy(eq->player_name, emu->player_name);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzLeaderStatus)
|
||||
{
|
||||
SETUP_VAR_ENCODE(ExpeditionLeaderSet_Struct);
|
||||
|
||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
||||
uint32 client_id = 0;
|
||||
uint8 null_term = 0;
|
||||
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
//ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write(emu->leader_name, strlen(emu->leader_name));
|
||||
ss.write((const char*)&null_term, sizeof(char));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));//0xffffffff
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&client_id, sizeof(uint32));//1
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
|
||||
__packet->size = ss.str().length();
|
||||
__packet->pBuffer = new unsigned char[__packet->size];
|
||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
@@ -598,43 +584,26 @@ namespace SoF
|
||||
{
|
||||
SETUP_VAR_ENCODE(ExpeditionMemberList_Struct);
|
||||
|
||||
SerializeBuffer buf;
|
||||
buf.WriteUInt32(emu->client_id);
|
||||
buf.WriteUInt32(emu->member_count);
|
||||
for (uint32 i = 0; i < emu->member_count; ++i)
|
||||
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
|
||||
|
||||
uint32 client_id = 0;
|
||||
uint8 null_term = 0;
|
||||
ss.write((const char*)&client_id, sizeof(uint32));
|
||||
ss.write((const char*)&emu->count, sizeof(uint32));
|
||||
for (uint32 i = 0; i < emu->count; ++i)
|
||||
{
|
||||
buf.WriteString(emu->members[i].name);
|
||||
buf.WriteUInt8(emu->members[i].expedition_status);
|
||||
ss.write(emu->entries[i].name, strlen(emu->entries[i].name));
|
||||
ss.write((const char*)&null_term, sizeof(char));
|
||||
ss.write((const char*)&emu->entries[i].status, sizeof(char));
|
||||
}
|
||||
|
||||
__packet->size = buf.size();
|
||||
__packet->size = ss.str().length();
|
||||
__packet->pBuffer = new unsigned char[__packet->size];
|
||||
memcpy(__packet->pBuffer, buf.buffer(), __packet->size);
|
||||
memcpy(__packet->pBuffer, ss.str().c_str(), __packet->size);
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzMemberListName)
|
||||
{
|
||||
ENCODE_LENGTH_EXACT(ExpeditionMemberListName_Struct);
|
||||
SETUP_DIRECT_ENCODE(ExpeditionMemberListName_Struct, structs::ExpeditionMemberListName_Struct);
|
||||
|
||||
OUT(client_id);
|
||||
OUT(add_name);
|
||||
strn0cpy(eq->name, emu->name, sizeof(eq->name));
|
||||
|
||||
FINISH_ENCODE();
|
||||
}
|
||||
|
||||
ENCODE(OP_DzMemberListStatus)
|
||||
{
|
||||
auto emu = reinterpret_cast<ExpeditionMemberList_Struct*>((*p)->pBuffer);
|
||||
if (emu->member_count == 1)
|
||||
{
|
||||
ENCODE_FORWARD(OP_DzMemberList);
|
||||
}
|
||||
}
|
||||
|
||||
ENCODE(OP_Emote)
|
||||
{
|
||||
EQApplicationPacket *in = *p;
|
||||
@@ -886,14 +855,14 @@ namespace SoF
|
||||
//store away the emu struct
|
||||
uchar* __emu_buffer = in->pBuffer;
|
||||
|
||||
EQ::InternalSerializedItem_Struct* int_struct = (EQ::InternalSerializedItem_Struct*)(&__emu_buffer[4]);
|
||||
EQEmu::InternalSerializedItem_Struct* int_struct = (EQEmu::InternalSerializedItem_Struct*)(&__emu_buffer[4]);
|
||||
|
||||
EQ::OutBuffer ob;
|
||||
EQ::OutBuffer::pos_type last_pos = ob.tellp();
|
||||
EQEmu::OutBuffer ob;
|
||||
EQEmu::OutBuffer::pos_type last_pos = ob.tellp();
|
||||
|
||||
ob.write((const char*)__emu_buffer, 4);
|
||||
|
||||
SerializeItem(ob, (const EQ::ItemInstance*)int_struct->inst, int_struct->slot_id, 0);
|
||||
SerializeItem(ob, (const EQEmu::ItemInstance*)int_struct->inst, int_struct->slot_id, 0);
|
||||
if (ob.tellp() == last_pos) {
|
||||
LogNetcode("SoF::ENCODE(OP_ItemPacket) Serialization failed on item slot [{}]", int_struct->slot_id);
|
||||
delete in;
|
||||
@@ -987,7 +956,7 @@ namespace SoF
|
||||
|
||||
// Since HT/LoH are translated up, we need to translate down only for memSpellSpellbar case
|
||||
if (emu->scribing == 3)
|
||||
eq->slot = static_cast<uint32>(ServerToSoFCastingSlot(static_cast<EQ::spells::CastingSlot>(emu->slot)));
|
||||
eq->slot = static_cast<uint32>(ServerToSoFCastingSlot(static_cast<EQEmu::spells::CastingSlot>(emu->slot)));
|
||||
else
|
||||
OUT(slot);
|
||||
OUT(spell_id);
|
||||
@@ -1061,7 +1030,6 @@ namespace SoF
|
||||
OUT(FastRegenHP);
|
||||
OUT(FastRegenMana);
|
||||
OUT(FastRegenEndurance);
|
||||
OUT(underworld_teleport_index);
|
||||
|
||||
/*fill in some unknowns with observed values, hopefully it will help */
|
||||
eq->unknown796 = -1;
|
||||
@@ -1162,7 +1130,7 @@ namespace SoF
|
||||
OUT(hairstyle);
|
||||
OUT(beard);
|
||||
// OUT(unknown00178[10]);
|
||||
for (r = EQ::textures::textureBegin; r < EQ::textures::materialCount; r++) {
|
||||
for (r = EQEmu::textures::textureBegin; r < EQEmu::textures::materialCount; r++) {
|
||||
eq->equipment.Slot[r].Material = emu->item_material.Slot[r].Material;
|
||||
eq->equipment.Slot[r].Unknown1 = 0;
|
||||
eq->equipment.Slot[r].EliteMaterial = 0;
|
||||
@@ -1192,7 +1160,7 @@ namespace SoF
|
||||
OUT(face);
|
||||
// OUT(unknown02264[47]);
|
||||
|
||||
if (spells::SPELLBOOK_SIZE <= EQ::spells::SPELLBOOK_SIZE) {
|
||||
if (spells::SPELLBOOK_SIZE <= EQEmu::spells::SPELLBOOK_SIZE) {
|
||||
for (uint32 r = 0; r < spells::SPELLBOOK_SIZE; r++) {
|
||||
if (emu->spell_book[r] <= spells::SPELL_ID_MAX)
|
||||
eq->spell_book[r] = emu->spell_book[r];
|
||||
@@ -1201,14 +1169,14 @@ namespace SoF
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (uint32 r = 0; r < EQ::spells::SPELLBOOK_SIZE; r++) {
|
||||
for (uint32 r = 0; r < EQEmu::spells::SPELLBOOK_SIZE; r++) {
|
||||
if (emu->spell_book[r] <= spells::SPELL_ID_MAX)
|
||||
eq->spell_book[r] = emu->spell_book[r];
|
||||
else
|
||||
eq->spell_book[r] = 0xFFFFFFFFU;
|
||||
}
|
||||
// invalidate the rest of the spellbook slots
|
||||
memset(&eq->spell_book[EQ::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQ::spells::SPELLBOOK_SIZE)));
|
||||
memset(&eq->spell_book[EQEmu::spells::SPELLBOOK_SIZE], 0xFF, (sizeof(uint32) * (spells::SPELLBOOK_SIZE - EQEmu::spells::SPELLBOOK_SIZE)));
|
||||
}
|
||||
|
||||
// OUT(unknown4184[128]);
|
||||
@@ -1255,7 +1223,7 @@ namespace SoF
|
||||
// OUT(unknown06160[4]);
|
||||
|
||||
// Copy bandoliers where server and client indices converge
|
||||
for (r = 0; r < EQ::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) {
|
||||
for (r = 0; r < EQEmu::profile::BANDOLIERS_SIZE && r < profile::BANDOLIERS_SIZE; ++r) {
|
||||
OUT_str(bandoliers[r].Name);
|
||||
for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true
|
||||
OUT(bandoliers[r].Items[k].ID);
|
||||
@@ -1264,7 +1232,7 @@ namespace SoF
|
||||
}
|
||||
}
|
||||
// Nullify bandoliers where server and client indices diverge, with a client bias
|
||||
for (r = EQ::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) {
|
||||
for (r = EQEmu::profile::BANDOLIERS_SIZE; r < profile::BANDOLIERS_SIZE; ++r) {
|
||||
eq->bandoliers[r].Name[0] = '\0';
|
||||
for (uint32 k = 0; k < profile::BANDOLIER_ITEM_COUNT; ++k) { // Will need adjusting if 'server != client' is ever true
|
||||
eq->bandoliers[r].Items[k].ID = 0;
|
||||
@@ -1276,13 +1244,13 @@ namespace SoF
|
||||
// OUT(unknown07444[5120]);
|
||||
|
||||
// Copy potion belt where server and client indices converge
|
||||
for (r = 0; r < EQ::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) {
|
||||
for (r = 0; r < EQEmu::profile::POTION_BELT_SIZE && r < profile::POTION_BELT_SIZE; ++r) {
|
||||
OUT(potionbelt.Items[r].ID);
|
||||
OUT(potionbelt.Items[r].Icon);
|
||||
OUT_str(potionbelt.Items[r].Name);
|
||||
}
|
||||
// Nullify potion belt where server and client indices diverge, with a client bias
|
||||
for (r = EQ::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) {
|
||||
for (r = EQEmu::profile::POTION_BELT_SIZE; r < profile::POTION_BELT_SIZE; ++r) {
|
||||
eq->potionbelt.Items[r].ID = 0;
|
||||
eq->potionbelt.Items[r].Icon = 0;
|
||||
eq->potionbelt.Items[r].Name[0] = '\0';
|
||||
@@ -1625,7 +1593,7 @@ namespace SoF
|
||||
eq_cse->HairColor = emu_cse->HairColor;
|
||||
eq_cse->Face = emu_cse->Face;
|
||||
|
||||
for (int equip_index = EQ::textures::textureBegin; equip_index < EQ::textures::materialCount; equip_index++) {
|
||||
for (int equip_index = EQEmu::textures::textureBegin; equip_index < EQEmu::textures::materialCount; equip_index++) {
|
||||
eq_cse->Equip[equip_index].Material = emu_cse->Equip[equip_index].Material;
|
||||
eq_cse->Equip[equip_index].Unknown1 = emu_cse->Equip[equip_index].Unknown1;
|
||||
eq_cse->Equip[equip_index].EliteMaterial = emu_cse->Equip[equip_index].EliteModel;
|
||||
@@ -2047,7 +2015,7 @@ namespace SoF
|
||||
eq->deity = emu->deity;
|
||||
eq->drakkin_heritage = emu->drakkin_heritage;
|
||||
eq->gender = emu->gender;
|
||||
for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) {
|
||||
for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) {
|
||||
eq->equipment.Slot[k].Material = emu->equipment.Slot[k].Material;
|
||||
eq->equipment.Slot[k].Unknown1 = emu->equipment.Slot[k].Unknown1;
|
||||
eq->equipment.Slot[k].EliteMaterial = emu->equipment.Slot[k].EliteModel;
|
||||
@@ -2113,7 +2081,7 @@ namespace SoF
|
||||
strcpy(eq->name, emu->name);
|
||||
eq->petOwnerId = emu->petOwnerId;
|
||||
eq->pvp = 0; // 0 = non-pvp colored name, 1 = red pvp name
|
||||
for (k = EQ::textures::textureBegin; k < EQ::textures::materialCount; k++) {
|
||||
for (k = EQEmu::textures::textureBegin; k < EQEmu::textures::materialCount; k++) {
|
||||
eq->equipment_tint.Slot[k].Color = emu->equipment_tint.Slot[k].Color;
|
||||
}
|
||||
eq->anon = emu->anon;
|
||||
@@ -2332,7 +2300,7 @@ namespace SoF
|
||||
DECODE_LENGTH_EXACT(structs::BugReport_Struct);
|
||||
SETUP_DIRECT_DECODE(BugReport_Struct, structs::BugReport_Struct);
|
||||
|
||||
emu->category_id = EQ::bug::CategoryNameToCategoryID(eq->category_name);
|
||||
emu->category_id = EQEmu::bug::CategoryNameToCategoryID(eq->category_name);
|
||||
memcpy(emu->category_name, eq, sizeof(structs::BugReport_Struct));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
@@ -2466,83 +2434,6 @@ namespace SoF
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzAddPlayer)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||
|
||||
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzChooseZoneReply)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::DynamicZoneChooseZoneReply_Struct);
|
||||
SETUP_DIRECT_DECODE(DynamicZoneChooseZoneReply_Struct, structs::DynamicZoneChooseZoneReply_Struct);
|
||||
|
||||
emu->unknown000 = eq->unknown000;
|
||||
emu->unknown008 = eq->unknown004;
|
||||
IN(unknown_id1);
|
||||
IN(dz_zone_id);
|
||||
IN(dz_instance_id);
|
||||
IN(dz_type);
|
||||
IN(unknown_id2);
|
||||
emu->unknown028 = eq->unknown024;
|
||||
emu->unknown032 = eq->unknown028;
|
||||
emu->unknown036 = eq->unknown032;
|
||||
emu->unknown040 = eq->unknown036;
|
||||
emu->unknown044 = eq->unknown040;
|
||||
emu->unknown048 = eq->unknown044;
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzExpeditionInviteResponse)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionInviteResponse_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionInviteResponse_Struct, structs::ExpeditionInviteResponse_Struct);
|
||||
|
||||
IN(dz_zone_id);
|
||||
IN(dz_instance_id);
|
||||
IN(accepted);
|
||||
IN(swapping);
|
||||
strn0cpy(emu->swap_name, eq->swap_name, sizeof(emu->swap_name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzMakeLeader)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||
|
||||
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzRemovePlayer)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionCommand_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionCommand_Struct, structs::ExpeditionCommand_Struct);
|
||||
|
||||
strn0cpy(emu->name, eq->name, sizeof(emu->name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_DzSwapPlayer)
|
||||
{
|
||||
DECODE_LENGTH_EXACT(structs::ExpeditionCommandSwap_Struct);
|
||||
SETUP_DIRECT_DECODE(ExpeditionCommandSwap_Struct, structs::ExpeditionCommandSwap_Struct);
|
||||
|
||||
strn0cpy(emu->add_player_name, eq->add_player_name, sizeof(emu->add_player_name));
|
||||
strn0cpy(emu->rem_player_name, eq->rem_player_name, sizeof(emu->rem_player_name));
|
||||
|
||||
FINISH_DIRECT_DECODE();
|
||||
}
|
||||
|
||||
DECODE(OP_Emote)
|
||||
{
|
||||
unsigned char *__eq_buffer = __packet->pBuffer;
|
||||
@@ -2665,7 +2556,7 @@ namespace SoF
|
||||
|
||||
for (int i = 0; i < spells::SPELL_GEM_COUNT; ++i)
|
||||
IN(spell[i]);
|
||||
for (int i = spells::SPELL_GEM_COUNT; i < EQ::spells::SPELL_GEM_COUNT; ++i)
|
||||
for (int i = spells::SPELL_GEM_COUNT; i < EQEmu::spells::SPELL_GEM_COUNT; ++i)
|
||||
emu->spell[i] = 0xFFFFFFFF;
|
||||
|
||||
IN(unknown);
|
||||
@@ -2947,9 +2838,9 @@ namespace SoF
|
||||
return NextItemInstSerialNumber;
|
||||
}
|
||||
|
||||
void SerializeItem(EQ::OutBuffer& ob, const EQ::ItemInstance *inst, int16 slot_id_in, uint8 depth)
|
||||
void SerializeItem(EQEmu::OutBuffer& ob, const EQEmu::ItemInstance *inst, int16 slot_id_in, uint8 depth)
|
||||
{
|
||||
const EQ::ItemData *item = inst->GetUnscaledItem();
|
||||
const EQEmu::ItemData *item = inst->GetUnscaledItem();
|
||||
|
||||
SoF::structs::ItemSerializationHeader hdr;
|
||||
|
||||
@@ -3137,12 +3028,6 @@ namespace SoF
|
||||
itbs.no_transfer = item->NoTransfer;
|
||||
itbs.expendablearrow = item->ExpendableArrow;
|
||||
|
||||
// Done to hack older clients to label expendable fishing poles as such
|
||||
// July 28th, 2018 patch
|
||||
if (item->ItemType == EQ::item::ItemTypeFishingPole && item->SubType == 0) {
|
||||
itbs.expendablearrow = 1;
|
||||
}
|
||||
|
||||
ob.write((const char*)&itbs, sizeof(SoF::structs::ItemTertiaryBodyStruct));
|
||||
|
||||
// Effect Structures Broken down to allow variable length strings for effect names
|
||||
@@ -3262,30 +3147,30 @@ namespace SoF
|
||||
|
||||
ob.write((const char*)&iqbs, sizeof(SoF::structs::ItemQuaternaryBodyStruct));
|
||||
|
||||
EQ::OutBuffer::pos_type count_pos = ob.tellp();
|
||||
EQEmu::OutBuffer::pos_type count_pos = ob.tellp();
|
||||
uint32 subitem_count = 0;
|
||||
|
||||
ob.write((const char*)&subitem_count, sizeof(uint32));
|
||||
|
||||
// moved outside of loop since it is not modified within that scope
|
||||
int16 SubSlotNumber = EQ::invbag::SLOT_INVALID;
|
||||
int16 SubSlotNumber = EQEmu::invbag::SLOT_INVALID;
|
||||
|
||||
if (slot_id_in <= EQ::invslot::slotGeneral8 && slot_id_in >= EQ::invslot::GENERAL_BEGIN)
|
||||
SubSlotNumber = EQ::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQ::invslot::GENERAL_BEGIN) * EQ::invbag::SLOT_COUNT);
|
||||
else if (slot_id_in <= EQ::invslot::GENERAL_END && slot_id_in >= EQ::invslot::slotGeneral9)
|
||||
SubSlotNumber = EQ::invbag::SLOT_INVALID;
|
||||
else if (slot_id_in == EQ::invslot::slotCursor)
|
||||
SubSlotNumber = EQ::invbag::CURSOR_BAG_BEGIN;
|
||||
else if (slot_id_in <= EQ::invslot::BANK_END && slot_id_in >= EQ::invslot::BANK_BEGIN)
|
||||
SubSlotNumber = EQ::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::BANK_BEGIN) * EQ::invbag::SLOT_COUNT);
|
||||
else if (slot_id_in <= EQ::invslot::SHARED_BANK_END && slot_id_in >= EQ::invslot::SHARED_BANK_BEGIN)
|
||||
SubSlotNumber = EQ::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQ::invslot::SHARED_BANK_BEGIN) * EQ::invbag::SLOT_COUNT);
|
||||
if (slot_id_in <= EQEmu::invslot::slotGeneral8 && slot_id_in >= EQEmu::invslot::GENERAL_BEGIN)
|
||||
SubSlotNumber = EQEmu::invbag::GENERAL_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::GENERAL_BEGIN) * EQEmu::invbag::SLOT_COUNT);
|
||||
else if (slot_id_in <= EQEmu::invslot::GENERAL_END && slot_id_in >= EQEmu::invslot::slotGeneral9)
|
||||
SubSlotNumber = EQEmu::invbag::SLOT_INVALID;
|
||||
else if (slot_id_in == EQEmu::invslot::slotCursor)
|
||||
SubSlotNumber = EQEmu::invbag::CURSOR_BAG_BEGIN;
|
||||
else if (slot_id_in <= EQEmu::invslot::BANK_END && slot_id_in >= EQEmu::invslot::BANK_BEGIN)
|
||||
SubSlotNumber = EQEmu::invbag::BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT);
|
||||
else if (slot_id_in <= EQEmu::invslot::SHARED_BANK_END && slot_id_in >= EQEmu::invslot::SHARED_BANK_BEGIN)
|
||||
SubSlotNumber = EQEmu::invbag::SHARED_BANK_BAGS_BEGIN + ((slot_id_in - EQEmu::invslot::SHARED_BANK_BEGIN) * EQEmu::invbag::SLOT_COUNT);
|
||||
else
|
||||
SubSlotNumber = slot_id_in; // not sure if this is the best way to handle this..leaving for now
|
||||
|
||||
if (SubSlotNumber != EQ::invbag::SLOT_INVALID) {
|
||||
for (uint32 index = EQ::invbag::SLOT_BEGIN; index <= EQ::invbag::SLOT_END; ++index) {
|
||||
EQ::ItemInstance* sub = inst->GetItem(index);
|
||||
if (SubSlotNumber != EQEmu::invbag::SLOT_INVALID) {
|
||||
for (uint32 index = EQEmu::invbag::SLOT_BEGIN; index <= EQEmu::invbag::SLOT_END; ++index) {
|
||||
EQEmu::ItemInstance* sub = inst->GetItem(index);
|
||||
if (!sub)
|
||||
continue;
|
||||
|
||||
@@ -3304,59 +3189,59 @@ namespace SoF
|
||||
{
|
||||
uint32 sof_slot = invslot::SLOT_INVALID;
|
||||
|
||||
if (server_slot <= EQ::invslot::slotGeneral8) {
|
||||
if (server_slot <= EQEmu::invslot::slotGeneral8) {
|
||||
sof_slot = server_slot;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invslot::CORPSE_END && server_slot >= EQ::invslot::slotCursor) {
|
||||
else if (server_slot <= EQEmu::invslot::CORPSE_END && server_slot >= EQEmu::invslot::slotCursor) {
|
||||
sof_slot = server_slot - 2;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invbag::GENERAL_BAGS_8_END && server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invbag::GENERAL_BAGS_8_END && server_slot >= EQEmu::invbag::GENERAL_BAGS_BEGIN) {
|
||||
sof_slot = server_slot + 11;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::CURSOR_BAG_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invbag::CURSOR_BAG_END && server_slot >= EQEmu::invbag::CURSOR_BAG_BEGIN) {
|
||||
sof_slot = server_slot - 9;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invslot::TRIBUTE_END && server_slot >= EQ::invslot::TRIBUTE_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invslot::TRIBUTE_END && server_slot >= EQEmu::invslot::TRIBUTE_BEGIN) {
|
||||
sof_slot = server_slot;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invslot::GUILD_TRIBUTE_END && server_slot >= EQ::invslot::GUILD_TRIBUTE_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invslot::GUILD_TRIBUTE_END && server_slot >= EQEmu::invslot::GUILD_TRIBUTE_BEGIN) {
|
||||
sof_slot = server_slot;
|
||||
}
|
||||
|
||||
else if (server_slot == EQ::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) {
|
||||
else if (server_slot == EQEmu::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE) {
|
||||
sof_slot = server_slot;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invslot::BANK_END && server_slot >= EQ::invslot::BANK_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invslot::BANK_END && server_slot >= EQEmu::invslot::BANK_BEGIN) {
|
||||
sof_slot = server_slot;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invbag::BANK_BAGS_END && server_slot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invbag::BANK_BAGS_END && server_slot >= EQEmu::invbag::BANK_BAGS_BEGIN) {
|
||||
sof_slot = server_slot + 1;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invslot::SHARED_BANK_END && server_slot >= EQ::invslot::SHARED_BANK_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invslot::SHARED_BANK_END && server_slot >= EQEmu::invslot::SHARED_BANK_BEGIN) {
|
||||
sof_slot = server_slot;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invbag::SHARED_BANK_BAGS_END && server_slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invbag::SHARED_BANK_BAGS_END && server_slot >= EQEmu::invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||
sof_slot = server_slot + 1;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invslot::TRADE_END && server_slot >= EQ::invslot::TRADE_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invslot::TRADE_END && server_slot >= EQEmu::invslot::TRADE_BEGIN) {
|
||||
sof_slot = server_slot;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invbag::TRADE_BAGS_END && server_slot >= EQ::invbag::TRADE_BAGS_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invbag::TRADE_BAGS_END && server_slot >= EQEmu::invbag::TRADE_BAGS_BEGIN) {
|
||||
sof_slot = server_slot;
|
||||
}
|
||||
|
||||
else if (server_slot <= EQ::invslot::WORLD_END && server_slot >= EQ::invslot::WORLD_BEGIN) {
|
||||
else if (server_slot <= EQEmu::invslot::WORLD_END && server_slot >= EQEmu::invslot::WORLD_BEGIN) {
|
||||
sof_slot = server_slot;
|
||||
}
|
||||
|
||||
@@ -3369,11 +3254,11 @@ namespace SoF
|
||||
{
|
||||
uint32 SoFSlot = invslot::SLOT_INVALID;
|
||||
|
||||
if (server_corpse_slot <= EQ::invslot::slotGeneral8 && server_corpse_slot >= EQ::invslot::slotGeneral1) {
|
||||
if (server_corpse_slot <= EQEmu::invslot::slotGeneral8 && server_corpse_slot >= EQEmu::invslot::slotGeneral1) {
|
||||
SoFSlot = server_corpse_slot;
|
||||
}
|
||||
|
||||
else if (server_corpse_slot <= EQ::invslot::CORPSE_END && server_corpse_slot >= EQ::invslot::slotCursor) {
|
||||
else if (server_corpse_slot <= EQEmu::invslot::CORPSE_END && server_corpse_slot >= EQEmu::invslot::slotCursor) {
|
||||
SoFSlot = server_corpse_slot - 2;
|
||||
}
|
||||
|
||||
@@ -3388,7 +3273,7 @@ namespace SoF
|
||||
|
||||
static inline uint32 SoFToServerSlot(uint32 sof_slot)
|
||||
{
|
||||
uint32 server_slot = EQ::invslot::SLOT_INVALID;
|
||||
uint32 server_slot = EQEmu::invslot::SLOT_INVALID;
|
||||
|
||||
if (sof_slot <= invslot::slotGeneral8) {
|
||||
server_slot = sof_slot;
|
||||
@@ -3453,7 +3338,7 @@ namespace SoF
|
||||
|
||||
static inline uint32 SoFToServerCorpseSlot(uint32 sof_corpse_slot)
|
||||
{
|
||||
uint32 server_slot = EQ::invslot::SLOT_INVALID;
|
||||
uint32 server_slot = EQEmu::invslot::SLOT_INVALID;
|
||||
|
||||
if (sof_corpse_slot <= invslot::slotGeneral8 && sof_corpse_slot >= invslot::slotGeneral1) {
|
||||
server_slot = sof_corpse_slot;
|
||||
@@ -3474,7 +3359,7 @@ namespace SoF
|
||||
|
||||
static inline void ServerToSoFSayLink(std::string &sof_saylink, const std::string &server_saylink)
|
||||
{
|
||||
if ((constants::SAY_LINK_BODY_SIZE == EQ::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) {
|
||||
if ((constants::SAY_LINK_BODY_SIZE == EQEmu::constants::SAY_LINK_BODY_SIZE) || (server_saylink.find('\x12') == std::string::npos)) {
|
||||
sof_saylink = server_saylink;
|
||||
return;
|
||||
}
|
||||
@@ -3483,7 +3368,7 @@ namespace SoF
|
||||
|
||||
for (size_t segment_iter = 0; segment_iter < segments.size(); ++segment_iter) {
|
||||
if (segment_iter & 1) {
|
||||
if (segments[segment_iter].length() <= EQ::constants::SAY_LINK_BODY_SIZE) {
|
||||
if (segments[segment_iter].length() <= EQEmu::constants::SAY_LINK_BODY_SIZE) {
|
||||
sof_saylink.append(segments[segment_iter]);
|
||||
// TODO: log size mismatch error
|
||||
continue;
|
||||
@@ -3514,7 +3399,7 @@ namespace SoF
|
||||
|
||||
static inline void SoFToServerSayLink(std::string &server_saylink, const std::string &sof_saylink)
|
||||
{
|
||||
if ((EQ::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (sof_saylink.find('\x12') == std::string::npos)) {
|
||||
if ((EQEmu::constants::SAY_LINK_BODY_SIZE == constants::SAY_LINK_BODY_SIZE) || (sof_saylink.find('\x12') == std::string::npos)) {
|
||||
server_saylink = sof_saylink;
|
||||
return;
|
||||
}
|
||||
@@ -3548,84 +3433,84 @@ namespace SoF
|
||||
}
|
||||
}
|
||||
|
||||
static inline spells::CastingSlot ServerToSoFCastingSlot(EQ::spells::CastingSlot slot) {
|
||||
static inline spells::CastingSlot ServerToSoFCastingSlot(EQEmu::spells::CastingSlot slot) {
|
||||
switch (slot) {
|
||||
case EQ::spells::CastingSlot::Gem1:
|
||||
case EQEmu::spells::CastingSlot::Gem1:
|
||||
return spells::CastingSlot::Gem1;
|
||||
case EQ::spells::CastingSlot::Gem2:
|
||||
case EQEmu::spells::CastingSlot::Gem2:
|
||||
return spells::CastingSlot::Gem2;
|
||||
case EQ::spells::CastingSlot::Gem3:
|
||||
case EQEmu::spells::CastingSlot::Gem3:
|
||||
return spells::CastingSlot::Gem3;
|
||||
case EQ::spells::CastingSlot::Gem4:
|
||||
case EQEmu::spells::CastingSlot::Gem4:
|
||||
return spells::CastingSlot::Gem4;
|
||||
case EQ::spells::CastingSlot::Gem5:
|
||||
case EQEmu::spells::CastingSlot::Gem5:
|
||||
return spells::CastingSlot::Gem5;
|
||||
case EQ::spells::CastingSlot::Gem6:
|
||||
case EQEmu::spells::CastingSlot::Gem6:
|
||||
return spells::CastingSlot::Gem6;
|
||||
case EQ::spells::CastingSlot::Gem7:
|
||||
case EQEmu::spells::CastingSlot::Gem7:
|
||||
return spells::CastingSlot::Gem7;
|
||||
case EQ::spells::CastingSlot::Gem8:
|
||||
case EQEmu::spells::CastingSlot::Gem8:
|
||||
return spells::CastingSlot::Gem8;
|
||||
case EQ::spells::CastingSlot::Gem9:
|
||||
case EQEmu::spells::CastingSlot::Gem9:
|
||||
return spells::CastingSlot::Gem9;
|
||||
case EQ::spells::CastingSlot::Item:
|
||||
case EQEmu::spells::CastingSlot::Item:
|
||||
return spells::CastingSlot::Item;
|
||||
case EQ::spells::CastingSlot::PotionBelt:
|
||||
case EQEmu::spells::CastingSlot::PotionBelt:
|
||||
return spells::CastingSlot::PotionBelt;
|
||||
case EQ::spells::CastingSlot::Discipline:
|
||||
case EQEmu::spells::CastingSlot::Discipline:
|
||||
return spells::CastingSlot::Discipline;
|
||||
case EQ::spells::CastingSlot::AltAbility:
|
||||
case EQEmu::spells::CastingSlot::AltAbility:
|
||||
return spells::CastingSlot::AltAbility;
|
||||
default: // we shouldn't have any issues with other slots ... just return something
|
||||
return spells::CastingSlot::Discipline;
|
||||
}
|
||||
}
|
||||
|
||||
static inline EQ::spells::CastingSlot SoFToServerCastingSlot(spells::CastingSlot slot, uint32 item_location) {
|
||||
static inline EQEmu::spells::CastingSlot SoFToServerCastingSlot(spells::CastingSlot slot, uint32 item_location) {
|
||||
switch (slot) {
|
||||
case spells::CastingSlot::Gem1:
|
||||
return EQ::spells::CastingSlot::Gem1;
|
||||
return EQEmu::spells::CastingSlot::Gem1;
|
||||
case spells::CastingSlot::Gem2:
|
||||
return EQ::spells::CastingSlot::Gem2;
|
||||
return EQEmu::spells::CastingSlot::Gem2;
|
||||
case spells::CastingSlot::Gem3:
|
||||
return EQ::spells::CastingSlot::Gem3;
|
||||
return EQEmu::spells::CastingSlot::Gem3;
|
||||
case spells::CastingSlot::Gem4:
|
||||
return EQ::spells::CastingSlot::Gem4;
|
||||
return EQEmu::spells::CastingSlot::Gem4;
|
||||
case spells::CastingSlot::Gem5:
|
||||
return EQ::spells::CastingSlot::Gem5;
|
||||
return EQEmu::spells::CastingSlot::Gem5;
|
||||
case spells::CastingSlot::Gem6:
|
||||
return EQ::spells::CastingSlot::Gem6;
|
||||
return EQEmu::spells::CastingSlot::Gem6;
|
||||
case spells::CastingSlot::Gem7:
|
||||
return EQ::spells::CastingSlot::Gem7;
|
||||
return EQEmu::spells::CastingSlot::Gem7;
|
||||
case spells::CastingSlot::Gem8:
|
||||
return EQ::spells::CastingSlot::Gem8;
|
||||
return EQEmu::spells::CastingSlot::Gem8;
|
||||
case spells::CastingSlot::Gem9:
|
||||
return EQ::spells::CastingSlot::Gem9;
|
||||
return EQEmu::spells::CastingSlot::Gem9;
|
||||
case spells::CastingSlot::Ability:
|
||||
return EQ::spells::CastingSlot::Ability;
|
||||
return EQEmu::spells::CastingSlot::Ability;
|
||||
// Tit uses 10 for item and discipline casting, but items have a valid location
|
||||
case spells::CastingSlot::Item:
|
||||
if (item_location == INVALID_INDEX)
|
||||
return EQ::spells::CastingSlot::Discipline;
|
||||
return EQEmu::spells::CastingSlot::Discipline;
|
||||
else
|
||||
return EQ::spells::CastingSlot::Item;
|
||||
return EQEmu::spells::CastingSlot::Item;
|
||||
case spells::CastingSlot::PotionBelt:
|
||||
return EQ::spells::CastingSlot::PotionBelt;
|
||||
return EQEmu::spells::CastingSlot::PotionBelt;
|
||||
case spells::CastingSlot::AltAbility:
|
||||
return EQ::spells::CastingSlot::AltAbility;
|
||||
return EQEmu::spells::CastingSlot::AltAbility;
|
||||
default: // we shouldn't have any issues with other slots ... just return something
|
||||
return EQ::spells::CastingSlot::Discipline;
|
||||
return EQEmu::spells::CastingSlot::Discipline;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int ServerToSoFBuffSlot(int index) {
|
||||
// we're a disc
|
||||
if (index >= EQ::spells::LONG_BUFFS + EQ::spells::SHORT_BUFFS)
|
||||
return index - EQ::spells::LONG_BUFFS - EQ::spells::SHORT_BUFFS +
|
||||
if (index >= EQEmu::spells::LONG_BUFFS + EQEmu::spells::SHORT_BUFFS)
|
||||
return index - EQEmu::spells::LONG_BUFFS - EQEmu::spells::SHORT_BUFFS +
|
||||
spells::LONG_BUFFS + spells::SHORT_BUFFS;
|
||||
// we're a song
|
||||
if (index >= EQ::spells::LONG_BUFFS)
|
||||
return index - EQ::spells::LONG_BUFFS + spells::LONG_BUFFS;
|
||||
if (index >= EQEmu::spells::LONG_BUFFS)
|
||||
return index - EQEmu::spells::LONG_BUFFS + spells::LONG_BUFFS;
|
||||
// we're a normal buff
|
||||
return index; // as long as we guard against bad slots server side, we should be fine
|
||||
}
|
||||
@@ -3634,11 +3519,11 @@ namespace SoF
|
||||
{
|
||||
// we're a disc
|
||||
if (index >= spells::LONG_BUFFS + spells::SHORT_BUFFS)
|
||||
return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQ::spells::LONG_BUFFS +
|
||||
EQ::spells::SHORT_BUFFS;
|
||||
return index - spells::LONG_BUFFS - spells::SHORT_BUFFS + EQEmu::spells::LONG_BUFFS +
|
||||
EQEmu::spells::SHORT_BUFFS;
|
||||
// we're a song
|
||||
if (index >= spells::LONG_BUFFS)
|
||||
return index - spells::LONG_BUFFS + EQ::spells::LONG_BUFFS;
|
||||
return index - spells::LONG_BUFFS + EQEmu::spells::LONG_BUFFS;
|
||||
// we're a normal buff
|
||||
return index; // as long as we guard against bad slots server side, we should be fine
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ namespace SoF
|
||||
protected:
|
||||
|
||||
virtual std::string Describe() const;
|
||||
virtual const EQ::versions::ClientVersion ClientVersion() const;
|
||||
virtual const EQEmu::versions::ClientVersion ClientVersion() const;
|
||||
|
||||
//magic macro to declare our opcode processors
|
||||
#include "ss_declare.h"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user