mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-10 10:12:24 +00:00
Merge branch 'master' into lsid
This commit is contained in:
commit
8bb909090b
23
.editorconfig
Normal file
23
.editorconfig
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# EditorConfig is awesome: http://EditorConfig.org
|
||||||
|
|
||||||
|
# top-most EditorConfig file
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# Unix-style newlines with a newline ending every file
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
|
||||||
|
# Matches multiple files with brace expansion notation
|
||||||
|
# Set default charset
|
||||||
|
[*.{js,py}]
|
||||||
|
charset = utf-8
|
||||||
|
|
||||||
|
[*.cpp]
|
||||||
|
indent_style = tab
|
||||||
|
[*.h]
|
||||||
|
indent_style = tab
|
||||||
|
|
||||||
|
# Tab indentation (no size specified)
|
||||||
|
[Makefile]
|
||||||
|
indent_style = tab
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
@ -37,3 +37,7 @@ x64/
|
|||||||
x86/
|
x86/
|
||||||
log/
|
log/
|
||||||
logs/
|
logs/
|
||||||
|
vcpkg/
|
||||||
|
|
||||||
|
.idea/*
|
||||||
|
*cbp
|
||||||
45
.travis.yml
45
.travis.yml
@ -1,32 +1,27 @@
|
|||||||
language: cpp
|
language: cpp
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
sudo: false
|
dist: trusty
|
||||||
addons:
|
|
||||||
apt:
|
before_install:
|
||||||
sources:
|
- sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
|
||||||
- ubuntu-toolchain-r-test
|
- sudo apt-get update -qq
|
||||||
packages:
|
- mkdir $HOME/usr
|
||||||
- gcc-4.8
|
- export PATH="$HOME/usr/bin:$PATH"
|
||||||
- g++-4.8
|
- wget https://cmake.org/files/v3.11/cmake-3.11.2-Linux-x86_64.sh
|
||||||
- libmysqlclient-dev
|
- chmod +x cmake-3.11.2-Linux-x86_64.sh
|
||||||
- libperl-dev
|
- ./cmake-3.11.2-Linux-x86_64.sh --prefix=$HOME/usr --exclude-subdir --skip-license
|
||||||
- libboost-dev
|
|
||||||
- liblua5.1-0-dev
|
|
||||||
- zlib1g-dev
|
|
||||||
- uuid-dev
|
|
||||||
- libssl-dev
|
|
||||||
install:
|
install:
|
||||||
- if [ "$CXX" = "g++" ]; then export CXX="g++-4.8" CC="gcc-4.8"; fi
|
- 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:
|
script:
|
||||||
- cmake -G "Unix Makefiles" -DEQEMU_BUILD_TESTS=ON -DEQEMU_ENABLE_BOTS=ON -DEQEMU_BUILD_LOGIN=ON
|
- cmake -G "Unix Makefiles" -DEQEMU_BUILD_TESTS=ON -DEQEMU_ENABLE_BOTS=ON -DEQEMU_BUILD_LOGIN=ON
|
||||||
- make -j2
|
- make -j2
|
||||||
- ./bin/tests
|
- ./bin/tests
|
||||||
branches:
|
|
||||||
only:
|
|
||||||
- master
|
|
||||||
- stable
|
|
||||||
notifications:
|
|
||||||
email: false
|
|
||||||
irc:
|
|
||||||
channels: "irc.eqemulator.net#eqemucoders"
|
|
||||||
os: linux
|
|
||||||
@ -27,9 +27,10 @@
|
|||||||
#EQEMU_USE_MAP_MMFS
|
#EQEMU_USE_MAP_MMFS
|
||||||
#EQEMU_MAP_DIR
|
#EQEMU_MAP_DIR
|
||||||
|
|
||||||
#We set a fairly new version (as of 2013) because I found finding perl was a bit... buggy on older ones
|
|
||||||
#Can change this if you really want but you should upgrade!
|
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
||||||
|
IF(POLICY CMP0074)
|
||||||
|
cmake_policy(SET CMP0074 NEW)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
#FindMySQL is located here so lets make it so CMake can find it
|
#FindMySQL is located here so lets make it so CMake can find it
|
||||||
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/" ${CMAKE_MODULE_PATH})
|
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/" ${CMAKE_MODULE_PATH})
|
||||||
@ -42,6 +43,8 @@ IF(NOT CMAKE_BUILD_TYPE)
|
|||||||
SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
|
SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
|
||||||
ENDIF(NOT CMAKE_BUILD_TYPE)
|
ENDIF(NOT CMAKE_BUILD_TYPE)
|
||||||
|
|
||||||
|
SET(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_SOURCE_DIR}/dependencies" "${CMAKE_PREFIX_PATH}")
|
||||||
|
|
||||||
#Add our various windows definitions
|
#Add our various windows definitions
|
||||||
IF(MSVC OR MINGW)
|
IF(MSVC OR MINGW)
|
||||||
ADD_DEFINITIONS(-D_WINDOWS)
|
ADD_DEFINITIONS(-D_WINDOWS)
|
||||||
@ -53,7 +56,6 @@ IF(MSVC OR MINGW)
|
|||||||
ENDIF(MSVC OR MINGW)
|
ENDIF(MSVC OR MINGW)
|
||||||
|
|
||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
#Set our default locations for zlib/mysql based on x86/x64
|
|
||||||
IF(CMAKE_CL_64)
|
IF(CMAKE_CL_64)
|
||||||
SET(ZLIB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/zlib_x64")
|
SET(ZLIB_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/zlib_x64")
|
||||||
SET(MYSQL_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/mysql_x64")
|
SET(MYSQL_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/mysql_x64")
|
||||||
@ -100,23 +102,6 @@ IF(MSVC)
|
|||||||
ADD_DEFINITIONS(-DCRASH_LOGGING)
|
ADD_DEFINITIONS(-DCRASH_LOGGING)
|
||||||
ENDIF(EQEMU_ENABLE_CRASH_LOGGING)
|
ENDIF(EQEMU_ENABLE_CRASH_LOGGING)
|
||||||
|
|
||||||
#Disable safe SEH or not?
|
|
||||||
OPTION(EQEMU_DISABLE_SAFESEH "Disable Safe SEH (Needed for Strawberry Perl)" OFF)
|
|
||||||
IF(EQEMU_DISABLE_SAFESEH)
|
|
||||||
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "${CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
|
|
||||||
SET(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
|
|
||||||
ENDIF(EQEMU_DISABLE_SAFESEH)
|
|
||||||
|
|
||||||
OPTION(EQEMU_BUILD_MSVC_MP "Enable build with multiple processes." ON)
|
OPTION(EQEMU_BUILD_MSVC_MP "Enable build with multiple processes." ON)
|
||||||
IF(EQEMU_BUILD_MSVC_MP)
|
IF(EQEMU_BUILD_MSVC_MP)
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
||||||
@ -281,10 +266,11 @@ IF(EQEMU_BUILD_LUA)
|
|||||||
ADD_DEFINITIONS(-DLUA_EQEMU)
|
ADD_DEFINITIONS(-DLUA_EQEMU)
|
||||||
ENDIF(EQEMU_BUILD_LUA)
|
ENDIF(EQEMU_BUILD_LUA)
|
||||||
|
|
||||||
OPTION(EQEMU_USE_MAP_MMFS "Create and use Zone Map MMF files." OFF)
|
#Disabled until reevaluation performed
|
||||||
IF(EQEMU_USE_MAP_MMFS)
|
#OPTION(EQEMU_USE_MAP_MMFS "Create and use Zone Map MMF files." OFF)
|
||||||
ADD_DEFINITIONS(-DUSE_MAP_MMFS)
|
#IF(EQEMU_USE_MAP_MMFS)
|
||||||
ENDIF(EQEMU_USE_MAP_MMFS)
|
# ADD_DEFINITIONS(-DUSE_MAP_MMFS)
|
||||||
|
#ENDIF(EQEMU_USE_MAP_MMFS)
|
||||||
|
|
||||||
SET(EQEMU_MAP_DIR "./Maps" CACHE STRING "The dir that maps, water maps, and paths are located in.")
|
SET(EQEMU_MAP_DIR "./Maps" CACHE STRING "The dir that maps, water maps, and paths are located in.")
|
||||||
|
|
||||||
@ -300,6 +286,8 @@ ADD_DEFINITIONS(-DLOG_LEVEL_QUEST=${EQEMU_LOG_LEVEL_QUEST})
|
|||||||
ADD_DEFINITIONS(-DLOG_LEVEL_COMMANDS=${EQEMU_LOG_LEVEL_COMMANDS})
|
ADD_DEFINITIONS(-DLOG_LEVEL_COMMANDS=${EQEMU_LOG_LEVEL_COMMANDS})
|
||||||
ADD_DEFINITIONS(-DLOG_LEVEL_CRASH=${EQEMU_LOG_LEVEL_CRASH})
|
ADD_DEFINITIONS(-DLOG_LEVEL_CRASH=${EQEMU_LOG_LEVEL_CRASH})
|
||||||
ADD_DEFINITIONS(-DGLM_FORCE_RADIANS)
|
ADD_DEFINITIONS(-DGLM_FORCE_RADIANS)
|
||||||
|
ADD_DEFINITIONS(-DGLM_FORCE_CTOR_INIT)
|
||||||
|
ADD_DEFINITIONS(-DGLM_ENABLE_EXPERIMENTAL)
|
||||||
|
|
||||||
#Find everything we need
|
#Find everything we need
|
||||||
FIND_PACKAGE(ZLIB REQUIRED)
|
FIND_PACKAGE(ZLIB REQUIRED)
|
||||||
@ -309,7 +297,7 @@ IF(EQEMU_BUILD_PERL)
|
|||||||
INCLUDE_DIRECTORIES(SYSTEM "${PERL_INCLUDE_PATH}")
|
INCLUDE_DIRECTORIES(SYSTEM "${PERL_INCLUDE_PATH}")
|
||||||
ENDIF(EQEMU_BUILD_PERL)
|
ENDIF(EQEMU_BUILD_PERL)
|
||||||
|
|
||||||
SET(SERVER_LIBS common debug ${MySQL_LIBRARY_DEBUG} optimized ${MySQL_LIBRARY_RELEASE} ${ZLIB_LIBRARY} libuv fmt)
|
SET(SERVER_LIBS common debug ${MySQL_LIBRARY_DEBUG} optimized ${MySQL_LIBRARY_RELEASE} ${ZLIB_LIBRARY} libuv fmt recast_navigation)
|
||||||
|
|
||||||
FIND_PACKAGE(Sodium REQUIRED)
|
FIND_PACKAGE(Sodium REQUIRED)
|
||||||
IF(SODIUM_FOUND)
|
IF(SODIUM_FOUND)
|
||||||
@ -342,7 +330,7 @@ IF(EQEMU_BUILD_LUA)
|
|||||||
|
|
||||||
FIND_PACKAGE(Boost REQUIRED)
|
FIND_PACKAGE(Boost REQUIRED)
|
||||||
INCLUDE_DIRECTORIES(SYSTEM "${LUA_INCLUDE_DIR}" "${Boost_INCLUDE_DIRS}")
|
INCLUDE_DIRECTORIES(SYSTEM "${LUA_INCLUDE_DIR}" "${Boost_INCLUDE_DIRS}")
|
||||||
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/luabind")
|
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/luabind")
|
||||||
|
|
||||||
OPTION(EQEMU_SANITIZE_LUA_LIBS "Sanitize Lua Libraries (Remove OS and IO standard libraries from being able to run)." ON)
|
OPTION(EQEMU_SANITIZE_LUA_LIBS "Sanitize Lua Libraries (Remove OS and IO standard libraries from being able to run)." ON)
|
||||||
IF(EQEMU_SANITIZE_LUA_LIBS)
|
IF(EQEMU_SANITIZE_LUA_LIBS)
|
||||||
@ -357,6 +345,8 @@ INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/cereal")
|
|||||||
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/libuv/include" )
|
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/libuv/include" )
|
||||||
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/libuv/src")
|
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/libuv/src")
|
||||||
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/format")
|
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/format")
|
||||||
|
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/recast/detour/include")
|
||||||
|
INCLUDE_DIRECTORIES(SYSTEM "${CMAKE_CURRENT_SOURCE_DIR}/libs/recast/recast/include")
|
||||||
|
|
||||||
IF(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS OR EQEMU_BUILD_HC)
|
IF(EQEMU_BUILD_SERVER OR EQEMU_BUILD_LOGIN OR EQEMU_BUILD_TESTS OR EQEMU_BUILD_HC)
|
||||||
ADD_SUBDIRECTORY(common)
|
ADD_SUBDIRECTORY(common)
|
||||||
|
|||||||
759
LICENSE
759
LICENSE
@ -1,165 +1,674 @@
|
|||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 3, 29 June 2007
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
This version of the GNU Lesser General Public License incorporates
|
The GNU General Public License is a free, copyleft license for
|
||||||
the terms and conditions of version 3 of the GNU General Public
|
software and other kinds of works.
|
||||||
License, supplemented by the additional permissions listed below.
|
|
||||||
|
|
||||||
0. Additional Definitions.
|
The licenses for most software and other practical works are designed
|
||||||
|
to take away your freedom to share and change the works. By contrast,
|
||||||
|
the GNU General Public License is intended to guarantee your freedom to
|
||||||
|
share and change all versions of a program--to make sure it remains free
|
||||||
|
software for all its users. We, the Free Software Foundation, use the
|
||||||
|
GNU General Public License for most of our software; it applies also to
|
||||||
|
any other work released this way by its authors. You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
When we speak of free software, we are referring to freedom, not
|
||||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
General Public License.
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
them if you wish), that you receive source code or can get it if you
|
||||||
|
want it, that you can change the software or use pieces of it in new
|
||||||
|
free programs, and that you know you can do these things.
|
||||||
|
|
||||||
"The Library" refers to a covered work governed by this License,
|
To protect your rights, we need to prevent others from denying you
|
||||||
other than an Application or a Combined Work as defined below.
|
these rights or asking you to surrender the rights. Therefore, you have
|
||||||
|
certain responsibilities if you distribute copies of the software, or if
|
||||||
|
you modify it: responsibilities to respect the freedom of others.
|
||||||
|
|
||||||
An "Application" is any work that makes use of an interface provided
|
For example, if you distribute copies of such a program, whether
|
||||||
by the Library, but which is not otherwise based on the Library.
|
gratis or for a fee, you must pass on to the recipients the same
|
||||||
Defining a subclass of a class defined by the Library is deemed a mode
|
freedoms that you received. You must make sure that they, too, receive
|
||||||
of using an interface provided by the Library.
|
or can get the source code. And you must show them these terms so they
|
||||||
|
know their rights.
|
||||||
|
|
||||||
A "Combined Work" is a work produced by combining or linking an
|
Developers that use the GNU GPL protect your rights with two steps:
|
||||||
Application with the Library. The particular version of the Library
|
(1) assert copyright on the software, and (2) offer you this License
|
||||||
with which the Combined Work was made is also called the "Linked
|
giving you legal permission to copy, distribute and/or modify it.
|
||||||
Version".
|
|
||||||
|
|
||||||
The "Minimal Corresponding Source" for a Combined Work means the
|
For the developers' and authors' protection, the GPL clearly explains
|
||||||
Corresponding Source for the Combined Work, excluding any source code
|
that there is no warranty for this free software. For both users' and
|
||||||
for portions of the Combined Work that, considered in isolation, are
|
authors' sake, the GPL requires that modified versions be marked as
|
||||||
based on the Application, and not on the Linked Version.
|
changed, so that their problems will not be attributed erroneously to
|
||||||
|
authors of previous versions.
|
||||||
|
|
||||||
The "Corresponding Application Code" for a Combined Work means the
|
Some devices are designed to deny users access to install or run
|
||||||
object code and/or source code for the Application, including any data
|
modified versions of the software inside them, although the manufacturer
|
||||||
and utility programs needed for reproducing the Combined Work from the
|
can do so. This is fundamentally incompatible with the aim of
|
||||||
Application, but excluding the System Libraries of the Combined Work.
|
protecting users' freedom to change the software. The systematic
|
||||||
|
pattern of such abuse occurs in the area of products for individuals to
|
||||||
|
use, which is precisely where it is most unacceptable. Therefore, we
|
||||||
|
have designed this version of the GPL to prohibit the practice for those
|
||||||
|
products. If such problems arise substantially in other domains, we
|
||||||
|
stand ready to extend this provision to those domains in future versions
|
||||||
|
of the GPL, as needed to protect the freedom of users.
|
||||||
|
|
||||||
1. Exception to Section 3 of the GNU GPL.
|
Finally, every program is threatened constantly by software patents.
|
||||||
|
States should not allow patents to restrict development and use of
|
||||||
|
software on general-purpose computers, but in those that do, we wish to
|
||||||
|
avoid the special danger that patents applied to a free program could
|
||||||
|
make it effectively proprietary. To prevent this, the GPL assures that
|
||||||
|
patents cannot be used to render the program non-free.
|
||||||
|
|
||||||
You may convey a covered work under sections 3 and 4 of this License
|
The precise terms and conditions for copying, distribution and
|
||||||
without being bound by section 3 of the GNU GPL.
|
modification follow.
|
||||||
|
|
||||||
2. Conveying Modified Versions.
|
TERMS AND CONDITIONS
|
||||||
|
|
||||||
If you modify a copy of the Library, and, in your modifications, a
|
0. Definitions.
|
||||||
facility refers to a function or data to be supplied by an Application
|
|
||||||
that uses the facility (other than as an argument passed when the
|
|
||||||
facility is invoked), then you may convey a copy of the modified
|
|
||||||
version:
|
|
||||||
|
|
||||||
a) under this License, provided that you make a good faith effort to
|
"This License" refers to version 3 of the GNU General Public License.
|
||||||
ensure that, in the event an Application does not supply the
|
|
||||||
function or data, the facility still operates, and performs
|
|
||||||
whatever part of its purpose remains meaningful, or
|
|
||||||
|
|
||||||
b) under the GNU GPL, with none of the additional permissions of
|
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||||
this License applicable to that copy.
|
works, such as semiconductor masks.
|
||||||
|
|
||||||
3. Object Code Incorporating Material from Library Header Files.
|
"The Program" refers to any copyrightable work licensed under this
|
||||||
|
License. Each licensee is addressed as "you". "Licensees" and
|
||||||
|
"recipients" may be individuals or organizations.
|
||||||
|
|
||||||
The object code form of an Application may incorporate material from
|
To "modify" a work means to copy from or adapt all or part of the work
|
||||||
a header file that is part of the Library. You may convey such object
|
in a fashion requiring copyright permission, other than the making of an
|
||||||
code under terms of your choice, provided that, if the incorporated
|
exact copy. The resulting work is called a "modified version" of the
|
||||||
material is not limited to numerical parameters, data structure
|
earlier work or a work "based on" the earlier work.
|
||||||
layouts and accessors, or small macros, inline functions and templates
|
|
||||||
(ten or fewer lines in length), you do both of the following:
|
|
||||||
|
|
||||||
a) Give prominent notice with each copy of the object code that the
|
A "covered work" means either the unmodified Program or a work based
|
||||||
Library is used in it and that the Library and its use are
|
on the Program.
|
||||||
covered by this License.
|
|
||||||
|
|
||||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
To "propagate" a work means to do anything with it that, without
|
||||||
document.
|
permission, would make you directly or secondarily liable for
|
||||||
|
infringement under applicable copyright law, except executing it on a
|
||||||
|
computer or modifying a private copy. Propagation includes copying,
|
||||||
|
distribution (with or without modification), making available to the
|
||||||
|
public, and in some countries other activities as well.
|
||||||
|
|
||||||
4. Combined Works.
|
To "convey" a work means any kind of propagation that enables other
|
||||||
|
parties to make or receive copies. Mere interaction with a user through
|
||||||
|
a computer network, with no transfer of a copy, is not conveying.
|
||||||
|
|
||||||
You may convey a Combined Work under terms of your choice that,
|
An interactive user interface displays "Appropriate Legal Notices"
|
||||||
taken together, effectively do not restrict modification of the
|
to the extent that it includes a convenient and prominently visible
|
||||||
portions of the Library contained in the Combined Work and reverse
|
feature that (1) displays an appropriate copyright notice, and (2)
|
||||||
engineering for debugging such modifications, if you also do each of
|
tells the user that there is no warranty for the work (except to the
|
||||||
the following:
|
extent that warranties are provided), that licensees may convey the
|
||||||
|
work under this License, and how to view a copy of this License. If
|
||||||
|
the interface presents a list of user commands or options, such as a
|
||||||
|
menu, a prominent item in the list meets this criterion.
|
||||||
|
|
||||||
a) Give prominent notice with each copy of the Combined Work that
|
1. Source Code.
|
||||||
the Library is used in it and that the Library and its use are
|
|
||||||
covered by this License.
|
|
||||||
|
|
||||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
The "source code" for a work means the preferred form of the work
|
||||||
document.
|
for making modifications to it. "Object code" means any non-source
|
||||||
|
form of a work.
|
||||||
|
|
||||||
c) For a Combined Work that displays copyright notices during
|
A "Standard Interface" means an interface that either is an official
|
||||||
execution, include the copyright notice for the Library among
|
standard defined by a recognized standards body, or, in the case of
|
||||||
these notices, as well as a reference directing the user to the
|
interfaces specified for a particular programming language, one that
|
||||||
copies of the GNU GPL and this license document.
|
is widely used among developers working in that language.
|
||||||
|
|
||||||
d) Do one of the following:
|
The "System Libraries" of an executable work include anything, other
|
||||||
|
than the work as a whole, that (a) is included in the normal form of
|
||||||
|
packaging a Major Component, but which is not part of that Major
|
||||||
|
Component, and (b) serves only to enable use of the work with that
|
||||||
|
Major Component, or to implement a Standard Interface for which an
|
||||||
|
implementation is available to the public in source code form. A
|
||||||
|
"Major Component", in this context, means a major essential component
|
||||||
|
(kernel, window system, and so on) of the specific operating system
|
||||||
|
(if any) on which the executable work runs, or a compiler used to
|
||||||
|
produce the work, or an object code interpreter used to run it.
|
||||||
|
|
||||||
0) Convey the Minimal Corresponding Source under the terms of this
|
The "Corresponding Source" for a work in object code form means all
|
||||||
License, and the Corresponding Application Code in a form
|
the source code needed to generate, install, and (for an executable
|
||||||
suitable for, and under terms that permit, the user to
|
work) run the object code and to modify the work, including scripts to
|
||||||
recombine or relink the Application with a modified version of
|
control those activities. However, it does not include the work's
|
||||||
the Linked Version to produce a modified Combined Work, in the
|
System Libraries, or general-purpose tools or generally available free
|
||||||
manner specified by section 6 of the GNU GPL for conveying
|
programs which are used unmodified in performing those activities but
|
||||||
Corresponding Source.
|
which are not part of the work. For example, Corresponding Source
|
||||||
|
includes interface definition files associated with source files for
|
||||||
|
the work, and the source code for shared libraries and dynamically
|
||||||
|
linked subprograms that the work is specifically designed to require,
|
||||||
|
such as by intimate data communication or control flow between those
|
||||||
|
subprograms and other parts of the work.
|
||||||
|
|
||||||
1) Use a suitable shared library mechanism for linking with the
|
The Corresponding Source need not include anything that users
|
||||||
Library. A suitable mechanism is one that (a) uses at run time
|
can regenerate automatically from other parts of the Corresponding
|
||||||
a copy of the Library already present on the user's computer
|
Source.
|
||||||
system, and (b) will operate properly with a modified version
|
|
||||||
of the Library that is interface-compatible with the Linked
|
|
||||||
Version.
|
|
||||||
|
|
||||||
e) Provide Installation Information, but only if you would otherwise
|
The Corresponding Source for a work in source code form is that
|
||||||
be required to provide such information under section 6 of the
|
same work.
|
||||||
GNU GPL, and only to the extent that such information is
|
|
||||||
necessary to install and execute a modified version of the
|
|
||||||
Combined Work produced by recombining or relinking the
|
|
||||||
Application with a modified version of the Linked Version. (If
|
|
||||||
you use option 4d0, the Installation Information must accompany
|
|
||||||
the Minimal Corresponding Source and Corresponding Application
|
|
||||||
Code. If you use option 4d1, you must provide the Installation
|
|
||||||
Information in the manner specified by section 6 of the GNU GPL
|
|
||||||
for conveying Corresponding Source.)
|
|
||||||
|
|
||||||
5. Combined Libraries.
|
2. Basic Permissions.
|
||||||
|
|
||||||
You may place library facilities that are a work based on the
|
All rights granted under this License are granted for the term of
|
||||||
Library side by side in a single library together with other library
|
copyright on the Program, and are irrevocable provided the stated
|
||||||
facilities that are not Applications and are not covered by this
|
conditions are met. This License explicitly affirms your unlimited
|
||||||
License, and convey such a combined library under terms of your
|
permission to run the unmodified Program. The output from running a
|
||||||
choice, if you do both of the following:
|
covered work is covered by this License only if the output, given its
|
||||||
|
content, constitutes a covered work. This License acknowledges your
|
||||||
|
rights of fair use or other equivalent, as provided by copyright law.
|
||||||
|
|
||||||
a) Accompany the combined library with a copy of the same work based
|
You may make, run and propagate covered works that you do not
|
||||||
on the Library, uncombined with any other library facilities,
|
convey, without conditions so long as your license otherwise remains
|
||||||
conveyed under the terms of this License.
|
in force. You may convey covered works to others for the sole purpose
|
||||||
|
of having them make modifications exclusively for you, or provide you
|
||||||
|
with facilities for running those works, provided that you comply with
|
||||||
|
the terms of this License in conveying all material for which you do
|
||||||
|
not control copyright. Those thus making or running the covered works
|
||||||
|
for you must do so exclusively on your behalf, under your direction
|
||||||
|
and control, on terms that prohibit them from making any copies of
|
||||||
|
your copyrighted material outside their relationship with you.
|
||||||
|
|
||||||
b) Give prominent notice with the combined library that part of it
|
Conveying under any other circumstances is permitted solely under
|
||||||
is a work based on the Library, and explaining where to find the
|
the conditions stated below. Sublicensing is not allowed; section 10
|
||||||
accompanying uncombined form of the same work.
|
makes it unnecessary.
|
||||||
|
|
||||||
6. Revised Versions of the GNU Lesser General Public License.
|
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||||
|
|
||||||
The Free Software Foundation may publish revised and/or new versions
|
No covered work shall be deemed part of an effective technological
|
||||||
of the GNU Lesser General Public License from time to time. Such new
|
measure under any applicable law fulfilling obligations under article
|
||||||
versions will be similar in spirit to the present version, but may
|
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||||
differ in detail to address new problems or concerns.
|
similar laws prohibiting or restricting circumvention of such
|
||||||
|
measures.
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the
|
When you convey a covered work, you waive any legal power to forbid
|
||||||
Library as you received it specifies that a certain numbered version
|
circumvention of technological measures to the extent such circumvention
|
||||||
of the GNU Lesser General Public License "or any later version"
|
is effected by exercising rights under this License with respect to
|
||||||
applies to it, you have the option of following the terms and
|
the covered work, and you disclaim any intention to limit operation or
|
||||||
conditions either of that published version or of any later version
|
modification of the work as a means of enforcing, against the work's
|
||||||
published by the Free Software Foundation. If the Library as you
|
users, your or third parties' legal rights to forbid circumvention of
|
||||||
received it does not specify a version number of the GNU Lesser
|
technological measures.
|
||||||
General Public License, you may choose any version of the GNU Lesser
|
|
||||||
General Public License ever published by the Free Software Foundation.
|
|
||||||
|
|
||||||
If the Library as you received it specifies that a proxy can decide
|
4. Conveying Verbatim Copies.
|
||||||
whether future versions of the GNU Lesser General Public License shall
|
|
||||||
apply, that proxy's public statement of acceptance of any version is
|
You may convey verbatim copies of the Program's source code as you
|
||||||
permanent authorization for you to choose that version for the
|
receive it, in any medium, provided that you conspicuously and
|
||||||
Library.
|
appropriately publish on each copy an appropriate copyright notice;
|
||||||
|
keep intact all notices stating that this License and any
|
||||||
|
non-permissive terms added in accord with section 7 apply to the code;
|
||||||
|
keep intact all notices of the absence of any warranty; and give all
|
||||||
|
recipients a copy of this License along with the Program.
|
||||||
|
|
||||||
|
You may charge any price or no price for each copy that you convey,
|
||||||
|
and you may offer support or warranty protection for a fee.
|
||||||
|
|
||||||
|
5. Conveying Modified Source Versions.
|
||||||
|
|
||||||
|
You may convey a work based on the Program, or the modifications to
|
||||||
|
produce it from the Program, in the form of source code under the
|
||||||
|
terms of section 4, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The work must carry prominent notices stating that you modified
|
||||||
|
it, and giving a relevant date.
|
||||||
|
|
||||||
|
b) The work must carry prominent notices stating that it is
|
||||||
|
released under this License and any conditions added under section
|
||||||
|
7. This requirement modifies the requirement in section 4 to
|
||||||
|
"keep intact all notices".
|
||||||
|
|
||||||
|
c) You must license the entire work, as a whole, under this
|
||||||
|
License to anyone who comes into possession of a copy. This
|
||||||
|
License will therefore apply, along with any applicable section 7
|
||||||
|
additional terms, to the whole of the work, and all its parts,
|
||||||
|
regardless of how they are packaged. This License gives no
|
||||||
|
permission to license the work in any other way, but it does not
|
||||||
|
invalidate such permission if you have separately received it.
|
||||||
|
|
||||||
|
d) If the work has interactive user interfaces, each must display
|
||||||
|
Appropriate Legal Notices; however, if the Program has interactive
|
||||||
|
interfaces that do not display Appropriate Legal Notices, your
|
||||||
|
work need not make them do so.
|
||||||
|
|
||||||
|
A compilation of a covered work with other separate and independent
|
||||||
|
works, which are not by their nature extensions of the covered work,
|
||||||
|
and which are not combined with it such as to form a larger program,
|
||||||
|
in or on a volume of a storage or distribution medium, is called an
|
||||||
|
"aggregate" if the compilation and its resulting copyright are not
|
||||||
|
used to limit the access or legal rights of the compilation's users
|
||||||
|
beyond what the individual works permit. Inclusion of a covered work
|
||||||
|
in an aggregate does not cause this License to apply to the other
|
||||||
|
parts of the aggregate.
|
||||||
|
|
||||||
|
6. Conveying Non-Source Forms.
|
||||||
|
|
||||||
|
You may convey a covered work in object code form under the terms
|
||||||
|
of sections 4 and 5, provided that you also convey the
|
||||||
|
machine-readable Corresponding Source under the terms of this License,
|
||||||
|
in one of these ways:
|
||||||
|
|
||||||
|
a) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by the
|
||||||
|
Corresponding Source fixed on a durable physical medium
|
||||||
|
customarily used for software interchange.
|
||||||
|
|
||||||
|
b) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by a
|
||||||
|
written offer, valid for at least three years and valid for as
|
||||||
|
long as you offer spare parts or customer support for that product
|
||||||
|
model, to give anyone who possesses the object code either (1) a
|
||||||
|
copy of the Corresponding Source for all the software in the
|
||||||
|
product that is covered by this License, on a durable physical
|
||||||
|
medium customarily used for software interchange, for a price no
|
||||||
|
more than your reasonable cost of physically performing this
|
||||||
|
conveying of source, or (2) access to copy the
|
||||||
|
Corresponding Source from a network server at no charge.
|
||||||
|
|
||||||
|
c) Convey individual copies of the object code with a copy of the
|
||||||
|
written offer to provide the Corresponding Source. This
|
||||||
|
alternative is allowed only occasionally and noncommercially, and
|
||||||
|
only if you received the object code with such an offer, in accord
|
||||||
|
with subsection 6b.
|
||||||
|
|
||||||
|
d) Convey the object code by offering access from a designated
|
||||||
|
place (gratis or for a charge), and offer equivalent access to the
|
||||||
|
Corresponding Source in the same way through the same place at no
|
||||||
|
further charge. You need not require recipients to copy the
|
||||||
|
Corresponding Source along with the object code. If the place to
|
||||||
|
copy the object code is a network server, the Corresponding Source
|
||||||
|
may be on a different server (operated by you or a third party)
|
||||||
|
that supports equivalent copying facilities, provided you maintain
|
||||||
|
clear directions next to the object code saying where to find the
|
||||||
|
Corresponding Source. Regardless of what server hosts the
|
||||||
|
Corresponding Source, you remain obligated to ensure that it is
|
||||||
|
available for as long as needed to satisfy these requirements.
|
||||||
|
|
||||||
|
e) Convey the object code using peer-to-peer transmission, provided
|
||||||
|
you inform other peers where the object code and Corresponding
|
||||||
|
Source of the work are being offered to the general public at no
|
||||||
|
charge under subsection 6d.
|
||||||
|
|
||||||
|
A separable portion of the object code, whose source code is excluded
|
||||||
|
from the Corresponding Source as a System Library, need not be
|
||||||
|
included in conveying the object code work.
|
||||||
|
|
||||||
|
A "User Product" is either (1) a "consumer product", which means any
|
||||||
|
tangible personal property which is normally used for personal, family,
|
||||||
|
or household purposes, or (2) anything designed or sold for incorporation
|
||||||
|
into a dwelling. In determining whether a product is a consumer product,
|
||||||
|
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||||
|
product received by a particular user, "normally used" refers to a
|
||||||
|
typical or common use of that class of product, regardless of the status
|
||||||
|
of the particular user or of the way in which the particular user
|
||||||
|
actually uses, or expects or is expected to use, the product. A product
|
||||||
|
is a consumer product regardless of whether the product has substantial
|
||||||
|
commercial, industrial or non-consumer uses, unless such uses represent
|
||||||
|
the only significant mode of use of the product.
|
||||||
|
|
||||||
|
"Installation Information" for a User Product means any methods,
|
||||||
|
procedures, authorization keys, or other information required to install
|
||||||
|
and execute modified versions of a covered work in that User Product from
|
||||||
|
a modified version of its Corresponding Source. The information must
|
||||||
|
suffice to ensure that the continued functioning of the modified object
|
||||||
|
code is in no case prevented or interfered with solely because
|
||||||
|
modification has been made.
|
||||||
|
|
||||||
|
If you convey an object code work under this section in, or with, or
|
||||||
|
specifically for use in, a User Product, and the conveying occurs as
|
||||||
|
part of a transaction in which the right of possession and use of the
|
||||||
|
User Product is transferred to the recipient in perpetuity or for a
|
||||||
|
fixed term (regardless of how the transaction is characterized), the
|
||||||
|
Corresponding Source conveyed under this section must be accompanied
|
||||||
|
by the Installation Information. But this requirement does not apply
|
||||||
|
if neither you nor any third party retains the ability to install
|
||||||
|
modified object code on the User Product (for example, the work has
|
||||||
|
been installed in ROM).
|
||||||
|
|
||||||
|
The requirement to provide Installation Information does not include a
|
||||||
|
requirement to continue to provide support service, warranty, or updates
|
||||||
|
for a work that has been modified or installed by the recipient, or for
|
||||||
|
the User Product in which it has been modified or installed. Access to a
|
||||||
|
network may be denied when the modification itself materially and
|
||||||
|
adversely affects the operation of the network or violates the rules and
|
||||||
|
protocols for communication across the network.
|
||||||
|
|
||||||
|
Corresponding Source conveyed, and Installation Information provided,
|
||||||
|
in accord with this section must be in a format that is publicly
|
||||||
|
documented (and with an implementation available to the public in
|
||||||
|
source code form), and must require no special password or key for
|
||||||
|
unpacking, reading or copying.
|
||||||
|
|
||||||
|
7. Additional Terms.
|
||||||
|
|
||||||
|
"Additional permissions" are terms that supplement the terms of this
|
||||||
|
License by making exceptions from one or more of its conditions.
|
||||||
|
Additional permissions that are applicable to the entire Program shall
|
||||||
|
be treated as though they were included in this License, to the extent
|
||||||
|
that they are valid under applicable law. If additional permissions
|
||||||
|
apply only to part of the Program, that part may be used separately
|
||||||
|
under those permissions, but the entire Program remains governed by
|
||||||
|
this License without regard to the additional permissions.
|
||||||
|
|
||||||
|
When you convey a copy of a covered work, you may at your option
|
||||||
|
remove any additional permissions from that copy, or from any part of
|
||||||
|
it. (Additional permissions may be written to require their own
|
||||||
|
removal in certain cases when you modify the work.) You may place
|
||||||
|
additional permissions on material, added by you to a covered work,
|
||||||
|
for which you have or can give appropriate copyright permission.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, for material you
|
||||||
|
add to a covered work, you may (if authorized by the copyright holders of
|
||||||
|
that material) supplement the terms of this License with terms:
|
||||||
|
|
||||||
|
a) Disclaiming warranty or limiting liability differently from the
|
||||||
|
terms of sections 15 and 16 of this License; or
|
||||||
|
|
||||||
|
b) Requiring preservation of specified reasonable legal notices or
|
||||||
|
author attributions in that material or in the Appropriate Legal
|
||||||
|
Notices displayed by works containing it; or
|
||||||
|
|
||||||
|
c) Prohibiting misrepresentation of the origin of that material, or
|
||||||
|
requiring that modified versions of such material be marked in
|
||||||
|
reasonable ways as different from the original version; or
|
||||||
|
|
||||||
|
d) Limiting the use for publicity purposes of names of licensors or
|
||||||
|
authors of the material; or
|
||||||
|
|
||||||
|
e) Declining to grant rights under trademark law for use of some
|
||||||
|
trade names, trademarks, or service marks; or
|
||||||
|
|
||||||
|
f) Requiring indemnification of licensors and authors of that
|
||||||
|
material by anyone who conveys the material (or modified versions of
|
||||||
|
it) with contractual assumptions of liability to the recipient, for
|
||||||
|
any liability that these contractual assumptions directly impose on
|
||||||
|
those licensors and authors.
|
||||||
|
|
||||||
|
All other non-permissive additional terms are considered "further
|
||||||
|
restrictions" within the meaning of section 10. If the Program as you
|
||||||
|
received it, or any part of it, contains a notice stating that it is
|
||||||
|
governed by this License along with a term that is a further
|
||||||
|
restriction, you may remove that term. If a license document contains
|
||||||
|
a further restriction but permits relicensing or conveying under this
|
||||||
|
License, you may add to a covered work material governed by the terms
|
||||||
|
of that license document, provided that the further restriction does
|
||||||
|
not survive such relicensing or conveying.
|
||||||
|
|
||||||
|
If you add terms to a covered work in accord with this section, you
|
||||||
|
must place, in the relevant source files, a statement of the
|
||||||
|
additional terms that apply to those files, or a notice indicating
|
||||||
|
where to find the applicable terms.
|
||||||
|
|
||||||
|
Additional terms, permissive or non-permissive, may be stated in the
|
||||||
|
form of a separately written license, or stated as exceptions;
|
||||||
|
the above requirements apply either way.
|
||||||
|
|
||||||
|
8. Termination.
|
||||||
|
|
||||||
|
You may not propagate or modify a covered work except as expressly
|
||||||
|
provided under this License. Any attempt otherwise to propagate or
|
||||||
|
modify it is void, and will automatically terminate your rights under
|
||||||
|
this License (including any patent licenses granted under the third
|
||||||
|
paragraph of section 11).
|
||||||
|
|
||||||
|
However, if you cease all violation of this License, then your
|
||||||
|
license from a particular copyright holder is reinstated (a)
|
||||||
|
provisionally, unless and until the copyright holder explicitly and
|
||||||
|
finally terminates your license, and (b) permanently, if the copyright
|
||||||
|
holder fails to notify you of the violation by some reasonable means
|
||||||
|
prior to 60 days after the cessation.
|
||||||
|
|
||||||
|
Moreover, your license from a particular copyright holder is
|
||||||
|
reinstated permanently if the copyright holder notifies you of the
|
||||||
|
violation by some reasonable means, this is the first time you have
|
||||||
|
received notice of violation of this License (for any work) from that
|
||||||
|
copyright holder, and you cure the violation prior to 30 days after
|
||||||
|
your receipt of the notice.
|
||||||
|
|
||||||
|
Termination of your rights under this section does not terminate the
|
||||||
|
licenses of parties who have received copies or rights from you under
|
||||||
|
this License. If your rights have been terminated and not permanently
|
||||||
|
reinstated, you do not qualify to receive new licenses for the same
|
||||||
|
material under section 10.
|
||||||
|
|
||||||
|
9. Acceptance Not Required for Having Copies.
|
||||||
|
|
||||||
|
You are not required to accept this License in order to receive or
|
||||||
|
run a copy of the Program. Ancillary propagation of a covered work
|
||||||
|
occurring solely as a consequence of using peer-to-peer transmission
|
||||||
|
to receive a copy likewise does not require acceptance. However,
|
||||||
|
nothing other than this License grants you permission to propagate or
|
||||||
|
modify any covered work. These actions infringe copyright if you do
|
||||||
|
not accept this License. Therefore, by modifying or propagating a
|
||||||
|
covered work, you indicate your acceptance of this License to do so.
|
||||||
|
|
||||||
|
10. Automatic Licensing of Downstream Recipients.
|
||||||
|
|
||||||
|
Each time you convey a covered work, the recipient automatically
|
||||||
|
receives a license from the original licensors, to run, modify and
|
||||||
|
propagate that work, subject to this License. You are not responsible
|
||||||
|
for enforcing compliance by third parties with this License.
|
||||||
|
|
||||||
|
An "entity transaction" is a transaction transferring control of an
|
||||||
|
organization, or substantially all assets of one, or subdividing an
|
||||||
|
organization, or merging organizations. If propagation of a covered
|
||||||
|
work results from an entity transaction, each party to that
|
||||||
|
transaction who receives a copy of the work also receives whatever
|
||||||
|
licenses to the work the party's predecessor in interest had or could
|
||||||
|
give under the previous paragraph, plus a right to possession of the
|
||||||
|
Corresponding Source of the work from the predecessor in interest, if
|
||||||
|
the predecessor has it or can get it with reasonable efforts.
|
||||||
|
|
||||||
|
You may not impose any further restrictions on the exercise of the
|
||||||
|
rights granted or affirmed under this License. For example, you may
|
||||||
|
not impose a license fee, royalty, or other charge for exercise of
|
||||||
|
rights granted under this License, and you may not initiate litigation
|
||||||
|
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||||
|
any patent claim is infringed by making, using, selling, offering for
|
||||||
|
sale, or importing the Program or any portion of it.
|
||||||
|
|
||||||
|
11. Patents.
|
||||||
|
|
||||||
|
A "contributor" is a copyright holder who authorizes use under this
|
||||||
|
License of the Program or a work on which the Program is based. The
|
||||||
|
work thus licensed is called the contributor's "contributor version".
|
||||||
|
|
||||||
|
A contributor's "essential patent claims" are all patent claims
|
||||||
|
owned or controlled by the contributor, whether already acquired or
|
||||||
|
hereafter acquired, that would be infringed by some manner, permitted
|
||||||
|
by this License, of making, using, or selling its contributor version,
|
||||||
|
but do not include claims that would be infringed only as a
|
||||||
|
consequence of further modification of the contributor version. For
|
||||||
|
purposes of this definition, "control" includes the right to grant
|
||||||
|
patent sublicenses in a manner consistent with the requirements of
|
||||||
|
this License.
|
||||||
|
|
||||||
|
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||||
|
patent license under the contributor's essential patent claims, to
|
||||||
|
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||||
|
propagate the contents of its contributor version.
|
||||||
|
|
||||||
|
In the following three paragraphs, a "patent license" is any express
|
||||||
|
agreement or commitment, however denominated, not to enforce a patent
|
||||||
|
(such as an express permission to practice a patent or covenant not to
|
||||||
|
sue for patent infringement). To "grant" such a patent license to a
|
||||||
|
party means to make such an agreement or commitment not to enforce a
|
||||||
|
patent against the party.
|
||||||
|
|
||||||
|
If you convey a covered work, knowingly relying on a patent license,
|
||||||
|
and the Corresponding Source of the work is not available for anyone
|
||||||
|
to copy, free of charge and under the terms of this License, through a
|
||||||
|
publicly available network server or other readily accessible means,
|
||||||
|
then you must either (1) cause the Corresponding Source to be so
|
||||||
|
available, or (2) arrange to deprive yourself of the benefit of the
|
||||||
|
patent license for this particular work, or (3) arrange, in a manner
|
||||||
|
consistent with the requirements of this License, to extend the patent
|
||||||
|
license to downstream recipients. "Knowingly relying" means you have
|
||||||
|
actual knowledge that, but for the patent license, your conveying the
|
||||||
|
covered work in a country, or your recipient's use of the covered work
|
||||||
|
in a country, would infringe one or more identifiable patents in that
|
||||||
|
country that you have reason to believe are valid.
|
||||||
|
|
||||||
|
If, pursuant to or in connection with a single transaction or
|
||||||
|
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||||
|
covered work, and grant a patent license to some of the parties
|
||||||
|
receiving the covered work authorizing them to use, propagate, modify
|
||||||
|
or convey a specific copy of the covered work, then the patent license
|
||||||
|
you grant is automatically extended to all recipients of the covered
|
||||||
|
work and works based on it.
|
||||||
|
|
||||||
|
A patent license is "discriminatory" if it does not include within
|
||||||
|
the scope of its coverage, prohibits the exercise of, or is
|
||||||
|
conditioned on the non-exercise of one or more of the rights that are
|
||||||
|
specifically granted under this License. You may not convey a covered
|
||||||
|
work if you are a party to an arrangement with a third party that is
|
||||||
|
in the business of distributing software, under which you make payment
|
||||||
|
to the third party based on the extent of your activity of conveying
|
||||||
|
the work, and under which the third party grants, to any of the
|
||||||
|
parties who would receive the covered work from you, a discriminatory
|
||||||
|
patent license (a) in connection with copies of the covered work
|
||||||
|
conveyed by you (or copies made from those copies), or (b) primarily
|
||||||
|
for and in connection with specific products or compilations that
|
||||||
|
contain the covered work, unless you entered into that arrangement,
|
||||||
|
or that patent license was granted, prior to 28 March 2007.
|
||||||
|
|
||||||
|
Nothing in this License shall be construed as excluding or limiting
|
||||||
|
any implied license or other defenses to infringement that may
|
||||||
|
otherwise be available to you under applicable patent law.
|
||||||
|
|
||||||
|
12. No Surrender of Others' Freedom.
|
||||||
|
|
||||||
|
If conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot convey a
|
||||||
|
covered work so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you may
|
||||||
|
not convey it at all. For example, if you agree to terms that obligate you
|
||||||
|
to collect a royalty for further conveying from those to whom you convey
|
||||||
|
the Program, the only way you could satisfy both those terms and this
|
||||||
|
License would be to refrain entirely from conveying the Program.
|
||||||
|
|
||||||
|
13. Use with the GNU Affero General Public License.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, you have
|
||||||
|
permission to link or combine any covered work with a work licensed
|
||||||
|
under version 3 of the GNU Affero General Public License into a single
|
||||||
|
combined work, and to convey the resulting work. The terms of this
|
||||||
|
License will continue to apply to the part which is the covered work,
|
||||||
|
but the special requirements of the GNU Affero General Public License,
|
||||||
|
section 13, concerning interaction through a network will apply to the
|
||||||
|
combination as such.
|
||||||
|
|
||||||
|
14. Revised Versions of this License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the GNU General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Program specifies that a certain numbered version of the GNU General
|
||||||
|
Public License "or any later version" applies to it, you have the
|
||||||
|
option of following the terms and conditions either of that numbered
|
||||||
|
version or of any later version published by the Free Software
|
||||||
|
Foundation. If the Program does not specify a version number of the
|
||||||
|
GNU General Public License, you may choose any version ever published
|
||||||
|
by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Program specifies that a proxy can decide which future
|
||||||
|
versions of the GNU General Public License can be used, that proxy's
|
||||||
|
public statement of acceptance of a version permanently authorizes you
|
||||||
|
to choose that version for the Program.
|
||||||
|
|
||||||
|
Later license versions may give you additional or different
|
||||||
|
permissions. However, no additional obligations are imposed on any
|
||||||
|
author or copyright holder as a result of your choosing to follow a
|
||||||
|
later version.
|
||||||
|
|
||||||
|
15. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||||
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||||
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||||
|
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||||
|
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||||
|
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. Limitation of Liability.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||||
|
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||||
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||||
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||||
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGES.
|
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16.
|
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided
|
||||||
|
above cannot be given local legal effect according to their terms,
|
||||||
|
reviewing courts shall apply local law that most closely approximates
|
||||||
|
an absolute waiver of all civil liability in connection with the
|
||||||
|
Program, unless a warranty or assumption of liability accompanies a
|
||||||
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
state the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program does terminal interaction, make it output a short
|
||||||
|
notice like this when it starts in an interactive mode:
|
||||||
|
|
||||||
|
<program> Copyright (C) <year> <name of author>
|
||||||
|
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, your program's commands
|
||||||
|
might be different; for a GUI interface, you would use an "about box".
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
|
For more information on this, and how to apply and follow the GNU GPL, see
|
||||||
|
<https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
The GNU General Public License does not permit incorporating your program
|
||||||
|
into proprietary programs. If your program is a subroutine library, you
|
||||||
|
may consider it more useful to permit linking proprietary applications with
|
||||||
|
the library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License. But first, please read
|
||||||
|
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
# EQEmulator Core Server
|
# EQEmulator Core Server
|
||||||
|Travis CI (Linux)|Appveyor (Windows) |
|
|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/branch/master) |
|
|[](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) |
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
|
|||||||
21
appveyor-bots.yml
Normal file
21
appveyor-bots.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
version: 1.0.{build}
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
image: Visual Studio 2017
|
||||||
|
configuration: RelWithDebInfo
|
||||||
|
clone_folder: c:\projects\eqemu
|
||||||
|
init:
|
||||||
|
- ps: git config --global core.autocrlf input
|
||||||
|
cache: c:\tools\vcpkg\installed\
|
||||||
|
before_build:
|
||||||
|
- ps: "$wc = New-Object System.Net.WebClient\n$wc.DownloadFile(\"http://strawberryperl.com/download/5.26.2.1/strawberry-perl-5.26.2.1-64bit-portable.zip\", \"c:\\projects\\eqemu\\strawberry-perl-5.26.2.1-64bit-portable.zip\")\ncd c:\\projects\\eqemu\n7z x c:/projects/eqemu/strawberry-perl-5.26.2.1-64bit-portable.zip -oc:/projects/eqemu/strawberry-perl-portable -y\n(Get-Content C:/projects/eqemu/strawberry-perl-portable/perl/lib/CORE/config.h).replace('#define PERL_STATIC_INLINE static __inline__', '#define PERL_STATIC_INLINE static __inline') | Set-Content C:/projects/eqemu/strawberry-perl-portable/perl/lib/CORE/config.h\nvcpkg install boost-geometry:x64-windows boost-dynamic-bitset:x64-windows luajit:x64-windows libsodium:x64-windows libmysql:x64-windows openssl:x64-windows zlib:x64-windows \nmkdir build\ncd build\ncmake -G \"Visual Studio 15 2017 Win64\" -DEQEMU_BUILD_TESTS=ON -DEQEMU_BUILD_LOGIN=ON -EQEMU_ENABLE_BOTS=ON -DPERL_EXECUTABLE=\"C:/projects/eqemu/strawberry-perl-portable/perl/bin/perl.exe\" -DPERL_INCLUDE_PATH=\"C:/projects/eqemu/strawberry-perl-portable/perl/lib/CORE\" -DPERL_LIBRARY=\"C:/projects/eqemu/strawberry-perl-portable/perl/lib/CORE/libperl526.a\" -DCMAKE_TOOLCHAIN_FILE=\"c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake\" .."
|
||||||
|
build:
|
||||||
|
project: C:\projects\eqemu\build\EQEmu.sln
|
||||||
|
parallel: true
|
||||||
|
verbosity: minimal
|
||||||
|
after_build:
|
||||||
|
- cmd: >-
|
||||||
|
7z a build_x64-bots.zip C:\projects\eqemu\build\bin\RelWithDebInfo\*.exe C:\projects\eqemu\build\bin\RelWithDebInfo\*.dll C:\projects\eqemu\build\bin\RelWithDebInfo\*.pdb
|
||||||
|
|
||||||
|
appveyor PushArtifact build_x64-bots.zip
|
||||||
21
appveyor-no-bots.yml
Normal file
21
appveyor-no-bots.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
version: 1.0.{build}
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
image: Visual Studio 2017
|
||||||
|
configuration: RelWithDebInfo
|
||||||
|
clone_folder: c:\projects\eqemu
|
||||||
|
init:
|
||||||
|
- ps: git config --global core.autocrlf input
|
||||||
|
cache: c:\tools\vcpkg\installed\
|
||||||
|
before_build:
|
||||||
|
- ps: "$wc = New-Object System.Net.WebClient\n$wc.DownloadFile(\"http://strawberryperl.com/download/5.26.2.1/strawberry-perl-5.26.2.1-64bit-portable.zip\", \"c:\\projects\\eqemu\\strawberry-perl-5.26.2.1-64bit-portable.zip\")\ncd c:\\projects\\eqemu\n7z x c:/projects/eqemu/strawberry-perl-5.26.2.1-64bit-portable.zip -oc:/projects/eqemu/strawberry-perl-portable -y\n(Get-Content C:/projects/eqemu/strawberry-perl-portable/perl/lib/CORE/config.h).replace('#define PERL_STATIC_INLINE static __inline__', '#define PERL_STATIC_INLINE static __inline') | Set-Content C:/projects/eqemu/strawberry-perl-portable/perl/lib/CORE/config.h\nvcpkg install boost-geometry:x64-windows boost-dynamic-bitset:x64-windows luajit:x64-windows libsodium:x64-windows libmysql:x64-windows openssl:x64-windows zlib:x64-windows \nmkdir build\ncd build\ncmake -G \"Visual Studio 15 2017 Win64\" -DEQEMU_BUILD_TESTS=ON -DEQEMU_BUILD_LOGIN=ON -EQEMU_ENABLE_BOTS=OFF -DPERL_EXECUTABLE=\"C:/projects/eqemu/strawberry-perl-portable/perl/bin/perl.exe\" -DPERL_INCLUDE_PATH=\"C:/projects/eqemu/strawberry-perl-portable/perl/lib/CORE\" -DPERL_LIBRARY=\"C:/projects/eqemu/strawberry-perl-portable/perl/lib/CORE/libperl526.a\" -DCMAKE_TOOLCHAIN_FILE=\"c:/tools/vcpkg/scripts/buildsystems/vcpkg.cmake\" .."
|
||||||
|
build:
|
||||||
|
project: C:\projects\eqemu\build\EQEmu.sln
|
||||||
|
parallel: true
|
||||||
|
verbosity: minimal
|
||||||
|
after_build:
|
||||||
|
- cmd: >-
|
||||||
|
7z a build_x64-no-bots.zip C:\projects\eqemu\build\bin\RelWithDebInfo\*.exe C:\projects\eqemu\build\bin\RelWithDebInfo\*.dll C:\projects\eqemu\build\bin\RelWithDebInfo\*.pdb
|
||||||
|
|
||||||
|
appveyor PushArtifact build_x64-no-bots.zip
|
||||||
481
changelog.txt
481
changelog.txt
@ -1,5 +1,486 @@
|
|||||||
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
||||||
-------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
== 6/24/2019 ==
|
||||||
|
Uleat: Reworked BotDatabase into a functional add-on for ZoneDatabase
|
||||||
|
- Eliminated the database connection associated with class BotDatabase
|
||||||
|
- All behaviors remain the same with the exception of the calling object
|
||||||
|
-- To invoke a BotDatabase function, use database.botdb.<f> rather than botdb.<f>
|
||||||
|
|
||||||
|
== 3/1/2019 ==
|
||||||
|
Noudess: Major faction conversion to use client data.
|
||||||
|
|
||||||
|
Pull request #802 New min/max personal faction per faction. Use of actual
|
||||||
|
client mods for race/class/deity.
|
||||||
|
|
||||||
|
This PR involves major changes to your database and your quests.
|
||||||
|
|
||||||
|
The clients recently exposed raw data included
|
||||||
|
|
||||||
|
- the min/max personal faction for each faction
|
||||||
|
- the actual faction id the client uses for each faction
|
||||||
|
- the actual mods that come into play when a PC cons an opponent that
|
||||||
|
determine your overall con to that faction.
|
||||||
|
|
||||||
|
|
||||||
|
The approach I took resulted in minimal change to the code base. I did
|
||||||
|
alter the code to enforce the new validated min/max from the client. This
|
||||||
|
min/max applies to personally earned faction. So if a faction has a min
|
||||||
|
of 0 and a max of 2000, that means your personally earned value can never
|
||||||
|
go below 0 or over 2000. The actual con, will, however often do so because
|
||||||
|
of class/race/deity modifications. I also changed the con ranges, per
|
||||||
|
Mackal's data that was proven to be accurate:
|
||||||
|
|
||||||
|
Ally = 1100+
|
||||||
|
Warmly = 750 to 1099
|
||||||
|
Kindly = 500 to 749
|
||||||
|
Amiable = 100 to 499
|
||||||
|
Indifferent = 0 to 99
|
||||||
|
Apprehensive = -1 to -100
|
||||||
|
Dubious = -101 to -500
|
||||||
|
Threateningly = -501 to -750
|
||||||
|
Ready to Attack = -751
|
||||||
|
|
||||||
|
The above means that dubious is a much smaller range now. For that reason
|
||||||
|
the scripts modify any custom faction base values to put them in the same
|
||||||
|
range, hopefully as the creators of the custom factions intended.
|
||||||
|
|
||||||
|
Also to be noted as characters that have a faction between -501 and -700
|
||||||
|
wont be dubious anymore, they will be threateningly. This is expected with
|
||||||
|
the new ranges, but might take players by suprise as the old ranges we used
|
||||||
|
were more liberal but were incorrect.
|
||||||
|
|
||||||
|
The database is changed extensively, but really only content. We're
|
||||||
|
translating faction_list to use the clients ids. As such every place a
|
||||||
|
faction_is is used, namely (see below) are being converted.
|
||||||
|
|
||||||
|
- faction_list
|
||||||
|
- faction_list_mod
|
||||||
|
- npc_faction (primary_faction field only)
|
||||||
|
- npc_faction_entries (faction_id field only)
|
||||||
|
- faction_values
|
||||||
|
|
||||||
|
Quests will also automatically be adjusted. This MUST be done after the
|
||||||
|
PR sql and before starting the server. This is automated by
|
||||||
|
eqemu_server.pl (or starting world)
|
||||||
|
|
||||||
|
Be assured, custom factions that you may have created, or obsolete or
|
||||||
|
duplicate factions in our original faction_list, that you may have used,
|
||||||
|
will be preserved. Anything that does not map directly is being moved to
|
||||||
|
the 5000 range in faction_list and any references are corrected to point
|
||||||
|
there.
|
||||||
|
|
||||||
|
A great example of this is Ebon Mask and Hall of the Ebon Mask. Many peqdb
|
||||||
|
style servers have both of these. Some have used one, some the other. We
|
||||||
|
map Ebon Mask to the clients Ebon mask and the Hall of the Ebon Mask gets
|
||||||
|
moved to the 5000 range, and all its references are preserved. However,
|
||||||
|
if you would like to make proper use of client mobs to Ebon mask, or other
|
||||||
|
factions that have duplicitous entries, I recommend you manually move to
|
||||||
|
using the correct one. In that way all of the new raw data mapped in from
|
||||||
|
the client into faction_list_mod will get used instead of what your db had
|
||||||
|
before these values were known.
|
||||||
|
|
||||||
|
In my experience converting 4 different server's data, there are only
|
||||||
|
about 20 factions moved into the 5000 range.
|
||||||
|
|
||||||
|
This PR has only 1 new, permanent table faction_base_data, which is taken
|
||||||
|
right from the client. The base field is left in case you want to mod your
|
||||||
|
server, but we are very sure that the client doesn't use a base. It uses
|
||||||
|
global mods to race or class for this as you'll see in the
|
||||||
|
new faction_list_mod.
|
||||||
|
|
||||||
|
The PR makes many backup tables, and two mapping tables that are used during
|
||||||
|
the conversion process to fix quests. This table was hand created by
|
||||||
|
analysis. This table serves no purpose after conversion except an audit
|
||||||
|
trail if we see any issues.
|
||||||
|
|
||||||
|
I will release a new PR that will clean up all these backups and temporary
|
||||||
|
tables in about a month.
|
||||||
|
|
||||||
|
== 2/7/2019 ==
|
||||||
|
Uleat: Put merc and bot classes on the same stance standard (mercs)
|
||||||
|
- Both classes will now use the same stance standard
|
||||||
|
- Pushed stance types up to EQEmu::constants
|
||||||
|
|
||||||
|
== 2/4/2019 ==
|
||||||
|
Uleat: Added command 'profanity' (aliased 'prof')
|
||||||
|
- This is a server-based tool for redacting any language that an admin deems as profanity (socially unacceptable within their community)
|
||||||
|
- Five options are available under this command..
|
||||||
|
-- 'list' - shows the current list of banned words
|
||||||
|
-- 'clear' - clears the current list of banned words
|
||||||
|
-- 'add <word>' - adds <word> to the banned word list
|
||||||
|
-- 'del <word>' - deletes <word> from the banned word list
|
||||||
|
-- 'reload' - forces a reload of the banned word list
|
||||||
|
- All actions are immediate and a world broadcast refreshes other active zones
|
||||||
|
- The system is in stand-by when the list is empty..just add a word to the list to begin censorship
|
||||||
|
- Redaction only occurs on genuine occurences of any banned word
|
||||||
|
-- Banned words are replaced with a series of '*' characters
|
||||||
|
-- Compounded words are ignored to avoid issues with allowed words containing a banned sub-string
|
||||||
|
-- If 'test' is banned, 'testing' will not be banned .. it must be added separately
|
||||||
|
- Extreme care should be exercised when adding words to the banned list..
|
||||||
|
-- Quest failures and limited social interactions may alienate players if they become inhibiting
|
||||||
|
-- System commands are allowed to be processed before redaction occurs in the 'say' channel
|
||||||
|
- A longer list requires more clock cycles to process - so, try to keep them to the most offensible occurrences
|
||||||
|
Uleat: Fix for bots ceasing combat when their 'follow me' mob dies
|
||||||
|
- Bots will revert to their client leash owner (bot owner or client group leader) when their FollowID() mob is no longer valid
|
||||||
|
- Combat will no longer be interrupted in these cases
|
||||||
|
- Does not apply to bot owner death...
|
||||||
|
|
||||||
|
== 1/26/2019 ==
|
||||||
|
Uleat: Fix for class Bot not honoring NPCType data reference
|
||||||
|
- Fixes bots not moving on spawn/grouping issue
|
||||||
|
- Report any issues with non movement-related behavior
|
||||||
|
|
||||||
|
== 1/24/2019 ==
|
||||||
|
Uleat: Extended server spellbook entries to RoF2 standard and added per-client restriction of spell id max
|
||||||
|
- Bumped server spellbook entry capacity to 720 spells
|
||||||
|
- Server keeps all 'learned' spells as found
|
||||||
|
-- Access is limited by the clients' limitations of spellbook capacities and max spell ids
|
||||||
|
-- This is done to avoid losing spells by switching from newer clients to older ones
|
||||||
|
-- Existing behavior is kept in place for illegal access conditions
|
||||||
|
- Each client is still restricted to its spellbook capacity (400, 480, 480, 720, 720, 720 - respectively)
|
||||||
|
- Each client is restricted to its max supported spell id (9999, 15999, 23000, 28000, 45000, 45000 - respectively)
|
||||||
|
- Please report any abnormal behavior so it may be addressed
|
||||||
|
Uleat: Removed server-side checksum of player profile..wasted calculation since it's performed again in all translators
|
||||||
|
|
||||||
|
== 1/20/2019 ==
|
||||||
|
Uleat: Added 'spells' entry to EQDictionary
|
||||||
|
Akkadius:
|
||||||
|
- [Command] Extended #goto via #goto <player_name> -
|
||||||
|
- This will work cross zone, cross instance, in zone etc.
|
||||||
|
- It works on top of the original #goto (target) and #goto x y z
|
||||||
|
- [Command] Implemented server side #who Example: https://bit.ly/2TZ2hvI
|
||||||
|
- Searches can be filtered by
|
||||||
|
- Account Name
|
||||||
|
- Base Class Name
|
||||||
|
- Guild Name
|
||||||
|
- IP
|
||||||
|
- Player Name
|
||||||
|
- Race Name
|
||||||
|
- Zone Short Name
|
||||||
|
- Features a clickable (Goto) saylink that will bring you directly to a player regardless of
|
||||||
|
whether or not they are in an instance
|
||||||
|
- [Command] Implemented: #gmzone [zone_short_name] [zone_version=0] [identifier=gmzone]
|
||||||
|
- Zones to a private GM instance
|
||||||
|
- Example: https://i.imgur.com/qswdrzO.gif
|
||||||
|
- [NPC] Fix issue where NPC's clip into the world and the client interprets them at 0,0,0
|
||||||
|
- This issue would show itself when NPC's would bunch up by a zone-in
|
||||||
|
|
||||||
|
== 1/15/2019 ==
|
||||||
|
Uleat: Activated per-expansion support for active inventory slot addressing
|
||||||
|
- Server honors expansions that alter bank size and power source, general9 and general10 slots
|
||||||
|
- Server honors gm flag behaviors for the active inventory slots of each client
|
||||||
|
|
||||||
|
== 1/11/2019 ==
|
||||||
|
Uleat: Modified rules system to ignore all runtime modifications of 'World:ExpansionSettings' and 'World:UseClientBasedExpansionSettings' fields.
|
||||||
|
- These fields are no longer allowed to be changed during server runtime through the command system
|
||||||
|
- Major syncronization issues between server and clients result when these fields are altered in-game
|
||||||
|
- It is not recommended to update these fields via sql queries while the server is in operation
|
||||||
|
- Failure to observe these warnings will result in abhorant behavior and loss of items
|
||||||
|
- Modify these fields during server operation at your own risk!
|
||||||
|
|
||||||
|
== 1/4/2019 ==
|
||||||
|
Akkadius: [Scaling] Global base scaling data has been updated in new database binary revision
|
||||||
|
|
||||||
|
== 1/1/2019 ==
|
||||||
|
Akkadius:
|
||||||
|
- [Logging] Added new logging category "MobAppearance"
|
||||||
|
- [DevTools] Proximity show of NPC now shows a "Path finding" circle around the proximity nodes to more clearly display
|
||||||
|
- [Scaling] Global base scaling data now refreshes from the database on #repop
|
||||||
|
- [Commands] Implemented command #killallnpcs [npc_name] for testing, leave blank for all attackable NPC's
|
||||||
|
- NPC and Player Textures
|
||||||
|
- Textures that have been changed with #wearchange / #wc or any wearchange quest script call will now stick
|
||||||
|
for new clients entering a zone
|
||||||
|
- Weapon models for NPCs changed using wearchange will stick as well during combat and when new clients enter the zone
|
||||||
|
- The above changes allow for customization of a zone and NPC's without needing static data configured on npc_types
|
||||||
|
table data and allows for much more customization options
|
||||||
|
- Implemented Quest API Calls
|
||||||
|
Perl
|
||||||
|
$client->SetPrimaryWeaponOrnamentation(uint32 model_id);
|
||||||
|
$client->SetSecondaryWeaponOrnamentation(uint32 model_id);
|
||||||
|
Lua
|
||||||
|
client:SetPrimaryWeaponOrnamentation(uint32 model_id);
|
||||||
|
client:SetSecondaryWeaponOrnamentation(uint32 model_id);
|
||||||
|
- Both of these API calls persist an ornamentation to the weapon in the inventory table and will load both
|
||||||
|
in character select and cross zone
|
||||||
|
|
||||||
|
== 12/30/2018 ==
|
||||||
|
|
||||||
|
Akkadius (KLS):
|
||||||
|
|
||||||
|
# NPC Movement Overhaul
|
||||||
|
|
||||||
|
"Recently, we landed massive changes to pathing logic (Navmesh) with NPC's that took a while to iron out but has been
|
||||||
|
an immensely positive addition to the EQEmu server core. With that, it's made us realize how much some related
|
||||||
|
functionality needed to be addressed and that involves "NPC movement logic". We've been needing to address
|
||||||
|
NPC movement logic for years as it has been fragmented and inconsistent all over the code which has made
|
||||||
|
fixing actual movement related issues a nightmare. There are many other technical things that we can go
|
||||||
|
into about it but the important part is that it is much improved! Special thanks to KLS for putting in a
|
||||||
|
lot of work to make this happen"
|
||||||
|
|
||||||
|
- NPC's should now smoothly path between source and destination, rather than "skipping" all over the place between
|
||||||
|
path points and sending sometimes several position updates, there should only be one update until NPC
|
||||||
|
changes heading or speed
|
||||||
|
- NPC pathing during flee and fear should be far improved
|
||||||
|
- NPC pathing inside of water should be far improved
|
||||||
|
- NPC transitions between water and land should now be seamless
|
||||||
|
- NPC transitions over verticals (hills) should be smoother as well
|
||||||
|
- NPC "Stuck" logic during path finding should be improved
|
||||||
|
- NPC Z coordinate plane correction now occurs during path calculation projection properly (as it should) instead of
|
||||||
|
brute forcing the current Z location along different path projections
|
||||||
|
- Example: https://bit.ly/2Ssn4Yp
|
||||||
|
|
||||||
|
== 12/16/2018 ==
|
||||||
|
Akkadius:
|
||||||
|
- Implemented: Global Base Scaling: https://github.com/EQEmu/Server/wiki/NPC-Scaling
|
||||||
|
- Implemented: Beginning of DevTools - more to be added over time (Status >= 200)
|
||||||
|
- Display NPC info on target
|
||||||
|
- Display Client info on target
|
||||||
|
- Display NPC show commands on target
|
||||||
|
- Loot
|
||||||
|
- Grids
|
||||||
|
- Emotes
|
||||||
|
- Implemented: Support for saylinks to be used in GM commands
|
||||||
|
- Deprecated: Commands
|
||||||
|
- #listnpcs
|
||||||
|
- Implemented: Commands
|
||||||
|
- #list [npcs|players|corpses|doors|objects] [search]
|
||||||
|
- Provides clickable saylinks to go to entities
|
||||||
|
- #scale [static/dynamic] (With targeted NPC)
|
||||||
|
- #scale [npc_name_search] [static/dynamic] (To make zone-wide changes)
|
||||||
|
- #scale all [static/dynamic]
|
||||||
|
- #devtools (alias #dev)
|
||||||
|
- Implemented: New Logging categories automatically injected into `logsys_categories` table
|
||||||
|
- Fixed an issue where newly injected categories were turned on by default
|
||||||
|
|
||||||
|
== 12/15/2018 ==
|
||||||
|
Kinglykrab: Added multiple new instance related quest functions.
|
||||||
|
1. quest::GetInstanceIDByCharID(const char *zone, int16 version, uint32 char_id)
|
||||||
|
- Allows you to pull the instance ID of a client by character ID.
|
||||||
|
2. quest::AssignToInstanceByCharID(uint16 instance_id, uint32 char_id)
|
||||||
|
- Allows you to assign an instance to a client by character ID.
|
||||||
|
3. quest::RemoveFromInstanceByCharID(uint16 instance_id, uint32 char_id)
|
||||||
|
- Allows you to remove a client from an instance by character ID.
|
||||||
|
|
||||||
|
Added spell buckets, similar to spell globals.
|
||||||
|
- Uses a new spell_buckets table and the Spells:EnableSpellBuckets rule.
|
||||||
|
|
||||||
|
Added max level by data bucket.
|
||||||
|
- Uses data bucket char_id-CharMaxLevel and Character:PerCharacterBucketMaxLevel rule.
|
||||||
|
|
||||||
|
== 10/09/2018 ==
|
||||||
|
Uleat: Added bot owner options
|
||||||
|
- usage: ^owneroption [option] (or aliased as: ^oo [option])
|
||||||
|
- options are saved in the database and therefore, persistent
|
||||||
|
- Implemented option 'deathmarquee'
|
||||||
|
-- toggles client owner flag to show marquee message when a bot dies (default: disabled)
|
||||||
|
|
||||||
|
== 10/07/2018 ==
|
||||||
|
Uleat: Fixed a few bot issues..
|
||||||
|
- Fix for bot item trades not attuning
|
||||||
|
- Fix for bot mana, endurance not updating properly
|
||||||
|
|
||||||
|
== 10/06/2018 ==
|
||||||
|
Uleat: Fixed a few bot issues..
|
||||||
|
- Fix for bot 'stop melee level' not honoring setting level over rule level
|
||||||
|
- Fix for missing bot combat spell casting when within melee range
|
||||||
|
- Fix (in-work) for bots 'forgetting' current target when it flees
|
||||||
|
|
||||||
|
== 09/18/2018 ==
|
||||||
|
Uleat: Notes for manual conversion of quest script inventory slot values
|
||||||
|
- You should use reference/lookup values provided by the lua and perl apis to avoid skirting safety checks
|
||||||
|
and to ensure that the values used are the correct ones for your needs
|
||||||
|
|
||||||
|
[perl api examples]
|
||||||
|
old:
|
||||||
|
1) my $charmitem = $client->GetItemIDAt(0);
|
||||||
|
2) for($for_x = 22; $for_x < 30; $for_x++) {...}
|
||||||
|
3) for($slot1 = 0; $slot1 <= 30; $slot1++) {...}
|
||||||
|
|
||||||
|
new:
|
||||||
|
1) my $charmitem = $client->GetItemIDAt(quest::getinventoryslotid("charm"));
|
||||||
|
2) for($for_x = quest::getinventoryslotid("general.begin"); $for_x <= quest::getinventoryslotid("general.end"); $for_x++) {...} ** notice change of conditional
|
||||||
|
3) for($slot1 = quest::getinventoryslotid("possessions.begin"); $slot1 <= quest::getinventoryslotid("possessions.end"); $slot1++) {...}
|
||||||
|
|
||||||
|
[lua api examples]
|
||||||
|
old:
|
||||||
|
1) if(e.self:GetItemIDAt(30) == 31599) then ...
|
||||||
|
2) for i = 0, 30, 1 do ...
|
||||||
|
|
||||||
|
new:
|
||||||
|
1) if(e.self:GetItemIDAt(Slot.Cursor) == 31599) then ...
|
||||||
|
2) for i = Slot.PossessionsBegin, Slot.PossessionsEnd, 1 do ...
|
||||||
|
|
||||||
|
- If you need to manually assign bag slot ranges to individual 'general' slots, use this assignment for now:
|
||||||
|
-- General1 (23) = 251 .. 260
|
||||||
|
-- General2 (24) = 261 .. 270
|
||||||
|
-- General3 (25) = 271 .. 280
|
||||||
|
-- General4 (26) = 281 .. 290
|
||||||
|
-- General5 (27) = 291 .. 300
|
||||||
|
-- General6 (28) = 301 .. 310
|
||||||
|
-- General7 (29) = 311 .. 320
|
||||||
|
-- General8 (30) = 321 .. 330
|
||||||
|
-- General9 (31) = 331 .. 340
|
||||||
|
-- General10 (32) = 341 .. 350
|
||||||
|
-- Cursor (33) = 351 .. 360
|
||||||
|
|
||||||
|
- If you need to manually assign ammo or powersource slots, use these values:
|
||||||
|
-- PowerSource = 21
|
||||||
|
-- Ammo = 22
|
||||||
|
|
||||||
|
- All slot values not addressed above remain the same
|
||||||
|
|
||||||
|
- Additional information can be found at:
|
||||||
|
-- https://github.com/EQEmu/Server/wiki/Inventory-Slots
|
||||||
|
-- https://github.com/EQEmu/Server/wiki/Perl-API
|
||||||
|
-- https://github.com/EQEmu/Server/wiki/Lua-API
|
||||||
|
|
||||||
|
== 09/03/2018 ==
|
||||||
|
Uleat: Rework of 'invsnapshot' command and implementation of automatic inventory snapshots.
|
||||||
|
- Inventory snapshots are now taken automatically using the interval rule values - if snapshots are enabled
|
||||||
|
- Command 'invsnapshot' now has more options available to include a restore feature
|
||||||
|
-- A pop-up help menu is available
|
||||||
|
-- argument 'capture' is available to anyone with status high enough to register the command
|
||||||
|
-- Advanced options are only available to players with 150 status or greater
|
||||||
|
-- argument 'list' provides a list of "timestamp : item count" entries
|
||||||
|
-- argument 'parse' displays a "slot : item id : item name" listing of valid snapshots by timestamp
|
||||||
|
-- argument 'compare' shows a 'difference' comparison of "snapshot-to-inventory" changes
|
||||||
|
-- argument 'restore' applies a saved snapshot to the player's inventory (with a pre-clearing call)
|
||||||
|
|
||||||
|
== 08/13/2018 ==
|
||||||
|
Uleat: Activation of RoF+ clients' two additional general slots and integration of SoF+ clients' PowerSource slot
|
||||||
|
- Inventory 'Possessions' main slots are now contiguous and implemented to RoF2 standards
|
||||||
|
-- 'slotGeneral9'(31) and 'slotGeneral10'(32) are now active
|
||||||
|
-- Possessions slot enumerations are now defined as between 'slotCharm'(0) and 'slotCursor'(33)
|
||||||
|
-- 'slotPowerSource'(21) is no longer a special case slot(9999)
|
||||||
|
- Special code has been added to exclude 'slotPowerSource,' 'slotGeneral9' and 'slotGeneral10' from server
|
||||||
|
actions in clients that do not support them.
|
||||||
|
- The lua api has been updated to use the new slot enumeration as well as having some slot range definitions added
|
||||||
|
- The perl api now has a look-up function to provide token-to-value translations .. definitions are similar to lua
|
||||||
|
- In both lua and perl, it is HIGHLY recommended that any custom scripts using hard-coded inventory slot values be
|
||||||
|
updated to use the constants/lookup methods as any old values are no longer guaranteed to be accurate
|
||||||
|
- Database will have existing inventory slot values modified to the new standard and table `items` entries will
|
||||||
|
also be updated to the 'correct' equipable slot bitmask
|
||||||
|
- Script (quest) updates are required with this change
|
||||||
|
|
||||||
|
Note: The proper way to reference inventory slots is to use either instrinsic lookups (c/c++ & perl) or to use valid
|
||||||
|
const ref declarations (c/c++ & lua). Any other method is not guaranteed to be accurate and may result in item loss
|
||||||
|
and/or unexpected/undefined behavior.
|
||||||
|
|
||||||
|
|
||||||
|
== 07/10/2018 ==
|
||||||
|
Akkadius: Adjusted DataBuckets to use other acceptable time formats
|
||||||
|
Example: quest::set_data('key', 'value', '1d');
|
||||||
|
- Acceptable inputs:
|
||||||
|
- 15s = 15 seconds
|
||||||
|
- s15 = 15 seconds
|
||||||
|
- 60m = 60 minutes
|
||||||
|
- 7d = 7 days
|
||||||
|
- 1y = 1 year
|
||||||
|
- 600 = 600 seconds
|
||||||
|
|
||||||
|
== 07/09/2018 ==
|
||||||
|
mackal: Rework of Task System, Shared Tasks still unsupported
|
||||||
|
- The tables now have better named columns, which hopefully won't need to be explained
|
||||||
|
- Text1 is now target_name, Text2 is now item_list, Text3 is now description_override
|
||||||
|
- Tasks can now reward faction hits, this is just normal NPC Faction ID entries because I was lazy
|
||||||
|
- The "Task" type tasks are now supported, a player can only be doing one of these at a time
|
||||||
|
- Activity IDs for use spell on and use skill on have been identified but not implemented
|
||||||
|
- Identified "duration code" for unlimited duration tasks (None = 0, Short = 1, Medium = 2, Long = 3)
|
||||||
|
- Activities can now have multiple zones separated by ';'
|
||||||
|
- tasks.startzone removed since it actually just uses first activity
|
||||||
|
- skill_list and spell_list are both IDs that can be separated by ';' (still unimplemented though)
|
||||||
|
|
||||||
|
== 07/07/2018 ==
|
||||||
|
Akkadius: Implemented a much better replacement for qglobals called 'DataBuckets'
|
||||||
|
- A much more detailed example can be found at: https://github.com/EQEmu/Server/wiki/Data-Buckets
|
||||||
|
|
||||||
|
== 07/05/2018 ==
|
||||||
|
Uleat: Reintegration of inventory-based EQDictionary references
|
||||||
|
- Standardized 'CONSTANT_DECLARATION' and 'enumerationValue' tokens for most of the affected references
|
||||||
|
- Added 'BEGIN' and 'END' constants to many inventory-based ranges to help eliminate '< SIZE'-type comparisons
|
||||||
|
- Eliminated multiple, duplicated reference points of the same value context (bye, bye namespace legacy!)
|
||||||
|
- Most server values are now linked to the implementation client directly through a 'using ##' directive
|
||||||
|
|
||||||
|
== 05/28/2018 ==
|
||||||
|
Akkadius: Fixed an issue where size 0 NPC's hop in and out of the ground at idle
|
||||||
|
Akkadius: NPC's now open doors within proximity given the door doesn't have locked requirements
|
||||||
|
Akkadius: #reloadallrules will now display zones that have had their rules reloaded to GM's
|
||||||
|
Akkadius: Zones should now respect "shutdowndelay" in the zones table at all times
|
||||||
|
Akkadius: Fixed an issue where boats would snap to the bed of the body of water
|
||||||
|
Akkadius: Added rule Aggro:NPCAggroMaxDistanceEnabled - defaults to true
|
||||||
|
Akkadius: Changed map directory load structure
|
||||||
|
- maps/base/*.map
|
||||||
|
- maps/nav/*.nav
|
||||||
|
- maps/water/*.wtr
|
||||||
|
- maps/path/*.path
|
||||||
|
|
||||||
|
KLS: Implemented navigation mesh
|
||||||
|
- All up to date maps and navs can be found https://github.com/Akkadius/EQEmuMaps
|
||||||
|
- To update maps either check out the maps found in the above repository or use the maintenance command:
|
||||||
|
perl eqemu_server.pl maps
|
||||||
|
|
||||||
|
== 03/28/2018 ==
|
||||||
|
Kayen: SE_CastOnFadeEffect, SE_CastOnFadeEffectNPC, SE_CastOnFadeEffectAlway triggered spell will now hit
|
||||||
|
the correct targets.
|
||||||
|
|
||||||
|
== 03/07/2018 ==
|
||||||
|
Uleat: Added command '#ucs' to force a reconnect to UCS server.
|
||||||
|
- Works in place of client auto-reconnect packet in zones where feature is unsupported
|
||||||
|
- Currently, you will need to manually re-join channels
|
||||||
|
|
||||||
|
== 03/04/2018 ==
|
||||||
|
Uleat: Updated UCS versioning
|
||||||
|
- SoF and higher clients have a new opcode identified (update your *.conf files)
|
||||||
|
- Rework of previous ucs connectivity code
|
||||||
|
- Unrelated: Zone::weatherSend() now takes an optional parameter for singular updates (as in client entering zone)
|
||||||
|
-- prior to this, every client already in-zone received a weather update packet whenever a new client zoned in
|
||||||
|
|
||||||
|
== 02/18/2018 ==
|
||||||
|
Uleat: Bug reporting fix and overhaul.
|
||||||
|
- Fixed bug reporting for SoD+ clients
|
||||||
|
- Added ability to disable bug reporting (set rule 'Bugs:ReportingSystemActive' to 'false')
|
||||||
|
- Implemented a more detailed reporting system (set rule 'Bugs:UseOldReportingMethod' to 'false')
|
||||||
|
-- New system is not currently compatible with script-based monitoring
|
||||||
|
- Soft-removal of defunct 'Petition Bug' system
|
||||||
|
|
||||||
|
== 02/14/2018 ==
|
||||||
|
mackal: Fix Heading -- Quests broken
|
||||||
|
|
||||||
|
Please report any other issues with heading, most things were tested and worked
|
||||||
|
|
||||||
|
You can use eqemu_server.pl to run a conversion to fix your headings in quests.
|
||||||
|
Some may need manual review.
|
||||||
|
|
||||||
|
== 02/10/2018 ==
|
||||||
|
mackal: Add Global Loot system
|
||||||
|
|
||||||
|
This will allow us to implement global loot similarly to how it works on live
|
||||||
|
This system reuses our current loottable tables which the global_loot table references.
|
||||||
|
The limits for the rules to govern if a table should be rolled are min level, max level, rare,
|
||||||
|
raid, race, class, bodytype, and zone
|
||||||
|
|
||||||
|
race, class, bodytype, and zone are a pipe | separated list of IDs.
|
||||||
|
|
||||||
|
== 01/31/2018 ==
|
||||||
|
Uleat: Re-work of Bot::AI_Process(). Overall behavior is much improved.
|
||||||
|
- Removed a 'ton' of unneeded packet updates
|
||||||
|
- Added a 'leash' to the distance a bot can travel
|
||||||
|
- Added a 'main assist' feature to target control (set using group roles)
|
||||||
|
- Added combat 'jitter' movement to complement the existing rogue movement
|
||||||
|
- Attack can now be aborted if target contains no leash owner nor bot hate and leash owner turns off auto-attack
|
||||||
|
- Please report any issues with the bot AI code
|
||||||
|
|
||||||
|
Added a work-around for heal rotations crashing the server - under certain conditions.
|
||||||
|
|
||||||
|
== 01/28/2018 ==
|
||||||
|
Mackal: Spell AI tweaks
|
||||||
|
|
||||||
|
AI spells are treated as "innate" spells (devs use this term, and I think this is what they mean by it)
|
||||||
|
These spells are spammed by the NPC, lots of encounters on live work like this and this will greatly reduce
|
||||||
|
the need to do quest scripting on these types of encounters.
|
||||||
|
|
||||||
|
You can safely run update npc_spells_entries set priority = priority + 1 where priority >= 0; if you want to disable this new behavior
|
||||||
|
|
||||||
== 10/08/2017 ==
|
== 10/08/2017 ==
|
||||||
Mackal: Rework regens
|
Mackal: Rework regens
|
||||||
|
|
||||||
|
|||||||
@ -60,6 +60,29 @@ int main(int argc, char **argv) {
|
|||||||
database.LoadLogSettings(LogSys.log_settings);
|
database.LoadLogSettings(LogSys.log_settings);
|
||||||
LogSys.StartFileLogs();
|
LogSys.StartFileLogs();
|
||||||
|
|
||||||
|
std::string arg_1;
|
||||||
|
|
||||||
|
if (argv[1]) {
|
||||||
|
arg_1 = argv[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arg_1 == "spells") {
|
||||||
|
ExportSpells(&database);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (arg_1 == "skills") {
|
||||||
|
ExportSkillCaps(&database);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (arg_1 == "basedata") {
|
||||||
|
ExportBaseData(&database);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (arg_1 == "dbstring") {
|
||||||
|
ExportDBStrings(&database);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
ExportSpells(&database);
|
ExportSpells(&database);
|
||||||
ExportSkillCaps(&database);
|
ExportSkillCaps(&database);
|
||||||
ExportBaseData(&database);
|
ExportBaseData(&database);
|
||||||
|
|||||||
@ -3,6 +3,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
|||||||
SET(common_sources
|
SET(common_sources
|
||||||
base_packet.cpp
|
base_packet.cpp
|
||||||
classes.cpp
|
classes.cpp
|
||||||
|
compression.cpp
|
||||||
condition.cpp
|
condition.cpp
|
||||||
crash.cpp
|
crash.cpp
|
||||||
crc16.cpp
|
crc16.cpp
|
||||||
@ -13,7 +14,6 @@ SET(common_sources
|
|||||||
dbcore.cpp
|
dbcore.cpp
|
||||||
deity.cpp
|
deity.cpp
|
||||||
emu_constants.cpp
|
emu_constants.cpp
|
||||||
emu_legacy.cpp
|
|
||||||
emu_limits.cpp
|
emu_limits.cpp
|
||||||
emu_opcodes.cpp
|
emu_opcodes.cpp
|
||||||
emu_versions.cpp
|
emu_versions.cpp
|
||||||
@ -55,11 +55,13 @@ SET(common_sources
|
|||||||
perl_eqdb.cpp
|
perl_eqdb.cpp
|
||||||
perl_eqdb_res.cpp
|
perl_eqdb_res.cpp
|
||||||
proc_launcher.cpp
|
proc_launcher.cpp
|
||||||
|
profanity_manager.cpp
|
||||||
ptimer.cpp
|
ptimer.cpp
|
||||||
races.cpp
|
races.cpp
|
||||||
rdtsc.cpp
|
rdtsc.cpp
|
||||||
rulesys.cpp
|
rulesys.cpp
|
||||||
say_link.cpp
|
say_link.cpp
|
||||||
|
serialize_buffer.cpp
|
||||||
serverinfo.cpp
|
serverinfo.cpp
|
||||||
shareddb.cpp
|
shareddb.cpp
|
||||||
skills.cpp
|
skills.cpp
|
||||||
@ -71,7 +73,6 @@ SET(common_sources
|
|||||||
unix.cpp
|
unix.cpp
|
||||||
xml_parser.cpp
|
xml_parser.cpp
|
||||||
platform.cpp
|
platform.cpp
|
||||||
event/event_loop.cpp
|
|
||||||
json/jsoncpp.cpp
|
json/jsoncpp.cpp
|
||||||
net/console_server.cpp
|
net/console_server.cpp
|
||||||
net/console_server_connection.cpp
|
net/console_server_connection.cpp
|
||||||
@ -113,6 +114,7 @@ SET(common_headers
|
|||||||
base_data.h
|
base_data.h
|
||||||
bodytypes.h
|
bodytypes.h
|
||||||
classes.h
|
classes.h
|
||||||
|
compression.h
|
||||||
condition.h
|
condition.h
|
||||||
crash.h
|
crash.h
|
||||||
crc16.h
|
crc16.h
|
||||||
@ -122,7 +124,6 @@ SET(common_headers
|
|||||||
dbcore.h
|
dbcore.h
|
||||||
deity.h
|
deity.h
|
||||||
emu_constants.h
|
emu_constants.h
|
||||||
emu_legacy.h
|
|
||||||
emu_limits.h
|
emu_limits.h
|
||||||
emu_opcodes.h
|
emu_opcodes.h
|
||||||
emu_oplist.h
|
emu_oplist.h
|
||||||
@ -180,6 +181,7 @@ SET(common_headers
|
|||||||
packet_functions.h
|
packet_functions.h
|
||||||
platform.h
|
platform.h
|
||||||
proc_launcher.h
|
proc_launcher.h
|
||||||
|
profanity_manager.h
|
||||||
profiler.h
|
profiler.h
|
||||||
ptimer.h
|
ptimer.h
|
||||||
queue.h
|
queue.h
|
||||||
@ -190,6 +192,7 @@ SET(common_headers
|
|||||||
ruletypes.h
|
ruletypes.h
|
||||||
say_link.h
|
say_link.h
|
||||||
seperator.h
|
seperator.h
|
||||||
|
serialize_buffer.h
|
||||||
serverinfo.h
|
serverinfo.h
|
||||||
servertalk.h
|
servertalk.h
|
||||||
shareddb.h
|
shareddb.h
|
||||||
@ -205,8 +208,8 @@ SET(common_headers
|
|||||||
version.h
|
version.h
|
||||||
xml_parser.h
|
xml_parser.h
|
||||||
zone_numbers.h
|
zone_numbers.h
|
||||||
event/background_task.h
|
|
||||||
event/event_loop.h
|
event/event_loop.h
|
||||||
|
event/task.h
|
||||||
event/timer.h
|
event/timer.h
|
||||||
json/json.h
|
json/json.h
|
||||||
json/json-forwards.h
|
json/json-forwards.h
|
||||||
@ -263,10 +266,9 @@ SET(common_headers
|
|||||||
)
|
)
|
||||||
|
|
||||||
SOURCE_GROUP(Event FILES
|
SOURCE_GROUP(Event FILES
|
||||||
event/background_task.h
|
|
||||||
event/event_loop.cpp
|
|
||||||
event/event_loop.h
|
event/event_loop.h
|
||||||
event/timer.h
|
event/timer.h
|
||||||
|
event/task.h
|
||||||
)
|
)
|
||||||
|
|
||||||
SOURCE_GROUP(Json FILES
|
SOURCE_GROUP(Json FILES
|
||||||
|
|||||||
@ -39,6 +39,18 @@ BasePacket::BasePacket(const unsigned char *buf, uint32 len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BasePacket::BasePacket(SerializeBuffer &buf)
|
||||||
|
{
|
||||||
|
pBuffer = buf.m_buffer;
|
||||||
|
buf.m_buffer = nullptr;
|
||||||
|
size = buf.m_pos;
|
||||||
|
buf.m_pos = 0;
|
||||||
|
buf.m_capacity = 0;
|
||||||
|
_wpos = 0;
|
||||||
|
_rpos = 0;
|
||||||
|
timestamp.tv_sec = 0;
|
||||||
|
}
|
||||||
|
|
||||||
BasePacket::~BasePacket()
|
BasePacket::~BasePacket()
|
||||||
{
|
{
|
||||||
if (pBuffer)
|
if (pBuffer)
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
#define BASEPACKET_H_
|
#define BASEPACKET_H_
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "serialize_buffer.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
@ -63,6 +64,8 @@ public:
|
|||||||
void WriteFloat(float value) { *(float *)(pBuffer + _wpos) = value; _wpos += sizeof(float); }
|
void WriteFloat(float value) { *(float *)(pBuffer + _wpos) = value; _wpos += sizeof(float); }
|
||||||
void WriteDouble(double value) { *(double *)(pBuffer + _wpos) = value; _wpos += sizeof(double); }
|
void WriteDouble(double value) { *(double *)(pBuffer + _wpos) = value; _wpos += sizeof(double); }
|
||||||
void WriteString(const char * str) { uint32 len = static_cast<uint32>(strlen(str)) + 1; memcpy(pBuffer + _wpos, str, len); _wpos += len; }
|
void WriteString(const char * str) { uint32 len = static_cast<uint32>(strlen(str)) + 1; memcpy(pBuffer + _wpos, str, len); _wpos += len; }
|
||||||
|
// this is used in task system a lot, it is NOT null-termed
|
||||||
|
void WriteLengthString(uint32 len, const char *str) { *(uint32 *)(pBuffer + _wpos) = len; _wpos += sizeof(uint32); memcpy(pBuffer + _wpos, str, len); _wpos += len; }
|
||||||
void WriteData(const void *ptr, size_t n) { memcpy(pBuffer + _wpos, ptr, n); _wpos += n; }
|
void WriteData(const void *ptr, size_t n) { memcpy(pBuffer + _wpos, ptr, n); _wpos += n; }
|
||||||
|
|
||||||
uint8 ReadUInt8() { uint8 value = *(uint8 *)(pBuffer + _rpos); _rpos += sizeof(uint8); return value; }
|
uint8 ReadUInt8() { uint8 value = *(uint8 *)(pBuffer + _rpos); _rpos += sizeof(uint8); return value; }
|
||||||
@ -83,6 +86,7 @@ protected:
|
|||||||
virtual ~BasePacket();
|
virtual ~BasePacket();
|
||||||
BasePacket() { pBuffer=nullptr; size=0; _wpos = 0; _rpos = 0; }
|
BasePacket() { pBuffer=nullptr; size=0; _wpos = 0; _rpos = 0; }
|
||||||
BasePacket(const unsigned char *buf, const uint32 len);
|
BasePacket(const unsigned char *buf, const uint32 len);
|
||||||
|
BasePacket(SerializeBuffer &buf);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void DumpPacketHex(const BasePacket* app);
|
extern void DumpPacketHex(const BasePacket* app);
|
||||||
|
|||||||
1052
common/classes.cpp
1052
common/classes.cpp
File diff suppressed because it is too large
Load Diff
82
common/compression.cpp
Normal file
82
common/compression.cpp
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
#include "global_define.h"
|
||||||
|
#include "types.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <zlib.h>
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
uint32 EstimateDeflateBuffer(uint32 len) {
|
||||||
|
z_stream zstream;
|
||||||
|
memset(&zstream, 0, sizeof(zstream));
|
||||||
|
|
||||||
|
zstream.zalloc = Z_NULL;
|
||||||
|
zstream.zfree = Z_NULL;
|
||||||
|
zstream.opaque = Z_NULL;
|
||||||
|
if (deflateInit(&zstream, Z_FINISH) != Z_OK)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return deflateBound(&zstream, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 DeflateData(const char *buffer, uint32 len, char *out_buffer, uint32 out_len_max) {
|
||||||
|
z_stream zstream;
|
||||||
|
memset(&zstream, 0, sizeof(zstream));
|
||||||
|
int zerror;
|
||||||
|
|
||||||
|
zstream.next_in = const_cast<unsigned char*>(reinterpret_cast<const unsigned char*>(buffer));
|
||||||
|
zstream.avail_in = len;
|
||||||
|
zstream.zalloc = Z_NULL;
|
||||||
|
zstream.zfree = Z_NULL;
|
||||||
|
zstream.opaque = Z_NULL;
|
||||||
|
deflateInit(&zstream, Z_FINISH);
|
||||||
|
|
||||||
|
zstream.next_out = reinterpret_cast<unsigned char*>(out_buffer);
|
||||||
|
zstream.avail_out = out_len_max;
|
||||||
|
zerror = deflate(&zstream, Z_FINISH);
|
||||||
|
|
||||||
|
if (zerror == Z_STREAM_END)
|
||||||
|
{
|
||||||
|
deflateEnd(&zstream);
|
||||||
|
return (uint32)zstream.total_out;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zerror = deflateEnd(&zstream);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 InflateData(const char* buffer, uint32 len, char* out_buffer, uint32 out_len_max) {
|
||||||
|
z_stream zstream;
|
||||||
|
int zerror = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
zstream.next_in = const_cast<unsigned char*>(reinterpret_cast<const unsigned char*>(buffer));
|
||||||
|
zstream.avail_in = len;
|
||||||
|
zstream.next_out = reinterpret_cast<unsigned char*>(out_buffer);;
|
||||||
|
zstream.avail_out = out_len_max;
|
||||||
|
zstream.zalloc = Z_NULL;
|
||||||
|
zstream.zfree = Z_NULL;
|
||||||
|
zstream.opaque = Z_NULL;
|
||||||
|
|
||||||
|
i = inflateInit2(&zstream, 15);
|
||||||
|
if (i != Z_OK) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
zerror = inflate(&zstream, Z_FINISH);
|
||||||
|
if (zerror == Z_STREAM_END) {
|
||||||
|
inflateEnd(&zstream);
|
||||||
|
return zstream.total_out;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (zerror == -4 && zstream.msg == 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
zerror = inflateEnd(&zstream);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
8
common/compression.h
Normal file
8
common/compression.h
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace EQEmu
|
||||||
|
{
|
||||||
|
uint32 EstimateDeflateBuffer(uint32 len);
|
||||||
|
uint32 DeflateData(const char *buffer, uint32 len, char *out_buffer, uint32 out_len_max);
|
||||||
|
uint32 InflateData(const char* buffer, uint32 len, char* out_buffer, uint32 out_len_max);
|
||||||
|
}
|
||||||
@ -17,11 +17,10 @@
|
|||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef COMMON_DATA_VERIFICATION_H
|
#pragma once
|
||||||
#define COMMON_DATA_VERIFICATION_H
|
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
@ -52,4 +51,3 @@ namespace EQEmu
|
|||||||
|
|
||||||
} /*EQEmu*/
|
} /*EQEmu*/
|
||||||
|
|
||||||
#endif /*COMMON_DATA_VERIFICATION_H*/
|
|
||||||
|
|||||||
@ -172,30 +172,27 @@ void Database::LoginIP(uint32 AccountID, const char* LoginIP) {
|
|||||||
QueryDatabase(query);
|
QueryDatabase(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
int16 Database::CheckStatus(uint32 account_id) {
|
int16 Database::CheckStatus(uint32 account_id)
|
||||||
std::string query = StringFormat("SELECT `status`, UNIX_TIMESTAMP(`suspendeduntil`) as `suspendeduntil`, UNIX_TIMESTAMP() as `current`"
|
{
|
||||||
" FROM `account` WHERE `id` = %i", account_id);
|
std::string query = StringFormat(
|
||||||
|
"SELECT `status`, TIMESTAMPDIFF(SECOND, NOW(), `suspendeduntil`) FROM `account` WHERE `id` = %i",
|
||||||
|
account_id);
|
||||||
|
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
if (!results.Success()) {
|
if (!results.Success())
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
if (results.RowCount() != 1)
|
if (results.RowCount() != 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
auto row = results.begin();
|
|
||||||
int16 status = atoi(row[0]);
|
|
||||||
int32 suspendeduntil = 0;
|
|
||||||
|
|
||||||
// MariaDB initalizes with NULL if unix_timestamp() is out of range
|
auto row = results.begin();
|
||||||
if (row[1] != nullptr) {
|
int16 status = atoi(row[0]);
|
||||||
suspendeduntil = atoi(row[1]);
|
int32 date_diff = 0;
|
||||||
}
|
|
||||||
|
|
||||||
int32 current = atoi(row[2]);
|
if (row[1] != nullptr)
|
||||||
|
date_diff = atoi(row[1]);
|
||||||
|
|
||||||
if(suspendeduntil > current)
|
if (date_diff > 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
@ -709,7 +706,7 @@ bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu
|
|||||||
|
|
||||||
/* Insert starting inventory... */
|
/* Insert starting inventory... */
|
||||||
std::string invquery;
|
std::string invquery;
|
||||||
for (int16 i = EQEmu::legacy::EQUIPMENT_BEGIN; i <= EQEmu::legacy::BANK_BAGS_END;) {
|
for (int16 i = EQEmu::invslot::EQUIPMENT_BEGIN; i <= EQEmu::invbag::BANK_BAGS_END;) {
|
||||||
const EQEmu::ItemInstance* newinv = inv->GetItem(i);
|
const EQEmu::ItemInstance* newinv = inv->GetItem(i);
|
||||||
if (newinv) {
|
if (newinv) {
|
||||||
invquery = StringFormat("INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)",
|
invquery = StringFormat("INSERT INTO `inventory` (charid, slotid, itemid, charges, color) VALUES (%u, %i, %u, %i, %u)",
|
||||||
@ -718,16 +715,16 @@ bool Database::StoreCharacter(uint32 account_id, PlayerProfile_Struct* pp, EQEmu
|
|||||||
auto results = QueryDatabase(invquery);
|
auto results = QueryDatabase(invquery);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == EQEmu::inventory::slotCursor) {
|
if (i == EQEmu::invslot::slotCursor) {
|
||||||
i = EQEmu::legacy::GENERAL_BAGS_BEGIN;
|
i = EQEmu::invbag::GENERAL_BAGS_BEGIN;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (i == EQEmu::legacy::CURSOR_BAG_END) {
|
else if (i == EQEmu::invbag::CURSOR_BAG_END) {
|
||||||
i = EQEmu::legacy::BANK_BEGIN;
|
i = EQEmu::invslot::BANK_BEGIN;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (i == EQEmu::legacy::BANK_END) {
|
else if (i == EQEmu::invslot::BANK_END) {
|
||||||
i = EQEmu::legacy::BANK_BAGS_BEGIN;
|
i = EQEmu::invbag::BANK_BAGS_BEGIN;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
@ -1399,25 +1396,39 @@ uint8 Database::GetSkillCap(uint8 skillid, uint8 in_race, uint8 in_class, uint16
|
|||||||
return base_cap;
|
return base_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 Database::GetCharacterInfo(const char* iName, uint32* oAccID, uint32* oZoneID, uint32* oInstanceID, float* oX, float* oY, float* oZ) {
|
uint32 Database::GetCharacterInfo(
|
||||||
std::string query = StringFormat("SELECT `id`, `account_id`, `zone_id`, `zone_instance`, `x`, `y`, `z` FROM `character_data` WHERE `name` = '%s'", iName);
|
const char *iName,
|
||||||
|
uint32 *oAccID,
|
||||||
|
uint32 *oZoneID,
|
||||||
|
uint32 *oInstanceID,
|
||||||
|
float *oX,
|
||||||
|
float *oY,
|
||||||
|
float *oZ
|
||||||
|
)
|
||||||
|
{
|
||||||
|
std::string query = StringFormat(
|
||||||
|
"SELECT `id`, `account_id`, `zone_id`, `zone_instance`, `x`, `y`, `z` FROM `character_data` WHERE `name` = '%s'",
|
||||||
|
EscapeString(iName).c_str()
|
||||||
|
);
|
||||||
|
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
|
|
||||||
if (!results.Success()) {
|
if (!results.Success()) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (results.RowCount() != 1)
|
if (results.RowCount() != 1) {
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
auto row = results.begin();
|
auto row = results.begin();
|
||||||
uint32 charid = atoi(row[0]);
|
uint32 charid = atoi(row[0]);
|
||||||
if (oAccID){ *oAccID = atoi(row[1]); }
|
if (oAccID) { *oAccID = atoi(row[1]); }
|
||||||
if (oZoneID){ *oZoneID = atoi(row[2]); }
|
if (oZoneID) { *oZoneID = atoi(row[2]); }
|
||||||
if (oInstanceID){ *oInstanceID = atoi(row[3]); }
|
if (oInstanceID) { *oInstanceID = atoi(row[3]); }
|
||||||
if (oX){ *oX = atof(row[4]); }
|
if (oX) { *oX = atof(row[4]); }
|
||||||
if (oY){ *oY = atof(row[5]); }
|
if (oY) { *oY = atof(row[5]); }
|
||||||
if (oZ){ *oZ = atof(row[6]); }
|
if (oZ) { *oZ = atof(row[6]); }
|
||||||
|
|
||||||
return charid;
|
return charid;
|
||||||
}
|
}
|
||||||
@ -1743,6 +1754,15 @@ void Database::ClearRaidDetails(uint32 rid) {
|
|||||||
std::cout << "Unable to clear raid details: " << results.ErrorMessage() << std::endl;
|
std::cout << "Unable to clear raid details: " << results.ErrorMessage() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Database::PurgeAllDeletedDataBuckets() {
|
||||||
|
std::string query = StringFormat(
|
||||||
|
"DELETE FROM `data_buckets` WHERE (`expires` < %lld AND `expires` > 0)",
|
||||||
|
(long long) std::time(nullptr)
|
||||||
|
);
|
||||||
|
|
||||||
|
QueryDatabase(query);
|
||||||
|
}
|
||||||
|
|
||||||
// returns 0 on error or no raid for that character, or
|
// returns 0 on error or no raid for that character, or
|
||||||
// the raid id that the character is a member of.
|
// the raid id that the character is a member of.
|
||||||
uint32 Database::GetRaidID(const char* name)
|
uint32 Database::GetRaidID(const char* name)
|
||||||
@ -2045,58 +2065,114 @@ uint32 Database::GetGuildIDByCharID(uint32 character_id)
|
|||||||
return atoi(row[0]);
|
return atoi(row[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Database::LoadLogSettings(EQEmuLogSys::LogSettings* log_settings)
|
void Database::LoadLogSettings(EQEmuLogSys::LogSettings* log_settings) {
|
||||||
{
|
|
||||||
// log_settings previously initialized to '0' by EQEmuLogSys::LoadLogSettingsDefaults()
|
// log_settings previously initialized to '0' by EQEmuLogSys::LoadLogSettingsDefaults()
|
||||||
|
|
||||||
std::string query =
|
std::string query =
|
||||||
"SELECT "
|
"SELECT "
|
||||||
"log_category_id, "
|
"log_category_id, "
|
||||||
"log_category_description, "
|
"log_category_description, "
|
||||||
"log_to_console, "
|
"log_to_console, "
|
||||||
"log_to_file, "
|
"log_to_file, "
|
||||||
"log_to_gmsay "
|
"log_to_gmsay "
|
||||||
"FROM "
|
"FROM "
|
||||||
"logsys_categories "
|
"logsys_categories "
|
||||||
"ORDER BY log_category_id";
|
"ORDER BY log_category_id";
|
||||||
|
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
|
|
||||||
int log_category = 0;
|
int log_category_id = 0;
|
||||||
LogSys.file_logs_enabled = false;
|
|
||||||
|
int categories_in_database[1000] = {};
|
||||||
|
|
||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row = results.begin(); row != results.end(); ++row) {
|
||||||
log_category = atoi(row[0]);
|
log_category_id = atoi(row[0]);
|
||||||
if (log_category <= Logs::None || log_category >= Logs::MaxCategoryID)
|
if (log_category_id <= Logs::None || log_category_id >= Logs::MaxCategoryID) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
log_settings[log_category].log_to_console = atoi(row[2]);
|
log_settings[log_category_id].log_to_console = static_cast<uint8>(atoi(row[2]));
|
||||||
log_settings[log_category].log_to_file = atoi(row[3]);
|
log_settings[log_category_id].log_to_file = static_cast<uint8>(atoi(row[3]));
|
||||||
log_settings[log_category].log_to_gmsay = atoi(row[4]);
|
log_settings[log_category_id].log_to_gmsay = static_cast<uint8>(atoi(row[4]));
|
||||||
|
|
||||||
/* Determine if any output method is enabled for the category
|
/**
|
||||||
and set it to 1 so it can used to check if category is enabled */
|
* Determine if any output method is enabled for the category
|
||||||
const bool log_to_console = log_settings[log_category].log_to_console > 0;
|
* and set it to 1 so it can used to check if category is enabled
|
||||||
const bool log_to_file = log_settings[log_category].log_to_file > 0;
|
*/
|
||||||
const bool log_to_gmsay = log_settings[log_category].log_to_gmsay > 0;
|
const bool log_to_console = log_settings[log_category_id].log_to_console > 0;
|
||||||
|
const bool log_to_file = log_settings[log_category_id].log_to_file > 0;
|
||||||
|
const bool log_to_gmsay = log_settings[log_category_id].log_to_gmsay > 0;
|
||||||
const bool is_category_enabled = log_to_console || log_to_file || log_to_gmsay;
|
const bool is_category_enabled = log_to_console || log_to_file || log_to_gmsay;
|
||||||
|
|
||||||
if (is_category_enabled)
|
if (is_category_enabled) {
|
||||||
log_settings[log_category].is_category_enabled = 1;
|
log_settings[log_category_id].is_category_enabled = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
This determines whether or not the process needs to actually file log anything.
|
* This determines whether or not the process needs to actually file log anything.
|
||||||
If we go through this whole loop and nothing is set to any debug level, there is no point to create a file or keep anything open
|
* If we go through this whole loop and nothing is set to any debug level, there is no point to create a file or keep anything open
|
||||||
*/
|
*/
|
||||||
if (log_settings[log_category].log_to_file > 0){
|
if (log_settings[log_category_id].log_to_file > 0) {
|
||||||
LogSys.file_logs_enabled = true;
|
LogSys.file_logs_enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
categories_in_database[log_category_id] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto inject categories that don't exist in the database...
|
||||||
|
*/
|
||||||
|
for (int log_index = Logs::AA; log_index != Logs::MaxCategoryID; log_index++) {
|
||||||
|
if (!categories_in_database[log_index]) {
|
||||||
|
|
||||||
|
Log(Logs::General,
|
||||||
|
Logs::Status,
|
||||||
|
"New Log Category '%s' doesn't exist... Automatically adding to `logsys_categories` table...",
|
||||||
|
Logs::LogCategoryName[log_index]
|
||||||
|
);
|
||||||
|
|
||||||
|
std::string inject_query = StringFormat(
|
||||||
|
"INSERT INTO logsys_categories "
|
||||||
|
"(log_category_id, "
|
||||||
|
"log_category_description, "
|
||||||
|
"log_to_console, "
|
||||||
|
"log_to_file, "
|
||||||
|
"log_to_gmsay) "
|
||||||
|
"VALUES "
|
||||||
|
"(%i, '%s', %i, %i, %i)",
|
||||||
|
log_index,
|
||||||
|
EscapeString(Logs::LogCategoryName[log_index]).c_str(),
|
||||||
|
log_settings[log_category_id].log_to_console,
|
||||||
|
log_settings[log_category_id].log_to_file,
|
||||||
|
log_settings[log_category_id].log_to_gmsay
|
||||||
|
);
|
||||||
|
|
||||||
|
QueryDatabase(inject_query);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Database::ClearInvSnapshots(bool use_rule)
|
int Database::CountInvSnapshots() {
|
||||||
{
|
std::string query = StringFormat("SELECT COUNT(*) FROM (SELECT * FROM `inventory_snapshots` a GROUP BY `charid`, `time_index`) b");
|
||||||
|
auto results = QueryDatabase(query);
|
||||||
|
|
||||||
|
if (!results.Success())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
auto row = results.begin();
|
||||||
|
|
||||||
|
int64 count = atoll(row[0]);
|
||||||
|
if (count > 2147483647)
|
||||||
|
return -2;
|
||||||
|
if (count < 0)
|
||||||
|
return -3;
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Database::ClearInvSnapshots(bool from_now) {
|
||||||
uint32 del_time = time(nullptr);
|
uint32 del_time = time(nullptr);
|
||||||
if (use_rule) { del_time -= RuleI(Character, InvSnapshotHistoryD) * 86400; }
|
if (!from_now) { del_time -= RuleI(Character, InvSnapshotHistoryD) * 86400; }
|
||||||
|
|
||||||
std::string query = StringFormat("DELETE FROM inventory_snapshots WHERE time_index <= %lu", (unsigned long)del_time);
|
std::string query = StringFormat("DELETE FROM inventory_snapshots WHERE time_index <= %lu", (unsigned long)del_time);
|
||||||
QueryDatabase(query);
|
QueryDatabase(query);
|
||||||
|
|||||||
@ -220,6 +220,8 @@ public:
|
|||||||
void GetRaidLeadershipInfo(uint32 rid, char* maintank = nullptr, char* assist = nullptr, char* puller = nullptr, char *marknpc = nullptr, RaidLeadershipAA_Struct* RLAA = nullptr);
|
void GetRaidLeadershipInfo(uint32 rid, char* maintank = nullptr, char* assist = nullptr, char* puller = nullptr, char *marknpc = nullptr, RaidLeadershipAA_Struct* RLAA = nullptr);
|
||||||
void SetRaidGroupLeaderInfo(uint32 gid, uint32 rid);
|
void SetRaidGroupLeaderInfo(uint32 gid, uint32 rid);
|
||||||
|
|
||||||
|
void PurgeAllDeletedDataBuckets();
|
||||||
|
|
||||||
/* Database Conversions 'database_conversions.cpp' */
|
/* Database Conversions 'database_conversions.cpp' */
|
||||||
|
|
||||||
bool CheckDatabaseConversions();
|
bool CheckDatabaseConversions();
|
||||||
@ -261,7 +263,8 @@ public:
|
|||||||
void SetLFP(uint32 CharID, bool LFP);
|
void SetLFP(uint32 CharID, bool LFP);
|
||||||
void SetLoginFlags(uint32 CharID, bool LFP, bool LFG, uint8 firstlogon);
|
void SetLoginFlags(uint32 CharID, bool LFP, bool LFG, uint8 firstlogon);
|
||||||
|
|
||||||
void ClearInvSnapshots(bool use_rule = true);
|
int CountInvSnapshots();
|
||||||
|
void ClearInvSnapshots(bool from_now = false);
|
||||||
|
|
||||||
/* EQEmuLogSys */
|
/* EQEmuLogSys */
|
||||||
void LoadLogSettings(EQEmuLogSys::LogSettings* log_settings);
|
void LoadLogSettings(EQEmuLogSys::LogSettings* log_settings);
|
||||||
|
|||||||
@ -41,6 +41,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
|
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
|
|
||||||
|
// all const/macro reference values should really be converted to a magic number for this
|
||||||
|
// process to ensure that the struct sizes and offsets match up to the corresponding blob
|
||||||
|
|
||||||
/* Conversion Structs */
|
/* Conversion Structs */
|
||||||
|
|
||||||
namespace Convert {
|
namespace Convert {
|
||||||
@ -214,7 +217,7 @@ namespace Convert {
|
|||||||
/*0245*/ uint8 guildbanker;
|
/*0245*/ uint8 guildbanker;
|
||||||
/*0246*/ uint8 unknown0246[6]; //
|
/*0246*/ uint8 unknown0246[6]; //
|
||||||
/*0252*/ uint32 intoxication;
|
/*0252*/ uint32 intoxication;
|
||||||
/*0256*/ uint32 spellSlotRefresh[MAX_PP_REF_MEMSPELL]; //in ms
|
/*0256*/ uint32 spellSlotRefresh[9]; //in ms
|
||||||
/*0292*/ uint32 abilitySlotRefresh;
|
/*0292*/ uint32 abilitySlotRefresh;
|
||||||
/*0296*/ uint8 haircolor; // Player hair color
|
/*0296*/ uint8 haircolor; // Player hair color
|
||||||
/*0297*/ uint8 beardcolor; // Player beard color
|
/*0297*/ uint8 beardcolor; // Player beard color
|
||||||
@ -253,9 +256,9 @@ namespace Convert {
|
|||||||
/*2505*/ uint8 unknown2541[47]; // ?
|
/*2505*/ uint8 unknown2541[47]; // ?
|
||||||
/*2552*/ uint8 languages[MAX_PP_LANGUAGE];
|
/*2552*/ uint8 languages[MAX_PP_LANGUAGE];
|
||||||
/*2580*/ uint8 unknown2616[4];
|
/*2580*/ uint8 unknown2616[4];
|
||||||
/*2584*/ uint32 spell_book[MAX_PP_REF_SPELLBOOK];
|
/*2584*/ uint32 spell_book[480];
|
||||||
/*4504*/ uint8 unknown4540[128]; // Was [428] all 0xff
|
/*4504*/ uint8 unknown4540[128]; // Was [428] all 0xff
|
||||||
/*4632*/ uint32 mem_spells[MAX_PP_REF_MEMSPELL];
|
/*4632*/ uint32 mem_spells[9];
|
||||||
/*4668*/ uint8 unknown4704[32]; //
|
/*4668*/ uint8 unknown4704[32]; //
|
||||||
/*4700*/ float y; // Player y position
|
/*4700*/ float y; // Player y position
|
||||||
/*4704*/ float x; // Player x position
|
/*4704*/ float x; // Player x position
|
||||||
@ -330,7 +333,7 @@ namespace Convert {
|
|||||||
/*7212*/ uint32 tribute_points;
|
/*7212*/ uint32 tribute_points;
|
||||||
/*7216*/ uint32 unknown7252;
|
/*7216*/ uint32 unknown7252;
|
||||||
/*7220*/ uint32 tribute_active; //1=active
|
/*7220*/ uint32 tribute_active; //1=active
|
||||||
/*7224*/ Convert::Tribute_Struct tributes[EQEmu::legacy::TRIBUTE_SIZE];
|
/*7224*/ Convert::Tribute_Struct tributes[5];
|
||||||
/*7264*/ Convert::Disciplines_Struct disciplines;
|
/*7264*/ Convert::Disciplines_Struct disciplines;
|
||||||
/*7664*/ uint32 recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
|
/*7664*/ uint32 recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
|
||||||
/*7744*/ char unknown7780[160];
|
/*7744*/ char unknown7780[160];
|
||||||
@ -1357,7 +1360,7 @@ bool Database::CheckDatabaseConvertPPDeblob(){
|
|||||||
if (rquery != ""){ results = QueryDatabase(rquery); }
|
if (rquery != ""){ results = QueryDatabase(rquery); }
|
||||||
/* Run Spell Convert */
|
/* Run Spell Convert */
|
||||||
first_entry = 0; rquery = "";
|
first_entry = 0; rquery = "";
|
||||||
for (i = 0; i < MAX_PP_REF_SPELLBOOK; i++){
|
for (i = 0; i < 480; i++){
|
||||||
if (pp->spell_book[i] > 0 && pp->spell_book[i] != 4294967295 && pp->spell_book[i] < 40000 && pp->spell_book[i] != 1){
|
if (pp->spell_book[i] > 0 && pp->spell_book[i] != 4294967295 && pp->spell_book[i] < 40000 && pp->spell_book[i] != 1){
|
||||||
if (first_entry != 1){
|
if (first_entry != 1){
|
||||||
rquery = StringFormat("REPLACE INTO `character_spells` (id, slot_id, spell_id) VALUES (%u, %u, %u)", character_id, i, pp->spell_book[i]);
|
rquery = StringFormat("REPLACE INTO `character_spells` (id, slot_id, spell_id) VALUES (%u, %u, %u)", character_id, i, pp->spell_book[i]);
|
||||||
@ -1369,7 +1372,7 @@ bool Database::CheckDatabaseConvertPPDeblob(){
|
|||||||
if (rquery != ""){ results = QueryDatabase(rquery); }
|
if (rquery != ""){ results = QueryDatabase(rquery); }
|
||||||
/* Run Max Memmed Spell Convert */
|
/* Run Max Memmed Spell Convert */
|
||||||
first_entry = 0; rquery = "";
|
first_entry = 0; rquery = "";
|
||||||
for (i = 0; i < MAX_PP_REF_MEMSPELL; i++){
|
for (i = 0; i < 9; i++){
|
||||||
if (pp->mem_spells[i] > 0 && pp->mem_spells[i] != 65535 && pp->mem_spells[i] != 4294967295){
|
if (pp->mem_spells[i] > 0 && pp->mem_spells[i] != 65535 && pp->mem_spells[i] != 4294967295){
|
||||||
if (first_entry != 1){
|
if (first_entry != 1){
|
||||||
rquery = StringFormat("REPLACE INTO `character_memmed_spells` (id, slot_id, spell_id) VALUES (%u, %u, %u)", character_id, i, pp->mem_spells[i]);
|
rquery = StringFormat("REPLACE INTO `character_memmed_spells` (id, slot_id, spell_id) VALUES (%u, %u, %u)", character_id, i, pp->mem_spells[i]);
|
||||||
@ -1405,7 +1408,7 @@ bool Database::CheckDatabaseConvertPPDeblob(){
|
|||||||
if (rquery != ""){ results = QueryDatabase(rquery); }
|
if (rquery != ""){ results = QueryDatabase(rquery); }
|
||||||
/* Run Tribute Convert */
|
/* Run Tribute Convert */
|
||||||
first_entry = 0; rquery = "";
|
first_entry = 0; rquery = "";
|
||||||
for (i = 0; i < EQEmu::legacy::TRIBUTE_SIZE; i++){
|
for (i = 0; i < 5; i++){
|
||||||
if (pp->tributes[i].tribute > 0 && pp->tributes[i].tribute != 4294967295){
|
if (pp->tributes[i].tribute > 0 && pp->tributes[i].tribute != 4294967295){
|
||||||
if (first_entry != 1){
|
if (first_entry != 1){
|
||||||
rquery = StringFormat("REPLACE INTO `character_tribute` (id, tier, tribute) VALUES (%u, %u, %u)", character_id, pp->tributes[i].tier, pp->tributes[i].tribute);
|
rquery = StringFormat("REPLACE INTO `character_tribute` (id, tier, tribute) VALUES (%u, %u, %u)", character_id, pp->tributes[i].tier, pp->tributes[i].tribute);
|
||||||
|
|||||||
@ -38,16 +38,23 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param instance_id
|
||||||
|
* @param char_id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
bool Database::AddClientToInstance(uint16 instance_id, uint32 char_id)
|
bool Database::AddClientToInstance(uint16 instance_id, uint32 char_id)
|
||||||
{
|
{
|
||||||
std::string query = StringFormat(
|
std::string query = StringFormat(
|
||||||
"REPLACE INTO `instance_list_player` (id, charid) "
|
"REPLACE INTO `instance_list_player` (id, charid) "
|
||||||
"VALUES "
|
"VALUES "
|
||||||
"(%lu, %lu)",
|
"(%lu, %lu)",
|
||||||
(unsigned long)instance_id,
|
(unsigned long) instance_id,
|
||||||
(unsigned long)char_id
|
(unsigned long) char_id
|
||||||
);
|
);
|
||||||
|
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
|
|
||||||
return results.Success();
|
return results.Success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -18,3 +18,137 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "emu_constants.h"
|
#include "emu_constants.h"
|
||||||
|
|
||||||
|
|
||||||
|
int16 EQEmu::invtype::GetInvTypeSize(int16 inv_type) {
|
||||||
|
static const int16 local_array[] = {
|
||||||
|
POSSESSIONS_SIZE,
|
||||||
|
BANK_SIZE,
|
||||||
|
SHARED_BANK_SIZE,
|
||||||
|
TRADE_SIZE,
|
||||||
|
WORLD_SIZE,
|
||||||
|
LIMBO_SIZE,
|
||||||
|
TRIBUTE_SIZE,
|
||||||
|
TROPHY_TRIBUTE_SIZE,
|
||||||
|
GUILD_TRIBUTE_SIZE,
|
||||||
|
MERCHANT_SIZE,
|
||||||
|
DELETED_SIZE,
|
||||||
|
CORPSE_SIZE,
|
||||||
|
BAZAAR_SIZE,
|
||||||
|
INSPECT_SIZE,
|
||||||
|
REAL_ESTATE_SIZE,
|
||||||
|
VIEW_MOD_PC_SIZE,
|
||||||
|
VIEW_MOD_BANK_SIZE,
|
||||||
|
VIEW_MOD_SHARED_BANK_SIZE,
|
||||||
|
VIEW_MOD_LIMBO_SIZE,
|
||||||
|
ALT_STORAGE_SIZE,
|
||||||
|
ARCHIVED_SIZE,
|
||||||
|
MAIL_SIZE,
|
||||||
|
GUILD_TROPHY_TRIBUTE_SIZE,
|
||||||
|
KRONO_SIZE,
|
||||||
|
OTHER_SIZE,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (inv_type < TYPE_BEGIN || inv_type > TYPE_END)
|
||||||
|
return INULL;
|
||||||
|
|
||||||
|
return local_array[inv_type];
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* EQEmu::bug::CategoryIDToCategoryName(CategoryID category_id) {
|
||||||
|
switch (category_id) {
|
||||||
|
case catVideo:
|
||||||
|
return "Video";
|
||||||
|
case catAudio:
|
||||||
|
return "Audio";
|
||||||
|
case catPathing:
|
||||||
|
return "Pathing";
|
||||||
|
case catQuest:
|
||||||
|
return "Quest";
|
||||||
|
case catTradeskills:
|
||||||
|
return "Tradeskills";
|
||||||
|
case catSpellStacking:
|
||||||
|
return "Spell stacking";
|
||||||
|
case catDoorsPortals:
|
||||||
|
return "Doors/Portals";
|
||||||
|
case catItems:
|
||||||
|
return "Items";
|
||||||
|
case catNPC:
|
||||||
|
return "NPC";
|
||||||
|
case catDialogs:
|
||||||
|
return "Dialogs";
|
||||||
|
case catLoNTCG:
|
||||||
|
return "LoN - TCG";
|
||||||
|
case catMercenaries:
|
||||||
|
return "Mercenaries";
|
||||||
|
case catOther:
|
||||||
|
default:
|
||||||
|
return "Other";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EQEmu::bug::CategoryID EQEmu::bug::CategoryNameToCategoryID(const char* category_name) {
|
||||||
|
if (!category_name)
|
||||||
|
return catOther;
|
||||||
|
|
||||||
|
if (!strcmp(category_name, "Video"))
|
||||||
|
return catVideo;
|
||||||
|
if (!strcmp(category_name, "Audio"))
|
||||||
|
return catAudio;
|
||||||
|
if (!strcmp(category_name, "Pathing"))
|
||||||
|
return catPathing;
|
||||||
|
if (!strcmp(category_name, "Quest"))
|
||||||
|
return catQuest;
|
||||||
|
if (!strcmp(category_name, "Tradeskills"))
|
||||||
|
return catTradeskills;
|
||||||
|
if (!strcmp(category_name, "Spell stacking"))
|
||||||
|
return catSpellStacking;
|
||||||
|
if (!strcmp(category_name, "Doors/Portals"))
|
||||||
|
return catDoorsPortals;
|
||||||
|
if (!strcmp(category_name, "Items"))
|
||||||
|
return catItems;
|
||||||
|
if (!strcmp(category_name, "NPC"))
|
||||||
|
return catNPC;
|
||||||
|
if (!strcmp(category_name, "Dialogs"))
|
||||||
|
return catDialogs;
|
||||||
|
if (!strcmp(category_name, "LoN - TCG"))
|
||||||
|
return catLoNTCG;
|
||||||
|
if (!strcmp(category_name, "Mercenaries"))
|
||||||
|
return catMercenaries;
|
||||||
|
|
||||||
|
return catOther;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *EQEmu::constants::GetStanceName(StanceType stance_type) {
|
||||||
|
switch (stance_type) {
|
||||||
|
case stanceUnknown:
|
||||||
|
return "Unknown";
|
||||||
|
case stancePassive:
|
||||||
|
return "Passive";
|
||||||
|
case stanceBalanced:
|
||||||
|
return "Balanced";
|
||||||
|
case stanceEfficient:
|
||||||
|
return "Efficient";
|
||||||
|
case stanceReactive:
|
||||||
|
return "Reactive";
|
||||||
|
case stanceAggressive:
|
||||||
|
return "Aggressive";
|
||||||
|
case stanceAssist:
|
||||||
|
return "Assist";
|
||||||
|
case stanceBurn:
|
||||||
|
return "Burn";
|
||||||
|
case stanceEfficient2:
|
||||||
|
return "Efficient2";
|
||||||
|
case stanceBurnAE:
|
||||||
|
return "BurnAE";
|
||||||
|
default:
|
||||||
|
return "Invalid";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|||||||
@ -21,130 +21,296 @@
|
|||||||
#define COMMON_EMU_CONSTANTS_H
|
#define COMMON_EMU_CONSTANTS_H
|
||||||
|
|
||||||
#include "eq_limits.h"
|
#include "eq_limits.h"
|
||||||
#include "emu_legacy.h"
|
|
||||||
#include "emu_versions.h"
|
#include "emu_versions.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
// local definitions are the result of using hybrid-client or server-only values and methods
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
|
using RoF2::IINVALID;
|
||||||
|
using RoF2::INULL;
|
||||||
|
|
||||||
namespace inventory {
|
namespace inventory {
|
||||||
//using namespace RoF2::invtype;
|
|
||||||
//using namespace RoF2::invslot;
|
|
||||||
//using namespace RoF2::invbag;
|
|
||||||
//using namespace RoF2::invaug;
|
|
||||||
|
|
||||||
enum : int16 { typeInvalid = -1, slotInvalid = -1, containerInvalid = -1, socketInvalid = -1 }; // temporary
|
|
||||||
enum : int16 { typeBegin = 0, slotBegin = 0, containerBegin = 0, socketBegin = 0 }; // temporary
|
|
||||||
|
|
||||||
enum PossessionsSlots : int16 { // temporary
|
|
||||||
slotCharm = 0,
|
|
||||||
slotEar1,
|
|
||||||
slotHead,
|
|
||||||
slotFace,
|
|
||||||
slotEar2,
|
|
||||||
slotNeck, // 5
|
|
||||||
slotShoulders,
|
|
||||||
slotArms,
|
|
||||||
slotBack,
|
|
||||||
slotWrist1,
|
|
||||||
slotWrist2, // 10
|
|
||||||
slotRange,
|
|
||||||
slotHands,
|
|
||||||
slotPrimary,
|
|
||||||
slotSecondary,
|
|
||||||
slotFinger1, // 15
|
|
||||||
slotFinger2,
|
|
||||||
slotChest,
|
|
||||||
slotLegs,
|
|
||||||
slotFeet,
|
|
||||||
slotWaist, // 20
|
|
||||||
slotPowerSource = 9999,
|
|
||||||
slotAmmo = 21,
|
|
||||||
slotGeneral1,
|
|
||||||
slotGeneral2,
|
|
||||||
slotGeneral3,
|
|
||||||
slotGeneral4, // 25
|
|
||||||
slotGeneral5,
|
|
||||||
slotGeneral6,
|
|
||||||
slotGeneral7,
|
|
||||||
slotGeneral8,
|
|
||||||
slotCursor, // 30
|
|
||||||
slotCount
|
|
||||||
};
|
|
||||||
|
|
||||||
enum InventoryTypes : int16 { // temporary
|
|
||||||
typePossessions = 0,
|
|
||||||
typeBank,
|
|
||||||
typeSharedBank,
|
|
||||||
typeTrade,
|
|
||||||
typeWorld,
|
|
||||||
typeLimbo, // 5
|
|
||||||
typeTribute,
|
|
||||||
typeTrophyTribute,
|
|
||||||
typeGuildTribute,
|
|
||||||
typeMerchant,
|
|
||||||
typeDeleted, // 10
|
|
||||||
typeCorpse,
|
|
||||||
typeBazaar,
|
|
||||||
typeInspect,
|
|
||||||
typeRealEstate,
|
|
||||||
typeViewMODPC, // 15
|
|
||||||
typeViewMODBank,
|
|
||||||
typeViewMODSharedBank,
|
|
||||||
typeViewMODLimbo,
|
|
||||||
typeAltStorage,
|
|
||||||
typeArchived, // 20
|
|
||||||
typeMail,
|
|
||||||
typeGuildTrophyTribute,
|
|
||||||
typeKrono,
|
|
||||||
typeOther,
|
|
||||||
typeCount
|
|
||||||
};
|
|
||||||
|
|
||||||
static int16 SlotCount(int16 type_index) { return 0; } // temporary
|
|
||||||
|
|
||||||
const int16 ContainerCount = 10; // temporary
|
|
||||||
const int16 SocketCount = 6; // temporary
|
|
||||||
|
|
||||||
} /*inventory*/
|
} /*inventory*/
|
||||||
|
|
||||||
|
namespace invtype {
|
||||||
|
using namespace RoF2::invtype::enum_;
|
||||||
|
|
||||||
|
using RoF2::invtype::POSSESSIONS_SIZE;
|
||||||
|
using RoF2::invtype::BANK_SIZE;
|
||||||
|
using RoF2::invtype::SHARED_BANK_SIZE;
|
||||||
|
using RoF2::invtype::TRADE_SIZE;
|
||||||
|
using RoF2::invtype::WORLD_SIZE;
|
||||||
|
using RoF2::invtype::LIMBO_SIZE;
|
||||||
|
using RoF2::invtype::TRIBUTE_SIZE;
|
||||||
|
using RoF2::invtype::TROPHY_TRIBUTE_SIZE;
|
||||||
|
using RoF2::invtype::GUILD_TRIBUTE_SIZE;
|
||||||
|
using RoF2::invtype::MERCHANT_SIZE;
|
||||||
|
using RoF2::invtype::DELETED_SIZE;
|
||||||
|
using RoF2::invtype::CORPSE_SIZE;
|
||||||
|
using RoF2::invtype::BAZAAR_SIZE;
|
||||||
|
using RoF2::invtype::INSPECT_SIZE;
|
||||||
|
using RoF2::invtype::REAL_ESTATE_SIZE;
|
||||||
|
using RoF2::invtype::VIEW_MOD_PC_SIZE;
|
||||||
|
using RoF2::invtype::VIEW_MOD_BANK_SIZE;
|
||||||
|
using RoF2::invtype::VIEW_MOD_SHARED_BANK_SIZE;
|
||||||
|
using RoF2::invtype::VIEW_MOD_LIMBO_SIZE;
|
||||||
|
using RoF2::invtype::ALT_STORAGE_SIZE;
|
||||||
|
using RoF2::invtype::ARCHIVED_SIZE;
|
||||||
|
using RoF2::invtype::MAIL_SIZE;
|
||||||
|
using RoF2::invtype::GUILD_TROPHY_TRIBUTE_SIZE;
|
||||||
|
using RoF2::invtype::KRONO_SIZE;
|
||||||
|
using RoF2::invtype::OTHER_SIZE;
|
||||||
|
|
||||||
|
using Titanium::invtype::TRADE_NPC_SIZE;
|
||||||
|
|
||||||
|
using RoF2::invtype::TYPE_INVALID;
|
||||||
|
using RoF2::invtype::TYPE_BEGIN;
|
||||||
|
using RoF2::invtype::TYPE_END;
|
||||||
|
using RoF2::invtype::TYPE_COUNT;
|
||||||
|
|
||||||
|
int16 GetInvTypeSize(int16 inv_type);
|
||||||
|
using RoF2::invtype::GetInvTypeName;
|
||||||
|
|
||||||
|
} // namespace invtype
|
||||||
|
|
||||||
|
namespace popupresponse {
|
||||||
|
const int32 SERVER_INTERNAL_USE_BASE = 2000000000;
|
||||||
|
const int32 MOB_INFO_DISMISS = 2000000001;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace invslot {
|
||||||
|
using namespace RoF2::invslot::enum_;
|
||||||
|
|
||||||
|
using RoF2::invslot::SLOT_INVALID;
|
||||||
|
using RoF2::invslot::SLOT_BEGIN;
|
||||||
|
|
||||||
|
using Titanium::invslot::SLOT_TRADESKILL_EXPERIMENT_COMBINE;
|
||||||
|
|
||||||
|
const int16 SLOT_AUGMENT_GENERIC_RETURN = 1001; // clients don't appear to use this method... (internal inventory return value)
|
||||||
|
|
||||||
|
using RoF2::invslot::POSSESSIONS_BEGIN;
|
||||||
|
using RoF2::invslot::POSSESSIONS_END;
|
||||||
|
using RoF2::invslot::POSSESSIONS_COUNT;
|
||||||
|
|
||||||
|
using RoF2::invslot::EQUIPMENT_BEGIN;
|
||||||
|
using RoF2::invslot::EQUIPMENT_END;
|
||||||
|
using RoF2::invslot::EQUIPMENT_COUNT;
|
||||||
|
|
||||||
|
using RoF2::invslot::GENERAL_BEGIN;
|
||||||
|
using RoF2::invslot::GENERAL_END;
|
||||||
|
using RoF2::invslot::GENERAL_COUNT;
|
||||||
|
|
||||||
|
using RoF2::invslot::BONUS_BEGIN;
|
||||||
|
using RoF2::invslot::BONUS_STAT_END;
|
||||||
|
using RoF2::invslot::BONUS_SKILL_END;
|
||||||
|
|
||||||
|
using Titanium::invslot::BANK_BEGIN;
|
||||||
|
using SoF::invslot::BANK_END;
|
||||||
|
|
||||||
|
using Titanium::invslot::SHARED_BANK_BEGIN;
|
||||||
|
using Titanium::invslot::SHARED_BANK_END;
|
||||||
|
|
||||||
|
using Titanium::invslot::TRADE_BEGIN;
|
||||||
|
using Titanium::invslot::TRADE_END;
|
||||||
|
|
||||||
|
using Titanium::invslot::TRADE_NPC_END;
|
||||||
|
|
||||||
|
using Titanium::invslot::WORLD_BEGIN;
|
||||||
|
using Titanium::invslot::WORLD_END;
|
||||||
|
|
||||||
|
using Titanium::invslot::TRIBUTE_BEGIN;
|
||||||
|
using Titanium::invslot::TRIBUTE_END;
|
||||||
|
|
||||||
|
using Titanium::invslot::GUILD_TRIBUTE_BEGIN;
|
||||||
|
using Titanium::invslot::GUILD_TRIBUTE_END;
|
||||||
|
|
||||||
|
const int16 CORPSE_BEGIN = invslot::slotGeneral1;
|
||||||
|
const int16 CORPSE_END = CORPSE_BEGIN + invslot::slotCursor;
|
||||||
|
|
||||||
|
using RoF2::invslot::EQUIPMENT_BITMASK;
|
||||||
|
using RoF2::invslot::GENERAL_BITMASK;
|
||||||
|
using RoF2::invslot::CURSOR_BITMASK;
|
||||||
|
using RoF2::invslot::POSSESSIONS_BITMASK;
|
||||||
|
using RoF2::invslot::CORPSE_BITMASK;
|
||||||
|
|
||||||
|
using RoF2::invslot::GetInvPossessionsSlotName;
|
||||||
|
using RoF2::invslot::GetInvSlotName;
|
||||||
|
|
||||||
|
} // namespace invslot
|
||||||
|
|
||||||
|
namespace invbag {
|
||||||
|
using Titanium::invbag::SLOT_INVALID;
|
||||||
|
using Titanium::invbag::SLOT_BEGIN;
|
||||||
|
using Titanium::invbag::SLOT_END;
|
||||||
|
using Titanium::invbag::SLOT_COUNT;
|
||||||
|
|
||||||
|
using Titanium::invbag::GENERAL_BAGS_BEGIN;
|
||||||
|
const int16 GENERAL_BAGS_COUNT = invslot::GENERAL_COUNT * SLOT_COUNT;
|
||||||
|
const int16 GENERAL_BAGS_END = (GENERAL_BAGS_BEGIN + GENERAL_BAGS_COUNT) - 1;
|
||||||
|
|
||||||
|
const int16 GENERAL_BAGS_8_COUNT = 8 * SLOT_COUNT;
|
||||||
|
const int16 GENERAL_BAGS_8_END = (GENERAL_BAGS_BEGIN + GENERAL_BAGS_8_COUNT) - 1;
|
||||||
|
|
||||||
|
const int16 CURSOR_BAG_BEGIN = 351;
|
||||||
|
const int16 CURSOR_BAG_COUNT = SLOT_COUNT;
|
||||||
|
const int16 CURSOR_BAG_END = (CURSOR_BAG_BEGIN + CURSOR_BAG_COUNT) - 1;
|
||||||
|
|
||||||
|
using Titanium::invbag::BANK_BAGS_BEGIN;
|
||||||
|
const int16 BANK_BAGS_COUNT = (invtype::BANK_SIZE * SLOT_COUNT);
|
||||||
|
const int16 BANK_BAGS_END = (BANK_BAGS_BEGIN + BANK_BAGS_COUNT) - 1;
|
||||||
|
|
||||||
|
const int16 BANK_BAGS_16_COUNT = 16 * SLOT_COUNT;
|
||||||
|
const int16 BANK_BAGS_16_END = (BANK_BAGS_BEGIN + BANK_BAGS_16_COUNT) - 1;
|
||||||
|
|
||||||
|
using Titanium::invbag::SHARED_BANK_BAGS_BEGIN;
|
||||||
|
const int16 SHARED_BANK_BAGS_COUNT = invtype::SHARED_BANK_SIZE * SLOT_COUNT;
|
||||||
|
const int16 SHARED_BANK_BAGS_END = (SHARED_BANK_BAGS_BEGIN + SHARED_BANK_BAGS_COUNT) - 1;
|
||||||
|
|
||||||
|
using Titanium::invbag::TRADE_BAGS_BEGIN;
|
||||||
|
const int16 TRADE_BAGS_COUNT = invtype::TRADE_SIZE * SLOT_COUNT;
|
||||||
|
const int16 TRADE_BAGS_END = (TRADE_BAGS_BEGIN + TRADE_BAGS_COUNT) - 1;
|
||||||
|
|
||||||
|
using Titanium::invbag::GetInvBagIndexName;
|
||||||
|
|
||||||
|
} // namespace invbag
|
||||||
|
|
||||||
|
namespace invaug {
|
||||||
|
using RoF2::invaug::SOCKET_INVALID;
|
||||||
|
using RoF2::invaug::SOCKET_BEGIN;
|
||||||
|
using RoF2::invaug::SOCKET_END;
|
||||||
|
using RoF2::invaug::SOCKET_COUNT;
|
||||||
|
|
||||||
|
using RoF2::invaug::GetInvAugIndexName;
|
||||||
|
|
||||||
|
} // namespace invaug
|
||||||
|
|
||||||
namespace constants {
|
namespace constants {
|
||||||
const EQEmu::versions::ClientVersion CharacterCreationClient = EQEmu::versions::ClientVersion::RoF2;
|
const EQEmu::versions::ClientVersion CHARACTER_CREATION_CLIENT = EQEmu::versions::ClientVersion::Titanium;
|
||||||
const size_t CharacterCreationMax = RoF2::constants::CharacterCreationLimit;
|
|
||||||
|
|
||||||
const size_t SayLinkBodySize = RoF2::constants::SayLinkBodySize;
|
using RoF2::constants::EXPANSION;
|
||||||
|
using RoF2::constants::EXPANSION_BIT;
|
||||||
|
using RoF2::constants::EXPANSIONS_MASK;
|
||||||
|
|
||||||
const int LongBuffs = RoF2::constants::LongBuffs;
|
using RoF2::constants::CHARACTER_CREATION_LIMIT;
|
||||||
const int ShortBuffs = RoF2::constants::ShortBuffs;
|
|
||||||
const int DiscBuffs = RoF2::constants::DiscBuffs;
|
const size_t SAY_LINK_OPENER_SIZE = 1;
|
||||||
const int TotalBuffs = RoF2::constants::TotalBuffs;
|
using RoF2::constants::SAY_LINK_BODY_SIZE;
|
||||||
const int NPCBuffs = RoF2::constants::NPCBuffs;
|
const size_t SAY_LINK_TEXT_SIZE = 256; // this may be varied until it breaks something (tested:374) - the others are constant
|
||||||
const int PetBuffs = RoF2::constants::PetBuffs;
|
const size_t SAY_LINK_CLOSER_SIZE = 1;
|
||||||
const int MercBuffs = RoF2::constants::MercBuffs;
|
const size_t SAY_LINK_MAXIMUM_SIZE = (SAY_LINK_OPENER_SIZE + SAY_LINK_BODY_SIZE + SAY_LINK_TEXT_SIZE + SAY_LINK_CLOSER_SIZE);
|
||||||
|
|
||||||
|
enum StanceType : int {
|
||||||
|
stanceUnknown = 0,
|
||||||
|
stancePassive,
|
||||||
|
stanceBalanced,
|
||||||
|
stanceEfficient,
|
||||||
|
stanceReactive,
|
||||||
|
stanceAggressive,
|
||||||
|
stanceAssist,
|
||||||
|
stanceBurn,
|
||||||
|
stanceEfficient2,
|
||||||
|
stanceBurnAE
|
||||||
|
};
|
||||||
|
|
||||||
|
const char *GetStanceName(StanceType stance_type);
|
||||||
|
int ConvertStanceTypeToIndex(StanceType stance_type);
|
||||||
|
|
||||||
|
const int STANCE_TYPE_FIRST = stancePassive;
|
||||||
|
const int STANCE_TYPE_LAST = stanceBurnAE;
|
||||||
|
const int STANCE_TYPE_COUNT = stanceBurnAE;
|
||||||
|
|
||||||
} /*constants*/
|
} /*constants*/
|
||||||
|
|
||||||
enum class CastingSlot : uint32 {
|
namespace profile {
|
||||||
Gem1 = 0,
|
using RoF2::profile::BANDOLIERS_SIZE;
|
||||||
Gem2 = 1,
|
using RoF2::profile::BANDOLIER_ITEM_COUNT;
|
||||||
Gem3 = 2,
|
|
||||||
Gem4 = 3,
|
using RoF2::profile::POTION_BELT_SIZE;
|
||||||
Gem5 = 4,
|
|
||||||
Gem6 = 5,
|
using RoF2::profile::SKILL_ARRAY_SIZE;
|
||||||
Gem7 = 6,
|
|
||||||
Gem8 = 7,
|
} // namespace profile
|
||||||
Gem9 = 8,
|
|
||||||
Gem10 = 9,
|
namespace behavior {
|
||||||
Gem11 = 10,
|
using RoF2::behavior::CoinHasWeight;
|
||||||
Gem12 = 11,
|
|
||||||
MaxGems = 12,
|
} // namespace behavior
|
||||||
Ability = 20, // HT/LoH for Tit
|
|
||||||
PotionBelt = 21, // Tit uses a different slot for PB
|
namespace spells {
|
||||||
Item = 22,
|
enum class CastingSlot : uint32 { // hybrid declaration
|
||||||
Discipline = 23,
|
Gem1 = 0,
|
||||||
AltAbility = 0xFF
|
Gem2 = 1,
|
||||||
|
Gem3 = 2,
|
||||||
|
Gem4 = 3,
|
||||||
|
Gem5 = 4,
|
||||||
|
Gem6 = 5,
|
||||||
|
Gem7 = 6,
|
||||||
|
Gem8 = 7,
|
||||||
|
Gem9 = 8,
|
||||||
|
Gem10 = 9,
|
||||||
|
Gem11 = 10,
|
||||||
|
Gem12 = 11,
|
||||||
|
MaxGems = 12,
|
||||||
|
Ability = 20, // HT/LoH for Tit
|
||||||
|
PotionBelt = 21, // Tit uses a different slot for PB
|
||||||
|
Item = 22,
|
||||||
|
Discipline = 23,
|
||||||
|
AltAbility = 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
using RoF2::spells::SPELL_ID_MAX;
|
||||||
|
using RoF2::spells::SPELLBOOK_SIZE;
|
||||||
|
using UF::spells::SPELL_GEM_COUNT; // RoF+ clients define more than UF client..but, they are not valid beyond UF
|
||||||
|
|
||||||
|
using RoF2::spells::LONG_BUFFS;
|
||||||
|
using RoF2::spells::SHORT_BUFFS;
|
||||||
|
using RoF2::spells::DISC_BUFFS;
|
||||||
|
using RoF2::spells::TOTAL_BUFFS;
|
||||||
|
using RoF2::spells::NPC_BUFFS;
|
||||||
|
using RoF2::spells::PET_BUFFS;
|
||||||
|
using RoF2::spells::MERC_BUFFS;
|
||||||
|
|
||||||
|
} // namespace spells
|
||||||
|
|
||||||
|
namespace bug {
|
||||||
|
enum CategoryID : uint32 {
|
||||||
|
catOther = 0,
|
||||||
|
catVideo,
|
||||||
|
catAudio,
|
||||||
|
catPathing,
|
||||||
|
catQuest,
|
||||||
|
catTradeskills,
|
||||||
|
catSpellStacking,
|
||||||
|
catDoorsPortals,
|
||||||
|
catItems,
|
||||||
|
catNPC,
|
||||||
|
catDialogs,
|
||||||
|
catLoNTCG,
|
||||||
|
catMercenaries
|
||||||
|
};
|
||||||
|
|
||||||
|
enum OptionalInfoFlag : uint32 {
|
||||||
|
infoNoOptionalInfo = 0x0,
|
||||||
|
infoCanDuplicate = 0x1,
|
||||||
|
infoCrashBug = 0x2,
|
||||||
|
infoTargetInfo = 0x4,
|
||||||
|
infoCharacterFlags = 0x8,
|
||||||
|
infoUnknownValue = 0xFFFFFFF0
|
||||||
|
};
|
||||||
|
|
||||||
|
const char* CategoryIDToCategoryName(CategoryID category_id);
|
||||||
|
CategoryID CategoryNameToCategoryID(const char* category_name);
|
||||||
|
|
||||||
|
} // namespace bug
|
||||||
|
|
||||||
|
enum WaypointStatus : int {
|
||||||
|
RoamBoxPauseInProgress = -3,
|
||||||
|
QuestControlNoGrid = -2,
|
||||||
|
QuestControlGrid = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
} /*EQEmu*/
|
} /*EQEmu*/
|
||||||
|
|||||||
@ -1,20 +0,0 @@
|
|||||||
/* EQEMu: Everquest Server Emulator
|
|
||||||
|
|
||||||
Copyright (C) 2001-2016 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 "emu_legacy.h"
|
|
||||||
@ -1,184 +0,0 @@
|
|||||||
/* EQEMu: Everquest Server Emulator
|
|
||||||
|
|
||||||
Copyright (C) 2001-2016 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 COMMON_EMU_LEGACY_H
|
|
||||||
#define COMMON_EMU_LEGACY_H
|
|
||||||
|
|
||||||
#include "types.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
|
|
||||||
namespace EQEmu
|
|
||||||
{
|
|
||||||
// this is for perl and other legacy systems
|
|
||||||
namespace legacy {
|
|
||||||
enum InventorySlot {
|
|
||||||
SLOT_CHARM = 0,
|
|
||||||
SLOT_EAR01 = 1,
|
|
||||||
SLOT_HEAD = 2,
|
|
||||||
SLOT_FACE = 3,
|
|
||||||
SLOT_EAR02 = 4,
|
|
||||||
SLOT_NECK = 5,
|
|
||||||
SLOT_SHOULDER = 6,
|
|
||||||
SLOT_ARMS = 7,
|
|
||||||
SLOT_BACK = 8,
|
|
||||||
SLOT_BRACER01 = 9,
|
|
||||||
SLOT_BRACER02 = 10,
|
|
||||||
SLOT_RANGE = 11,
|
|
||||||
SLOT_HANDS = 12,
|
|
||||||
SLOT_PRIMARY = 13,
|
|
||||||
SLOT_SECONDARY = 14,
|
|
||||||
SLOT_RING01 = 15,
|
|
||||||
SLOT_RING02 = 16,
|
|
||||||
SLOT_CHEST = 17,
|
|
||||||
SLOT_LEGS = 18,
|
|
||||||
SLOT_FEET = 19,
|
|
||||||
SLOT_WAIST = 20,
|
|
||||||
SLOT_POWER_SOURCE = 9999,
|
|
||||||
SLOT_AMMO = 21,
|
|
||||||
SLOT_GENERAL_1 = 22,
|
|
||||||
SLOT_GENERAL_2 = 23,
|
|
||||||
SLOT_GENERAL_3 = 24,
|
|
||||||
SLOT_GENERAL_4 = 25,
|
|
||||||
SLOT_GENERAL_5 = 26,
|
|
||||||
SLOT_GENERAL_6 = 27,
|
|
||||||
SLOT_GENERAL_7 = 28,
|
|
||||||
SLOT_GENERAL_8 = 29,
|
|
||||||
SLOT_CURSOR = 30,
|
|
||||||
SLOT_CURSOR_END = (int16)0xFFFE, // I hope no one is using this...
|
|
||||||
SLOT_TRADESKILL = 1000,
|
|
||||||
SLOT_AUGMENT = 1001,
|
|
||||||
SLOT_INVALID = (int16)0xFFFF,
|
|
||||||
SLOT_POSSESSIONS_BEGIN = 0,
|
|
||||||
SLOT_POSSESSIONS_END = 30,
|
|
||||||
SLOT_EQUIPMENT_BEGIN = 0,
|
|
||||||
SLOT_EQUIPMENT_END = 21,
|
|
||||||
SLOT_PERSONAL_BEGIN = 22,
|
|
||||||
SLOT_PERSONAL_END = 29,
|
|
||||||
SLOT_PERSONAL_BAGS_BEGIN = 251,
|
|
||||||
SLOT_PERSONAL_BAGS_END = 330,
|
|
||||||
SLOT_CURSOR_BAG_BEGIN = 331,
|
|
||||||
SLOT_CURSOR_BAG_END = 340,
|
|
||||||
SLOT_TRIBUTE_BEGIN = 400,
|
|
||||||
SLOT_TRIBUTE_END = 404,
|
|
||||||
SLOT_GUILD_TRIBUTE_BEGIN = 450,
|
|
||||||
SLOT_GUILD_TRIBUTE_END = 451,
|
|
||||||
SLOT_BANK_BEGIN = 2000,
|
|
||||||
SLOT_BANK_END = 2023,
|
|
||||||
SLOT_BANK_BAGS_BEGIN = 2031,
|
|
||||||
SLOT_BANK_BAGS_END = 2270,
|
|
||||||
SLOT_SHARED_BANK_BEGIN = 2500,
|
|
||||||
SLOT_SHARED_BANK_END = 2501,
|
|
||||||
SLOT_SHARED_BANK_BAGS_BEGIN = 2531,
|
|
||||||
SLOT_SHARED_BANK_BAGS_END = 2550,
|
|
||||||
SLOT_TRADE_BEGIN = 3000,
|
|
||||||
SLOT_TRADE_END = 3007,
|
|
||||||
SLOT_TRADE_BAGS_BEGIN = 3031,
|
|
||||||
SLOT_TRADE_BAGS_END = 3110,
|
|
||||||
SLOT_WORLD_BEGIN = 4000,
|
|
||||||
SLOT_WORLD_END = 4009
|
|
||||||
};
|
|
||||||
|
|
||||||
// these are currently hard-coded for existing inventory system..do not use in place of special client version handlers until ready
|
|
||||||
static const uint16 TYPE_POSSESSIONS_SIZE = 31;
|
|
||||||
static const uint16 TYPE_BANK_SIZE = 24;
|
|
||||||
static const uint16 TYPE_SHARED_BANK_SIZE = 2;
|
|
||||||
static const uint16 TYPE_TRADE_SIZE = 8;
|
|
||||||
static const uint16 TYPE_WORLD_SIZE = 10;
|
|
||||||
static const uint16 TYPE_LIMBO_SIZE = 36;
|
|
||||||
static const uint16 TYPE_TRIBUTE_SIZE = 5; // (need client values)
|
|
||||||
static const uint16 TYPE_TROPHY_TRIBUTE_SIZE = 0;
|
|
||||||
static const uint16 TYPE_GUILD_TRIBUTE_SIZE = 0;
|
|
||||||
static const uint16 TYPE_MERCHANT_SIZE = 0;
|
|
||||||
static const uint16 TYPE_DELETED_SIZE = 0;
|
|
||||||
static const uint16 TYPE_CORPSE_SIZE = 31; // no bitmask use..limits to size of client corpse window (see EQLimits::InventoryMapSize(MapCorpse, <EQClientVersion))
|
|
||||||
static const uint16 TYPE_BAZAAR_SIZE = 80;
|
|
||||||
static const uint16 TYPE_INSPECT_SIZE = 22;
|
|
||||||
static const uint16 TYPE_REAL_ESTATE_SIZE = 0;
|
|
||||||
static const uint16 TYPE_VIEW_MOD_PC_SIZE = 0;
|
|
||||||
static const uint16 TYPE_VIEW_MOD_BANK_SIZE = 0;
|
|
||||||
static const uint16 TYPE_VIEW_MOD_SHARED_BANK_SIZE = 0;
|
|
||||||
static const uint16 TYPE_VIEW_MOD_LIMBO_SIZE = 0;
|
|
||||||
static const uint16 TYPE_ALT_STORAGE_SIZE = 0;
|
|
||||||
static const uint16 TYPE_ARCHIVED_SIZE = 0;
|
|
||||||
static const uint16 TYPE_MAIL_SIZE = 0;
|
|
||||||
static const uint16 TYPE_GUILD_TROPHY_TRIBUTE_SIZE = 0;
|
|
||||||
static const uint16 TYPE_KRONO_SIZE = 0;
|
|
||||||
static const uint16 TYPE_OTHER_SIZE = 0;
|
|
||||||
|
|
||||||
// most of these definitions will go away with the structure-based system..this maintains compatibility for now
|
|
||||||
// (these are mainly to assign specific values to constants used in conversions and to identify per-client ranges/offsets)
|
|
||||||
static const int16 EQUIPMENT_BEGIN = 0;
|
|
||||||
static const int16 EQUIPMENT_END = 21;
|
|
||||||
static const uint16 EQUIPMENT_SIZE = 22; // does not account for 'Power Source' - used mainly for npc equipment arrays
|
|
||||||
|
|
||||||
static const int16 GENERAL_BEGIN = 22;
|
|
||||||
static const int16 GENERAL_END = 29;
|
|
||||||
static const uint16 GENERAL_SIZE = 8;
|
|
||||||
static const int16 GENERAL_BAGS_BEGIN = 251;
|
|
||||||
static const int16 GENERAL_BAGS_END_OFFSET = 79;
|
|
||||||
static const int16 GENERAL_BAGS_END = GENERAL_BAGS_BEGIN + GENERAL_BAGS_END_OFFSET;
|
|
||||||
|
|
||||||
static const int16 CURSOR_BAG_BEGIN = 331;
|
|
||||||
static const int16 CURSOR_BAG_END_OFFSET = 9;
|
|
||||||
static const int16 CURSOR_BAG_END = CURSOR_BAG_BEGIN + CURSOR_BAG_END_OFFSET;
|
|
||||||
|
|
||||||
static const int16 BANK_BEGIN = 2000;
|
|
||||||
static const int16 BANK_END = 2023;
|
|
||||||
static const int16 BANK_BAGS_BEGIN = 2031;
|
|
||||||
static const int16 BANK_BAGS_END_OFFSET = 239;
|
|
||||||
static const int16 BANK_BAGS_END = BANK_BAGS_BEGIN + BANK_BAGS_END_OFFSET;
|
|
||||||
|
|
||||||
static const int16 SHARED_BANK_BEGIN = 2500;
|
|
||||||
static const int16 SHARED_BANK_END = 2501;
|
|
||||||
static const int16 SHARED_BANK_BAGS_BEGIN = 2531;
|
|
||||||
static const int16 SHARED_BANK_BAGS_END_OFFSET = 19;
|
|
||||||
static const int16 SHARED_BANK_BAGS_END = SHARED_BANK_BAGS_BEGIN + SHARED_BANK_BAGS_END_OFFSET;
|
|
||||||
|
|
||||||
static const int16 TRADE_BEGIN = 3000;
|
|
||||||
static const int16 TRADE_END = 3007;
|
|
||||||
static const int16 TRADE_NPC_END = 3003;
|
|
||||||
static const int16 TRADE_BAGS_BEGIN = 3031;
|
|
||||||
static const int16 TRADE_BAGS_END_OFFSET = 79;
|
|
||||||
static const int16 TRADE_BAGS_END = TRADE_BAGS_BEGIN + TRADE_BAGS_END_OFFSET;
|
|
||||||
|
|
||||||
static const int16 WORLD_BEGIN = 4000;
|
|
||||||
static const int16 WORLD_END = 4009;
|
|
||||||
static const int16 WORLD_SIZE = TYPE_WORLD_SIZE;
|
|
||||||
|
|
||||||
static const int16 TRIBUTE_BEGIN = 400;
|
|
||||||
static const int16 TRIBUTE_END = 404;
|
|
||||||
static const int16 TRIBUTE_SIZE = TYPE_TRIBUTE_SIZE;
|
|
||||||
|
|
||||||
static const int16 CORPSE_BEGIN = 22;
|
|
||||||
|
|
||||||
// BANDOLIERS_SIZE sets maximum limit..active limit will need to be handled by the appropriate AA or spell (or item?)
|
|
||||||
static const size_t BANDOLIERS_SIZE = 20; // number of bandolier instances
|
|
||||||
static const size_t BANDOLIER_ITEM_COUNT = 4; // number of equipment slots in bandolier instance
|
|
||||||
|
|
||||||
// POTION_BELT_SIZE sets maximum limit..active limit will need to be handled by the appropriate AA or spell (or item?)
|
|
||||||
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
|
||||||
|
|
||||||
static const size_t TEXT_LINK_BODY_LENGTH = 56;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* COMMON_EMU_LEGACY_H */
|
|
||||||
@ -28,74 +28,98 @@
|
|||||||
namespace EntityLimits
|
namespace EntityLimits
|
||||||
{
|
{
|
||||||
namespace NPC {
|
namespace NPC {
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace invtype {
|
||||||
|
const int16 TRADE_SIZE = 4;
|
||||||
|
|
||||||
const size_t InvTypeTradeSize = 4;
|
} // namespace invtype
|
||||||
|
|
||||||
} /*NPC*/
|
} /*NPC*/
|
||||||
|
|
||||||
namespace NPCMerchant {
|
namespace NPCMerchant {
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace invtype {
|
||||||
|
const int16 TRADE_SIZE = 4;
|
||||||
|
|
||||||
const size_t InvTypeTradeSize = 4;
|
} // namespace invtype
|
||||||
|
|
||||||
} /*NPCMerchant*/
|
} /*NPCMerchant*/
|
||||||
|
|
||||||
namespace Merc {
|
namespace Merc {
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace invtype {
|
||||||
|
const int16 TRADE_SIZE = 4;
|
||||||
|
|
||||||
const size_t InvTypeTradeSize = 4;
|
} // namespace invtype
|
||||||
|
|
||||||
} /*Merc*/
|
} /*Merc*/
|
||||||
|
|
||||||
namespace Bot {
|
namespace Bot {
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace invtype {
|
||||||
|
const int16 TRADE_SIZE = 8;
|
||||||
|
|
||||||
const size_t InvTypeTradeSize = 8;
|
} // namespace invtype
|
||||||
|
|
||||||
|
namespace invslot {
|
||||||
|
const uint64 EQUIPMENT_BITMASK = 0x00000000007FFFFF;
|
||||||
|
const uint64 GENERAL_BITMASK = 0x0000000000000000;
|
||||||
|
const uint64 CURSOR_BITMASK = 0x0000000000000000;
|
||||||
|
const uint64 POSSESSIONS_BITMASK = (EQUIPMENT_BITMASK | GENERAL_BITMASK | CURSOR_BITMASK); // based on 34-slot count (RoF+)
|
||||||
|
|
||||||
|
} // namespace invslot
|
||||||
|
|
||||||
} /*Bot*/
|
} /*Bot*/
|
||||||
|
|
||||||
namespace ClientPet {
|
namespace ClientPet {
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace invtype {
|
||||||
|
const int16 TRADE_SIZE = 4;
|
||||||
|
|
||||||
const size_t InvTypeTradeSize = 4;
|
} // namespace invtype
|
||||||
|
|
||||||
} /*Pet*/
|
} /*Pet*/
|
||||||
|
|
||||||
namespace NPCPet {
|
namespace NPCPet {
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace invtype {
|
||||||
|
const int16 TRADE_SIZE = 4;
|
||||||
|
|
||||||
const size_t InvTypeTradeSize = 4;
|
} // namespace invtype
|
||||||
|
|
||||||
} /*Pet*/
|
} /*Pet*/
|
||||||
|
|
||||||
namespace MercPet {
|
namespace MercPet {
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace invtype {
|
||||||
|
const int16 TRADE_SIZE = 4;
|
||||||
|
|
||||||
const size_t InvTypeTradeSize = 4;
|
} // namespace invtype
|
||||||
|
|
||||||
} /*Pet*/
|
} /*Pet*/
|
||||||
|
|
||||||
namespace BotPet {
|
namespace BotPet {
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace invtype {
|
||||||
|
const int16 TRADE_SIZE = 4;
|
||||||
|
|
||||||
const size_t InvTypeTradeSize = 4;
|
} // namespace invtype
|
||||||
|
|
||||||
} /*Pet*/
|
} /*Pet*/
|
||||||
|
|
||||||
|
|||||||
@ -393,6 +393,7 @@ N(OP_PVPLeaderBoardReply),
|
|||||||
N(OP_PVPLeaderBoardRequest),
|
N(OP_PVPLeaderBoardRequest),
|
||||||
N(OP_PVPStats),
|
N(OP_PVPStats),
|
||||||
N(OP_QueryResponseThing),
|
N(OP_QueryResponseThing),
|
||||||
|
N(OP_QueryUCSServerStatus),
|
||||||
N(OP_RaidInvite),
|
N(OP_RaidInvite),
|
||||||
N(OP_RaidJoin),
|
N(OP_RaidJoin),
|
||||||
N(OP_RaidUpdate),
|
N(OP_RaidUpdate),
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "emu_versions.h"
|
#include "emu_versions.h"
|
||||||
|
#include "emu_constants.h"
|
||||||
|
|
||||||
|
|
||||||
bool EQEmu::versions::IsValidClientVersion(ClientVersion client_version)
|
bool EQEmu::versions::IsValidClientVersion(ClientVersion client_version)
|
||||||
@ -63,32 +64,26 @@ const char* EQEmu::versions::ClientVersionName(ClientVersion client_version)
|
|||||||
uint32 EQEmu::versions::ConvertClientVersionToClientVersionBit(ClientVersion client_version)
|
uint32 EQEmu::versions::ConvertClientVersionToClientVersionBit(ClientVersion client_version)
|
||||||
{
|
{
|
||||||
switch (client_version) {
|
switch (client_version) {
|
||||||
case ClientVersion::Unknown:
|
|
||||||
case ClientVersion::Client62:
|
|
||||||
return bit_Unknown;
|
|
||||||
case ClientVersion::Titanium:
|
case ClientVersion::Titanium:
|
||||||
return bit_Titanium;
|
return bitTitanium;
|
||||||
case ClientVersion::SoF:
|
case ClientVersion::SoF:
|
||||||
return bit_SoF;
|
return bitSoF;
|
||||||
case ClientVersion::SoD:
|
case ClientVersion::SoD:
|
||||||
return bit_SoD;
|
return bitSoD;
|
||||||
case ClientVersion::UF:
|
case ClientVersion::UF:
|
||||||
return bit_UF;
|
return bitUF;
|
||||||
case ClientVersion::RoF:
|
case ClientVersion::RoF:
|
||||||
return bit_RoF;
|
return bitRoF;
|
||||||
case ClientVersion::RoF2:
|
case ClientVersion::RoF2:
|
||||||
return bit_RoF2;
|
return bitRoF2;
|
||||||
default:
|
default:
|
||||||
return bit_Unknown;
|
return bitUnknown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EQEmu::versions::ClientVersion EQEmu::versions::ConvertClientVersionBitToClientVersion(uint32 client_version_bit)
|
EQEmu::versions::ClientVersion EQEmu::versions::ConvertClientVersionBitToClientVersion(uint32 client_version_bit)
|
||||||
{
|
{
|
||||||
switch (client_version_bit) {
|
switch (client_version_bit) {
|
||||||
case (uint32)static_cast<unsigned int>(ClientVersion::Unknown) :
|
|
||||||
case ((uint32)1 << (static_cast<unsigned int>(ClientVersion::Client62) - 1)) :
|
|
||||||
return ClientVersion::Unknown;
|
|
||||||
case ((uint32)1 << (static_cast<unsigned int>(ClientVersion::Titanium) - 1)) :
|
case ((uint32)1 << (static_cast<unsigned int>(ClientVersion::Titanium) - 1)) :
|
||||||
return ClientVersion::Titanium;
|
return ClientVersion::Titanium;
|
||||||
case ((uint32)1 << (static_cast<unsigned int>(ClientVersion::SoF) - 1)) :
|
case ((uint32)1 << (static_cast<unsigned int>(ClientVersion::SoF) - 1)) :
|
||||||
@ -106,27 +101,6 @@ EQEmu::versions::ClientVersion EQEmu::versions::ConvertClientVersionBitToClientV
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 EQEmu::versions::ConvertClientVersionToExpansion(ClientVersion client_version)
|
|
||||||
{
|
|
||||||
switch (client_version) {
|
|
||||||
case ClientVersion::Unknown:
|
|
||||||
case ClientVersion::Client62:
|
|
||||||
case ClientVersion::Titanium:
|
|
||||||
return 0x000007FFU;
|
|
||||||
case ClientVersion::SoF:
|
|
||||||
return 0x00007FFFU;
|
|
||||||
case ClientVersion::SoD:
|
|
||||||
return 0x0000FFFFU;
|
|
||||||
case ClientVersion::UF:
|
|
||||||
return 0x0001FFFFU;
|
|
||||||
case ClientVersion::RoF:
|
|
||||||
case ClientVersion::RoF2:
|
|
||||||
return 0x000FFFFFU;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool EQEmu::versions::IsValidMobVersion(MobVersion mob_version)
|
bool EQEmu::versions::IsValidMobVersion(MobVersion mob_version)
|
||||||
{
|
{
|
||||||
if (mob_version <= MobVersion::Unknown || mob_version > LastMobVersion)
|
if (mob_version <= MobVersion::Unknown || mob_version > LastMobVersion)
|
||||||
@ -368,3 +342,217 @@ EQEmu::versions::MobVersion EQEmu::versions::ConvertClientVersionToOfflinePCMobV
|
|||||||
return MobVersion::Unknown;
|
return MobVersion::Unknown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char* EQEmu::expansions::ExpansionName(Expansion expansion)
|
||||||
|
{
|
||||||
|
switch (expansion) {
|
||||||
|
case Expansion::EverQuest:
|
||||||
|
return "EverQuest";
|
||||||
|
case Expansion::RoK:
|
||||||
|
return "The Ruins of Kunark";
|
||||||
|
case Expansion::SoV:
|
||||||
|
return "The Scars of Velious";
|
||||||
|
case Expansion::SoL:
|
||||||
|
return "The Shadows of Luclin";
|
||||||
|
case Expansion::PoP:
|
||||||
|
return "The Planes of Power";
|
||||||
|
case Expansion::LoY:
|
||||||
|
return "The Legacy of Ykesha";
|
||||||
|
case Expansion::LDoN:
|
||||||
|
return "Lost Dungeons of Norrath";
|
||||||
|
case Expansion::GoD:
|
||||||
|
return "Gates of Discord";
|
||||||
|
case Expansion::OoW:
|
||||||
|
return "Omens of War";
|
||||||
|
case Expansion::DoN:
|
||||||
|
return "Dragons of Norrath";
|
||||||
|
case Expansion::DoD:
|
||||||
|
return "Depths of Darkhollow";
|
||||||
|
case Expansion::PoR:
|
||||||
|
return "Prophecy of Ro";
|
||||||
|
case Expansion::TSS:
|
||||||
|
return "The Serpent's Spine";
|
||||||
|
case Expansion::TBS:
|
||||||
|
return "The Buried Sea";
|
||||||
|
case Expansion::SoF:
|
||||||
|
return "Secrets of Faydwer";
|
||||||
|
case Expansion::SoD:
|
||||||
|
return "Seeds of Destruction";
|
||||||
|
case Expansion::UF:
|
||||||
|
return "Underfoot";
|
||||||
|
case Expansion::HoT:
|
||||||
|
return "House of Thule";
|
||||||
|
case Expansion::VoA:
|
||||||
|
return "Veil of Alaris";
|
||||||
|
case Expansion::RoF:
|
||||||
|
return "Rain of Fear";
|
||||||
|
case Expansion::CotF:
|
||||||
|
return "Call of the Forsaken";
|
||||||
|
default:
|
||||||
|
return "Invalid Expansion";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* EQEmu::expansions::ExpansionName(uint32 expansion_bit)
|
||||||
|
{
|
||||||
|
return ExpansionName(ConvertExpansionBitToExpansion(expansion_bit));
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 EQEmu::expansions::ConvertExpansionToExpansionBit(Expansion expansion)
|
||||||
|
{
|
||||||
|
switch (expansion) {
|
||||||
|
case Expansion::RoK:
|
||||||
|
return bitRoK;
|
||||||
|
case Expansion::SoV:
|
||||||
|
return bitSoV;
|
||||||
|
case Expansion::SoL:
|
||||||
|
return bitSoL;
|
||||||
|
case Expansion::PoP:
|
||||||
|
return bitPoP;
|
||||||
|
case Expansion::LoY:
|
||||||
|
return bitLoY;
|
||||||
|
case Expansion::LDoN:
|
||||||
|
return bitLDoN;
|
||||||
|
case Expansion::GoD:
|
||||||
|
return bitGoD;
|
||||||
|
case Expansion::OoW:
|
||||||
|
return bitOoW;
|
||||||
|
case Expansion::DoN:
|
||||||
|
return bitDoN;
|
||||||
|
case Expansion::DoD:
|
||||||
|
return bitDoD;
|
||||||
|
case Expansion::PoR:
|
||||||
|
return bitPoR;
|
||||||
|
case Expansion::TSS:
|
||||||
|
return bitTSS;
|
||||||
|
case Expansion::TBS:
|
||||||
|
return bitTBS;
|
||||||
|
case Expansion::SoF:
|
||||||
|
return bitSoF;
|
||||||
|
case Expansion::SoD:
|
||||||
|
return bitSoD;
|
||||||
|
case Expansion::UF:
|
||||||
|
return bitUF;
|
||||||
|
case Expansion::HoT:
|
||||||
|
return bitHoT;
|
||||||
|
case Expansion::VoA:
|
||||||
|
return bitVoA;
|
||||||
|
case Expansion::RoF:
|
||||||
|
return bitRoF;
|
||||||
|
case Expansion::CotF:
|
||||||
|
return bitCotF;
|
||||||
|
default:
|
||||||
|
return bitEverQuest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EQEmu::expansions::Expansion EQEmu::expansions::ConvertExpansionBitToExpansion(uint32 expansion_bit)
|
||||||
|
{
|
||||||
|
switch (expansion_bit) {
|
||||||
|
case bitRoK:
|
||||||
|
return Expansion::RoK;
|
||||||
|
case bitSoV:
|
||||||
|
return Expansion::SoV;
|
||||||
|
case bitSoL:
|
||||||
|
return Expansion::SoL;
|
||||||
|
case bitPoP:
|
||||||
|
return Expansion::PoP;
|
||||||
|
case bitLoY:
|
||||||
|
return Expansion::LoY;
|
||||||
|
case bitLDoN:
|
||||||
|
return Expansion::LDoN;
|
||||||
|
case bitGoD:
|
||||||
|
return Expansion::GoD;
|
||||||
|
case bitOoW:
|
||||||
|
return Expansion::OoW;
|
||||||
|
case bitDoN:
|
||||||
|
return Expansion::DoN;
|
||||||
|
case bitDoD:
|
||||||
|
return Expansion::DoD;
|
||||||
|
case bitPoR:
|
||||||
|
return Expansion::PoR;
|
||||||
|
case bitTSS:
|
||||||
|
return Expansion::TSS;
|
||||||
|
case bitTBS:
|
||||||
|
return Expansion::TBS;
|
||||||
|
case bitSoF:
|
||||||
|
return Expansion::SoF;
|
||||||
|
case bitSoD:
|
||||||
|
return Expansion::SoD;
|
||||||
|
case bitUF:
|
||||||
|
return Expansion::UF;
|
||||||
|
case bitHoT:
|
||||||
|
return Expansion::HoT;
|
||||||
|
case bitVoA:
|
||||||
|
return Expansion::VoA;
|
||||||
|
case bitRoF:
|
||||||
|
return Expansion::RoF;
|
||||||
|
case bitCotF:
|
||||||
|
return Expansion::CotF;
|
||||||
|
default:
|
||||||
|
return Expansion::EverQuest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 EQEmu::expansions::ConvertExpansionToExpansionsMask(Expansion expansion)
|
||||||
|
{
|
||||||
|
switch (expansion) {
|
||||||
|
case Expansion::RoK:
|
||||||
|
return maskRoK;
|
||||||
|
case Expansion::SoV:
|
||||||
|
return maskSoV;
|
||||||
|
case Expansion::SoL:
|
||||||
|
return maskSoL;
|
||||||
|
case Expansion::PoP:
|
||||||
|
return maskPoP;
|
||||||
|
case Expansion::LoY:
|
||||||
|
return maskLoY;
|
||||||
|
case Expansion::LDoN:
|
||||||
|
return maskLDoN;
|
||||||
|
case Expansion::GoD:
|
||||||
|
return maskGoD;
|
||||||
|
case Expansion::OoW:
|
||||||
|
return maskOoW;
|
||||||
|
case Expansion::DoN:
|
||||||
|
return maskDoN;
|
||||||
|
case Expansion::DoD:
|
||||||
|
return maskDoD;
|
||||||
|
case Expansion::PoR:
|
||||||
|
return maskPoR;
|
||||||
|
case Expansion::TSS:
|
||||||
|
return maskTSS;
|
||||||
|
case Expansion::TBS:
|
||||||
|
return maskTBS;
|
||||||
|
case Expansion::SoF:
|
||||||
|
return maskSoF;
|
||||||
|
case Expansion::SoD:
|
||||||
|
return maskSoD;
|
||||||
|
case Expansion::UF:
|
||||||
|
return maskUF;
|
||||||
|
case Expansion::HoT:
|
||||||
|
return maskHoT;
|
||||||
|
case Expansion::VoA:
|
||||||
|
return maskVoA;
|
||||||
|
case Expansion::RoF:
|
||||||
|
return maskRoF;
|
||||||
|
case Expansion::CotF:
|
||||||
|
return maskCotF;
|
||||||
|
default:
|
||||||
|
return maskEverQuest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EQEmu::expansions::Expansion EQEmu::expansions::ConvertClientVersionToExpansion(versions::ClientVersion client_version)
|
||||||
|
{
|
||||||
|
return EQEmu::constants::StaticLookup(client_version)->Expansion;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 EQEmu::expansions::ConvertClientVersionToExpansionBit(versions::ClientVersion client_version)
|
||||||
|
{
|
||||||
|
return EQEmu::constants::StaticLookup(client_version)->ExpansionBit;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 EQEmu::expansions::ConvertClientVersionToExpansionsMask(versions::ClientVersion client_version)
|
||||||
|
{
|
||||||
|
return EQEmu::constants::StaticLookup(client_version)->ExpansionsMask;
|
||||||
|
}
|
||||||
|
|||||||
@ -28,7 +28,7 @@
|
|||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
namespace versions {
|
namespace versions {
|
||||||
enum class ClientVersion {
|
enum class ClientVersion : uint32 {
|
||||||
Unknown = 0,
|
Unknown = 0,
|
||||||
Client62, // Build: 'Aug 4 2005 15:40:59'
|
Client62, // Build: 'Aug 4 2005 15:40:59'
|
||||||
Titanium, // Build: 'Oct 31 2005 10:33:37'
|
Titanium, // Build: 'Oct 31 2005 10:33:37'
|
||||||
@ -39,26 +39,27 @@ namespace EQEmu
|
|||||||
RoF2 // Build: 'May 10 2013 23:30:08'
|
RoF2 // Build: 'May 10 2013 23:30:08'
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ClientVersionBit : uint32 {
|
enum ClientVersionBitmask : uint32 {
|
||||||
bit_Unknown = 0,
|
bitUnknown = 0x00000000,
|
||||||
bit_Client62 = 0x00000001, // unsupported (placeholder for scripts)
|
bitClient62 = 0x00000001, // unsupported (placeholder for scripts)
|
||||||
bit_Titanium = 0x00000002,
|
bitTitanium = 0x00000002,
|
||||||
bit_SoF = 0x00000004,
|
bitSoF = 0x00000004,
|
||||||
bit_SoD = 0x00000008,
|
bitSoD = 0x00000008,
|
||||||
bit_UF = 0x00000010,
|
bitUF = 0x00000010,
|
||||||
bit_RoF = 0x00000020,
|
bitRoF = 0x00000020,
|
||||||
bit_RoF2 = 0x00000040,
|
bitRoF2 = 0x00000040,
|
||||||
bit_TitaniumAndEarlier = 0x00000003,
|
maskUnknown = 0x00000000,
|
||||||
bit_SoFAndEarlier = 0x00000007,
|
maskTitaniumAndEarlier = 0x00000003,
|
||||||
bit_SoDAndEarlier = 0x0000000F,
|
maskSoFAndEarlier = 0x00000007,
|
||||||
bit_UFAndEarlier = 0x0000001F,
|
maskSoDAndEarlier = 0x0000000F,
|
||||||
bit_RoFAndEarlier = 0x0000003F,
|
maskUFAndEarlier = 0x0000001F,
|
||||||
bit_SoFAndLater = 0xFFFFFFFC,
|
maskRoFAndEarlier = 0x0000003F,
|
||||||
bit_SoDAndLater = 0xFFFFFFF8,
|
maskSoFAndLater = 0xFFFFFFFC,
|
||||||
bit_UFAndLater = 0xFFFFFFF0,
|
maskSoDAndLater = 0xFFFFFFF8,
|
||||||
bit_RoFAndLater = 0xFFFFFFE0,
|
maskUFAndLater = 0xFFFFFFF0,
|
||||||
bit_RoF2AndLater = 0xFFFFFFC0,
|
maskRoFAndLater = 0xFFFFFFE0,
|
||||||
bit_AllClients = 0xFFFFFFFF
|
maskRoF2AndLater = 0xFFFFFFC0,
|
||||||
|
maskAllClients = 0xFFFFFFFF
|
||||||
};
|
};
|
||||||
|
|
||||||
const ClientVersion LastClientVersion = ClientVersion::RoF2;
|
const ClientVersion LastClientVersion = ClientVersion::RoF2;
|
||||||
@ -69,10 +70,8 @@ namespace EQEmu
|
|||||||
const char* ClientVersionName(ClientVersion client_version);
|
const char* ClientVersionName(ClientVersion client_version);
|
||||||
uint32 ConvertClientVersionToClientVersionBit(ClientVersion client_version);
|
uint32 ConvertClientVersionToClientVersionBit(ClientVersion client_version);
|
||||||
ClientVersion ConvertClientVersionBitToClientVersion(uint32 client_version_bit);
|
ClientVersion ConvertClientVersionBitToClientVersion(uint32 client_version_bit);
|
||||||
uint32 ConvertClientVersionToExpansion(ClientVersion client_version);
|
|
||||||
|
enum class MobVersion : uint32 {
|
||||||
|
|
||||||
enum class MobVersion {
|
|
||||||
Unknown = 0,
|
Unknown = 0,
|
||||||
Client62,
|
Client62,
|
||||||
Titanium,
|
Titanium,
|
||||||
@ -121,8 +120,103 @@ namespace EQEmu
|
|||||||
ClientVersion ConvertOfflinePCMobVersionToClientVersion(MobVersion mob_version);
|
ClientVersion ConvertOfflinePCMobVersionToClientVersion(MobVersion mob_version);
|
||||||
MobVersion ConvertClientVersionToOfflinePCMobVersion(ClientVersion client_version);
|
MobVersion ConvertClientVersionToOfflinePCMobVersion(ClientVersion client_version);
|
||||||
|
|
||||||
|
|
||||||
|
enum UCSVersion : char {
|
||||||
|
ucsUnknown = '\0',
|
||||||
|
ucsClient62Chat = 'A',
|
||||||
|
ucsClient62Mail = 'a',
|
||||||
|
ucsTitaniumChat = 'B',
|
||||||
|
ucsTitaniumMail = 'b',
|
||||||
|
ucsSoFCombined = 'C',
|
||||||
|
ucsSoDCombined = 'D',
|
||||||
|
ucsUFCombined = 'E',
|
||||||
|
ucsRoFCombined = 'F',
|
||||||
|
ucsRoF2Combined = 'G'
|
||||||
|
};
|
||||||
|
|
||||||
} /*versions*/
|
} /*versions*/
|
||||||
|
|
||||||
|
namespace expansions {
|
||||||
|
enum class Expansion : uint32 {
|
||||||
|
EverQuest = 0,
|
||||||
|
RoK,
|
||||||
|
SoV,
|
||||||
|
SoL,
|
||||||
|
PoP,
|
||||||
|
LoY,
|
||||||
|
LDoN,
|
||||||
|
GoD,
|
||||||
|
OoW,
|
||||||
|
DoN,
|
||||||
|
DoD,
|
||||||
|
PoR,
|
||||||
|
TSS,
|
||||||
|
TBS,
|
||||||
|
SoF,
|
||||||
|
SoD,
|
||||||
|
UF,
|
||||||
|
HoT,
|
||||||
|
VoA,
|
||||||
|
RoF,
|
||||||
|
CotF
|
||||||
|
};
|
||||||
|
|
||||||
|
enum ExpansionBitmask : uint32 {
|
||||||
|
bitEverQuest = 0x00000000,
|
||||||
|
bitRoK = 0x00000001,
|
||||||
|
bitSoV = 0x00000002,
|
||||||
|
bitSoL = 0x00000004,
|
||||||
|
bitPoP = 0x00000008,
|
||||||
|
bitLoY = 0x00000010,
|
||||||
|
bitLDoN = 0x00000020,
|
||||||
|
bitGoD = 0x00000040,
|
||||||
|
bitOoW = 0x00000080,
|
||||||
|
bitDoN = 0x00000100,
|
||||||
|
bitDoD = 0x00000200,
|
||||||
|
bitPoR = 0x00000400,
|
||||||
|
bitTSS = 0x00000800,
|
||||||
|
bitTBS = 0x00001000,
|
||||||
|
bitSoF = 0x00002000,
|
||||||
|
bitSoD = 0x00004000,
|
||||||
|
bitUF = 0x00008000,
|
||||||
|
bitHoT = 0x00010000,
|
||||||
|
bitVoA = 0x00020000,
|
||||||
|
bitRoF = 0x00040000,
|
||||||
|
bitCotF = 0x00080000,
|
||||||
|
maskEverQuest = 0x00000000,
|
||||||
|
maskRoK = 0x00000001,
|
||||||
|
maskSoV = 0x00000003,
|
||||||
|
maskSoL = 0x00000007,
|
||||||
|
maskPoP = 0x0000000F,
|
||||||
|
maskLoY = 0x0000001F,
|
||||||
|
maskLDoN = 0x0000003F,
|
||||||
|
maskGoD = 0x0000007F,
|
||||||
|
maskOoW = 0x000000FF,
|
||||||
|
maskDoN = 0x000001FF,
|
||||||
|
maskDoD = 0x000003FF,
|
||||||
|
maskPoR = 0x000007FF,
|
||||||
|
maskTSS = 0x00000FFF,
|
||||||
|
maskTBS = 0x00001FFF,
|
||||||
|
maskSoF = 0x00003FFF,
|
||||||
|
maskSoD = 0x00007FFF,
|
||||||
|
maskUF = 0x0000FFFF,
|
||||||
|
maskHoT = 0x0001FFFF,
|
||||||
|
maskVoA = 0x0003FFFF,
|
||||||
|
maskRoF = 0x0007FFFF,
|
||||||
|
maskCotF = 0x000FFFFF
|
||||||
|
};
|
||||||
|
|
||||||
|
const char* ExpansionName(Expansion expansion);
|
||||||
|
const char* ExpansionName(uint32 expansion_bit);
|
||||||
|
uint32 ConvertExpansionToExpansionBit(Expansion expansion);
|
||||||
|
Expansion ConvertExpansionBitToExpansion(uint32 expansion_bit);
|
||||||
|
uint32 ConvertExpansionToExpansionsMask(Expansion expansion);
|
||||||
|
Expansion ConvertClientVersionToExpansion(versions::ClientVersion client_version);
|
||||||
|
uint32 ConvertClientVersionToExpansionBit(versions::ClientVersion client_version);
|
||||||
|
uint32 ConvertClientVersionToExpansionsMask(versions::ClientVersion client_version);
|
||||||
|
|
||||||
|
} /*expansions*/
|
||||||
|
|
||||||
} /*EQEmu*/
|
} /*EQEmu*/
|
||||||
|
|
||||||
#endif /*COMMON_EMU_VERSIONS_H*/
|
#endif /*COMMON_EMU_VERSIONS_H*/
|
||||||
|
|||||||
2022
common/eq_limits.cpp
2022
common/eq_limits.cpp
File diff suppressed because it is too large
Load Diff
@ -20,7 +20,6 @@
|
|||||||
#ifndef COMMON_EQ_LIMITS_H
|
#ifndef COMMON_EQ_LIMITS_H
|
||||||
#define COMMON_EQ_LIMITS_H
|
#define COMMON_EQ_LIMITS_H
|
||||||
|
|
||||||
#include "emu_legacy.h"
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "eq_constants.h"
|
#include "eq_constants.h"
|
||||||
#include "emu_versions.h"
|
#include "emu_versions.h"
|
||||||
@ -34,10 +33,166 @@
|
|||||||
|
|
||||||
namespace EQEmu
|
namespace EQEmu
|
||||||
{
|
{
|
||||||
|
void InitializeDynamicLookups();
|
||||||
|
|
||||||
namespace constants {
|
namespace constants {
|
||||||
class LookupEntry {
|
struct LookupEntry {
|
||||||
public:
|
EQEmu::expansions::Expansion Expansion;
|
||||||
size_t CharacterCreationLimit;
|
uint32 ExpansionBit;
|
||||||
|
uint32 ExpansionsMask;
|
||||||
|
int16 CharacterCreationLimit;
|
||||||
|
size_t SayLinkBodySize;
|
||||||
|
|
||||||
|
LookupEntry(const LookupEntry *lookup_entry) { }
|
||||||
|
LookupEntry(
|
||||||
|
EQEmu::expansions::Expansion Expansion,
|
||||||
|
uint32 ExpansionBit,
|
||||||
|
uint32 ExpansionsMask,
|
||||||
|
int16 CharacterCreationLimit,
|
||||||
|
size_t SayLinkBodySize
|
||||||
|
) :
|
||||||
|
Expansion(Expansion),
|
||||||
|
ExpansionBit(ExpansionBit),
|
||||||
|
ExpansionsMask(ExpansionsMask),
|
||||||
|
CharacterCreationLimit(CharacterCreationLimit),
|
||||||
|
SayLinkBodySize(SayLinkBodySize)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
void InitializeDynamicLookups();
|
||||||
|
|
||||||
|
const LookupEntry* DynamicLookup(versions::ClientVersion client_version, bool gm_flag);
|
||||||
|
const LookupEntry* DynamicNonGMLookup(versions::ClientVersion client_version);
|
||||||
|
const LookupEntry* DynamicGMLookup(versions::ClientVersion client_version);
|
||||||
|
const LookupEntry* StaticLookup(versions::ClientVersion client_version);
|
||||||
|
|
||||||
|
} /*constants*/
|
||||||
|
|
||||||
|
namespace inventory {
|
||||||
|
struct LookupEntry {
|
||||||
|
// note: 'PossessionsBitmask' needs to be attuned to the client version with the highest number
|
||||||
|
// of possessions slots and 'InventoryTypeSize[typePossessions]' should reflect the same count
|
||||||
|
// with translators adjusting for valid slot indices. Server-side validations will be performed
|
||||||
|
// against 'PossessionsBitmask' (note: the same applies to CorpseBitmask..size is not dependent)
|
||||||
|
|
||||||
|
struct InventoryTypeSize_Struct { // should reflect count and naming conventions referenced in emu_constants.h
|
||||||
|
int16 Possessions, Bank, SharedBank;
|
||||||
|
int16 Trade, World, Limbo;
|
||||||
|
int16 Tribute, TrophyTribute, GuildTribute;
|
||||||
|
int16 Merchant, Deleted, Corpse;
|
||||||
|
int16 Bazaar, Inspect, RealEstate;
|
||||||
|
int16 ViewMODPC, ViewMODBank, ViewMODSharedBank;
|
||||||
|
int16 ViewMODLimbo, AltStorage, Archived;
|
||||||
|
int16 Mail, GuildTrophyTribute, Krono;
|
||||||
|
int16 Other;
|
||||||
|
|
||||||
|
InventoryTypeSize_Struct(
|
||||||
|
int16 Possessions, int16 Bank, int16 SharedBank,
|
||||||
|
int16 Trade, int16 World, int16 Limbo,
|
||||||
|
int16 Tribute, int16 TrophyTribute, int16 GuildTribute,
|
||||||
|
int16 Merchant, int16 Deleted, int16 Corpse,
|
||||||
|
int16 Bazaar, int16 Inspect, int16 RealEstate,
|
||||||
|
int16 ViewMODPC, int16 ViewMODBank, int16 ViewMODSharedBank,
|
||||||
|
int16 ViewMODLimbo, int16 AltStorage, int16 Archived,
|
||||||
|
int16 Mail, int16 GuildTrophyTribute, int16 Krono,
|
||||||
|
int16 Other
|
||||||
|
) :
|
||||||
|
Possessions(Possessions), Bank(Bank), SharedBank(SharedBank),
|
||||||
|
Trade(Trade), World(World), Limbo(Limbo),
|
||||||
|
Tribute(Tribute), TrophyTribute(TrophyTribute), GuildTribute(GuildTribute),
|
||||||
|
Merchant(Merchant), Deleted(Deleted), Corpse(Corpse),
|
||||||
|
Bazaar(Bazaar), Inspect(Inspect), RealEstate(RealEstate),
|
||||||
|
ViewMODPC(ViewMODPC), ViewMODBank(ViewMODBank), ViewMODSharedBank(ViewMODSharedBank),
|
||||||
|
ViewMODLimbo(ViewMODLimbo), AltStorage(AltStorage), Archived(Archived),
|
||||||
|
Mail(Mail), GuildTrophyTribute(GuildTrophyTribute), Krono(Krono),
|
||||||
|
Other(Other)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
union {
|
||||||
|
InventoryTypeSize_Struct InventoryTypeSize;
|
||||||
|
int16 InventoryTypeSizeArray[25]; // should reflect EQEmu::invtype::TYPE_COUNT referenced in emu_constants.h
|
||||||
|
};
|
||||||
|
|
||||||
|
uint64 EquipmentBitmask;
|
||||||
|
uint64 GeneralBitmask;
|
||||||
|
uint64 CursorBitmask;
|
||||||
|
uint64 PossessionsBitmask;
|
||||||
|
uint64 CorpseBitmask;
|
||||||
|
int16 BagSlotCount;
|
||||||
|
int16 AugSocketCount;
|
||||||
|
|
||||||
|
bool AllowEmptyBagInBag;
|
||||||
|
bool AllowClickCastFromBag;
|
||||||
|
bool ConcatenateInvTypeLimbo;
|
||||||
|
bool AllowOverLevelEquipment;
|
||||||
|
|
||||||
|
LookupEntry(const LookupEntry *lookup_entry) { }
|
||||||
|
LookupEntry(
|
||||||
|
InventoryTypeSize_Struct InventoryTypeSize,
|
||||||
|
uint64 EquipmentBitmask,
|
||||||
|
uint64 GeneralBitmask,
|
||||||
|
uint64 CursorBitmask,
|
||||||
|
uint64 PossessionsBitmask,
|
||||||
|
uint64 CorpseBitmask,
|
||||||
|
int16 BagSlotCount,
|
||||||
|
int16 AugSocketCount,
|
||||||
|
bool AllowEmptyBagInBag,
|
||||||
|
bool AllowClickCastFromBag,
|
||||||
|
bool ConcatenateInvTypeLimbo,
|
||||||
|
bool AllowOverLevelEquipment
|
||||||
|
) :
|
||||||
|
InventoryTypeSize(InventoryTypeSize),
|
||||||
|
EquipmentBitmask(EquipmentBitmask),
|
||||||
|
GeneralBitmask(GeneralBitmask),
|
||||||
|
CursorBitmask(CursorBitmask),
|
||||||
|
PossessionsBitmask(PossessionsBitmask),
|
||||||
|
CorpseBitmask(CorpseBitmask),
|
||||||
|
BagSlotCount(BagSlotCount),
|
||||||
|
AugSocketCount(AugSocketCount),
|
||||||
|
AllowEmptyBagInBag(AllowEmptyBagInBag),
|
||||||
|
AllowClickCastFromBag(AllowClickCastFromBag),
|
||||||
|
ConcatenateInvTypeLimbo(ConcatenateInvTypeLimbo),
|
||||||
|
AllowOverLevelEquipment(AllowOverLevelEquipment)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
void InitializeDynamicLookups();
|
||||||
|
|
||||||
|
const LookupEntry* DynamicLookup(versions::MobVersion mob_version, bool gm_flag);
|
||||||
|
const LookupEntry* DynamicNonGMLookup(versions::MobVersion mob_version);
|
||||||
|
const LookupEntry* DynamicGMLookup(versions::MobVersion mob_version);
|
||||||
|
const LookupEntry* StaticLookup(versions::MobVersion mob_version);
|
||||||
|
|
||||||
|
} /*inventory*/
|
||||||
|
|
||||||
|
namespace behavior {
|
||||||
|
struct LookupEntry {
|
||||||
|
bool CoinHasWeight;
|
||||||
|
|
||||||
|
LookupEntry(const LookupEntry *lookup_entry) { }
|
||||||
|
LookupEntry(
|
||||||
|
bool CoinHasWeight
|
||||||
|
) :
|
||||||
|
CoinHasWeight(CoinHasWeight)
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
void InitializeDynamicLookups();
|
||||||
|
|
||||||
|
const LookupEntry* DynamicLookup(versions::MobVersion mob_version, bool gm_flag);
|
||||||
|
const LookupEntry* DynamicNonGMLookup(versions::MobVersion mob_version);
|
||||||
|
const LookupEntry* DynamicGMLookup(versions::MobVersion mob_version);
|
||||||
|
const LookupEntry* StaticLookup(versions::MobVersion mob_version);
|
||||||
|
|
||||||
|
} /*behavior*/
|
||||||
|
|
||||||
|
namespace spells {
|
||||||
|
struct LookupEntry {
|
||||||
|
int SpellIdMax;
|
||||||
|
int SpellbookSize;
|
||||||
|
int SpellGemCount;
|
||||||
|
|
||||||
int LongBuffs;
|
int LongBuffs;
|
||||||
int ShortBuffs;
|
int ShortBuffs;
|
||||||
int DiscBuffs;
|
int DiscBuffs;
|
||||||
@ -45,56 +200,69 @@ namespace EQEmu
|
|||||||
int NPCBuffs;
|
int NPCBuffs;
|
||||||
int PetBuffs;
|
int PetBuffs;
|
||||||
int MercBuffs;
|
int MercBuffs;
|
||||||
|
|
||||||
|
LookupEntry(const LookupEntry *lookup_entry) { }
|
||||||
|
LookupEntry(
|
||||||
|
int SpellIdMax,
|
||||||
|
int SpellbookSize,
|
||||||
|
int SpellGemCount,
|
||||||
|
int LongBuffs,
|
||||||
|
int ShortBuffs,
|
||||||
|
int DiscBuffs,
|
||||||
|
int TotalBuffs,
|
||||||
|
int NPCBuffs,
|
||||||
|
int PetBuffs,
|
||||||
|
int MercBuffs
|
||||||
|
) :
|
||||||
|
SpellIdMax(SpellIdMax),
|
||||||
|
SpellbookSize(SpellbookSize),
|
||||||
|
SpellGemCount(SpellGemCount),
|
||||||
|
LongBuffs(LongBuffs),
|
||||||
|
ShortBuffs(ShortBuffs),
|
||||||
|
DiscBuffs(DiscBuffs),
|
||||||
|
TotalBuffs(TotalBuffs),
|
||||||
|
NPCBuffs(NPCBuffs),
|
||||||
|
PetBuffs(PetBuffs),
|
||||||
|
MercBuffs(MercBuffs)
|
||||||
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void InitializeDynamicLookups();
|
||||||
|
|
||||||
|
const LookupEntry* DynamicLookup(versions::ClientVersion client_version, bool gm_flag);
|
||||||
|
const LookupEntry* DynamicNonGMLookup(versions::ClientVersion client_version);
|
||||||
|
const LookupEntry* DynamicGMLookup(versions::ClientVersion client_version);
|
||||||
|
const LookupEntry* StaticLookup(versions::ClientVersion client_version);
|
||||||
|
|
||||||
const LookupEntry* Lookup(versions::ClientVersion client_version);
|
} /*spells*/
|
||||||
|
|
||||||
} /*constants*/
|
|
||||||
|
|
||||||
namespace inventory {
|
|
||||||
class LookupEntry {
|
|
||||||
public:
|
|
||||||
size_t InventoryTypeSize[25]; // should reflect EQEmu::inventory::typeCount referenced in emu_constants.h
|
|
||||||
|
|
||||||
uint64 PossessionsBitmask;
|
|
||||||
size_t ItemBagSize;
|
|
||||||
size_t ItemAugSize;
|
|
||||||
|
|
||||||
bool AllowEmptyBagInBag;
|
|
||||||
bool AllowClickCastFromBag;
|
|
||||||
bool ConcatenateInvTypeLimbo;
|
|
||||||
bool AllowOverLevelEquipment;
|
|
||||||
};
|
|
||||||
|
|
||||||
const LookupEntry* Lookup(versions::MobVersion mob_version);
|
|
||||||
|
|
||||||
} /*inventory*/
|
|
||||||
|
|
||||||
namespace behavior {
|
|
||||||
class LookupEntry {
|
|
||||||
public:
|
|
||||||
bool CoinHasWeight;
|
|
||||||
};
|
|
||||||
|
|
||||||
const LookupEntry* Lookup(versions::MobVersion mob_version);
|
|
||||||
|
|
||||||
} /*behavior*/
|
|
||||||
|
|
||||||
} /*EQEmu*/
|
} /*EQEmu*/
|
||||||
|
|
||||||
namespace ClientUnknown
|
namespace ClientUnknown
|
||||||
{
|
{
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace constants {
|
||||||
|
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
|
||||||
|
|
||||||
} /*ClientUnknown*/
|
} /*ClientUnknown*/
|
||||||
|
|
||||||
namespace Client62
|
namespace Client62
|
||||||
{
|
{
|
||||||
enum : int { Invalid = -1, Null, Safety };
|
const int16 IINVALID = -1;
|
||||||
|
const int16 INULL = 0;
|
||||||
|
|
||||||
enum : bool { False = false, True = true };
|
namespace constants {
|
||||||
|
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
|
||||||
|
|
||||||
} /*Client62*/
|
} /*Client62*/
|
||||||
|
|
||||||
|
|||||||
@ -51,6 +51,7 @@ protected:
|
|||||||
EmuOpcode emu_opcode;
|
EmuOpcode emu_opcode;
|
||||||
|
|
||||||
EQPacket(EmuOpcode opcode, const unsigned char *buf, const uint32 len);
|
EQPacket(EmuOpcode opcode, const unsigned char *buf, const uint32 len);
|
||||||
|
EQPacket(EmuOpcode opcode, SerializeBuffer &buf) : BasePacket(buf), emu_opcode(opcode) { };
|
||||||
// EQPacket(const EQPacket &p) { }
|
// EQPacket(const EQPacket &p) { }
|
||||||
EQPacket() { emu_opcode=OP_Unknown; pBuffer=nullptr; size=0; }
|
EQPacket() { emu_opcode=OP_Unknown; pBuffer=nullptr; size=0; }
|
||||||
|
|
||||||
@ -104,6 +105,8 @@ public:
|
|||||||
{ app_opcode_size = GetExecutablePlatform() == ExePlatformUCS ? 1 : 2; }
|
{ app_opcode_size = GetExecutablePlatform() == ExePlatformUCS ? 1 : 2; }
|
||||||
EQApplicationPacket(const EmuOpcode op, const unsigned char *buf, const uint32 len) : EQPacket(op, buf, len), opcode_bypass(0)
|
EQApplicationPacket(const EmuOpcode op, const unsigned char *buf, const uint32 len) : EQPacket(op, buf, len), opcode_bypass(0)
|
||||||
{ app_opcode_size = GetExecutablePlatform() == ExePlatformUCS ? 1 : 2; }
|
{ app_opcode_size = GetExecutablePlatform() == ExePlatformUCS ? 1 : 2; }
|
||||||
|
EQApplicationPacket(const EmuOpcode op, SerializeBuffer &buf) : EQPacket(op, buf), opcode_bypass(0)
|
||||||
|
{ app_opcode_size = GetExecutablePlatform() == ExePlatformUCS ? 1 : 2; }
|
||||||
bool combine(const EQApplicationPacket *rhs);
|
bool combine(const EQApplicationPacket *rhs);
|
||||||
uint32 serialize (uint16 opcode, unsigned char *dest) const;
|
uint32 serialize (uint16 opcode, unsigned char *dest) const;
|
||||||
uint32 Size() const { return size+app_opcode_size; }
|
uint32 Size() const { return size+app_opcode_size; }
|
||||||
|
|||||||
@ -280,7 +280,7 @@ union
|
|||||||
// horse: 0=brown, 1=white, 2=black, 3=tan
|
// horse: 0=brown, 1=white, 2=black, 3=tan
|
||||||
};
|
};
|
||||||
/*0340*/ uint32 spawnId; // Spawn Id
|
/*0340*/ uint32 spawnId; // Spawn Id
|
||||||
/*0344*/ uint8 unknown0344[3];
|
/*0344*/ float bounding_radius; // used in melee, overrides calc
|
||||||
/*0347*/ uint8 IsMercenary;
|
/*0347*/ uint8 IsMercenary;
|
||||||
/*0348*/ EQEmu::TintProfile equipment_tint;
|
/*0348*/ EQEmu::TintProfile equipment_tint;
|
||||||
/*0384*/ uint8 lfg; // 0=off, 1=lfg on
|
/*0384*/ uint8 lfg; // 0=off, 1=lfg on
|
||||||
@ -306,7 +306,6 @@ union
|
|||||||
uint32 DestructibleUnk9;
|
uint32 DestructibleUnk9;
|
||||||
bool targetable_with_hotkey;
|
bool targetable_with_hotkey;
|
||||||
bool show_name;
|
bool show_name;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PlayerState_Struct {
|
struct PlayerState_Struct {
|
||||||
@ -376,7 +375,11 @@ struct NewZone_Struct {
|
|||||||
/*0692*/ uint8 unknown692[8];
|
/*0692*/ uint8 unknown692[8];
|
||||||
/*0700*/ float fog_density;
|
/*0700*/ float fog_density;
|
||||||
/*0704*/ uint32 SuspendBuffs;
|
/*0704*/ uint32 SuspendBuffs;
|
||||||
/*0704*/
|
/*0708*/ uint32 FastRegenHP;
|
||||||
|
/*0712*/ uint32 FastRegenMana;
|
||||||
|
/*0716*/ uint32 FastRegenEndurance;
|
||||||
|
/*0720*/ uint32 NPCAggroMaxDist;
|
||||||
|
/*0724*/
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -731,7 +734,7 @@ struct BandolierItem_Struct
|
|||||||
struct Bandolier_Struct
|
struct Bandolier_Struct
|
||||||
{
|
{
|
||||||
char Name[32];
|
char Name[32];
|
||||||
BandolierItem_Struct Items[EQEmu::legacy::BANDOLIER_ITEM_COUNT];
|
BandolierItem_Struct Items[EQEmu::profile::BANDOLIER_ITEM_COUNT];
|
||||||
};
|
};
|
||||||
|
|
||||||
//len = 72
|
//len = 72
|
||||||
@ -745,7 +748,7 @@ struct PotionBeltItem_Struct
|
|||||||
//len = 288
|
//len = 288
|
||||||
struct PotionBelt_Struct
|
struct PotionBelt_Struct
|
||||||
{
|
{
|
||||||
PotionBeltItem_Struct Items[EQEmu::legacy::POTION_BELT_ITEM_COUNT];
|
PotionBeltItem_Struct Items[EQEmu::profile::POTION_BELT_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MovePotionToBelt_Struct
|
struct MovePotionToBelt_Struct
|
||||||
@ -849,10 +852,6 @@ struct SuspendedMinion_Struct
|
|||||||
** OpCode: 0x006a
|
** OpCode: 0x006a
|
||||||
*/
|
*/
|
||||||
static const uint32 MAX_PP_LANGUAGE = 28;
|
static const uint32 MAX_PP_LANGUAGE = 28;
|
||||||
static const uint32 MAX_PP_SPELLBOOK = 480; // Set for all functions
|
|
||||||
static const uint32 MAX_PP_MEMSPELL = static_cast<uint32>(EQEmu::CastingSlot::MaxGems); // Set to latest client so functions can work right -- 12
|
|
||||||
static const uint32 MAX_PP_REF_SPELLBOOK = 480; // Set for Player Profile size retain
|
|
||||||
static const uint32 MAX_PP_REF_MEMSPELL = 9; // Set for Player Profile size retain
|
|
||||||
|
|
||||||
static const uint32 MAX_PP_SKILL = PACKET_SKILL_ARRAY_SIZE; // 100 - actual skills buffer size
|
static const uint32 MAX_PP_SKILL = PACKET_SKILL_ARRAY_SIZE; // 100 - actual skills buffer size
|
||||||
static const uint32 MAX_PP_INNATE_SKILL = 25;
|
static const uint32 MAX_PP_INNATE_SKILL = 25;
|
||||||
@ -910,7 +909,7 @@ sed -e 's/_t//g' -e 's/MAX_AA/MAX_PP_AA_ARRAY/g' \
|
|||||||
|
|
||||||
struct PlayerProfile_Struct
|
struct PlayerProfile_Struct
|
||||||
{
|
{
|
||||||
/*0000*/ uint32 checksum; // Checksum from CRC32::SetEQChecksum
|
// /*0000*/ uint32 checksum; // Checksum from CRC32::SetEQChecksum
|
||||||
/*0004*/ char name[64]; // Name of player sizes not right
|
/*0004*/ char name[64]; // Name of player sizes not right
|
||||||
/*0068*/ char last_name[32]; // Last name of player sizes not right
|
/*0068*/ char last_name[32]; // Last name of player sizes not right
|
||||||
/*0100*/ uint32 gender; // Player Gender - 0 Male, 1 Female
|
/*0100*/ uint32 gender; // Player Gender - 0 Male, 1 Female
|
||||||
@ -932,7 +931,7 @@ struct PlayerProfile_Struct
|
|||||||
/*0245*/ uint8 guildbanker;
|
/*0245*/ uint8 guildbanker;
|
||||||
/*0246*/ uint8 unknown0246[6]; //
|
/*0246*/ uint8 unknown0246[6]; //
|
||||||
/*0252*/ uint32 intoxication;
|
/*0252*/ uint32 intoxication;
|
||||||
/*0256*/ uint32 spellSlotRefresh[MAX_PP_MEMSPELL]; //in ms
|
/*0256*/ uint32 spellSlotRefresh[EQEmu::spells::SPELL_GEM_COUNT]; //in ms
|
||||||
/*0292*/ uint32 abilitySlotRefresh;
|
/*0292*/ uint32 abilitySlotRefresh;
|
||||||
/*0296*/ uint8 haircolor; // Player hair color
|
/*0296*/ uint8 haircolor; // Player hair color
|
||||||
/*0297*/ uint8 beardcolor; // Player beard color
|
/*0297*/ uint8 beardcolor; // Player beard color
|
||||||
@ -971,9 +970,9 @@ struct PlayerProfile_Struct
|
|||||||
/*2505*/ uint8 unknown2541[47]; // ?
|
/*2505*/ uint8 unknown2541[47]; // ?
|
||||||
/*2552*/ uint8 languages[MAX_PP_LANGUAGE];
|
/*2552*/ uint8 languages[MAX_PP_LANGUAGE];
|
||||||
/*2580*/ uint8 unknown2616[4];
|
/*2580*/ uint8 unknown2616[4];
|
||||||
/*2584*/ uint32 spell_book[MAX_PP_REF_SPELLBOOK];
|
/*2584*/ uint32 spell_book[EQEmu::spells::SPELLBOOK_SIZE];
|
||||||
/*4504*/ uint8 unknown4540[128]; // Was [428] all 0xff
|
/*4504*/ uint8 unknown4540[128]; // Was [428] all 0xff
|
||||||
/*4632*/ uint32 mem_spells[MAX_PP_MEMSPELL];
|
/*4632*/ uint32 mem_spells[EQEmu::spells::SPELL_GEM_COUNT];
|
||||||
/*4668*/ uint8 unknown4704[32]; //
|
/*4668*/ uint8 unknown4704[32]; //
|
||||||
/*4700*/ float y; // Player y position
|
/*4700*/ float y; // Player y position
|
||||||
/*4704*/ float x; // Player x position
|
/*4704*/ float x; // Player x position
|
||||||
@ -1049,7 +1048,7 @@ struct PlayerProfile_Struct
|
|||||||
/*7212*/ uint32 tribute_points;
|
/*7212*/ uint32 tribute_points;
|
||||||
/*7216*/ uint32 unknown7252;
|
/*7216*/ uint32 unknown7252;
|
||||||
/*7220*/ uint32 tribute_active; //1=active
|
/*7220*/ uint32 tribute_active; //1=active
|
||||||
/*7224*/ Tribute_Struct tributes[EQEmu::legacy::TRIBUTE_SIZE];
|
/*7224*/ Tribute_Struct tributes[EQEmu::invtype::TRIBUTE_SIZE];
|
||||||
/*7264*/ Disciplines_Struct disciplines;
|
/*7264*/ Disciplines_Struct disciplines;
|
||||||
/*7664*/ uint32 recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
|
/*7664*/ uint32 recastTimers[MAX_RECAST_TYPES]; // Timers (GMT of last use)
|
||||||
/*7744*/ char unknown7780[160];
|
/*7744*/ char unknown7780[160];
|
||||||
@ -1076,7 +1075,7 @@ struct PlayerProfile_Struct
|
|||||||
/*12800*/ uint32 expAA;
|
/*12800*/ uint32 expAA;
|
||||||
/*12804*/ uint32 aapoints; //avaliable, unspent
|
/*12804*/ uint32 aapoints; //avaliable, unspent
|
||||||
/*12808*/ uint8 unknown12844[36];
|
/*12808*/ uint8 unknown12844[36];
|
||||||
/*12844*/ Bandolier_Struct bandoliers[EQEmu::legacy::BANDOLIERS_SIZE];
|
/*12844*/ Bandolier_Struct bandoliers[EQEmu::profile::BANDOLIERS_SIZE];
|
||||||
/*14124*/ uint8 unknown14160[4506];
|
/*14124*/ uint8 unknown14160[4506];
|
||||||
/*18630*/ SuspendedMinion_Struct SuspendedMinion; // No longer in use
|
/*18630*/ SuspendedMinion_Struct SuspendedMinion; // No longer in use
|
||||||
/*19240*/ uint32 timeentitledonaccount;
|
/*19240*/ uint32 timeentitledonaccount;
|
||||||
@ -1092,6 +1091,18 @@ struct PlayerProfile_Struct
|
|||||||
/*19559*/ uint8 unknown19595[5]; // ***Placeholder (6/29/2005)
|
/*19559*/ uint8 unknown19595[5]; // ***Placeholder (6/29/2005)
|
||||||
/*19564*/ uint32 RestTimer;
|
/*19564*/ uint32 RestTimer;
|
||||||
/*19568*/
|
/*19568*/
|
||||||
|
|
||||||
|
// All player profile packets are translated and this overhead is ignored in out-bound packets
|
||||||
|
PlayerProfile_Struct() : m_player_profile_version(EQEmu::versions::MobVersion::Unknown) { }
|
||||||
|
|
||||||
|
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
|
||||||
|
EQEmu::versions::MobVersion m_player_profile_version;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -1181,15 +1192,15 @@ struct SpecialMesg_Struct
|
|||||||
** When somebody changes what they're wearing or give a pet a weapon (model changes)
|
** When somebody changes what they're wearing or give a pet a weapon (model changes)
|
||||||
** Length: 19 Bytes
|
** Length: 19 Bytes
|
||||||
*/
|
*/
|
||||||
struct WearChange_Struct{
|
struct WearChange_Struct {
|
||||||
/*000*/ uint16 spawn_id;
|
/*000*/ uint16 spawn_id;
|
||||||
/*002*/ uint32 material;
|
/*002*/ uint32 material;
|
||||||
/*006*/ uint32 unknown06;
|
/*006*/ uint32 unknown06;
|
||||||
/*010*/ uint32 elite_material; // 1 for Drakkin Elite Material
|
/*010*/ uint32 elite_material; // 1 for Drakkin Elite Material
|
||||||
/*014*/ uint32 hero_forge_model; // New to VoA
|
/*014*/ uint32 hero_forge_model; // New to VoA
|
||||||
/*018*/ uint32 unknown18; // New to RoF
|
/*018*/ uint32 unknown18; // New to RoF
|
||||||
/*022*/ EQEmu::textures::Tint_Struct color;
|
/*022*/ EQEmu::textures::Tint_Struct color;
|
||||||
/*026*/ uint8 wear_slot_id;
|
/*026*/ uint8 wear_slot_id;
|
||||||
/*027*/
|
/*027*/
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1253,21 +1264,22 @@ struct Action_Struct
|
|||||||
{
|
{
|
||||||
/* 00 */ uint16 target; // id of target
|
/* 00 */ uint16 target; // id of target
|
||||||
/* 02 */ uint16 source; // id of caster
|
/* 02 */ uint16 source; // id of caster
|
||||||
/* 04 */ uint16 level; // level of caster
|
/* 04 */ uint16 level; // level of caster for spells, OSX dump says attack rating, guess spells use it for level
|
||||||
/* 06 */ uint16 instrument_mod;
|
/* 06 */ uint32 instrument_mod; // OSX dump says base damage, spells use it for bard song (different from newer clients)
|
||||||
/* 08 */ uint32 bard_focus_id;
|
/* 10 */ float force;
|
||||||
/* 12 */ uint16 unknown16;
|
/* 14 */ float hit_heading;
|
||||||
// some kind of sequence that's the same in both actions
|
/* 18 */ float hit_pitch;
|
||||||
// as well as the combat damage, to tie em together?
|
/* 22 */ uint8 type; // 231 (0xE7) for spells, skill
|
||||||
/* 14 */ uint32 sequence;
|
/* 23 */ uint16 unknown23; // OSX says min_damage
|
||||||
/* 18 */ uint32 unknown18;
|
/* 25 */ uint16 unknown25; // OSX says tohit
|
||||||
/* 22 */ uint8 type; // 231 (0xE7) for spells
|
|
||||||
/* 23 */ uint32 unknown23;
|
|
||||||
/* 27 */ uint16 spell; // spell id being cast
|
/* 27 */ uint16 spell; // spell id being cast
|
||||||
/* 29 */ uint8 unknown29;
|
/* 29 */ uint8 spell_level;
|
||||||
// this field seems to be some sort of success flag, if it's 4
|
// this field seems to be some sort of success flag, if it's 4
|
||||||
/* 30 */ uint8 buff_unknown; // if this is 4, a buff icon is made
|
/* 30 */ uint8 effect_flag; // if this is 4, a buff icon is made
|
||||||
/* 31 */
|
// newer clients have some data for setting LaunchSpellData when effect_flag & 4
|
||||||
|
// /* 31 */ uint8 spell_gem;
|
||||||
|
// /* 32 */ uint32 inventory_slot;
|
||||||
|
// /* 36 */ uint32 item_cast_type;
|
||||||
};
|
};
|
||||||
|
|
||||||
// this is what prints the You have been struck. and the regular
|
// this is what prints the You have been struck. and the regular
|
||||||
@ -1277,12 +1289,12 @@ struct CombatDamage_Struct
|
|||||||
{
|
{
|
||||||
/* 00 */ uint16 target;
|
/* 00 */ uint16 target;
|
||||||
/* 02 */ uint16 source;
|
/* 02 */ uint16 source;
|
||||||
/* 04 */ uint8 type; //slashing, etc. 231 (0xE7) for spells
|
/* 04 */ uint8 type; //slashing, etc. 231 (0xE7) for spells, skill
|
||||||
/* 05 */ uint16 spellid;
|
/* 05 */ uint16 spellid;
|
||||||
/* 07 */ uint32 damage;
|
/* 07 */ uint32 damage;
|
||||||
/* 11 */ float force;
|
/* 11 */ float force;
|
||||||
/* 15 */ float meleepush_xy; // see above notes in Action_Struct
|
/* 15 */ float hit_heading; // see above notes in Action_Struct
|
||||||
/* 19 */ float meleepush_z;
|
/* 19 */ float hit_pitch;
|
||||||
/* 23 */ uint32 special; // 2 = Rampage, 1 = Wild Rampage
|
/* 23 */ uint32 special; // 2 = Rampage, 1 = Wild Rampage
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1782,6 +1794,15 @@ struct CombatAbility_Struct {
|
|||||||
uint32 m_skill;
|
uint32 m_skill;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Disarm Struct incoming from Client [Size: 16]
|
||||||
|
struct Disarm_Struct
|
||||||
|
{
|
||||||
|
uint32 source;
|
||||||
|
uint32 target;
|
||||||
|
uint32 skill;
|
||||||
|
uint32 unknown;
|
||||||
|
};
|
||||||
|
|
||||||
//Instill Doubt
|
//Instill Doubt
|
||||||
struct Instill_Doubt_Struct {
|
struct Instill_Doubt_Struct {
|
||||||
uint8 i_id;
|
uint8 i_id;
|
||||||
@ -3323,23 +3344,32 @@ struct GuildMakeLeader{
|
|||||||
char target[64];
|
char target[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BugStruct{
|
struct BugReport_Struct {
|
||||||
/*0000*/ char chartype[64];
|
/*0000*/ uint32 category_id;
|
||||||
/*0064*/ char name[96];
|
/*0004*/ char category_name[64];
|
||||||
/*0160*/ char ui[128];
|
/*0068*/ char reporter_name[64];
|
||||||
/*0288*/ float x;
|
/*0132*/ char unused_0132[32];
|
||||||
/*0292*/ float y;
|
/*0164*/ char ui_path[128];
|
||||||
/*0296*/ float z;
|
/*0292*/ float pos_x;
|
||||||
/*0300*/ float heading;
|
/*0296*/ float pos_y;
|
||||||
/*0304*/ uint32 unknown304;
|
/*0300*/ float pos_z;
|
||||||
/*0308*/ char unknown308[160];
|
/*0304*/ uint32 heading;
|
||||||
/*0468*/ char target_name[64];
|
/*0308*/ uint32 unused_0308;
|
||||||
/*0532*/ uint32 type;
|
/*0312*/ uint32 time_played;
|
||||||
/*0536*/ char unknown536[2052];
|
/*0316*/ char padding_0316[8];
|
||||||
/*2584*/ char bug[2048];
|
/*0324*/ uint32 target_id;
|
||||||
/*4632*/ char unknown4632[6];
|
/*0328*/ char padding_0328[140];
|
||||||
/*4638*/ char system_info[4094];
|
/*0468*/ uint32 unknown_0468; // seems to always be '0'
|
||||||
|
/*0472*/ char target_name[64];
|
||||||
|
/*0536*/ uint32 optional_info_mask;
|
||||||
|
|
||||||
|
// this looks like a butchered 8k buffer with 2 trailing dword fields
|
||||||
|
/*0540*/ char unused_0540[2052];
|
||||||
|
/*2592*/ char bug_report[2050];
|
||||||
|
/*4642*/ char system_info[4098];
|
||||||
|
/*8740*/
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Make_Pet_Struct { //Simple struct for getting pet info
|
struct Make_Pet_Struct { //Simple struct for getting pet info
|
||||||
uint8 level;
|
uint8 level;
|
||||||
uint8 class_;
|
uint8 class_;
|
||||||
@ -3366,20 +3396,21 @@ struct Ground_Spawn{
|
|||||||
struct Ground_Spawns {
|
struct Ground_Spawns {
|
||||||
struct Ground_Spawn spawn[50]; //Assigned max number to allow
|
struct Ground_Spawn spawn[50]; //Assigned max number to allow
|
||||||
};
|
};
|
||||||
struct PetitionBug_Struct{
|
|
||||||
uint32 petition_number;
|
//struct PetitionBug_Struct{
|
||||||
uint32 unknown4;
|
// uint32 petition_number;
|
||||||
char accountname[64];
|
// uint32 unknown4;
|
||||||
uint32 zoneid;
|
// char accountname[64];
|
||||||
char name[64];
|
// uint32 zoneid;
|
||||||
uint32 level;
|
// char name[64];
|
||||||
uint32 class_;
|
// uint32 level;
|
||||||
uint32 race;
|
// uint32 class_;
|
||||||
uint32 unknown152[3];
|
// uint32 race;
|
||||||
uint32 time;
|
// uint32 unknown152[3];
|
||||||
uint32 unknown168;
|
// uint32 time;
|
||||||
char text[1028];
|
// uint32 unknown168;
|
||||||
};
|
// char text[1028];
|
||||||
|
//};
|
||||||
|
|
||||||
struct ApproveZone_Struct {
|
struct ApproveZone_Struct {
|
||||||
char name[64];
|
char name[64];
|
||||||
@ -3438,8 +3469,8 @@ struct SelectTributeReply_Struct {
|
|||||||
|
|
||||||
struct TributeInfo_Struct {
|
struct TributeInfo_Struct {
|
||||||
uint32 active; //0 == inactive, 1 == active
|
uint32 active; //0 == inactive, 1 == active
|
||||||
uint32 tributes[EQEmu::legacy::TRIBUTE_SIZE]; //-1 == NONE
|
uint32 tributes[EQEmu::invtype::TRIBUTE_SIZE]; //-1 == NONE
|
||||||
uint32 tiers[EQEmu::legacy::TRIBUTE_SIZE]; //all 00's
|
uint32 tiers[EQEmu::invtype::TRIBUTE_SIZE]; //all 00's
|
||||||
uint32 tribute_master_id;
|
uint32 tribute_master_id;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3771,7 +3802,7 @@ struct AcceptNewTask_Struct {
|
|||||||
//was all 0's from client, server replied with same op, all 0's
|
//was all 0's from client, server replied with same op, all 0's
|
||||||
struct CancelTask_Struct {
|
struct CancelTask_Struct {
|
||||||
uint32 SequenceNumber;
|
uint32 SequenceNumber;
|
||||||
uint32 unknown4; // Only seen 0x00000002
|
uint32 type; // Only seen 0x00000002
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -3825,28 +3856,28 @@ struct AvailableTaskTrailer_Struct {
|
|||||||
struct TaskDescriptionHeader_Struct {
|
struct TaskDescriptionHeader_Struct {
|
||||||
uint32 SequenceNumber; // The order the tasks appear in the journal. 0 for first task, 1 for second, etc.
|
uint32 SequenceNumber; // The order the tasks appear in the journal. 0 for first task, 1 for second, etc.
|
||||||
uint32 TaskID;
|
uint32 TaskID;
|
||||||
uint32 unknown2;
|
uint8 open_window;
|
||||||
uint32 unknown3;
|
uint32 task_type;
|
||||||
uint8 unknown4;
|
uint32 reward_type; // if this != 4 says Ebon Crystals else Radiant Crystals
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TaskDescriptionData1_Struct {
|
struct TaskDescriptionData1_Struct {
|
||||||
uint32 Duration;
|
uint32 Duration;
|
||||||
uint32 unknown2;
|
uint32 dur_code; // if Duration == 0
|
||||||
uint32 StartTime;
|
uint32 StartTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TaskDescriptionData2_Struct {
|
struct TaskDescriptionData2_Struct {
|
||||||
uint32 RewardCount; // ??
|
uint8 has_rewards;
|
||||||
uint32 unknown1;
|
uint32 coin_reward;
|
||||||
uint32 unknown2;
|
uint32 xp_reward;
|
||||||
uint16 unknown3;
|
uint32 faction_reward;
|
||||||
//uint8 unknown4;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TaskDescriptionTrailer_Struct {
|
struct TaskDescriptionTrailer_Struct {
|
||||||
//uint16 unknown1; // 0x0012
|
//uint16 unknown1; // 0x0012
|
||||||
uint32 Points;
|
uint32 Points;
|
||||||
|
uint8 has_reward_selection; // uses newer reward selection window, not in all clients
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TaskActivityHeader_Struct {
|
struct TaskActivityHeader_Struct {
|
||||||
@ -3886,11 +3917,11 @@ struct TaskActivityShort_Struct {
|
|||||||
|
|
||||||
struct TaskActivityComplete_Struct {
|
struct TaskActivityComplete_Struct {
|
||||||
uint32 TaskIndex;
|
uint32 TaskIndex;
|
||||||
uint32 unknown2; // 0x00000002
|
uint32 TaskType; // task, shared task, quest
|
||||||
uint32 unknown3;
|
uint32 TaskID; // must match
|
||||||
uint32 ActivityID;
|
uint32 ActivityID;
|
||||||
uint32 unknown4; // 0x00000001
|
uint32 task_completed; // Broadcasts "Task '%1' Completed" it not 0 and "Task '%1' Failed." if 0
|
||||||
uint32 unknown5; // 0x00000001
|
uint32 stage_complete; // Broadcasts "Task Stage Completed"
|
||||||
};
|
};
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -4350,7 +4381,7 @@ struct AnnoyingZoneUnknown_Struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct LoadSpellSet_Struct {
|
struct LoadSpellSet_Struct {
|
||||||
uint32 spell[MAX_PP_MEMSPELL]; // 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...
|
uint32 unknown; //there seems to be an extra field in this packet...
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -5291,7 +5322,7 @@ struct MercenaryMerchantResponse_Struct {
|
|||||||
struct ServerLootItem_Struct {
|
struct ServerLootItem_Struct {
|
||||||
uint32 item_id; // uint32 item_id;
|
uint32 item_id; // uint32 item_id;
|
||||||
int16 equip_slot; // int16 equip_slot;
|
int16 equip_slot; // int16 equip_slot;
|
||||||
uint16 charges; // uint8 charges;
|
uint16 charges; // uint8 charges;
|
||||||
uint16 lootslot; // uint16 lootslot;
|
uint16 lootslot; // uint16 lootslot;
|
||||||
uint32 aug_1; // uint32 aug_1;
|
uint32 aug_1; // uint32 aug_1;
|
||||||
uint32 aug_2; // uint32 aug_2;
|
uint32 aug_2; // uint32 aug_2;
|
||||||
@ -5319,7 +5350,7 @@ struct ClientMarqueeMessage_Struct {
|
|||||||
uint32 fade_out_time; //The fade out time, in ms
|
uint32 fade_out_time; //The fade out time, in ms
|
||||||
uint32 duration; //in ms
|
uint32 duration; //in ms
|
||||||
char msg[1]; //message plus null terminator
|
char msg[1]; //message plus null terminator
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::list<ServerLootItem_Struct*> ItemList;
|
typedef std::list<ServerLootItem_Struct*> ItemList;
|
||||||
@ -5356,6 +5387,23 @@ struct AuraDestory_Struct {
|
|||||||
};
|
};
|
||||||
// I think we can assume it's just action for 2, client doesn't seem to do anything with the rest of the data in that case
|
// I think we can assume it's just action for 2, client doesn't seem to do anything with the rest of the data in that case
|
||||||
|
|
||||||
|
struct SayLinkBodyFrame_Struct {
|
||||||
|
/*000*/ char ActionID[1];
|
||||||
|
/*001*/ char ItemID[5];
|
||||||
|
/*006*/ char Augment1[5];
|
||||||
|
/*011*/ char Augment2[5];
|
||||||
|
/*016*/ char Augment3[5];
|
||||||
|
/*021*/ char Augment4[5];
|
||||||
|
/*026*/ char Augment5[5];
|
||||||
|
/*031*/ char Augment6[5];
|
||||||
|
/*036*/ char IsEvolving[1];
|
||||||
|
/*037*/ char EvolveGroup[4];
|
||||||
|
/*041*/ char EvolveLevel[2];
|
||||||
|
/*043*/ char OrnamentIcon[5];
|
||||||
|
/*048*/ char Hash[8];
|
||||||
|
/*056*/
|
||||||
|
};
|
||||||
|
|
||||||
// Restore structure packing to default
|
// Restore structure packing to default
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include "emu_versions.h"
|
#include "emu_versions.h"
|
||||||
#include "eq_packet.h"
|
#include "eq_packet.h"
|
||||||
|
#include "net/daybreak_connection.h"
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ESTABLISHED,
|
ESTABLISHED,
|
||||||
@ -56,6 +57,8 @@ public:
|
|||||||
virtual const uint32 GetBytesSentPerSecond() const { return 0; }
|
virtual const uint32 GetBytesSentPerSecond() const { return 0; }
|
||||||
virtual const uint32 GetBytesRecvPerSecond() const { return 0; }
|
virtual const uint32 GetBytesRecvPerSecond() const { return 0; }
|
||||||
virtual const EQEmu::versions::ClientVersion ClientVersion() const { return EQEmu::versions::ClientVersion::Unknown; }
|
virtual const EQEmu::versions::ClientVersion ClientVersion() const { return EQEmu::versions::ClientVersion::Unknown; }
|
||||||
|
|
||||||
|
virtual std::shared_ptr<EQ::Net::DaybreakConnection> GetRawConnection() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*EQSTREAMINTF_H_*/
|
#endif /*EQSTREAMINTF_H_*/
|
||||||
|
|||||||
@ -110,6 +110,10 @@ void EQStreamProxy::RemoveData() {
|
|||||||
m_stream->RemoveData();
|
m_stream->RemoveData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<EQ::Net::DaybreakConnection> EQStreamProxy::GetRawConnection() {
|
||||||
|
return m_stream->GetRawConnection();
|
||||||
|
}
|
||||||
|
|
||||||
bool EQStreamProxy::CheckState(EQStreamState state) {
|
bool EQStreamProxy::CheckState(EQStreamState state) {
|
||||||
if(m_stream)
|
if(m_stream)
|
||||||
return(m_stream->CheckState(state));
|
return(m_stream->CheckState(state));
|
||||||
|
|||||||
@ -37,6 +37,8 @@ public:
|
|||||||
virtual const uint32 GetBytesSentPerSecond() const;
|
virtual const uint32 GetBytesSentPerSecond() const;
|
||||||
virtual const uint32 GetBytesRecvPerSecond() const;
|
virtual const uint32 GetBytesRecvPerSecond() const;
|
||||||
|
|
||||||
|
virtual std::shared_ptr<EQ::Net::DaybreakConnection> GetRawConnection();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::shared_ptr<EQStreamInterface> const m_stream; //we own this stream object.
|
std::shared_ptr<EQStreamInterface> const m_stream; //we own this stream object.
|
||||||
const StructStrategy *const m_structs; //we do not own this object.
|
const StructStrategy *const m_structs; //we do not own this object.
|
||||||
|
|||||||
@ -26,24 +26,26 @@
|
|||||||
std::string EQEmuConfig::ConfigFile = "eqemu_config.json";
|
std::string EQEmuConfig::ConfigFile = "eqemu_config.json";
|
||||||
EQEmuConfig *EQEmuConfig::_config = nullptr;
|
EQEmuConfig *EQEmuConfig::_config = nullptr;
|
||||||
|
|
||||||
void EQEmuConfig::parse_config() {
|
void EQEmuConfig::parse_config()
|
||||||
|
{
|
||||||
ShortName = _root["server"]["world"].get("shortname", "").asString();
|
|
||||||
LongName = _root["server"]["world"].get("longname", "").asString();
|
ShortName = _root["server"]["world"].get("shortname", "").asString();
|
||||||
|
LongName = _root["server"]["world"].get("longname", "").asString();
|
||||||
WorldAddress = _root["server"]["world"].get("address", "").asString();
|
WorldAddress = _root["server"]["world"].get("address", "").asString();
|
||||||
LocalAddress = _root["server"]["world"].get("localaddress", "").asString();
|
LocalAddress = _root["server"]["world"].get("localaddress", "").asString();
|
||||||
MaxClients = atoi(_root["server"]["world"].get("maxclients", "-1").asString().c_str());
|
MaxClients = atoi(_root["server"]["world"].get("maxclients", "-1").asString().c_str());
|
||||||
SharedKey = _root["server"]["world"].get("key", "").asString();
|
SharedKey = _root["server"]["world"].get("key", "").asString();
|
||||||
LoginCount = 0;
|
LoginCount = 0;
|
||||||
|
|
||||||
if (_root["server"]["world"]["loginserver"].isObject()) {
|
if (_root["server"]["world"]["loginserver"].isObject()) {
|
||||||
LoginHost = _root["server"]["world"]["loginserver"].get("host", "login.eqemulator.net").asString();
|
LoginHost = _root["server"]["world"]["loginserver"].get("host", "login.eqemulator.net").asString();
|
||||||
LoginPort = atoi(_root["server"]["world"]["loginserver"].get("port", "5998").asString().c_str());
|
LoginPort = atoi(_root["server"]["world"]["loginserver"].get("port", "5998").asString().c_str());
|
||||||
LoginLegacy = false;
|
LoginLegacy = false;
|
||||||
if (_root["server"]["world"]["loginserver"].get("legacy", "0").asString() == "1") LoginLegacy = true;
|
if (_root["server"]["world"]["loginserver"].get("legacy", "0").asString() == "1") { LoginLegacy = true; }
|
||||||
LoginAccount = _root["server"]["world"]["loginserver"].get("account", "").asString();
|
LoginAccount = _root["server"]["world"]["loginserver"].get("account", "").asString();
|
||||||
LoginPassword = _root["server"]["world"]["loginserver"].get("password", "").asString();
|
LoginPassword = _root["server"]["world"]["loginserver"].get("password", "").asString();
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
char str[32];
|
char str[32];
|
||||||
loginlist.Clear();
|
loginlist.Clear();
|
||||||
do {
|
do {
|
||||||
@ -53,74 +55,102 @@ void EQEmuConfig::parse_config() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto loginconfig = new LoginConfig;
|
auto loginconfig = new LoginConfig;
|
||||||
loginconfig->LoginHost = _root["server"]["world"][str].get("host", "login.eqemulator.net").asString();
|
loginconfig->LoginHost = _root["server"]["world"][str].get("host", "login.eqemulator.net").asString();
|
||||||
loginconfig->LoginPort = atoi(_root["server"]["world"][str].get("port", "5998").asString().c_str());
|
loginconfig->LoginPort = atoi(_root["server"]["world"][str].get("port", "5998").asString().c_str());
|
||||||
loginconfig->LoginAccount = _root["server"]["world"][str].get("account", "").asString();
|
loginconfig->LoginAccount = _root["server"]["world"][str].get("account", "").asString();
|
||||||
loginconfig->LoginPassword = _root["server"]["world"][str].get("password", "").asString();
|
loginconfig->LoginPassword = _root["server"]["world"][str].get("password", "").asString();
|
||||||
|
|
||||||
loginconfig->LoginLegacy = false;
|
loginconfig->LoginLegacy = false;
|
||||||
if (_root["server"]["world"][str].get("legacy", "0").asString() == "1") loginconfig->LoginLegacy = true;
|
if (_root["server"]["world"][str].get("legacy", "0").asString() == "1") { loginconfig->LoginLegacy = true; }
|
||||||
loginlist.Insert(loginconfig);
|
loginlist.Insert(loginconfig);
|
||||||
} while (LoginCount < 100);
|
} while (LoginCount < 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//<locked> from xml converts to json as locked: "", so i default to "false".
|
//<locked> from xml converts to json as locked: "", so i default to "false".
|
||||||
//The only way to enable locked is by switching to true, meaning this value is always false until manually set true
|
//The only way to enable locked is by switching to true, meaning this value is always false until manually set true
|
||||||
Locked = false;
|
Locked = false;
|
||||||
if (_root["server"]["world"].get("locked", "false").asString() == "true") Locked = true;
|
if (_root["server"]["world"].get("locked", "false").asString() == "true") { Locked = true; }
|
||||||
WorldIP = _root["server"]["world"]["tcp"].get("host", "127.0.0.1").asString();
|
WorldIP = _root["server"]["world"]["tcp"].get("host", "127.0.0.1").asString();
|
||||||
WorldTCPPort = atoi(_root["server"]["world"]["tcp"].get("port", "9000").asString().c_str());
|
WorldTCPPort = atoi(_root["server"]["world"]["tcp"].get("port", "9000").asString().c_str());
|
||||||
|
|
||||||
TelnetIP = _root["server"]["world"]["telnet"].get("ip", "127.0.0.1").asString();
|
TelnetIP = _root["server"]["world"]["telnet"].get("ip", "127.0.0.1").asString();
|
||||||
TelnetTCPPort = atoi(_root["server"]["world"]["telnet"].get("port", "9001").asString().c_str());
|
TelnetTCPPort = atoi(_root["server"]["world"]["telnet"].get("port", "9001").asString().c_str());
|
||||||
TelnetEnabled = false;
|
TelnetEnabled = false;
|
||||||
if (_root["server"]["world"]["telnet"].get("enabled", "false").asString() == "true") TelnetEnabled = true;
|
if (_root["server"]["world"]["telnet"].get("enabled", "false").asString() == "true") { TelnetEnabled = true; }
|
||||||
|
|
||||||
WorldHTTPMimeFile = _root["server"]["world"]["http"].get("mimefile", "mime.types").asString();
|
WorldHTTPMimeFile = _root["server"]["world"]["http"].get("mimefile", "mime.types").asString();
|
||||||
WorldHTTPPort = atoi(_root["server"]["world"]["http"].get("port", "9080").asString().c_str());
|
WorldHTTPPort = atoi(_root["server"]["world"]["http"].get("port", "9080").asString().c_str());
|
||||||
WorldHTTPEnabled = false;
|
WorldHTTPEnabled = false;
|
||||||
if (_root["server"]["world"]["http"].get("enabled", "false").asString() == "true") WorldHTTPEnabled = true;
|
|
||||||
|
|
||||||
|
if (_root["server"]["world"]["http"].get("enabled", "false").asString() == "true") {
|
||||||
|
WorldHTTPEnabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UCS
|
||||||
|
*/
|
||||||
ChatHost = _root["server"]["chatserver"].get("host", "eqchat.eqemulator.net").asString();
|
ChatHost = _root["server"]["chatserver"].get("host", "eqchat.eqemulator.net").asString();
|
||||||
ChatPort = atoi(_root["server"]["chatserver"].get("port", "7778").asString().c_str());
|
ChatPort = atoi(_root["server"]["chatserver"].get("port", "7778").asString().c_str());
|
||||||
|
|
||||||
MailHost = _root["server"]["mailserver"].get("host", "eqmail.eqemulator.net").asString();
|
MailHost = _root["server"]["mailserver"].get("host", "eqmail.eqemulator.net").asString();
|
||||||
MailPort = atoi(_root["server"]["mailserver"].get("port", "7778").asString().c_str());
|
MailPort = atoi(_root["server"]["mailserver"].get("port", "7778").asString().c_str());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database
|
||||||
|
*/
|
||||||
DatabaseUsername = _root["server"]["database"].get("username", "eq").asString();
|
DatabaseUsername = _root["server"]["database"].get("username", "eq").asString();
|
||||||
DatabasePassword = _root["server"]["database"].get("password", "eq").asString();
|
DatabasePassword = _root["server"]["database"].get("password", "eq").asString();
|
||||||
DatabaseHost = _root["server"]["database"].get("host", "localhost").asString();
|
DatabaseHost = _root["server"]["database"].get("host", "localhost").asString();
|
||||||
DatabasePort = atoi(_root["server"]["database"].get("port", "3306").asString().c_str());
|
DatabasePort = atoi(_root["server"]["database"].get("port", "3306").asString().c_str());
|
||||||
DatabaseDB = _root["server"]["database"].get("db", "eq").asString();
|
DatabaseDB = _root["server"]["database"].get("db", "eq").asString();
|
||||||
|
|
||||||
QSDatabaseHost = _root["server"]["qsdatabase"].get("host", "localhost").asString();
|
/**
|
||||||
QSDatabasePort = atoi(_root["server"]["qsdatabase"].get("port", "3306").asString().c_str());
|
* QS
|
||||||
|
*/
|
||||||
|
QSDatabaseHost = _root["server"]["qsdatabase"].get("host", "localhost").asString();
|
||||||
|
QSDatabasePort = atoi(_root["server"]["qsdatabase"].get("port", "3306").asString().c_str());
|
||||||
QSDatabaseUsername = _root["server"]["qsdatabase"].get("username", "eq").asString();
|
QSDatabaseUsername = _root["server"]["qsdatabase"].get("username", "eq").asString();
|
||||||
QSDatabasePassword = _root["server"]["qsdatabase"].get("password", "eq").asString();
|
QSDatabasePassword = _root["server"]["qsdatabase"].get("password", "eq").asString();
|
||||||
QSDatabaseDB = _root["server"]["qsdatabase"].get("db", "eq").asString();
|
QSDatabaseDB = _root["server"]["qsdatabase"].get("db", "eq").asString();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Zones
|
||||||
|
*/
|
||||||
DefaultStatus = atoi(_root["server"]["zones"].get("defaultstatus", 0).asString().c_str());
|
DefaultStatus = atoi(_root["server"]["zones"].get("defaultstatus", 0).asString().c_str());
|
||||||
ZonePortLow = atoi(_root["server"]["zones"]["ports"].get("low", "7000").asString().c_str());
|
ZonePortLow = atoi(_root["server"]["zones"]["ports"].get("low", "7000").asString().c_str());
|
||||||
ZonePortHigh = atoi(_root["server"]["zones"]["ports"].get("high", "7999").asString().c_str());
|
ZonePortHigh = atoi(_root["server"]["zones"]["ports"].get("high", "7999").asString().c_str());
|
||||||
|
|
||||||
SpellsFile = _root["server"]["files"].get("spells", "spells_us.txt").asString();
|
/**
|
||||||
OpCodesFile = _root["server"]["files"].get("opcodes", "opcodes.conf").asString();
|
* Files
|
||||||
PluginPlFile = _root["server"]["files"].get("plugin.pl", "plugin.pl").asString();
|
*/
|
||||||
|
SpellsFile = _root["server"]["files"].get("spells", "spells_us.txt").asString();
|
||||||
|
OpCodesFile = _root["server"]["files"].get("opcodes", "opcodes.conf").asString();
|
||||||
|
MailOpCodesFile = _root["server"]["files"].get("mail_opcodes", "mail_opcodes.conf").asString();
|
||||||
|
PluginPlFile = _root["server"]["files"].get("plugin.pl", "plugin.pl").asString();
|
||||||
|
|
||||||
MapDir = _root["server"]["directories"].get("maps", "Maps/").asString();
|
/**
|
||||||
QuestDir = _root["server"]["directories"].get("quests", "quests/").asString();
|
* Directories
|
||||||
PluginDir = _root["server"]["directories"].get("plugins", "plugins/").asString();
|
*/
|
||||||
|
MapDir = _root["server"]["directories"].get("maps", "Maps/").asString();
|
||||||
|
QuestDir = _root["server"]["directories"].get("quests", "quests/").asString();
|
||||||
|
PluginDir = _root["server"]["directories"].get("plugins", "plugins/").asString();
|
||||||
LuaModuleDir = _root["server"]["directories"].get("lua_modules", "lua_modules/").asString();
|
LuaModuleDir = _root["server"]["directories"].get("lua_modules", "lua_modules/").asString();
|
||||||
PatchDir = _root["server"]["directories"].get("patches", "./").asString();
|
PatchDir = _root["server"]["directories"].get("patches", "./").asString();
|
||||||
SharedMemDir = _root["server"]["directories"].get("shared_memory", "shared/").asString();
|
SharedMemDir = _root["server"]["directories"].get("shared_memory", "shared/").asString();
|
||||||
LogDir = _root["server"]["directories"].get("logs", "logs/").asString();
|
LogDir = _root["server"]["directories"].get("logs", "logs/").asString();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Logs
|
||||||
|
*/
|
||||||
LogPrefix = _root["server"]["launcher"].get("logprefix", "logs/zone-").asString();
|
LogPrefix = _root["server"]["launcher"].get("logprefix", "logs/zone-").asString();
|
||||||
LogSuffix = _root["server"]["launcher"].get("logsuffix", ".log").asString();
|
LogSuffix = _root["server"]["launcher"].get("logsuffix", ".log").asString();
|
||||||
RestartWait = atoi(_root["server"]["launcher"]["timers"].get("restart", "10000").asString().c_str());
|
|
||||||
TerminateWait = atoi(_root["server"]["launcher"]["timers"].get("reterminate", "10000").asString().c_str());
|
/**
|
||||||
InitialBootWait = atoi(_root["server"]["launcher"]["timers"].get("initial", "20000").asString().c_str());
|
* Launcher
|
||||||
|
*/
|
||||||
|
RestartWait = atoi(_root["server"]["launcher"]["timers"].get("restart", "10000").asString().c_str());
|
||||||
|
TerminateWait = atoi(_root["server"]["launcher"]["timers"].get("reterminate", "10000").asString().c_str());
|
||||||
|
InitialBootWait = atoi(_root["server"]["launcher"]["timers"].get("initial", "20000").asString().c_str());
|
||||||
ZoneBootInterval = atoi(_root["server"]["launcher"]["timers"].get("interval", "2000").asString().c_str());
|
ZoneBootInterval = atoi(_root["server"]["launcher"]["timers"].get("interval", "2000").asString().c_str());
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
ZoneExe = _root["server"]["launcher"].get("exe", "zone.exe").asString();
|
ZoneExe = _root["server"]["launcher"].get("exe", "zone.exe").asString();
|
||||||
@ -230,6 +260,9 @@ std::string EQEmuConfig::GetByName(const std::string &var_name) const
|
|||||||
if (var_name == "OpCodesFile") {
|
if (var_name == "OpCodesFile") {
|
||||||
return (OpCodesFile);
|
return (OpCodesFile);
|
||||||
}
|
}
|
||||||
|
if (var_name == "MailOpCodesFile") {
|
||||||
|
return (MailOpCodesFile);
|
||||||
|
}
|
||||||
if (var_name == "PluginPlFile") {
|
if (var_name == "PluginPlFile") {
|
||||||
return (PluginPlFile);
|
return (PluginPlFile);
|
||||||
}
|
}
|
||||||
@ -312,6 +345,7 @@ void EQEmuConfig::Dump() const
|
|||||||
std::cout << "QSDatabasePort = " << QSDatabasePort << std::endl;
|
std::cout << "QSDatabasePort = " << QSDatabasePort << std::endl;
|
||||||
std::cout << "SpellsFile = " << SpellsFile << std::endl;
|
std::cout << "SpellsFile = " << SpellsFile << std::endl;
|
||||||
std::cout << "OpCodesFile = " << OpCodesFile << std::endl;
|
std::cout << "OpCodesFile = " << OpCodesFile << std::endl;
|
||||||
|
std::cout << "MailOpcodesFile = " << MailOpCodesFile << std::endl;
|
||||||
std::cout << "PluginPlFile = " << PluginPlFile << std::endl;
|
std::cout << "PluginPlFile = " << PluginPlFile << std::endl;
|
||||||
std::cout << "MapDir = " << MapDir << std::endl;
|
std::cout << "MapDir = " << MapDir << std::endl;
|
||||||
std::cout << "QuestDir = " << QuestDir << std::endl;
|
std::cout << "QuestDir = " << QuestDir << std::endl;
|
||||||
@ -322,6 +356,6 @@ void EQEmuConfig::Dump() const
|
|||||||
std::cout << "LogDir = " << LogDir << std::endl;
|
std::cout << "LogDir = " << LogDir << std::endl;
|
||||||
std::cout << "ZonePortLow = " << ZonePortLow << std::endl;
|
std::cout << "ZonePortLow = " << ZonePortLow << std::endl;
|
||||||
std::cout << "ZonePortHigh = " << ZonePortHigh << std::endl;
|
std::cout << "ZonePortHigh = " << ZonePortHigh << std::endl;
|
||||||
std::cout << "DefaultStatus = " << (int)DefaultStatus << std::endl;
|
std::cout << "DefaultStatus = " << (int) DefaultStatus << std::endl;
|
||||||
// std::cout << "DynamicCount = " << DynamicCount << std::endl;
|
// std::cout << "DynamicCount = " << DynamicCount << std::endl;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,6 +84,7 @@ class EQEmuConfig
|
|||||||
// From <files/>
|
// From <files/>
|
||||||
std::string SpellsFile;
|
std::string SpellsFile;
|
||||||
std::string OpCodesFile;
|
std::string OpCodesFile;
|
||||||
|
std::string MailOpCodesFile;
|
||||||
std::string PluginPlFile;
|
std::string PluginPlFile;
|
||||||
|
|
||||||
// From <directories/>
|
// From <directories/>
|
||||||
|
|||||||
@ -1,22 +1,23 @@
|
|||||||
/* EQEMu: Everquest Server Emulator
|
/**
|
||||||
Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net)
|
* EQEmulator: Everquest Server Emulator
|
||||||
|
* Copyright (C) 2001-2018 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
|
* This program is free software; you can redistribute it and/or modify
|
||||||
the Free Software Foundation; version 2 of the License.
|
* 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
|
* This program is distributed in the hope that it will be useful,
|
||||||
are required to give you total support for your newly bought product;
|
* but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
* are required to give you total support for your newly bought product;
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
* 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
|
* You should have received a copy of the GNU General Public License
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "eqemu_logsys.h"
|
#include "eqemu_logsys.h"
|
||||||
#include "platform.h"
|
#include "platform.h"
|
||||||
#include "string_util.h"
|
#include "string_util.h"
|
||||||
@ -33,106 +34,151 @@
|
|||||||
std::ofstream process_log;
|
std::ofstream process_log;
|
||||||
|
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <process.h>
|
#include <process.h>
|
||||||
#else
|
#else
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/stat.h>
|
#include <unistd.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Linux ANSI console color defines */
|
/**
|
||||||
|
* Linux ANSI console color defines
|
||||||
|
*/
|
||||||
#define LC_RESET "\033[0m"
|
#define LC_RESET "\033[0m"
|
||||||
#define LC_BLACK "\033[30m" /* Black */
|
#define LC_BLACK "\033[30m" /* Black */
|
||||||
#define LC_RED "\033[31m" /* Red */
|
#define LC_RED "\033[31m" /* Red */
|
||||||
#define LC_GREEN "\033[32m" /* Green */
|
#define LC_GREEN "\033[32m" /* Green */
|
||||||
#define LC_YELLOW "\033[33m" /* Yellow */
|
#define LC_YELLOW "\033[33m" /* Yellow */
|
||||||
#define LC_BLUE "\033[34m" /* Blue */
|
#define LC_BLUE "\033[34m" /* Blue */
|
||||||
#define LC_MAGENTA "\033[35m" /* Magenta */
|
#define LC_MAGENTA "\033[35m" /* Magenta */
|
||||||
#define LC_CYAN "\033[36m" /* Cyan */
|
#define LC_CYAN "\033[36m" /* Cyan */
|
||||||
#define LC_WHITE "\033[37m" /* White */
|
#define LC_WHITE "\033[37m" /* White */
|
||||||
|
|
||||||
namespace Console {
|
namespace Console {
|
||||||
enum Color {
|
enum Color {
|
||||||
Black = 0,
|
Black = 0,
|
||||||
Blue = 1,
|
Blue = 1,
|
||||||
Green = 2,
|
Green = 2,
|
||||||
Cyan = 3,
|
Cyan = 3,
|
||||||
Red = 4,
|
Red = 4,
|
||||||
Magenta = 5,
|
Magenta = 5,
|
||||||
Brown = 6,
|
Brown = 6,
|
||||||
LightGray = 7,
|
LightGray = 7,
|
||||||
DarkGray = 8,
|
DarkGray = 8,
|
||||||
LightBlue = 9,
|
LightBlue = 9,
|
||||||
LightGreen = 10,
|
LightGreen = 10,
|
||||||
LightCyan = 11,
|
LightCyan = 11,
|
||||||
LightRed = 12,
|
LightRed = 12,
|
||||||
LightMagenta = 13,
|
LightMagenta = 13,
|
||||||
Yellow = 14,
|
Yellow = 14,
|
||||||
White = 15
|
White = 15
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum GameChatColor {
|
||||||
|
yellow = 15,
|
||||||
|
red = 13,
|
||||||
|
light_green = 14,
|
||||||
|
light_cyan = 258,
|
||||||
|
light_purple = 5
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EQEmuLogSys Constructor
|
||||||
|
*/
|
||||||
EQEmuLogSys::EQEmuLogSys()
|
EQEmuLogSys::EQEmuLogSys()
|
||||||
{
|
{
|
||||||
on_log_gmsay_hook = [](uint16 log_type, const std::string&) {};
|
on_log_gmsay_hook = [](uint16 log_type, const std::string &) {};
|
||||||
bool file_logs_enabled = false;
|
bool file_logs_enabled = false;
|
||||||
int log_platform = 0;
|
int log_platform = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EQEmuLogSys Deconstructor
|
||||||
|
*/
|
||||||
EQEmuLogSys::~EQEmuLogSys()
|
EQEmuLogSys::~EQEmuLogSys()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQEmuLogSys::LoadLogSettingsDefaults()
|
void EQEmuLogSys::LoadLogSettingsDefaults()
|
||||||
{
|
{
|
||||||
/* Get Executable platform currently running this code (Zone/World/etc) */
|
/**
|
||||||
|
* Get Executable platform currently running this code (Zone/World/etc)
|
||||||
|
*/
|
||||||
log_platform = GetExecutablePlatformInt();
|
log_platform = GetExecutablePlatformInt();
|
||||||
|
|
||||||
|
for (int log_category_id = Logs::AA; log_category_id != Logs::MaxCategoryID; log_category_id++) {
|
||||||
|
log_settings[log_category_id].log_to_console = 0;
|
||||||
|
log_settings[log_category_id].log_to_file = 0;
|
||||||
|
log_settings[log_category_id].log_to_gmsay = 0;
|
||||||
|
log_settings[log_category_id].is_category_enabled = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Zero out Array */
|
file_logs_enabled = false;
|
||||||
memset(log_settings, 0, sizeof(LogSettings) * Logs::LogCategory::MaxCategoryID);
|
|
||||||
|
|
||||||
/* Set Defaults */
|
/**
|
||||||
log_settings[Logs::World_Server].log_to_console = Logs::General;
|
* Set Defaults
|
||||||
log_settings[Logs::Zone_Server].log_to_console = Logs::General;
|
*/
|
||||||
log_settings[Logs::QS_Server].log_to_console = Logs::General;
|
log_settings[Logs::World_Server].log_to_console = Logs::General;
|
||||||
log_settings[Logs::UCS_Server].log_to_console = Logs::General;
|
log_settings[Logs::Zone_Server].log_to_console = Logs::General;
|
||||||
log_settings[Logs::Crash].log_to_console = Logs::General;
|
log_settings[Logs::QS_Server].log_to_console = Logs::General;
|
||||||
log_settings[Logs::MySQLError].log_to_console = Logs::General;
|
log_settings[Logs::UCS_Server].log_to_console = Logs::General;
|
||||||
log_settings[Logs::Login_Server].log_to_console = Logs::General;
|
log_settings[Logs::Crash].log_to_console = Logs::General;
|
||||||
|
log_settings[Logs::MySQLError].log_to_console = Logs::General;
|
||||||
|
log_settings[Logs::Login_Server].log_to_console = Logs::General;
|
||||||
log_settings[Logs::Headless_Client].log_to_console = Logs::General;
|
log_settings[Logs::Headless_Client].log_to_console = Logs::General;
|
||||||
|
log_settings[Logs::NPCScaling].log_to_gmsay = Logs::General;
|
||||||
|
|
||||||
/* Set Category enabled status on defaults */
|
/**
|
||||||
log_settings[Logs::World_Server].is_category_enabled = 1;
|
* Set Category enabled status on defaults
|
||||||
log_settings[Logs::Zone_Server].is_category_enabled = 1;
|
*/
|
||||||
log_settings[Logs::QS_Server].is_category_enabled = 1;
|
for (int log_category_id = Logs::AA; log_category_id != Logs::MaxCategoryID; log_category_id++) {
|
||||||
log_settings[Logs::UCS_Server].is_category_enabled = 1;
|
const bool log_to_console = log_settings[log_category_id].log_to_console > 0;
|
||||||
log_settings[Logs::Crash].is_category_enabled = 1;
|
const bool log_to_file = log_settings[log_category_id].log_to_file > 0;
|
||||||
log_settings[Logs::MySQLError].is_category_enabled = 1;
|
const bool log_to_gmsay = log_settings[log_category_id].log_to_gmsay > 0;
|
||||||
log_settings[Logs::Login_Server].is_category_enabled = 1;
|
const bool is_category_enabled = log_to_console || log_to_file || log_to_gmsay;
|
||||||
|
if (is_category_enabled) {
|
||||||
|
log_settings[log_category_id].is_category_enabled = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Declare process file names for log writing
|
/**
|
||||||
If there is no process_file_name declared, no log file will be written, simply
|
* Declare process file names for log writing=
|
||||||
*/
|
*/
|
||||||
if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformWorld)
|
if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformWorld) {
|
||||||
platform_file_name = "world";
|
platform_file_name = "world";
|
||||||
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformQueryServ)
|
}
|
||||||
|
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformQueryServ) {
|
||||||
platform_file_name = "query_server";
|
platform_file_name = "query_server";
|
||||||
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformZone)
|
}
|
||||||
|
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformZone) {
|
||||||
platform_file_name = "zone";
|
platform_file_name = "zone";
|
||||||
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformUCS)
|
}
|
||||||
|
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformUCS) {
|
||||||
platform_file_name = "ucs";
|
platform_file_name = "ucs";
|
||||||
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformLogin)
|
}
|
||||||
|
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformLogin) {
|
||||||
platform_file_name = "login";
|
platform_file_name = "login";
|
||||||
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformLaunch)
|
}
|
||||||
|
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformLaunch) {
|
||||||
platform_file_name = "launcher";
|
platform_file_name = "launcher";
|
||||||
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformHC)
|
}
|
||||||
|
else if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformHC) {
|
||||||
platform_file_name = "hc";
|
platform_file_name = "hc";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param log_category
|
||||||
|
* @param in_message
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
std::string EQEmuLogSys::FormatOutMessageString(uint16 log_category, const std::string &in_message)
|
std::string EQEmuLogSys::FormatOutMessageString(uint16 log_category, const std::string &in_message)
|
||||||
{
|
{
|
||||||
std::string ret;
|
std::string ret;
|
||||||
@ -144,17 +190,33 @@ std::string EQEmuLogSys::FormatOutMessageString(uint16 log_category, const std::
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param debug_level
|
||||||
|
* @param log_category
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
void EQEmuLogSys::ProcessGMSay(uint16 debug_level, uint16 log_category, const std::string &message)
|
void EQEmuLogSys::ProcessGMSay(uint16 debug_level, uint16 log_category, const std::string &message)
|
||||||
{
|
{
|
||||||
/* Enabling Netcode based GMSay output creates a feedback loop that ultimately ends in a crash */
|
/**
|
||||||
if (log_category == Logs::LogCategory::Netcode)
|
* Enabling Netcode based GMSay output creates a feedback loop that ultimately ends in a crash
|
||||||
|
*/
|
||||||
|
if (log_category == Logs::LogCategory::Netcode) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check to see if the process that actually ran this is zone */
|
/**
|
||||||
if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformZone)
|
* Check to see if the process that actually ran this is zone
|
||||||
|
*/
|
||||||
|
if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformZone) {
|
||||||
on_log_gmsay_hook(log_category, message);
|
on_log_gmsay_hook(log_category, message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param debug_level
|
||||||
|
* @param log_category
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
void EQEmuLogSys::ProcessLogWrite(uint16 debug_level, uint16 log_category, const std::string &message)
|
void EQEmuLogSys::ProcessLogWrite(uint16 debug_level, uint16 log_category, const std::string &message)
|
||||||
{
|
{
|
||||||
if (log_category == Logs::Crash) {
|
if (log_category == Logs::Crash) {
|
||||||
@ -162,7 +224,10 @@ void EQEmuLogSys::ProcessLogWrite(uint16 debug_level, uint16 log_category, const
|
|||||||
EQEmuLogSys::SetCurrentTimeStamp(time_stamp);
|
EQEmuLogSys::SetCurrentTimeStamp(time_stamp);
|
||||||
std::ofstream crash_log;
|
std::ofstream crash_log;
|
||||||
EQEmuLogSys::MakeDirectory("logs/crashes");
|
EQEmuLogSys::MakeDirectory("logs/crashes");
|
||||||
crash_log.open(StringFormat("logs/crashes/crash_%s_%i.log", platform_file_name.c_str(), getpid()), std::ios_base::app | std::ios_base::out);
|
crash_log.open(
|
||||||
|
StringFormat("logs/crashes/crash_%s_%i.log", platform_file_name.c_str(), getpid()),
|
||||||
|
std::ios_base::app | std::ios_base::out
|
||||||
|
);
|
||||||
crash_log << time_stamp << " " << message << "\n";
|
crash_log << time_stamp << " " << message << "\n";
|
||||||
crash_log.close();
|
crash_log.close();
|
||||||
}
|
}
|
||||||
@ -170,11 +235,17 @@ void EQEmuLogSys::ProcessLogWrite(uint16 debug_level, uint16 log_category, const
|
|||||||
char time_stamp[80];
|
char time_stamp[80];
|
||||||
EQEmuLogSys::SetCurrentTimeStamp(time_stamp);
|
EQEmuLogSys::SetCurrentTimeStamp(time_stamp);
|
||||||
|
|
||||||
if (process_log)
|
if (process_log) {
|
||||||
process_log << time_stamp << " " << message << std::endl;
|
process_log << time_stamp << " " << message << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 EQEmuLogSys::GetWindowsConsoleColorFromCategory(uint16 log_category) {
|
/**
|
||||||
|
* @param log_category
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
uint16 EQEmuLogSys::GetWindowsConsoleColorFromCategory(uint16 log_category)
|
||||||
|
{
|
||||||
switch (log_category) {
|
switch (log_category) {
|
||||||
case Logs::Status:
|
case Logs::Status:
|
||||||
case Logs::Normal:
|
case Logs::Normal:
|
||||||
@ -197,7 +268,12 @@ uint16 EQEmuLogSys::GetWindowsConsoleColorFromCategory(uint16 log_category) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string EQEmuLogSys::GetLinuxConsoleColorFromCategory(uint16 log_category) {
|
/**
|
||||||
|
* @param log_category
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
std::string EQEmuLogSys::GetLinuxConsoleColorFromCategory(uint16 log_category)
|
||||||
|
{
|
||||||
switch (log_category) {
|
switch (log_category) {
|
||||||
case Logs::Status:
|
case Logs::Status:
|
||||||
case Logs::Normal:
|
case Logs::Normal:
|
||||||
@ -220,52 +296,68 @@ std::string EQEmuLogSys::GetLinuxConsoleColorFromCategory(uint16 log_category) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 EQEmuLogSys::GetGMSayColorFromCategory(uint16 log_category) {
|
/**
|
||||||
|
* @param log_category
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
uint16 EQEmuLogSys::GetGMSayColorFromCategory(uint16 log_category)
|
||||||
|
{
|
||||||
switch (log_category) {
|
switch (log_category) {
|
||||||
case Logs::Status:
|
case Logs::Status:
|
||||||
case Logs::Normal:
|
case Logs::Normal:
|
||||||
return 15; /* Yellow */
|
return GameChatColor::yellow;
|
||||||
case Logs::MySQLError:
|
case Logs::MySQLError:
|
||||||
case Logs::Error:
|
case Logs::Error:
|
||||||
return 13; /* Red */
|
return GameChatColor::red;
|
||||||
case Logs::MySQLQuery:
|
case Logs::MySQLQuery:
|
||||||
case Logs::Debug:
|
case Logs::Debug:
|
||||||
return 14; /* Light Green */
|
return GameChatColor::light_green;
|
||||||
case Logs::Quests:
|
case Logs::Quests:
|
||||||
return 258; /* Light Cyan */
|
return GameChatColor::light_cyan;
|
||||||
case Logs::Commands:
|
case Logs::Commands:
|
||||||
case Logs::Mercenaries:
|
case Logs::Mercenaries:
|
||||||
return 5; /* Light Purple */
|
return GameChatColor::light_purple;
|
||||||
case Logs::Crash:
|
case Logs::Crash:
|
||||||
return 13; /* Red */
|
return GameChatColor::red;
|
||||||
default:
|
default:
|
||||||
return 15; /* Yellow */
|
return GameChatColor::yellow;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param debug_level
|
||||||
|
* @param log_category
|
||||||
|
* @param message
|
||||||
|
*/
|
||||||
void EQEmuLogSys::ProcessConsoleMessage(uint16 debug_level, uint16 log_category, const std::string &message)
|
void EQEmuLogSys::ProcessConsoleMessage(uint16 debug_level, uint16 log_category, const std::string &message)
|
||||||
{
|
{
|
||||||
|
#ifdef _WINDOWS
|
||||||
#ifdef _WINDOWS
|
HANDLE console_handle;
|
||||||
HANDLE console_handle;
|
console_handle = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
console_handle = GetStdHandle(STD_OUTPUT_HANDLE);
|
CONSOLE_FONT_INFOEX info = { 0 };
|
||||||
CONSOLE_FONT_INFOEX info = { 0 };
|
info.cbSize = sizeof(info);
|
||||||
info.cbSize = sizeof(info);
|
info.dwFontSize.Y = 12; // leave X as zero
|
||||||
info.dwFontSize.Y = 12; // leave X as zero
|
info.FontWeight = FW_NORMAL;
|
||||||
info.FontWeight = FW_NORMAL;
|
wcscpy(info.FaceName, L"Lucida Console");
|
||||||
wcscpy(info.FaceName, L"Lucida Console");
|
SetCurrentConsoleFontEx(console_handle, NULL, &info);
|
||||||
SetCurrentConsoleFontEx(console_handle, NULL, &info);
|
SetConsoleTextAttribute(console_handle, EQEmuLogSys::GetWindowsConsoleColorFromCategory(log_category));
|
||||||
SetConsoleTextAttribute(console_handle, EQEmuLogSys::GetWindowsConsoleColorFromCategory(log_category));
|
std::cout << message << "\n";
|
||||||
std::cout << message << "\n";
|
SetConsoleTextAttribute(console_handle, Console::Color::White);
|
||||||
SetConsoleTextAttribute(console_handle, Console::Color::White);
|
#else
|
||||||
#else
|
std::cout << EQEmuLogSys::GetLinuxConsoleColorFromCategory(log_category) << message << LC_RESET << std::endl;
|
||||||
std::cout << EQEmuLogSys::GetLinuxConsoleColorFromCategory(log_category) << message << LC_RESET << std::endl;
|
#endif
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Core logging function
|
||||||
|
*
|
||||||
|
* @param debug_level
|
||||||
|
* @param log_category
|
||||||
|
* @param message
|
||||||
|
* @param ...
|
||||||
|
*/
|
||||||
void EQEmuLogSys::Out(Logs::DebugLevel debug_level, uint16 log_category, std::string message, ...)
|
void EQEmuLogSys::Out(Logs::DebugLevel debug_level, uint16 log_category, std::string message, ...)
|
||||||
{
|
{
|
||||||
|
|
||||||
bool log_to_console = true;
|
bool log_to_console = true;
|
||||||
if (log_settings[log_category].log_to_console < debug_level) {
|
if (log_settings[log_category].log_to_console < debug_level) {
|
||||||
log_to_console = false;
|
log_to_console = false;
|
||||||
@ -282,8 +374,9 @@ void EQEmuLogSys::Out(Logs::DebugLevel debug_level, uint16 log_category, std::st
|
|||||||
}
|
}
|
||||||
|
|
||||||
const bool nothing_to_log = !log_to_console && !log_to_file && !log_to_gmsay;
|
const bool nothing_to_log = !log_to_console && !log_to_file && !log_to_gmsay;
|
||||||
if (nothing_to_log)
|
if (nothing_to_log) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
va_list args;
|
va_list args;
|
||||||
va_start(args, message);
|
va_start(args, message);
|
||||||
@ -292,20 +385,32 @@ void EQEmuLogSys::Out(Logs::DebugLevel debug_level, uint16 log_category, std::st
|
|||||||
|
|
||||||
std::string output_debug_message = EQEmuLogSys::FormatOutMessageString(log_category, output_message);
|
std::string output_debug_message = EQEmuLogSys::FormatOutMessageString(log_category, output_message);
|
||||||
|
|
||||||
if (log_to_console) EQEmuLogSys::ProcessConsoleMessage(debug_level, log_category, output_debug_message);
|
if (log_to_console) {
|
||||||
if (log_to_gmsay) EQEmuLogSys::ProcessGMSay(debug_level, log_category, output_debug_message);
|
EQEmuLogSys::ProcessConsoleMessage(debug_level, log_category, output_debug_message);
|
||||||
if (log_to_file) EQEmuLogSys::ProcessLogWrite(debug_level, log_category, output_debug_message);
|
}
|
||||||
|
if (log_to_gmsay) {
|
||||||
|
EQEmuLogSys::ProcessGMSay(debug_level, log_category, output_debug_message);
|
||||||
|
}
|
||||||
|
if (log_to_file) {
|
||||||
|
EQEmuLogSys::ProcessLogWrite(debug_level, log_category, output_debug_message);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQEmuLogSys::SetCurrentTimeStamp(char* time_stamp)
|
/**
|
||||||
|
* @param time_stamp
|
||||||
|
*/
|
||||||
|
void EQEmuLogSys::SetCurrentTimeStamp(char *time_stamp)
|
||||||
{
|
{
|
||||||
time_t raw_time;
|
time_t raw_time;
|
||||||
struct tm * time_info;
|
struct tm *time_info;
|
||||||
time(&raw_time);
|
time(&raw_time);
|
||||||
time_info = localtime(&raw_time);
|
time_info = localtime(&raw_time);
|
||||||
strftime(time_stamp, 80, "[%m-%d-%Y :: %H:%M:%S]", time_info);
|
strftime(time_stamp, 80, "[%m-%d-%Y :: %H:%M:%S]", time_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param directory_name
|
||||||
|
*/
|
||||||
void EQEmuLogSys::MakeDirectory(const std::string &directory_name)
|
void EQEmuLogSys::MakeDirectory(const std::string &directory_name)
|
||||||
{
|
{
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
@ -315,8 +420,9 @@ void EQEmuLogSys::MakeDirectory(const std::string &directory_name)
|
|||||||
_mkdir(directory_name.c_str());
|
_mkdir(directory_name.c_str());
|
||||||
#else
|
#else
|
||||||
struct stat st;
|
struct stat st;
|
||||||
if (stat(directory_name.c_str(), &st) == 0) // exists
|
if (stat(directory_name.c_str(), &st) == 0) { // exists
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
mkdir(directory_name.c_str(), 0755);
|
mkdir(directory_name.c_str(), 0755);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -328,29 +434,75 @@ void EQEmuLogSys::CloseFileLogs()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param log_name
|
||||||
|
*/
|
||||||
void EQEmuLogSys::StartFileLogs(const std::string &log_name)
|
void EQEmuLogSys::StartFileLogs(const std::string &log_name)
|
||||||
{
|
{
|
||||||
EQEmuLogSys::CloseFileLogs();
|
EQEmuLogSys::CloseFileLogs();
|
||||||
|
|
||||||
/* When loading settings, we must have been given a reason in category based logging to output to a file in order to even create or open one... */
|
/**
|
||||||
if (file_logs_enabled == false)
|
* When loading settings, we must have been given a reason in category based logging to output to a file in order to even create or open one...
|
||||||
|
*/
|
||||||
|
if (!file_logs_enabled) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformZone) {
|
|
||||||
if (!log_name.empty())
|
|
||||||
platform_file_name = log_name;
|
|
||||||
|
|
||||||
if (platform_file_name.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
EQEmuLogSys::Out(Logs::General, Logs::Status, "Starting File Log 'logs/%s_%i.log'", platform_file_name.c_str(), getpid());
|
|
||||||
EQEmuLogSys::MakeDirectory("logs/zone");
|
|
||||||
process_log.open(StringFormat("logs/zone/%s_%i.log", platform_file_name.c_str(), getpid()), std::ios_base::app | std::ios_base::out);
|
|
||||||
} else {
|
|
||||||
if (platform_file_name.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
EQEmuLogSys::Out(Logs::General, Logs::Status, "Starting File Log 'logs/%s_%i.log'", platform_file_name.c_str(), getpid());
|
|
||||||
process_log.open(StringFormat("logs/%s_%i.log", platform_file_name.c_str(), getpid()), std::ios_base::app | std::ios_base::out);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* Zone
|
||||||
|
*/
|
||||||
|
if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformZone) {
|
||||||
|
if (!log_name.empty()) {
|
||||||
|
platform_file_name = log_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (platform_file_name.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EQEmuLogSys::Out(
|
||||||
|
Logs::General,
|
||||||
|
Logs::Status,
|
||||||
|
"Starting File Log 'logs/%s_%i.log'",
|
||||||
|
platform_file_name.c_str(),
|
||||||
|
getpid());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make directory if not exists
|
||||||
|
*/
|
||||||
|
EQEmuLogSys::MakeDirectory("logs/zone");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open file pointer
|
||||||
|
*/
|
||||||
|
process_log.open(
|
||||||
|
StringFormat("logs/zone/%s_%i.log", platform_file_name.c_str(), getpid()),
|
||||||
|
std::ios_base::app | std::ios_base::out
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All other processes
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (platform_file_name.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EQEmuLogSys::Out(
|
||||||
|
Logs::General,
|
||||||
|
Logs::Status,
|
||||||
|
"Starting File Log 'logs/%s_%i.log'",
|
||||||
|
platform_file_name.c_str(),
|
||||||
|
getpid());
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open file pointer
|
||||||
|
*/
|
||||||
|
process_log.open(
|
||||||
|
StringFormat("logs/%s_%i.log", platform_file_name.c_str(), getpid()),
|
||||||
|
std::ios_base::app | std::ios_base::out
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,20 +1,21 @@
|
|||||||
|
/**
|
||||||
/* EQEMu: Everquest Server Emulator
|
* EQEmulator: Everquest Server Emulator
|
||||||
Copyright (C) 2001-2015 EQEMu Development Team (http://eqemulator.net)
|
* Copyright (C) 2001-2018 EQEmulator Development Team (https://github.com/EQEmu/Server)
|
||||||
|
*
|
||||||
This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
the Free Software Foundation; version 2 of the License.
|
* the Free Software Foundation; version 2 of the License.
|
||||||
|
*
|
||||||
This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY except by those people which sell it, which
|
* but WITHOUT ANY WARRANTY except by those people which sell it, which
|
||||||
are required to give you total support for your newly bought product;
|
* are required to give you total support for your newly bought product;
|
||||||
without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
* A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||||
|
*
|
||||||
You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef EQEMU_LOGSYS_H
|
#ifndef EQEMU_LOGSYS_H
|
||||||
@ -34,128 +35,136 @@ namespace Logs {
|
|||||||
Detail /* 3 - Use this for extreme detail in logging, usually in extreme debugging in the stack or interprocess communication */
|
Detail /* 3 - Use this for extreme detail in logging, usually in extreme debugging in the stack or interprocess communication */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/**
|
||||||
If you add to this, make sure you update LogCategoryName
|
* If you add to this, make sure you update LogCategoryName
|
||||||
NOTE: Only add to the bottom of the enum because that is the type ID assignment
|
*
|
||||||
*/
|
* NOTE: Only add to the bottom of the enum because that is the type ID assignment
|
||||||
|
*/
|
||||||
|
enum LogCategory {
|
||||||
|
None = 0,
|
||||||
|
AA,
|
||||||
|
AI,
|
||||||
|
Aggro,
|
||||||
|
Attack,
|
||||||
|
Client_Server_Packet,
|
||||||
|
Combat,
|
||||||
|
Commands,
|
||||||
|
Crash,
|
||||||
|
Debug,
|
||||||
|
Doors,
|
||||||
|
Error,
|
||||||
|
Guilds,
|
||||||
|
Inventory,
|
||||||
|
Launcher,
|
||||||
|
Netcode,
|
||||||
|
Normal,
|
||||||
|
Object,
|
||||||
|
Pathing,
|
||||||
|
QS_Server,
|
||||||
|
Quests,
|
||||||
|
Rules,
|
||||||
|
Skills,
|
||||||
|
Spawns,
|
||||||
|
Spells,
|
||||||
|
Status,
|
||||||
|
TCP_Connection,
|
||||||
|
Tasks,
|
||||||
|
Tradeskills,
|
||||||
|
Trading,
|
||||||
|
Tribute,
|
||||||
|
UCS_Server,
|
||||||
|
WebInterface_Server,
|
||||||
|
World_Server,
|
||||||
|
Zone_Server,
|
||||||
|
MySQLError,
|
||||||
|
MySQLQuery,
|
||||||
|
Mercenaries,
|
||||||
|
QuestDebug,
|
||||||
|
Server_Client_Packet,
|
||||||
|
Client_Server_Packet_Unhandled,
|
||||||
|
Server_Client_Packet_With_Dump,
|
||||||
|
Client_Server_Packet_With_Dump,
|
||||||
|
Login_Server,
|
||||||
|
Client_Login,
|
||||||
|
Headless_Client,
|
||||||
|
HP_Update,
|
||||||
|
FixZ,
|
||||||
|
Food,
|
||||||
|
Traps,
|
||||||
|
NPCRoamBox,
|
||||||
|
NPCScaling,
|
||||||
|
MobAppearance,
|
||||||
|
MaxCategoryID /* Don't Remove this */
|
||||||
|
};
|
||||||
|
|
||||||
enum LogCategory {
|
/**
|
||||||
None = 0,
|
* If you add to this, make sure you update LogCategory
|
||||||
AA,
|
*/
|
||||||
AI,
|
static const char* LogCategoryName[LogCategory::MaxCategoryID] = {
|
||||||
Aggro,
|
"",
|
||||||
Attack,
|
"AA",
|
||||||
Client_Server_Packet,
|
"AI",
|
||||||
Combat,
|
"Aggro",
|
||||||
Commands,
|
"Attack",
|
||||||
Crash,
|
"Packet :: Client -> Server",
|
||||||
Debug,
|
"Combat",
|
||||||
Doors,
|
"Commands",
|
||||||
Error,
|
"Crash",
|
||||||
Guilds,
|
"Debug",
|
||||||
Inventory,
|
"Doors",
|
||||||
Launcher,
|
"Error",
|
||||||
Netcode,
|
"Guilds",
|
||||||
Normal,
|
"Inventory",
|
||||||
Object,
|
"Launcher",
|
||||||
Pathing,
|
"Netcode",
|
||||||
QS_Server,
|
"Normal",
|
||||||
Quests,
|
"Object",
|
||||||
Rules,
|
"Pathing",
|
||||||
Skills,
|
"QS Server",
|
||||||
Spawns,
|
"Quests",
|
||||||
Spells,
|
"Rules",
|
||||||
Status,
|
"Skills",
|
||||||
TCP_Connection,
|
"Spawns",
|
||||||
Tasks,
|
"Spells",
|
||||||
Tradeskills,
|
"Status",
|
||||||
Trading,
|
"TCP Connection",
|
||||||
Tribute,
|
"Tasks",
|
||||||
UCS_Server,
|
"Tradeskills",
|
||||||
WebInterface_Server,
|
"Trading",
|
||||||
World_Server,
|
"Tribute",
|
||||||
Zone_Server,
|
"UCS Server",
|
||||||
MySQLError,
|
"WebInterface Server",
|
||||||
MySQLQuery,
|
"World Server",
|
||||||
Mercenaries,
|
"Zone Server",
|
||||||
QuestDebug,
|
"MySQL Error",
|
||||||
Server_Client_Packet,
|
"MySQL Query",
|
||||||
Client_Server_Packet_Unhandled,
|
"Mercenaries",
|
||||||
Server_Client_Packet_With_Dump,
|
"Quest Debug",
|
||||||
Client_Server_Packet_With_Dump,
|
"Packet :: Server -> Client",
|
||||||
Login_Server,
|
"Packet :: Client -> Server Unhandled",
|
||||||
Client_Login,
|
"Packet :: Server -> Client (Dump)",
|
||||||
Headless_Client,
|
"Packet :: Client -> Server (Dump)",
|
||||||
HP_Update,
|
"Login Server",
|
||||||
FixZ,
|
"Client Login",
|
||||||
Food,
|
"Headless Client",
|
||||||
Traps,
|
"HP Update",
|
||||||
MaxCategoryID /* Don't Remove this*/
|
"FixZ",
|
||||||
};
|
"Food",
|
||||||
|
"Traps",
|
||||||
/* If you add to this, make sure you update LogCategory */
|
"NPC Roam Box",
|
||||||
static const char* LogCategoryName[LogCategory::MaxCategoryID] = {
|
"NPC Scaling",
|
||||||
"",
|
"Mob Appearance"
|
||||||
"AA",
|
};
|
||||||
"AI",
|
|
||||||
"Aggro",
|
|
||||||
"Attack",
|
|
||||||
"Packet :: Client -> Server",
|
|
||||||
"Combat",
|
|
||||||
"Commands",
|
|
||||||
"Crash",
|
|
||||||
"Debug",
|
|
||||||
"Doors",
|
|
||||||
"Error",
|
|
||||||
"Guilds",
|
|
||||||
"Inventory",
|
|
||||||
"Launcher",
|
|
||||||
"Netcode",
|
|
||||||
"Normal",
|
|
||||||
"Object",
|
|
||||||
"Pathing",
|
|
||||||
"QS Server",
|
|
||||||
"Quests",
|
|
||||||
"Rules",
|
|
||||||
"Skills",
|
|
||||||
"Spawns",
|
|
||||||
"Spells",
|
|
||||||
"Status",
|
|
||||||
"TCP Connection",
|
|
||||||
"Tasks",
|
|
||||||
"Tradeskills",
|
|
||||||
"Trading",
|
|
||||||
"Tribute",
|
|
||||||
"UCS Server",
|
|
||||||
"WebInterface Server",
|
|
||||||
"World Server",
|
|
||||||
"Zone Server",
|
|
||||||
"MySQL Error",
|
|
||||||
"MySQL Query",
|
|
||||||
"Mercenaries",
|
|
||||||
"Quest Debug",
|
|
||||||
"Packet :: Server -> Client",
|
|
||||||
"Packet :: Client -> Server Unhandled",
|
|
||||||
"Packet :: Server -> Client (Dump)",
|
|
||||||
"Packet :: Client -> Server (Dump)",
|
|
||||||
"Login Server",
|
|
||||||
"Client Login",
|
|
||||||
"Headless Client",
|
|
||||||
"HP Update",
|
|
||||||
"FixZ",
|
|
||||||
"Food",
|
|
||||||
"Traps"
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define Log(debug_level, log_category, message, ...) do {\
|
#define Log(debug_level, log_category, message, ...) do {\
|
||||||
if (LogSys.log_settings[log_category].is_category_enabled == 1)\
|
if (LogSys.log_settings[log_category].is_category_enabled == 1)\
|
||||||
LogSys.Out(debug_level, log_category, message, ##__VA_ARGS__);\
|
LogSys.Out(debug_level, log_category, message, ##__VA_ARGS__);\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define LogF(debug_level, log_category, message, ...) do {\
|
#define LogF(debug_level, log_category, message, ...) do {\
|
||||||
if (LogSys.log_settings[log_category].is_category_enabled == 1)\
|
if (LogSys.log_settings[log_category].is_category_enabled == 1)\
|
||||||
LogSys.OutF(debug_level, log_category, message, ##__VA_ARGS__);\
|
LogSys.OutF(debug_level, log_category, message, ##__VA_ARGS__);\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
class EQEmuLogSys {
|
class EQEmuLogSys {
|
||||||
@ -163,21 +172,30 @@ public:
|
|||||||
EQEmuLogSys();
|
EQEmuLogSys();
|
||||||
~EQEmuLogSys();
|
~EQEmuLogSys();
|
||||||
|
|
||||||
void CloseFileLogs(); /* Close File Logs wherever necessary, either at zone shutdown or entire process shutdown for everything else. This should be handled on deconstructor but to be safe we use it anyways. */
|
/**
|
||||||
void LoadLogSettingsDefaults(); /* Initializes log_settings and sets some defaults if DB is not present */
|
* Close File Logs wherever necessary, either at zone shutdown or entire process shutdown for everything else.
|
||||||
void MakeDirectory(const std::string &directory_name); /* Platform independent way of performing a MakeDirectory based on name */
|
* This should be handled on deconstructor but to be safe we use it anyways.
|
||||||
/*
|
*/
|
||||||
The one and only Logging function that uses a debug level as a parameter, as well as a log_category
|
void CloseFileLogs();
|
||||||
log_category - defined in Logs::LogCategory::[]
|
void LoadLogSettingsDefaults();
|
||||||
log_category name resolution works by passing the enum int ID to Logs::LogCategoryName[category_id]
|
void MakeDirectory(const std::string &directory_name);
|
||||||
|
|
||||||
Example: EQEmuLogSys::Out(Logs::General, Logs::Guilds, "This guild has no leader present");
|
/**
|
||||||
- This would pipe the same category and debug level to all output formats, but the internal memory reference of log_settings would
|
* The one and only Logging function that uses a debug level as a parameter, as well as a log_category
|
||||||
be checked against to see if that piped output is set to actually process it for the category and debug level
|
* log_category - defined in Logs::LogCategory::[]
|
||||||
|
* log_category name resolution works by passing the enum int ID to Logs::LogCategoryName[category_id]
|
||||||
|
*
|
||||||
|
* Example: EQEmuLogSys::Out(Logs::General, Logs::Guilds, "This guild has no leader present");
|
||||||
|
* - This would pipe the same category and debug level to all output formats, but the internal memory reference of log_settings would
|
||||||
|
* be checked against to see if that piped output is set to actually process it for the category and debug level
|
||||||
*/
|
*/
|
||||||
void Out(Logs::DebugLevel debug_level, uint16 log_category, std::string message, ...);
|
void Out(Logs::DebugLevel debug_level, uint16 log_category, std::string message, ...);
|
||||||
void SetCurrentTimeStamp(char* time_stamp); /* Used in file logs to prepend a timestamp entry for logs */
|
|
||||||
void StartFileLogs(const std::string &log_name = ""); /* Used to declare the processes file log and to keep it open for later use */
|
/**
|
||||||
|
* Used in file logs to prepend a timestamp entry for logs
|
||||||
|
*/
|
||||||
|
void SetCurrentTimeStamp(char* time_stamp);
|
||||||
|
void StartFileLogs(const std::string &log_name = "");
|
||||||
|
|
||||||
template <typename... Args>
|
template <typename... Args>
|
||||||
void OutF(Logs::DebugLevel debug_level, uint16 log_category, const char *fmt, const Args&... args)
|
void OutF(Logs::DebugLevel debug_level, uint16 log_category, const char *fmt, const Args&... args)
|
||||||
@ -186,16 +204,16 @@ public:
|
|||||||
Out(debug_level, log_category, log_str);
|
Out(debug_level, log_category, log_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
LogSettings Struct
|
* LogSettings Struct
|
||||||
|
*
|
||||||
This struct is the master reference for all settings for each category, and for each output
|
* This struct is the master reference for all settings for each category, and for each output
|
||||||
|
*
|
||||||
log_to_file[category_id] = [1-3] - Sets debug level for category to output to file
|
* log_to_file[category_id] = [1-3] - Sets debug level for category to output to file
|
||||||
log_to_console[category_id] = [1-3] - Sets debug level for category to output to console
|
* log_to_console[category_id] = [1-3] - Sets debug level for category to output to console
|
||||||
log_to_gmsay[category_id] = [1-3] - Sets debug level for category to output to gmsay
|
* log_to_gmsay[category_id] = [1-3] - Sets debug level for category to output to gmsay
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct LogSettings {
|
struct LogSettings {
|
||||||
uint8 log_to_file;
|
uint8 log_to_file;
|
||||||
uint8 log_to_console;
|
uint8 log_to_console;
|
||||||
@ -203,32 +221,62 @@ public:
|
|||||||
uint8 is_category_enabled; /* When any log output in a category > 0, set this to 1 as (Enabled) */
|
uint8 is_category_enabled; /* When any log output in a category > 0, set this to 1 as (Enabled) */
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Internally used memory reference for all log settings per category.
|
/**
|
||||||
These are loaded via DB and have defaults loaded in LoadLogSettingsDefaults.
|
* Internally used memory reference for all log settings per category
|
||||||
Database loaded via Database::LoadLogSettings(log_settings)
|
* These are loaded via DB and have defaults loaded in LoadLogSettingsDefaults
|
||||||
|
* Database loaded via Database::LoadLogSettings(log_settings)
|
||||||
*/
|
*/
|
||||||
LogSettings log_settings[Logs::LogCategory::MaxCategoryID];
|
LogSettings log_settings[Logs::LogCategory::MaxCategoryID];
|
||||||
|
|
||||||
bool file_logs_enabled; /* Set when log settings are loaded to determine if keeping a file open is necessary */
|
bool file_logs_enabled;
|
||||||
|
|
||||||
int log_platform; /* Sets Executable platform (Zone/World/UCS) etc. */
|
/**
|
||||||
|
* Sets Executable platform (Zone/World/UCS) etc.
|
||||||
|
*/
|
||||||
|
int log_platform;
|
||||||
|
|
||||||
std::string platform_file_name; /* File name used in writing logs */
|
/**
|
||||||
|
* File name used in writing logs
|
||||||
|
*/
|
||||||
|
std::string platform_file_name;
|
||||||
|
|
||||||
uint16 GetGMSayColorFromCategory(uint16 log_category); /* GMSay Client Message colors mapped by category */
|
/**
|
||||||
|
* GMSay Client Message colors mapped by category
|
||||||
|
*
|
||||||
|
* @param log_category
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
uint16 GetGMSayColorFromCategory(uint16 log_category);
|
||||||
|
|
||||||
void OnLogHookCallBackZone(std::function<void(uint16 log_type, const std::string&)> f) { on_log_gmsay_hook = f; }
|
void OnLogHookCallBackZone(std::function<void(uint16 log_type, const std::string&)> f) { on_log_gmsay_hook = f; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::function<void(uint16 log_category, const std::string&)> on_log_gmsay_hook; /* Callback pointer to zone process for hooking logs to zone using GMSay */
|
|
||||||
std::string FormatOutMessageString(uint16 log_category, const std::string &in_message); /* Formats log messages like '[Category] This is a log message' */
|
|
||||||
std::string GetLinuxConsoleColorFromCategory(uint16 log_category); /* Linux console color messages mapped by category */
|
|
||||||
|
|
||||||
uint16 GetWindowsConsoleColorFromCategory(uint16 log_category); /* Windows console color messages mapped by category */
|
/**
|
||||||
|
* Callback pointer to zone process for hooking logs to zone using GMSay
|
||||||
|
*/
|
||||||
|
std::function<void(uint16 log_category, const std::string&)> on_log_gmsay_hook;
|
||||||
|
|
||||||
void ProcessConsoleMessage(uint16 debug_level, uint16 log_category, const std::string &message); /* ProcessConsoleMessage called via Log */
|
/**
|
||||||
void ProcessGMSay(uint16 debug_level, uint16 log_category, const std::string &message); /* ProcessGMSay called via Log */
|
* Formats log messages like '[Category] This is a log message'
|
||||||
void ProcessLogWrite(uint16 debug_level, uint16 log_category, const std::string &message); /* ProcessLogWrite called via Log */
|
*/
|
||||||
|
std::string FormatOutMessageString(uint16 log_category, const std::string &in_message);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Linux console color messages mapped by category
|
||||||
|
* @param log_category
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
std::string GetLinuxConsoleColorFromCategory(uint16 log_category);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Windows console color messages mapped by category
|
||||||
|
*/
|
||||||
|
uint16 GetWindowsConsoleColorFromCategory(uint16 log_category);
|
||||||
|
|
||||||
|
void ProcessConsoleMessage(uint16 debug_level, uint16 log_category, const std::string &message);
|
||||||
|
void ProcessGMSay(uint16 debug_level, uint16 log_category, const std::string &message);
|
||||||
|
void ProcessLogWrite(uint16 debug_level, uint16 log_category, const std::string &message);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern EQEmuLogSys LogSys;
|
extern EQEmuLogSys LogSys;
|
||||||
|
|||||||
@ -1,39 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
#include <functional>
|
|
||||||
#include "event_loop.h"
|
|
||||||
|
|
||||||
namespace EQ {
|
|
||||||
class BackgroundTask
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
typedef std::function<void(void)> BackgroundTaskFunction;
|
|
||||||
struct BackgroundTaskBaton
|
|
||||||
{
|
|
||||||
BackgroundTaskFunction fn;
|
|
||||||
BackgroundTaskFunction on_finish;
|
|
||||||
};
|
|
||||||
|
|
||||||
BackgroundTask(BackgroundTaskFunction fn, BackgroundTaskFunction on_finish) {
|
|
||||||
uv_work_t *m_work = new uv_work_t;
|
|
||||||
memset(m_work, 0, sizeof(uv_work_t));
|
|
||||||
BackgroundTaskBaton *baton = new BackgroundTaskBaton();
|
|
||||||
baton->fn = fn;
|
|
||||||
baton->on_finish = on_finish;
|
|
||||||
|
|
||||||
m_work->data = baton;
|
|
||||||
uv_queue_work(EventLoop::Get().Handle(), m_work, [](uv_work_t* req) {
|
|
||||||
BackgroundTaskBaton *baton = (BackgroundTaskBaton*)req->data;
|
|
||||||
baton->fn();
|
|
||||||
}, [](uv_work_t* req, int status) {
|
|
||||||
BackgroundTaskBaton *baton = (BackgroundTaskBaton*)req->data;
|
|
||||||
baton->on_finish();
|
|
||||||
delete baton;
|
|
||||||
delete req;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
~BackgroundTask() {
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
100
common/event/task.h
Normal file
100
common/event/task.h
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <functional>
|
||||||
|
#include <exception>
|
||||||
|
#include "event_loop.h"
|
||||||
|
#include "../any.h"
|
||||||
|
|
||||||
|
namespace EQ {
|
||||||
|
class Task
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
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;
|
||||||
|
struct TaskBaton
|
||||||
|
{
|
||||||
|
TaskFn fn;
|
||||||
|
ResolveFn on_then;
|
||||||
|
RejectFn on_catch;
|
||||||
|
FinallyFn on_finally;
|
||||||
|
bool has_result;
|
||||||
|
EQEmu::Any result;
|
||||||
|
bool has_error;
|
||||||
|
std::exception error;
|
||||||
|
};
|
||||||
|
|
||||||
|
Task(TaskFn fn) {
|
||||||
|
m_fn = fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
~Task() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Task& Then(ResolveFn fn) {
|
||||||
|
m_then = fn;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Task& Catch(RejectFn fn) {
|
||||||
|
m_catch = fn;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
Task& Finally(FinallyFn fn) {
|
||||||
|
m_finally = fn;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Run() {
|
||||||
|
uv_work_t *m_work = new uv_work_t;
|
||||||
|
memset(m_work, 0, sizeof(uv_work_t));
|
||||||
|
TaskBaton *baton = new TaskBaton();
|
||||||
|
baton->fn = m_fn;
|
||||||
|
baton->on_then = m_then;
|
||||||
|
baton->on_catch = m_catch;
|
||||||
|
baton->on_finally = m_finally;
|
||||||
|
baton->has_result = false;
|
||||||
|
baton->has_error = false;
|
||||||
|
|
||||||
|
m_work->data = baton;
|
||||||
|
|
||||||
|
uv_queue_work(EventLoop::Get().Handle(), m_work, [](uv_work_t* req) {
|
||||||
|
TaskBaton *baton = (TaskBaton*)req->data;
|
||||||
|
|
||||||
|
baton->fn([baton](const EQEmu::Any& result) {
|
||||||
|
baton->has_error = false;
|
||||||
|
baton->has_result = true;
|
||||||
|
baton->result = result;
|
||||||
|
}, [baton](const std::exception &err) {
|
||||||
|
baton->has_error = true;
|
||||||
|
baton->has_result = false;
|
||||||
|
baton->error = err;
|
||||||
|
});
|
||||||
|
}, [](uv_work_t* req, int status) {
|
||||||
|
TaskBaton *baton = (TaskBaton*)req->data;
|
||||||
|
|
||||||
|
if (baton->has_error && baton->on_catch) {
|
||||||
|
baton->on_catch(baton->error);
|
||||||
|
}
|
||||||
|
else if (baton->has_result && baton->on_then) {
|
||||||
|
baton->on_then(baton->result);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (baton->on_finally) {
|
||||||
|
baton->on_finally();
|
||||||
|
}
|
||||||
|
|
||||||
|
delete baton;
|
||||||
|
delete req;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
TaskFn m_fn;
|
||||||
|
ResolveFn m_then;
|
||||||
|
RejectFn m_catch;
|
||||||
|
FinallyFn m_finally;
|
||||||
|
};
|
||||||
|
}
|
||||||
@ -1,5 +1,4 @@
|
|||||||
#include "event_sub.h"
|
#include "event_sub.h"
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
void EventSubscriptionWatcher::Subscribe(const std::string &event_name)
|
void EventSubscriptionWatcher::Subscribe(const std::string &event_name)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
class EventSubscriptionWatcher
|
class EventSubscriptionWatcher
|
||||||
{
|
{
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "faction.h"
|
#include "faction.h"
|
||||||
#include "races.h"
|
#include "races.h"
|
||||||
|
#include "rulesys.h"
|
||||||
|
|
||||||
const char *FactionValueToString(FACTION_VALUE fv)
|
const char *FactionValueToString(FACTION_VALUE fv)
|
||||||
{
|
{
|
||||||
@ -59,34 +60,31 @@ FACTION_VALUE CalculateFaction(FactionMods* fm, int32 tmpCharacter_value)
|
|||||||
if (fm) {
|
if (fm) {
|
||||||
character_value += fm->base + fm->class_mod + fm->race_mod + fm->deity_mod;
|
character_value += fm->base + fm->class_mod + fm->race_mod + fm->deity_mod;
|
||||||
}
|
}
|
||||||
if (character_value >= 1101) {
|
if (character_value >= RuleI(Faction, AllyFactionMinimum)) {
|
||||||
return FACTION_ALLY;
|
return FACTION_ALLY;
|
||||||
}
|
}
|
||||||
if (character_value >= 701 && character_value <= 1100) {
|
if (character_value >= RuleI(Faction, WarmlyFactionMinimum)) {
|
||||||
return FACTION_WARMLY;
|
return FACTION_WARMLY;
|
||||||
}
|
}
|
||||||
if (character_value >= 401 && character_value <= 700) {
|
if (character_value >= RuleI(Faction, KindlyFactionMinimum)) {
|
||||||
return FACTION_KINDLY;
|
return FACTION_KINDLY;
|
||||||
}
|
}
|
||||||
if (character_value >= 101 && character_value <= 400) {
|
if (character_value >= RuleI(Faction, AmiablyFactionMinimum)) {
|
||||||
return FACTION_AMIABLE;
|
return FACTION_AMIABLE;
|
||||||
}
|
}
|
||||||
if (character_value >= 0 && character_value <= 100) {
|
if (character_value >= RuleI(Faction, IndifferentlyFactionMinimum)) {
|
||||||
return FACTION_INDIFFERENT;
|
return FACTION_INDIFFERENT;
|
||||||
}
|
}
|
||||||
if (character_value >= -100 && character_value <= -1) {
|
if (character_value >= RuleI(Faction, ApprehensivelyFactionMinimum)) {
|
||||||
return FACTION_APPREHENSIVE;
|
return FACTION_APPREHENSIVE;
|
||||||
}
|
}
|
||||||
if (character_value >= -700 && character_value <= -101) {
|
if (character_value >= RuleI(Faction, DubiouslyFactionMinimum)) {
|
||||||
return FACTION_DUBIOUS;
|
return FACTION_DUBIOUS;
|
||||||
}
|
}
|
||||||
if (character_value >= -999 && character_value <= -701) {
|
if (character_value >= RuleI(Faction, ThreateninglyFactionMinimum)) {
|
||||||
return FACTION_THREATENLY;
|
return FACTION_THREATENLY;
|
||||||
}
|
}
|
||||||
if (character_value <= -1000) {
|
return FACTION_SCOWLS;
|
||||||
return FACTION_SCOWLS;
|
|
||||||
}
|
|
||||||
return FACTION_INDIFFERENT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// this function should check if some races have more than one race define
|
// this function should check if some races have more than one race define
|
||||||
|
|||||||
4
common/faction.h
Normal file → Executable file
4
common/faction.h
Normal file → Executable file
@ -50,6 +50,8 @@ struct NPCFactionList {
|
|||||||
struct FactionMods
|
struct FactionMods
|
||||||
{
|
{
|
||||||
int32 base;
|
int32 base;
|
||||||
|
int16 min; // The lowest your personal earned faction can go - before race/class/diety adjustments.
|
||||||
|
int16 max; // The highest your personal earned faction can go - before race/class/diety adjustments.
|
||||||
int32 class_mod;
|
int32 class_mod;
|
||||||
int32 race_mod;
|
int32 race_mod;
|
||||||
int32 deity_mod;
|
int32 deity_mod;
|
||||||
@ -59,6 +61,8 @@ struct Faction {
|
|||||||
int32 id;
|
int32 id;
|
||||||
std::map<std::string, int16> mods;
|
std::map<std::string, int16> mods;
|
||||||
int16 base;
|
int16 base;
|
||||||
|
int16 min; // The lowest your personal earned faction can go - before race/class/diety adjustments.
|
||||||
|
int16 max; // The highest your personal earned faction can go - before race/class/diety adjustments.
|
||||||
char name[50];
|
char name[50];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -150,10 +150,11 @@ enum { //reuse times
|
|||||||
|
|
||||||
enum { //timer settings, all in milliseconds
|
enum { //timer settings, all in milliseconds
|
||||||
AImovement_duration = 100,
|
AImovement_duration = 100,
|
||||||
AIthink_duration = 150,
|
AIthink_duration = 50,
|
||||||
AIscanarea_delay = 6000,
|
AIscanarea_delay = 6000,
|
||||||
AIfeignremember_delay = 500,
|
AIfeignremember_delay = 500,
|
||||||
AItarget_check_duration = 500,
|
AItarget_check_duration = 500,
|
||||||
|
AI_scan_door_open_interval = 1000,
|
||||||
// AIClientScanarea_delay = 750, //used in REVERSE_AGGRO
|
// AIClientScanarea_delay = 750, //used in REVERSE_AGGRO
|
||||||
AIassistcheck_delay = 3000, //now often a fighting NPC will yell for help
|
AIassistcheck_delay = 3000, //now often a fighting NPC will yell for help
|
||||||
AI_check_signal_timer_delay = 500, // How often EVENT_SIGNAL checks are processed
|
AI_check_signal_timer_delay = 500, // How often EVENT_SIGNAL checks are processed
|
||||||
@ -219,6 +220,9 @@ enum { //some random constants
|
|||||||
//the square of the maximum range at whihc you could possibly use NPC services (shop, tribute, etc)
|
//the square of the maximum range at whihc you could possibly use NPC services (shop, tribute, etc)
|
||||||
#define USE_NPC_RANGE2 200*200 //arbitrary right now
|
#define USE_NPC_RANGE2 200*200 //arbitrary right now
|
||||||
|
|
||||||
|
// Squared range for rampage 75.0 * 75.0 for now
|
||||||
|
#define NPC_RAMPAGE_RANGE2 5625.0f
|
||||||
|
|
||||||
//the formula for experience for killing a mob.
|
//the formula for experience for killing a mob.
|
||||||
//level is the only valid variable to use
|
//level is the only valid variable to use
|
||||||
#define EXP_FORMULA level*level*75*35/10
|
#define EXP_FORMULA level*level*75*35/10
|
||||||
@ -264,13 +268,10 @@ enum {
|
|||||||
commandBanPlayers = 100, //can set bans on players
|
commandBanPlayers = 100, //can set bans on players
|
||||||
commandChangeDatarate = 201, //edit client's data rate
|
commandChangeDatarate = 201, //edit client's data rate
|
||||||
commandZoneToCoords = 0, //can #zone with coords
|
commandZoneToCoords = 0, //can #zone with coords
|
||||||
commandInterrogateInv = 100 //below this == only log on error state and self-only target dump
|
commandInterrogateInv = 100, //below this == only log on error state and self-only target dump
|
||||||
|
commandInvSnapshot = 150 //ability to clear/restore snapshots
|
||||||
};
|
};
|
||||||
|
|
||||||
//default states for logging flag on NPCs and clients (having NPCs on by default is prolly a bad idea)
|
|
||||||
#define CLIENT_DEFAULT_LOGGING_ENABLED true
|
|
||||||
#define NPC_DEFAULT_LOGGING_ENABLED false
|
|
||||||
|
|
||||||
|
|
||||||
// This is the item ID we use for say links, we use the max that fits in 5 ASCII chars
|
// This is the item ID we use for say links, we use the max that fits in 5 ASCII chars
|
||||||
#define SAYLINK_ITEM_ID 0xFFFFF
|
#define SAYLINK_ITEM_ID 0xFFFFF
|
||||||
|
|||||||
61
common/glm/.appveyor.yml
Normal file
61
common/glm/.appveyor.yml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
shallow_clone: true
|
||||||
|
|
||||||
|
platform:
|
||||||
|
- x86
|
||||||
|
- x64
|
||||||
|
|
||||||
|
configuration:
|
||||||
|
- Debug
|
||||||
|
- Release
|
||||||
|
|
||||||
|
image:
|
||||||
|
- Visual Studio 2013
|
||||||
|
- Visual Studio 2015
|
||||||
|
- Visual Studio 2017
|
||||||
|
|
||||||
|
environment:
|
||||||
|
matrix:
|
||||||
|
- GLM_ARGUMENTS: -DGLM_TEST_FORCE_PURE=ON
|
||||||
|
- GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
|
||||||
|
- GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
exclude:
|
||||||
|
- image: Visual Studio 2013
|
||||||
|
GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON
|
||||||
|
- image: Visual Studio 2013
|
||||||
|
configuration: Debug
|
||||||
|
- image: Visual Studio 2015
|
||||||
|
platform: x86
|
||||||
|
- image: Visual Studio 2015
|
||||||
|
configuration: Debug
|
||||||
|
- image: Visual Studio 2017
|
||||||
|
platform: x86
|
||||||
|
|
||||||
|
before_build:
|
||||||
|
- ps: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
|
||||||
|
if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2013") {
|
||||||
|
$env:generator="Visual Studio 12 2013"
|
||||||
|
}
|
||||||
|
if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2015") {
|
||||||
|
$env:generator="Visual Studio 14 2015"
|
||||||
|
}
|
||||||
|
if ("$env:APPVEYOR_JOB_NAME" -match "Image: Visual Studio 2017") {
|
||||||
|
$env:generator="Visual Studio 15 2017"
|
||||||
|
}
|
||||||
|
if ($env:PLATFORM -eq "x64") {
|
||||||
|
$env:generator="$env:generator Win64"
|
||||||
|
}
|
||||||
|
echo generator="$env:generator"
|
||||||
|
cmake .. -G "$env:generator" -DGLM_QUIET=ON -DGLM_TEST_ENABLE=ON "$env:GLM_ARGUMENTS"
|
||||||
|
|
||||||
|
build_script:
|
||||||
|
- cmake --build . --config %CONFIGURATION% -- /m /v:minimal
|
||||||
|
|
||||||
|
test_script:
|
||||||
|
- ctest -j4 -C %CONFIGURATION%
|
||||||
|
|
||||||
|
deploy: off
|
||||||
57
common/glm/.gitignore
vendored
Normal file
57
common/glm/.gitignore
vendored
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# Compiled Object files
|
||||||
|
*.slo
|
||||||
|
*.lo
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Compiled Dynamic libraries
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
|
||||||
|
# Fortran module files
|
||||||
|
*.mod
|
||||||
|
|
||||||
|
# Compiled Static libraries
|
||||||
|
*.lai
|
||||||
|
*.la
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
|
||||||
|
# CMake
|
||||||
|
CMakeCache.txt
|
||||||
|
CMakeFiles
|
||||||
|
cmake_install.cmake
|
||||||
|
install_manifest.txt
|
||||||
|
*.cmake
|
||||||
|
# ^ May need to add future .cmake files as exceptions
|
||||||
|
|
||||||
|
# Test logs
|
||||||
|
Testing/*
|
||||||
|
|
||||||
|
# Test input
|
||||||
|
test/gtc/*.dds
|
||||||
|
|
||||||
|
# Project Files
|
||||||
|
Makefile
|
||||||
|
*.cbp
|
||||||
|
*.user
|
||||||
|
|
||||||
|
# Misc.
|
||||||
|
*.log
|
||||||
|
|
||||||
|
# local build(s)
|
||||||
|
build*
|
||||||
|
|
||||||
|
/.vs
|
||||||
|
/CMakeSettings.json
|
||||||
|
.DS_Store
|
||||||
575
common/glm/.travis.yml
Normal file
575
common/glm/.travis.yml
Normal file
@ -0,0 +1,575 @@
|
|||||||
|
language: cpp
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode6.4
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_unknown_release
|
||||||
|
- cd ./build_unknown_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_DISABLE_AUTO_DETECTION=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++unknown-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode6.4
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_98_release
|
||||||
|
- cd ./build_pure_98_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++98-pure-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode6.4
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_ms_release
|
||||||
|
- cd ./build_pure_ms_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++98-pure-ms-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode6.4
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_11_release
|
||||||
|
- cd ./build_pure_11_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++11-pure-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode6.4
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_sse2_11_release
|
||||||
|
- cd ./build_sse2_11_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++11-sse2-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode8
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_14_release
|
||||||
|
- cd ./build_pure_14_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++14-pure-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode8
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_sse3_14_release
|
||||||
|
- cd ./build_sse3_14_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++14-sse3-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode8
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_avx_14_release
|
||||||
|
- cd ./build_avx_14_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++14-avx-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode8
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_avx_14_debug
|
||||||
|
- cd ./build_avx_14_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++14-avx-debug"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode10
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_17_release
|
||||||
|
- cd ./build_pure_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++17-pure-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode10
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_17_debug
|
||||||
|
- cd ./build_pure_17_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++17-pure-debug"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode10
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_avx_17_release
|
||||||
|
- cd ./build_avx_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++17-avx-release"
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode10
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_avx_17_debug
|
||||||
|
- cd ./build_avx_17_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="INFO=C++17-avx-debug"
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-4.9
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9 && INFO=C++98-pure-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_98_release
|
||||||
|
- cd ./build_pure_98_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-4.9
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9 && INFO=C++98-pure-debug"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_98_debug
|
||||||
|
- cd ./build_pure_98_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-4.9
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9 && INFO=C++98-pure-ms"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_ms_release
|
||||||
|
- cd ./build_pure_ms_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-5
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5 && INFO=C++11-pure-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_11_release
|
||||||
|
- cd ./build_pure_11_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-5
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5 && INFO=C++11-pure-debug"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_11_debug
|
||||||
|
- cd ./build_pure_11_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-5
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5 && INFO=C++11-pure-ms"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_ms_release
|
||||||
|
- cd ./build_pure_ms_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-5
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5 && INFO=C++11-sse3-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_sse3_ms_release
|
||||||
|
- cd ./build_sse3_ms_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-6
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6 && INFO=C++14-pure-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_14_release
|
||||||
|
- cd ./build_pure_14_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-6
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6 && INFO=C++14-pure-debug"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_14_debug
|
||||||
|
- cd ./build_pure_14_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-6
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6 && INFO=C++14-pure-ms"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_ms_release
|
||||||
|
- cd ./build_pure_ms_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-6
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6 && INFO=C++14-sse3-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_sse3_ms_release
|
||||||
|
- cd ./build_sse3_ms_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..
|
||||||
|
- cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-pure-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_17_release
|
||||||
|
- cd ./build_pure_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-sse2-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_sse2_17_release
|
||||||
|
- cd ./build_sse2_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-sse3-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_sse3_17_release
|
||||||
|
- cd ./build_sse3_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-avx-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_avx_17_release
|
||||||
|
- cd ./build_avx_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
packages:
|
||||||
|
- g++-7
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && INFO=C++17-avx2-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_avx2_17_release
|
||||||
|
- cd ./build_avx2_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX2=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.6
|
||||||
|
packages:
|
||||||
|
- clang-3.6
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6 && INFO=C++14-pure-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_14_release
|
||||||
|
- cd ./build_pure_14_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.6
|
||||||
|
packages:
|
||||||
|
- clang-3.6
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6 && INFO=C++14-pure-debug"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_14_debug
|
||||||
|
- cd ./build_pure_14_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- ubuntu-toolchain-r-test
|
||||||
|
- llvm-toolchain-precise-3.6
|
||||||
|
packages:
|
||||||
|
- clang-3.6
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6 && INFO=C++14-avx-debug"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_avx_14_debug
|
||||||
|
- cd ./build_avx_14_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0 && INFO=C++17-pure-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_17_release
|
||||||
|
- cd ./build_pure_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0 && INFO=C++17-pure-debug"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_pure_17_debug
|
||||||
|
- cd ./build_pure_17_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0 && INFO=C++17-sse3-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_sse3_17_release
|
||||||
|
- cd ./build_sse3_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0 && INFO=C++17-sse3-debug"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_sse3_17_debug
|
||||||
|
- cd ./build_sse3_17_debug
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources:
|
||||||
|
- llvm-toolchain-trusty-5.0
|
||||||
|
packages:
|
||||||
|
- clang-5.0
|
||||||
|
env:
|
||||||
|
- MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0 && INFO=C++17-ssse3-release"
|
||||||
|
script:
|
||||||
|
- cmake --version
|
||||||
|
- mkdir ./build_ssse3_17_release
|
||||||
|
- cd ./build_ssse3_17_release
|
||||||
|
- cmake -DCMAKE_CXX_COMPILER=$COMPILER -DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSSE3=ON ..
|
||||||
|
- cmake -E time cmake --build .
|
||||||
|
- ctest
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- eval "${MATRIX_EVAL}"
|
||||||
|
|
||||||
|
|
||||||
277
common/glm/CMakeLists.txt
Normal file
277
common/glm/CMakeLists.txt
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.2 FATAL_ERROR)
|
||||||
|
cmake_policy(VERSION 3.2)
|
||||||
|
|
||||||
|
set(GLM_VERSION "0.9.9")
|
||||||
|
project(glm VERSION ${GLM_VERSION} LANGUAGES CXX)
|
||||||
|
|
||||||
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
|
||||||
|
enable_testing()
|
||||||
|
|
||||||
|
option(GLM_QUIET "No CMake Message" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_CXX_14 "Enable C++ 14" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_CXX_17 "Enable C++ 17" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_CXX_20 "Enable C++ 20" OFF)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
if(GLM_TEST_ENABLE_CXX_20)
|
||||||
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
|
add_definitions(-DGLM_FORCE_CXX2A)
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message(STATUS "GLM: Build with C++20 features")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_CXX_17)
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
add_definitions(-DGLM_FORCE_CXX17)
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message(STATUS "GLM: Build with C++17 features")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_CXX_14)
|
||||||
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
add_definitions(-DGLM_FORCE_CXX14)
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message(STATUS "GLM: Build with C++14 features")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_CXX_11)
|
||||||
|
set(CMAKE_CXX_STANDARD 11)
|
||||||
|
add_definitions(-DGLM_FORCE_CXX11)
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message(STATUS "GLM: Build with C++11 features")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_CXX_98)
|
||||||
|
set(CMAKE_CXX_STANDARD 98)
|
||||||
|
add_definitions(-DGLM_FORCE_CXX98)
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message(STATUS "GLM: Build with C++98 features")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(GLM_TEST_ENABLE_LANG_EXTENSIONS "Enable language extensions" OFF)
|
||||||
|
|
||||||
|
option(GLM_DISABLE_AUTO_DETECTION "Enable language extensions" OFF)
|
||||||
|
|
||||||
|
if(GLM_DISABLE_AUTO_DETECTION)
|
||||||
|
add_definitions(-DGLM_FORCE_PLATFORM_UNKNOWN -DGLM_FORCE_COMPILER_UNKNOWN -DGLM_FORCE_ARCH_UNKNOWN -DGLM_FORCE_CXX_UNKNOWN)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(GLM_TEST_ENABLE_LANG_EXTENSIONS)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS ON)
|
||||||
|
if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
|
||||||
|
add_compile_options(-fms-extensions)
|
||||||
|
endif()
|
||||||
|
message(STATUS "GLM: Build with C++ language extensions")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
|
add_compile_options(/Za)
|
||||||
|
if(MSVC15)
|
||||||
|
add_compile_options(/permissive-)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(GLM_TEST_ENABLE_FAST_MATH "Enable fast math optimizations" OFF)
|
||||||
|
if(GLM_TEST_ENABLE_FAST_MATH)
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message(STATUS "GLM: Build with fast math optimizations")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if((CMAKE_CXX_COMPILER_ID MATCHES "Clang") OR (CMAKE_CXX_COMPILER_ID MATCHES "GNU"))
|
||||||
|
add_compile_options(-ffast-math)
|
||||||
|
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
|
add_compile_options(/fp:fast)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
|
add_compile_options(/fp:precise)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(GLM_TEST_ENABLE "Build unit tests" ON)
|
||||||
|
option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_SIMD_SSSE3 "Enable SSSE3 optimizations" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_SIMD_SSE4_1 "Enable SSE 4.1 optimizations" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_SIMD_SSE4_2 "Enable SSE 4.2 optimizations" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF)
|
||||||
|
option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
|
||||||
|
option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)
|
||||||
|
|
||||||
|
if(GLM_TEST_FORCE_PURE)
|
||||||
|
add_definitions(-DGLM_FORCE_PURE)
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
|
add_compile_options(-mfpmath=387)
|
||||||
|
endif()
|
||||||
|
message(STATUS "GLM: No SIMD instruction set")
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_SIMD_AVX2)
|
||||||
|
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||||
|
add_compile_options(-mavx2)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||||
|
add_compile_options(/QxAVX2)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
|
add_compile_options(/arch:AVX2)
|
||||||
|
endif()
|
||||||
|
message(STATUS "GLM: AVX2 instruction set")
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_SIMD_AVX)
|
||||||
|
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||||
|
add_compile_options(-mavx)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||||
|
add_compile_options(/QxAVX)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
|
add_compile_options(/arch:AVX)
|
||||||
|
endif()
|
||||||
|
message(STATUS "GLM: AVX instruction set")
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_SIMD_SSE4_2)
|
||||||
|
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||||
|
add_compile_options(-msse4.2)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||||
|
add_compile_options(/QxSSE4.2)
|
||||||
|
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
|
||||||
|
add_compile_options(/arch:SSE2) # VC doesn't support SSE4.2
|
||||||
|
endif()
|
||||||
|
message(STATUS "GLM: SSE4.2 instruction set")
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_SIMD_SSE4_1)
|
||||||
|
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||||
|
add_compile_options(-msse4.1)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||||
|
add_compile_options(/QxSSE4.1)
|
||||||
|
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
|
||||||
|
add_compile_options(/arch:SSE2) # VC doesn't support SSE4.1
|
||||||
|
endif()
|
||||||
|
message(STATUS "GLM: SSE4.1 instruction set")
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_SIMD_SSSE3)
|
||||||
|
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||||
|
add_compile_options(-mssse3)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||||
|
add_compile_options(/QxSSSE3)
|
||||||
|
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
|
||||||
|
add_compile_options(/arch:SSE2) # VC doesn't support SSSE3
|
||||||
|
endif()
|
||||||
|
message(STATUS "GLM: SSSE3 instruction set")
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_SIMD_SSE3)
|
||||||
|
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||||
|
add_compile_options(-msse3)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||||
|
add_compile_options(/QxSSE3)
|
||||||
|
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
|
||||||
|
add_compile_options(/arch:SSE2) # VC doesn't support SSE3
|
||||||
|
endif()
|
||||||
|
message(STATUS "GLM: SSE3 instruction set")
|
||||||
|
|
||||||
|
elseif(GLM_TEST_ENABLE_SIMD_SSE2)
|
||||||
|
if((CMAKE_CXX_COMPILER_ID MATCHES "GNU") OR (CMAKE_CXX_COMPILER_ID MATCHES "Clang"))
|
||||||
|
add_compile_options(-msse2)
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||||
|
add_compile_options(/QxSSE2)
|
||||||
|
elseif((CMAKE_CXX_COMPILER_ID MATCHES "MSVC") AND NOT CMAKE_CL_64)
|
||||||
|
add_compile_options(/arch:SSE2)
|
||||||
|
endif()
|
||||||
|
message(STATUS "GLM: SSE2 instruction set")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Compiler and default options
|
||||||
|
|
||||||
|
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message("GLM: Clang - ${CMAKE_CXX_COMPILER_ID} compiler")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_compile_options(-Werror -Weverything)
|
||||||
|
add_compile_options(-Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-c++11-long-long -Wno-padded -Wno-gnu-anonymous-struct -Wno-nested-anon-types)
|
||||||
|
add_compile_options(-Wno-undefined-reinterpret-cast -Wno-sign-conversion -Wno-unused-variable -Wno-missing-prototypes -Wno-unreachable-code -Wno-missing-variable-declarations -Wno-sign-compare -Wno-global-constructors -Wno-unused-macros -Wno-format-nonliteral)
|
||||||
|
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message("GLM: GCC - ${CMAKE_CXX_COMPILER_ID} compiler")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_compile_options(-O2)
|
||||||
|
add_compile_options(-Wno-long-long)
|
||||||
|
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message("GLM: Intel - ${CMAKE_CXX_COMPILER_ID} compiler")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||||
|
if(NOT GLM_QUIET)
|
||||||
|
message("GLM: Visual C++ - ${CMAKE_CXX_COMPILER_ID} compiler")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_compile_options(/W4 /WX)
|
||||||
|
add_compile_options(/wd4309 /wd4324 /wd4389 /wd4127 /wd4267 /wd4146 /wd4201 /wd4464 /wd4514 /wd4701 /wd4820 /wd4365)
|
||||||
|
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories("${PROJECT_SOURCE_DIR}")
|
||||||
|
|
||||||
|
add_subdirectory(glm)
|
||||||
|
add_subdirectory(test)
|
||||||
|
|
||||||
|
set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
|
||||||
|
install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
|
||||||
|
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake" VERSION ${GLM_VERSION} COMPATIBILITY AnyNewerVersion)
|
||||||
|
|
||||||
|
# build tree package config
|
||||||
|
configure_file(cmake/glmBuildConfig.cmake.in glmConfig.cmake @ONLY)
|
||||||
|
|
||||||
|
# install tree package config
|
||||||
|
configure_package_config_file(
|
||||||
|
cmake/glmConfig.cmake.in
|
||||||
|
${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake
|
||||||
|
INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}
|
||||||
|
PATH_VARS CMAKE_INSTALL_INCLUDEDIR
|
||||||
|
NO_CHECK_REQUIRED_COMPONENTS_MACRO)
|
||||||
|
|
||||||
|
install(FILES
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
|
||||||
|
DESTINATION ${GLM_INSTALL_CONFIGDIR})
|
||||||
|
|
||||||
|
add_library(glm INTERFACE)
|
||||||
|
target_include_directories(glm INTERFACE
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
|
||||||
|
install(TARGETS glm EXPORT glmTargets)
|
||||||
|
|
||||||
|
export(EXPORT glmTargets FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake")
|
||||||
|
|
||||||
|
install(EXPORT glmTargets FILE glmTargets.cmake DESTINATION ${GLM_INSTALL_CONFIGDIR})
|
||||||
|
|
||||||
|
# build pkg-config file
|
||||||
|
configure_file("./cmake/glm.pc.in" "glm.pc" @ONLY)
|
||||||
|
|
||||||
|
# install pkg-config file
|
||||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc" DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
|
||||||
|
|
||||||
|
export(PACKAGE glm)
|
||||||
|
|
||||||
|
if(NOT TARGET uninstall)
|
||||||
|
configure_file(
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
|
||||||
|
IMMEDIATE @ONLY)
|
||||||
|
|
||||||
|
add_custom_target(uninstall
|
||||||
|
COMMAND ${CMAKE_COMMAND} -P
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|
||||||
|
endif()
|
||||||
7
common/glm/cmake/glm.pc.in
Normal file
7
common/glm/cmake/glm.pc.in
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
includedir=${prefix}/include
|
||||||
|
|
||||||
|
Name: GLM
|
||||||
|
Description: OpenGL Mathematics
|
||||||
|
Version: @GLM_VERSION@
|
||||||
|
Cflags: -I${includedir}
|
||||||
6
common/glm/cmake/glmBuildConfig.cmake.in
Normal file
6
common/glm/cmake/glmBuildConfig.cmake.in
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
set(GLM_VERSION "@GLM_VERSION@")
|
||||||
|
set(GLM_INCLUDE_DIRS "@CMAKE_CURRENT_SOURCE_DIR@")
|
||||||
|
|
||||||
|
if (NOT CMAKE_VERSION VERSION_LESS "3.0")
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")
|
||||||
|
endif()
|
||||||
9
common/glm/cmake/glmConfig.cmake.in
Normal file
9
common/glm/cmake/glmConfig.cmake.in
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
set(GLM_VERSION "@GLM_VERSION@")
|
||||||
|
|
||||||
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
|
set_and_check(GLM_INCLUDE_DIRS "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@")
|
||||||
|
|
||||||
|
if (NOT CMAKE_VERSION VERSION_LESS "3.0")
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/glmTargets.cmake")
|
||||||
|
endif()
|
||||||
26
common/glm/cmake_uninstall.cmake.in
Normal file
26
common/glm/cmake_uninstall.cmake.in
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||||
|
|
||||||
|
if (NOT DEFINED CMAKE_INSTALL_PREFIX)
|
||||||
|
set (CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@")
|
||||||
|
endif ()
|
||||||
|
message(${CMAKE_INSTALL_PREFIX})
|
||||||
|
|
||||||
|
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||||
|
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||||
|
foreach(file ${files})
|
||||||
|
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
|
||||||
|
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
exec_program(
|
||||||
|
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
||||||
|
OUTPUT_VARIABLE rm_out
|
||||||
|
RETURN_VALUE rm_retval
|
||||||
|
)
|
||||||
|
if(NOT "${rm_retval}" STREQUAL 0)
|
||||||
|
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
|
||||||
|
endif(NOT "${rm_retval}" STREQUAL 0)
|
||||||
|
else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
|
||||||
|
endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||||
|
endforeach(file)
|
||||||
@ -1,54 +0,0 @@
|
|||||||
================================================================================
|
|
||||||
OpenGL Mathematics (GLM)
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
GLM can be distributed and/or modified under the terms of either
|
|
||||||
a) The Happy Bunny License, or b) the MIT License.
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
The Happy Bunny License (Modified MIT License)
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
Copyright (c) 2005 - 2016 G-Truc Creation
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
Restrictions: By making use of the Software for military purposes, you choose
|
|
||||||
to make a Bunny unhappy.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
||||||
================================================================================
|
|
||||||
The MIT License
|
|
||||||
--------------------------------------------------------------------------------
|
|
||||||
Copyright (c) 2005 - 2016 G-Truc Creation
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
207
common/glm/doc/api/a00002.html
Normal file
207
common/glm/doc/api/a00002.html
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: common.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#func-members">Functions</a> </div>
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">common.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00002_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||||||
|
Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||||
|
<tr class="memitem:ga439e60a72eadecfeda2df5449c613a64"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga439e60a72eadecfeda2df5449c613a64">abs</a> (genType x)</td></tr>
|
||||||
|
<tr class="separator:ga439e60a72eadecfeda2df5449c613a64"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga81d3abddd0ef0c8de579bc541ecadab6">abs</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:ga81d3abddd0ef0c8de579bc541ecadab6"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gafb9d2a645a23aca12d4d6de0104b7657">ceil</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:gafb9d2a645a23aca12d4d6de0104b7657"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||||
|
<tr class="memitem:ga7cd77683da6361e297c56443fc70806d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga7cd77683da6361e297c56443fc70806d">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>
|
||||||
|
<tr class="separator:ga7cd77683da6361e297c56443fc70806d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gafba2e0674deb5953878d89483cd6323d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gafba2e0674deb5953878d89483cd6323d">clamp</a> (vec< L, T, Q > const &x, T minVal, T maxVal)</td></tr>
|
||||||
|
<tr class="separator:gafba2e0674deb5953878d89483cd6323d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d">clamp</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &minVal, vec< L, T, Q > const &maxVal)</td></tr>
|
||||||
|
<tr class="separator:gaa0f2f12e9108b09e22a3f0b2008a0b5d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga1425c1c3160ec51214b03a0469a3013d"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00662.html#ga1425c1c3160ec51214b03a0469a3013d">floatBitsToInt</a> (float const &v)</td></tr>
|
||||||
|
<tr class="separator:ga1425c1c3160ec51214b03a0469a3013d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, int, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga99f7d62f78ac5ea3b49bae715c9488ed">floatBitsToInt</a> (vec< L, float, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:ga99f7d62f78ac5ea3b49bae715c9488ed"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL uint </td><td class="memItemRight" valign="bottom"><a class="el" href="a00662.html#ga70e0271c34af52f3100c7960e18c3f2b">floatBitsToUint</a> (float const &v)</td></tr>
|
||||||
|
<tr class="separator:ga70e0271c34af52f3100c7960e18c3f2b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, uint, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga49418ba4c8a60fbbb5d57b705f3e26db">floatBitsToUint</a> (vec< L, float, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:ga49418ba4c8a60fbbb5d57b705f3e26db"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gaa9d0742639e85b29c7c5de11cfd6840d">floor</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:gaa9d0742639e85b29c7c5de11cfd6840d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||||
|
<tr class="memitem:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gad0f444d4b81cc53c3b6edf5aa25078c2">fma</a> (genType const &a, genType const &b, genType const &c)</td></tr>
|
||||||
|
<tr class="separator:gad0f444d4b81cc53c3b6edf5aa25078c2"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||||
|
<tr class="memitem:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga8ba89e40e55ae5cdf228548f9b7639c7">fract</a> (genType x)</td></tr>
|
||||||
|
<tr class="separator:ga8ba89e40e55ae5cdf228548f9b7639c7"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga2df623004f634b440d61e018d62c751b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga2df623004f634b440d61e018d62c751b">fract</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:ga2df623004f634b440d61e018d62c751b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga20620e83544d1a988857a3bc4ebe0e1d"><td class="memTemplParams" colspan="2">template<typename genType , typename genIType > </td></tr>
|
||||||
|
<tr class="memitem:ga20620e83544d1a988857a3bc4ebe0e1d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga20620e83544d1a988857a3bc4ebe0e1d">frexp</a> (genType const &x, genIType &exp)</td></tr>
|
||||||
|
<tr class="separator:ga20620e83544d1a988857a3bc4ebe0e1d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00662.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4">intBitsToFloat</a> (int const &v)</td></tr>
|
||||||
|
<tr class="separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, float, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0">intBitsToFloat</a> (vec< L, int, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:ga7a0a8291a1cf3e1c2aee33030a1bd7b0"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga2885587c23a106301f20443896365b62"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga2885587c23a106301f20443896365b62">isinf</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:ga2885587c23a106301f20443896365b62"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga29ef934c00306490de837b4746b4e14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, bool, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga29ef934c00306490de837b4746b4e14d">isnan</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:ga29ef934c00306490de837b4746b4e14d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga52e319d7289b849ec92055abd4830533"><td class="memTemplParams" colspan="2">template<typename genType , typename genIType > </td></tr>
|
||||||
|
<tr class="memitem:ga52e319d7289b849ec92055abd4830533"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga52e319d7289b849ec92055abd4830533">ldexp</a> (genType const &x, genIType const &exp)</td></tr>
|
||||||
|
<tr class="separator:ga52e319d7289b849ec92055abd4830533"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||||
|
<tr class="memitem:gae02d42887fc5570451f880e3c624b9ac"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gae02d42887fc5570451f880e3c624b9ac">max</a> (genType x, genType y)</td></tr>
|
||||||
|
<tr class="separator:gae02d42887fc5570451f880e3c624b9ac"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga03e45d6e60d1c36edb00c52edeea0f31">max</a> (vec< L, T, Q > const &x, T y)</td></tr>
|
||||||
|
<tr class="separator:ga03e45d6e60d1c36edb00c52edeea0f31"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gac1fec0c3303b572a6d4697a637213870"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gac1fec0c3303b572a6d4697a637213870">max</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
||||||
|
<tr class="separator:gac1fec0c3303b572a6d4697a637213870"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||||
|
<tr class="memitem:ga6cf8098827054a270ee36b18e30d471d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga6cf8098827054a270ee36b18e30d471d">min</a> (genType x, genType y)</td></tr>
|
||||||
|
<tr class="separator:ga6cf8098827054a270ee36b18e30d471d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gaa7d015eba1f9f48519251f4abe69b14d">min</a> (vec< L, T, Q > const &x, T y)</td></tr>
|
||||||
|
<tr class="separator:gaa7d015eba1f9f48519251f4abe69b14d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL GLM_CONSTEXPR vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga31f49ef9e7d1beb003160c5e009b0c48">min</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
||||||
|
<tr class="separator:ga31f49ef9e7d1beb003160c5e009b0c48"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplParams" colspan="2">template<typename genTypeT , typename genTypeU > </td></tr>
|
||||||
|
<tr class="memitem:ga8e93f374aae27d1a88b921860351f8d4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genTypeT </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga8e93f374aae27d1a88b921860351f8d4">mix</a> (genTypeT x, genTypeT y, genTypeU a)</td></tr>
|
||||||
|
<tr class="separator:ga8e93f374aae27d1a88b921860351f8d4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga9b197a452cd52db3c5c18bac72bd7798">mod</a> (vec< L, T, Q > const &x, vec< L, T, Q > const &y)</td></tr>
|
||||||
|
<tr class="separator:ga9b197a452cd52db3c5c18bac72bd7798"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||||
|
<tr class="memitem:ga85e33f139b8db1b39b590a5713b9e679"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga85e33f139b8db1b39b590a5713b9e679">modf</a> (genType x, genType &i)</td></tr>
|
||||||
|
<tr class="separator:ga85e33f139b8db1b39b590a5713b9e679"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gafa03aca8c4713e1cc892aa92ca135a7e">round</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:gafa03aca8c4713e1cc892aa92ca135a7e"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga76b81785045a057989a84d99aeeb1578"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga76b81785045a057989a84d99aeeb1578">roundEven</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:ga76b81785045a057989a84d99aeeb1578"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga1e2e5cfff800056540e32f6c9b604b28">sign</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:ga1e2e5cfff800056540e32f6c9b604b28"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||||
|
<tr class="memitem:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga562edf7eca082cc5b7a0aaf180436daf">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>
|
||||||
|
<tr class="separator:ga562edf7eca082cc5b7a0aaf180436daf"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplParams" colspan="2">template<typename genType > </td></tr>
|
||||||
|
<tr class="memitem:ga015a1261ff23e12650211aa872863cce"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL genType </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga015a1261ff23e12650211aa872863cce">step</a> (genType edge, genType x)</td></tr>
|
||||||
|
<tr class="separator:ga015a1261ff23e12650211aa872863cce"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga8f9a911a48ef244b51654eaefc81c551"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga8f9a911a48ef244b51654eaefc81c551">step</a> (T edge, vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:ga8f9a911a48ef244b51654eaefc81c551"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f">step</a> (vec< L, T, Q > const &edge, vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:gaf4a5fc81619c7d3e8b22f53d4a098c7f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gaf9375e3e06173271d49e6ffa3a334259"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#gaf9375e3e06173271d49e6ffa3a334259">trunc</a> (vec< L, T, Q > const &x)</td></tr>
|
||||||
|
<tr class="separator:gaf9375e3e06173271d49e6ffa3a334259"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memItemLeft" align="right" valign="top">GLM_FUNC_DECL float </td><td class="memItemRight" valign="bottom"><a class="el" href="a00662.html#gab2bae0d15dcdca6093f88f76b3975d97">uintBitsToFloat</a> (uint const &v)</td></tr>
|
||||||
|
<tr class="separator:gab2bae0d15dcdca6093f88f76b3975d97"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplParams" colspan="2">template<length_t L, qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, float, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00662.html#ga97f46b5f7b42fe44482e13356eb394ae">uintBitsToFloat</a> (vec< L, uint, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:ga97f46b5f7b42fe44482e13356eb394ae"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00002_source.html">common.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
108
common/glm/doc/api/a00002_source.html
Normal file
108
common/glm/doc/api/a00002_source.html
Normal file
File diff suppressed because one or more lines are too long
81
common/glm/doc/api/a00005_source.html
Normal file
81
common/glm/doc/api/a00005_source.html
Normal file
File diff suppressed because one or more lines are too long
81
common/glm/doc/api/a00008_source.html
Normal file
81
common/glm/doc/api/a00008_source.html
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: _fixes.hpp Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">_fixes.hpp</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#include <cmath></span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#ifdef max</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#undef max</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#ifdef min</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#undef min</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifdef isnan</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#undef isnan</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#ifdef isinf</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#undef isinf</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="preprocessor">#ifdef log2</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="preprocessor">#undef log2</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div></div><!-- fragment --></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
83
common/glm/doc/api/a00011_source.html
Normal file
83
common/glm/doc/api/a00011_source.html
Normal file
File diff suppressed because one or more lines are too long
83
common/glm/doc/api/a00014_source.html
Normal file
83
common/glm/doc/api/a00014_source.html
Normal file
File diff suppressed because one or more lines are too long
81
common/glm/doc/api/a00017_source.html
Normal file
81
common/glm/doc/api/a00017_source.html
Normal file
File diff suppressed because one or more lines are too long
82
common/glm/doc/api/a00020_source.html
Normal file
82
common/glm/doc/api/a00020_source.html
Normal file
File diff suppressed because one or more lines are too long
82
common/glm/doc/api/a00023_source.html
Normal file
82
common/glm/doc/api/a00023_source.html
Normal file
File diff suppressed because one or more lines are too long
82
common/glm/doc/api/a00026_source.html
Normal file
82
common/glm/doc/api/a00026_source.html
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: compute_vector_relational.hpp Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">compute_vector_relational.hpp</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">//#include "compute_common.hpp"</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include "setup.hpp"</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include <limits></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> </div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="keyword">namespace </span><a class="code" href="a00792.html">glm</a>{</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="keyword">namespace </span>detail</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> {</div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> T, <span class="keywordtype">bool</span> isFloat></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  <span class="keyword">struct </span>compute_equal</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>  {</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>  GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class="keyword">static</span> <span class="keywordtype">bool</span> call(T a, T b)</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>  {</div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>  <span class="keywordflow">return</span> a == b;</div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>  }</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>  };</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">/*</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment"> template <typename T></span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment"> struct compute_equal<T, true></span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment"> {</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment"> GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment"> {</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> return detail::compute_abs<T, std::numeric_limits<T>::is_signed>::call(b - a) <= static_cast<T>(0);</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> //return std::memcmp(&a, &b, sizeof(T)) == 0;</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> }</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> };</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">*/</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> }<span class="comment">//namespace detail</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> }<span class="comment">//namespace glm</span></div><div class="ttc" id="a00792_html"><div class="ttname"><a href="a00792.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00002_source.html#l00020">common.hpp:20</a></div></div>
|
||||||
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
85
common/glm/doc/api/a00029_source.html
Normal file
85
common/glm/doc/api/a00029_source.html
Normal file
File diff suppressed because one or more lines are too long
86
common/glm/doc/api/a00032_source.html
Normal file
86
common/glm/doc/api/a00032_source.html
Normal file
File diff suppressed because one or more lines are too long
82
common/glm/doc/api/a00035_source.html
Normal file
82
common/glm/doc/api/a00035_source.html
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_half.hpp Source File</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_half.hpp</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#include "setup.hpp"</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="keyword">namespace </span><a class="code" href="a00792.html">glm</a>{</div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="keyword">namespace </span>detail</div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> {</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>  <span class="keyword">typedef</span> <span class="keywordtype">short</span> hdata;</div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>  GLM_FUNC_DECL <span class="keywordtype">float</span> toFloat32(hdata value);</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>  GLM_FUNC_DECL hdata toFloat16(<span class="keywordtype">float</span> <span class="keyword">const</span>& value);</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> }<span class="comment">//namespace detail</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> }<span class="comment">//namespace glm</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "type_half.inl"</span></div><div class="ttc" id="a00792_html"><div class="ttname"><a href="a00792.html">glm</a></div><div class="ttdef"><b>Definition:</b> <a href="a00002_source.html#l00020">common.hpp:20</a></div></div>
|
||||||
|
</div><!-- fragment --></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
87
common/glm/doc/api/a00038.html
Normal file
87
common/glm/doc/api/a00038.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_mat2x2.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_mat2x2.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00038_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00038_source.html">type_mat2x2.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
84
common/glm/doc/api/a00038_source.html
Normal file
84
common/glm/doc/api/a00038_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00041.html
Normal file
87
common/glm/doc/api/a00041.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_mat2x3.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_mat2x3.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00041_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00041_source.html">type_mat2x3.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
85
common/glm/doc/api/a00041_source.html
Normal file
85
common/glm/doc/api/a00041_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00044.html
Normal file
87
common/glm/doc/api/a00044.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_mat2x4.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_mat2x4.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00044_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00044_source.html">type_mat2x4.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
85
common/glm/doc/api/a00044_source.html
Normal file
85
common/glm/doc/api/a00044_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00047.html
Normal file
87
common/glm/doc/api/a00047.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_mat3x2.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_mat3x2.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00047_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00047_source.html">type_mat3x2.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
85
common/glm/doc/api/a00047_source.html
Normal file
85
common/glm/doc/api/a00047_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00050.html
Normal file
87
common/glm/doc/api/a00050.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_mat3x3.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_mat3x3.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00050_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00050_source.html">type_mat3x3.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
84
common/glm/doc/api/a00050_source.html
Normal file
84
common/glm/doc/api/a00050_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00053.html
Normal file
87
common/glm/doc/api/a00053.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_mat3x4.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_mat3x4.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00053_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00053_source.html">type_mat3x4.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
85
common/glm/doc/api/a00053_source.html
Normal file
85
common/glm/doc/api/a00053_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00056.html
Normal file
87
common/glm/doc/api/a00056.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_mat4x2.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_mat4x2.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00056_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00056_source.html">type_mat4x2.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
85
common/glm/doc/api/a00056_source.html
Normal file
85
common/glm/doc/api/a00056_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00059.html
Normal file
87
common/glm/doc/api/a00059.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_mat4x3.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_mat4x3.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00059_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00059_source.html">type_mat4x3.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
85
common/glm/doc/api/a00059_source.html
Normal file
85
common/glm/doc/api/a00059_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00062.html
Normal file
87
common/glm/doc/api/a00062.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_mat4x4.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_mat4x4.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00062_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00062_source.html">type_mat4x4.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
84
common/glm/doc/api/a00062_source.html
Normal file
84
common/glm/doc/api/a00062_source.html
Normal file
File diff suppressed because one or more lines are too long
84
common/glm/doc/api/a00065_source.html
Normal file
84
common/glm/doc/api/a00065_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00068.html
Normal file
87
common/glm/doc/api/a00068.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_vec1.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_vec1.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00068_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00068_source.html">type_vec1.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
83
common/glm/doc/api/a00068_source.html
Normal file
83
common/glm/doc/api/a00068_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00071.html
Normal file
87
common/glm/doc/api/a00071.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_vec2.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_vec2.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00071_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00071_source.html">type_vec2.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
83
common/glm/doc/api/a00071_source.html
Normal file
83
common/glm/doc/api/a00071_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00074.html
Normal file
87
common/glm/doc/api/a00074.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_vec3.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_vec3.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00074_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00074_source.html">type_vec3.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
83
common/glm/doc/api/a00074_source.html
Normal file
83
common/glm/doc/api/a00074_source.html
Normal file
File diff suppressed because one or more lines are too long
87
common/glm/doc/api/a00077.html
Normal file
87
common/glm/doc/api/a00077.html
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: type_vec4.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_2c9f37f6a8d2004101d7524672238505.html">detail</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">type_vec4.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00077_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00077_source.html">type_vec4.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
83
common/glm/doc/api/a00077_source.html
Normal file
83
common/glm/doc/api/a00077_source.html
Normal file
File diff suppressed because one or more lines are too long
115
common/glm/doc/api/a00080.html
Normal file
115
common/glm/doc/api/a00080.html
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: exponential.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#func-members">Functions</a> </div>
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">exponential.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00080_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||||||
|
Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:ga071566cadc7505455e611f2a0353f4d4"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga071566cadc7505455e611f2a0353f4d4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00664.html#ga071566cadc7505455e611f2a0353f4d4">exp</a> (vec< L, T, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:ga071566cadc7505455e611f2a0353f4d4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaff17ace6b579a03bf223ed4d1ed2cd16"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gaff17ace6b579a03bf223ed4d1ed2cd16"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00664.html#gaff17ace6b579a03bf223ed4d1ed2cd16">exp2</a> (vec< L, T, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:gaff17ace6b579a03bf223ed4d1ed2cd16"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00664.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a">inversesqrt</a> (vec< L, T, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:ga523dd6bd0ad9f75ae2d24c8e4b017b7a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga918c9f3fd086ce20e6760c903bd30fa9"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga918c9f3fd086ce20e6760c903bd30fa9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00664.html#ga918c9f3fd086ce20e6760c903bd30fa9">log</a> (vec< L, T, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:ga918c9f3fd086ce20e6760c903bd30fa9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga82831c7d9cca777cebedfe03a19c8d75"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga82831c7d9cca777cebedfe03a19c8d75"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00664.html#ga82831c7d9cca777cebedfe03a19c8d75">log2</a> (vec< L, T, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:ga82831c7d9cca777cebedfe03a19c8d75"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga2254981952d4f333b900a6bf5167a6c4"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:ga2254981952d4f333b900a6bf5167a6c4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00664.html#ga2254981952d4f333b900a6bf5167a6c4">pow</a> (vec< L, T, Q > const &base, vec< L, T, Q > const &exponent)</td></tr>
|
||||||
|
<tr class="separator:ga2254981952d4f333b900a6bf5167a6c4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c"><td class="memTemplParams" colspan="2">template<length_t L, typename T , qualifier Q> </td></tr>
|
||||||
|
<tr class="memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL vec< L, T, Q > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00664.html#gaa83e5f1648b7ccdf33b87c07c76cb77c">sqrt</a> (vec< L, T, Q > const &v)</td></tr>
|
||||||
|
<tr class="separator:gaa83e5f1648b7ccdf33b87c07c76cb77c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00698.html">Core features</a> </p>
|
||||||
|
<dl class="section see"><dt>See also</dt><dd><a href="http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00080_source.html">exponential.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
93
common/glm/doc/api/a00080_source.html
Normal file
93
common/glm/doc/api/a00080_source.html
Normal file
File diff suppressed because one or more lines are too long
219
common/glm/doc/api/a00083.html
Normal file
219
common/glm/doc/api/a00083.html
Normal file
@ -0,0 +1,219 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||||
|
<meta name="generator" content="Doxygen 1.8.14"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||||
|
<title>0.9.9 API documenation: matrix_clip_space.hpp File Reference</title>
|
||||||
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="jquery.js"></script>
|
||||||
|
<script type="text/javascript" src="dynsections.js"></script>
|
||||||
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
||||||
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
||||||
|
<script type="text/javascript" src="search/search.js"></script>
|
||||||
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||||
|
<div id="titlearea">
|
||||||
|
<table cellspacing="0" cellpadding="0">
|
||||||
|
<tbody>
|
||||||
|
<tr style="height: 56px;">
|
||||||
|
<td id="projectlogo"><img alt="Logo" src="logo-mini.png"/></td>
|
||||||
|
<td id="projectalign" style="padding-left: 0.5em;">
|
||||||
|
<div id="projectname">0.9.9 API documenation
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- end header part -->
|
||||||
|
<!-- Generated by Doxygen 1.8.14 -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
var searchBox = new SearchBox("searchBox", "search",false,'Search');
|
||||||
|
/* @license-end */
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript" src="menudata.js"></script>
|
||||||
|
<script type="text/javascript" src="menu.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */
|
||||||
|
$(function() {
|
||||||
|
initMenu('',true,false,'search.php','Search');
|
||||||
|
$(document).ready(function() { init_search(); });
|
||||||
|
});
|
||||||
|
/* @license-end */</script>
|
||||||
|
<div id="main-nav"></div>
|
||||||
|
<!-- window showing the filter options -->
|
||||||
|
<div id="MSearchSelectWindow"
|
||||||
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
||||||
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
||||||
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- iframe showing the search results (closed by default) -->
|
||||||
|
<div id="MSearchResultsWindow">
|
||||||
|
<iframe src="javascript:void(0)" frameborder="0"
|
||||||
|
name="MSearchResults" id="MSearchResults">
|
||||||
|
</iframe>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="nav-path" class="navpath">
|
||||||
|
<ul>
|
||||||
|
<li class="navelem"><a class="el" href="dir_d522931ffa1371640980b621734a4381.html">Users</a></li><li class="navelem"><a class="el" href="dir_02cc19cee4c4780485bfe81520450212.html">christophericcio</a></li><li class="navelem"><a class="el" href="dir_54de7df3bc9880881b14ec07f256fd2e.html">Documents</a></li><li class="navelem"><a class="el" href="dir_6399a054f5929b58eaa476233e406ce8.html">Repository</a></li><li class="navelem"><a class="el" href="dir_627f4a52155b61a75c7c4851d7df9027.html">Github</a></li><li class="navelem"><a class="el" href="dir_ffdfd01cf51cdb2fe8bd5e55c6e0c4e8.html">glm</a></li><li class="navelem"><a class="el" href="dir_4ca6aa55b50e6be994025af27820140e.html">glm</a></li><li class="navelem"><a class="el" href="dir_b115b02f1dab989141fcd87ab0462f01.html">ext</a></li> </ul>
|
||||||
|
</div>
|
||||||
|
</div><!-- top -->
|
||||||
|
<div class="header">
|
||||||
|
<div class="summary">
|
||||||
|
<a href="#func-members">Functions</a> </div>
|
||||||
|
<div class="headertitle">
|
||||||
|
<div class="title">matrix_clip_space.hpp File Reference</div> </div>
|
||||||
|
</div><!--header-->
|
||||||
|
<div class="contents">
|
||||||
|
|
||||||
|
<p><a href="a00083_source.html">Go to the source code of this file.</a></p>
|
||||||
|
<table class="memberdecls">
|
||||||
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
||||||
|
Functions</h2></td></tr>
|
||||||
|
<tr class="memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga0bcd4542e0affc63a0b8c08fcb839ea9">frustum</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga0bcd4542e0affc63a0b8c08fcb839ea9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gae4277c37f61d81da01bc9db14ea90296"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gae4277c37f61d81da01bc9db14ea90296"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gae4277c37f61d81da01bc9db14ea90296">frustumLH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gae4277c37f61d81da01bc9db14ea90296"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga259520cad03b3f8bca9417920035ed01"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga259520cad03b3f8bca9417920035ed01"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga259520cad03b3f8bca9417920035ed01">frustumLH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga259520cad03b3f8bca9417920035ed01"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga94218b094862d17798370242680b9030"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga94218b094862d17798370242680b9030"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga94218b094862d17798370242680b9030">frustumLH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga94218b094862d17798370242680b9030"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gae34ec664ad44860bf4b5ba631f0e0e90"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gae34ec664ad44860bf4b5ba631f0e0e90"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gae34ec664ad44860bf4b5ba631f0e0e90">frustumNO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gae34ec664ad44860bf4b5ba631f0e0e90"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga4366ab45880c6c5f8b3e8c371ca4b136"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga4366ab45880c6c5f8b3e8c371ca4b136"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga4366ab45880c6c5f8b3e8c371ca4b136">frustumRH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga4366ab45880c6c5f8b3e8c371ca4b136"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga9236c8439f21be186b79c97b588836b9"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga9236c8439f21be186b79c97b588836b9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga9236c8439f21be186b79c97b588836b9">frustumRH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga9236c8439f21be186b79c97b588836b9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga7654a9227f14d5382786b9fc0eb5692d"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga7654a9227f14d5382786b9fc0eb5692d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga7654a9227f14d5382786b9fc0eb5692d">frustumRH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga7654a9227f14d5382786b9fc0eb5692d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaa73322e152edf50cf30a6edac342a757"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaa73322e152edf50cf30a6edac342a757"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaa73322e152edf50cf30a6edac342a757">frustumZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gaa73322e152edf50cf30a6edac342a757"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga44fa38a18349450325cae2661bb115ca"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga44fa38a18349450325cae2661bb115ca"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga44fa38a18349450325cae2661bb115ca">infinitePerspective</a> (T fovy, T aspect, T near)</td></tr>
|
||||||
|
<tr class="separator:ga44fa38a18349450325cae2661bb115ca"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga3201b30f5b3ea0f933246d87bfb992a9"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga3201b30f5b3ea0f933246d87bfb992a9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga3201b30f5b3ea0f933246d87bfb992a9">infinitePerspectiveLH</a> (T fovy, T aspect, T near)</td></tr>
|
||||||
|
<tr class="separator:ga3201b30f5b3ea0f933246d87bfb992a9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga99672ffe5714ef478dab2437255fe7e1"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga99672ffe5714ef478dab2437255fe7e1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga99672ffe5714ef478dab2437255fe7e1">infinitePerspectiveRH</a> (T fovy, T aspect, T near)</td></tr>
|
||||||
|
<tr class="separator:ga99672ffe5714ef478dab2437255fe7e1"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gae5b6b40ed882cd56cd7cb97701909c06"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gae5b6b40ed882cd56cd7cb97701909c06"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gae5b6b40ed882cd56cd7cb97701909c06">ortho</a> (T left, T right, T bottom, T top)</td></tr>
|
||||||
|
<tr class="separator:gae5b6b40ed882cd56cd7cb97701909c06"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga6615d8a9d39432e279c4575313ecb456"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga6615d8a9d39432e279c4575313ecb456"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga6615d8a9d39432e279c4575313ecb456">ortho</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
|
||||||
|
<tr class="separator:ga6615d8a9d39432e279c4575313ecb456"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gad122a79aadaa5529cec4ac197203db7f"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gad122a79aadaa5529cec4ac197203db7f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gad122a79aadaa5529cec4ac197203db7f">orthoLH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
|
||||||
|
<tr class="separator:gad122a79aadaa5529cec4ac197203db7f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga526416735ea7c5c5cd255bf99d051bd8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga526416735ea7c5c5cd255bf99d051bd8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga526416735ea7c5c5cd255bf99d051bd8">orthoLH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
|
||||||
|
<tr class="separator:ga526416735ea7c5c5cd255bf99d051bd8"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gab37ac3eec8d61f22fceda7775e836afa"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gab37ac3eec8d61f22fceda7775e836afa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gab37ac3eec8d61f22fceda7775e836afa">orthoLH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
|
||||||
|
<tr class="separator:gab37ac3eec8d61f22fceda7775e836afa"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gab219d28a8f178d4517448fcd6395a073"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gab219d28a8f178d4517448fcd6395a073"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gab219d28a8f178d4517448fcd6395a073">orthoNO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
|
||||||
|
<tr class="separator:gab219d28a8f178d4517448fcd6395a073"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga16264c9b838edeb9dd1de7a1010a13a4"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga16264c9b838edeb9dd1de7a1010a13a4"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga16264c9b838edeb9dd1de7a1010a13a4">orthoRH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
|
||||||
|
<tr class="separator:ga16264c9b838edeb9dd1de7a1010a13a4"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaa2f7a1373170bf0a4a2ddef9b0706780"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaa2f7a1373170bf0a4a2ddef9b0706780"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaa2f7a1373170bf0a4a2ddef9b0706780">orthoRH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
|
||||||
|
<tr class="separator:gaa2f7a1373170bf0a4a2ddef9b0706780"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga9aea2e515b08fd7dce47b7b6ec34d588"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga9aea2e515b08fd7dce47b7b6ec34d588"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga9aea2e515b08fd7dce47b7b6ec34d588">orthoRH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
|
||||||
|
<tr class="separator:ga9aea2e515b08fd7dce47b7b6ec34d588"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaea11a70817af2c0801c869dea0b7a5bc"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaea11a70817af2c0801c869dea0b7a5bc"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaea11a70817af2c0801c869dea0b7a5bc">orthoZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>
|
||||||
|
<tr class="separator:gaea11a70817af2c0801c869dea0b7a5bc"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga747c8cf99458663dd7ad1bb3a2f07787"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga747c8cf99458663dd7ad1bb3a2f07787"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga747c8cf99458663dd7ad1bb3a2f07787">perspective</a> (T fovy, T aspect, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga747c8cf99458663dd7ad1bb3a2f07787"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaebd02240fd36e85ad754f02ddd9a560d"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaebd02240fd36e85ad754f02ddd9a560d"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaebd02240fd36e85ad754f02ddd9a560d">perspectiveFov</a> (T fov, T width, T height, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gaebd02240fd36e85ad754f02ddd9a560d"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga6aebe16c164bd8e52554cbe0304ef4aa"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga6aebe16c164bd8e52554cbe0304ef4aa"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga6aebe16c164bd8e52554cbe0304ef4aa">perspectiveFovLH</a> (T fov, T width, T height, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga6aebe16c164bd8e52554cbe0304ef4aa"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gad18a4495b77530317327e8d466488c1a"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gad18a4495b77530317327e8d466488c1a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gad18a4495b77530317327e8d466488c1a">perspectiveFovLH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gad18a4495b77530317327e8d466488c1a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gabdd37014f529e25b2fa1b3ba06c10d5c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gabdd37014f529e25b2fa1b3ba06c10d5c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gabdd37014f529e25b2fa1b3ba06c10d5c">perspectiveFovLH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gabdd37014f529e25b2fa1b3ba06c10d5c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaf30e7bd3b1387a6776433dd5383e6633"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaf30e7bd3b1387a6776433dd5383e6633"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaf30e7bd3b1387a6776433dd5383e6633">perspectiveFovNO</a> (T fov, T width, T height, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gaf30e7bd3b1387a6776433dd5383e6633"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaf32bf563f28379c68554a44ee60c6a85"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaf32bf563f28379c68554a44ee60c6a85"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaf32bf563f28379c68554a44ee60c6a85">perspectiveFovRH</a> (T fov, T width, T height, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gaf32bf563f28379c68554a44ee60c6a85"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga257b733ff883c9a065801023cf243eb2"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga257b733ff883c9a065801023cf243eb2"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga257b733ff883c9a065801023cf243eb2">perspectiveFovRH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga257b733ff883c9a065801023cf243eb2"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga7dcbb25331676f5b0795aced1a905c44"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga7dcbb25331676f5b0795aced1a905c44"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga7dcbb25331676f5b0795aced1a905c44">perspectiveFovRH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga7dcbb25331676f5b0795aced1a905c44"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga4bc69fa1d1f95128430aa3d2a712390b"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga4bc69fa1d1f95128430aa3d2a712390b"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga4bc69fa1d1f95128430aa3d2a712390b">perspectiveFovZO</a> (T fov, T width, T height, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga4bc69fa1d1f95128430aa3d2a712390b"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga9bd34951dc7022ac256fcb51d7f6fc2f">perspectiveLH</a> (T fovy, T aspect, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga9bd34951dc7022ac256fcb51d7f6fc2f"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaead4d049d1feab463b700b5641aa590e"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaead4d049d1feab463b700b5641aa590e"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaead4d049d1feab463b700b5641aa590e">perspectiveLH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gaead4d049d1feab463b700b5641aa590e"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaca32af88c2719005c02817ad1142986c"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaca32af88c2719005c02817ad1142986c"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaca32af88c2719005c02817ad1142986c">perspectiveLH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gaca32af88c2719005c02817ad1142986c"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaf497e6bca61e7c87088370b126a93758"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaf497e6bca61e7c87088370b126a93758"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaf497e6bca61e7c87088370b126a93758">perspectiveNO</a> (T fovy, T aspect, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gaf497e6bca61e7c87088370b126a93758"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga26b88757fbd90601b80768a7e1ad3aa1"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga26b88757fbd90601b80768a7e1ad3aa1"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga26b88757fbd90601b80768a7e1ad3aa1">perspectiveRH</a> (T fovy, T aspect, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga26b88757fbd90601b80768a7e1ad3aa1"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gad1526cb2cbe796095284e8f34b01c582"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gad1526cb2cbe796095284e8f34b01c582"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gad1526cb2cbe796095284e8f34b01c582">perspectiveRH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gad1526cb2cbe796095284e8f34b01c582"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a">perspectiveRH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaa9dfba5c2322da54f72b1eb7c7c11b47">perspectiveZO</a> (T fovy, T aspect, T near, T far)</td></tr>
|
||||||
|
<tr class="separator:gaa9dfba5c2322da54f72b1eb7c7c11b47"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9">tweakedInfinitePerspective</a> (T fovy, T aspect, T near)</td></tr>
|
||||||
|
<tr class="separator:gaaeacc04a2a6f4b18c5899d37e7bb3ef9"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
<tr class="memitem:gaf5b3c85ff6737030a1d2214474ffa7a8"><td class="memTemplParams" colspan="2">template<typename T > </td></tr>
|
||||||
|
<tr class="memitem:gaf5b3c85ff6737030a1d2214474ffa7a8"><td class="memTemplItemLeft" align="right" valign="top">GLM_FUNC_DECL mat< 4, 4, T, defaultp > </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="a00665.html#gaf5b3c85ff6737030a1d2214474ffa7a8">tweakedInfinitePerspective</a> (T fovy, T aspect, T near, T ep)</td></tr>
|
||||||
|
<tr class="separator:gaf5b3c85ff6737030a1d2214474ffa7a8"><td class="memSeparator" colspan="2"> </td></tr>
|
||||||
|
</table>
|
||||||
|
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
|
||||||
|
<div class="textblock"><p><a class="el" href="a00665.html">GLM_EXT_matrix_clip_space</a> </p>
|
||||||
|
|
||||||
|
<p class="definition">Definition in file <a class="el" href="a00083_source.html">matrix_clip_space.hpp</a>.</p>
|
||||||
|
</div></div><!-- contents -->
|
||||||
|
<!-- start footer part -->
|
||||||
|
<hr class="footer"/><address class="footer"><small>
|
||||||
|
Generated by  <a href="http://www.doxygen.org/index.html">
|
||||||
|
<img class="footer" src="doxygen.png" alt="doxygen"/>
|
||||||
|
</a> 1.8.14
|
||||||
|
</small></address>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user