diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..7e992dc259e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +end_of_line = lf + +[*.{nss,c,h,cpp,hpp}] +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e2f862e261..56391b14bca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ https://github.com/nwnxee/unified/compare/build8193.34...HEAD - Player: UpdateSkyBox(); - Player: UpdateFogColor(); - Player: UpdateFogAmount(); +- Player: GetGameObject() - Regex: Match() ### Changed diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e28d4aca1b..b764bc7acef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ find_package(Sanitizers) execute_process(COMMAND git rev-parse --short HEAD OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE SHORT_HASH) set(TARGET_NWN_BUILD 8193) -set(TARGET_NWN_BUILD_REVISION 34) +set(TARGET_NWN_BUILD_REVISION 35) set(NWNX_BUILD_SHA ${SHORT_HASH}) set(PLUGIN_PREFIX NWNX_) @@ -47,9 +47,9 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") -Wno-gnu-zero-variadic-macro-arguments -Wno-global-constructors -Wno-exit-time-destructors \ -Wno-missing-prototypes -Wno-unused-function -Wno-weak-vtables -Wno-missing-noreturn \ -Wno-non-virtual-dtor -Wno-double-promotion -Wno-covered-switch-default -Wno-unused-macros \ - -Wno-register") + -Wno-register -Wno-pmf-conversions") else() - set(WARNING_FLAGS_CXX "-Wall -Wextra") + set(WARNING_FLAGS_CXX "-Wall -Wextra -Wno-pmf-conversions") endif() set(NWNX_STANDARD_FLAGS "-m64 -march=x86-64 -fdiagnostics-show-option -fno-omit-frame-pointer -fPIC -fno-strict-aliasing") diff --git a/Compatibility/nwnx_deprecated.nss b/Compatibility/nwnx_deprecated.nss new file mode 100644 index 00000000000..60f075c580c --- /dev/null +++ b/Compatibility/nwnx_deprecated.nss @@ -0,0 +1,460 @@ +// The following functions have been removed from NWNX, please replace them with their basegame implementation! +// To use this file, include it to nwnx.nss and recompile all your scripts. + +// *** NWNX_Creature + +/// @name Cleric Domains +/// @anchor cleric_domains +/// +/// The clerical domains. +/// @{ +const int NWNX_CREATURE_CLERIC_DOMAIN_AIR = 0; +const int NWNX_CREATURE_CLERIC_DOMAIN_ANIMAL = 1; +const int NWNX_CREATURE_CLERIC_DOMAIN_DEATH = 3; +const int NWNX_CREATURE_CLERIC_DOMAIN_DESTRUCTION = 4; +const int NWNX_CREATURE_CLERIC_DOMAIN_EARTH = 5; +const int NWNX_CREATURE_CLERIC_DOMAIN_EVIL = 6; +const int NWNX_CREATURE_CLERIC_DOMAIN_FIRE = 7; +const int NWNX_CREATURE_CLERIC_DOMAIN_GOOD = 8; +const int NWNX_CREATURE_CLERIC_DOMAIN_HEALING = 9; +const int NWNX_CREATURE_CLERIC_DOMAIN_KNOWLEDGE = 10; +const int NWNX_CREATURE_CLERIC_DOMAIN_MAGIC = 13; +const int NWNX_CREATURE_CLERIC_DOMAIN_PLANT = 14; +const int NWNX_CREATURE_CLERIC_DOMAIN_PROTECTION = 15; +const int NWNX_CREATURE_CLERIC_DOMAIN_STRENGTH = 16; +const int NWNX_CREATURE_CLERIC_DOMAIN_SUN = 17; +const int NWNX_CREATURE_CLERIC_DOMAIN_TRAVEL = 18; +const int NWNX_CREATURE_CLERIC_DOMAIN_TRICKERY = 19; +const int NWNX_CREATURE_CLERIC_DOMAIN_WAR = 20; +const int NWNX_CREATURE_CLERIC_DOMAIN_WATER = 21; +/// @} + +/// @struct NWNX_Creature_MemorisedSpell +/// @brief A memorised spell structure. +struct NWNX_Creature_MemorisedSpell +{ + int id; ///< Spell ID + int ready; ///< Whether the spell can be cast + int meta; ///< Metamagic type, if any + int domain; ///< Clerical domain, if any +}; + +/// @brief Gets the count of memorised spells for a creature's class at a level. +/// @param creature The creature object. +/// @param class The class id from classes.2da. (Not class index 0-2) +/// @param level The spell level. +/// @return The memorised spell count. +int NWNX_Creature_GetMemorisedSpellCountByLevel(object creature, int class, int level); + +/// @brief Gets the memorised spell at a class level's index. +/// @param creature The creature object. +/// @param class The class id from classes.2da. (Not class index 0-2) +/// @param level The spell level. +/// @param index The index. Index bounds: 0 <= index < NWNX_Creature_GetMemorisedSpellCountByLevel(). +/// @return An NWNX_Creature_MemorisedSpell() struct. +struct NWNX_Creature_MemorisedSpell NWNX_Creature_GetMemorisedSpell(object creature, int class, int level, int index); + +/// @brief Sets the memorised spell at a class level's index. +/// @param creature The creature object. +/// @param class The class id from classes.2da. (Not class index 0-2) +/// @param level The spell level. +/// @param index The index. Index bounds: 0 <= index < NWNX_Creature_GetMemorisedSpellCountByLevel(). +/// @param spell An NWNX_Creature_MemorisedSpell() struct. +void NWNX_Creature_SetMemorisedSpell(object creature, int class, int level, int index, struct NWNX_Creature_MemorisedSpell spell); + +/// @brief Gets the known spell count (innate casting) at a class level. +/// @param creature The creature object. +/// @param class The class id from classes.2da. (Not class index 0-2) +/// @param level The spell level. +/// @return The known spell count. +int NWNX_Creature_GetKnownSpellCount(object creature, int class, int level); + +/// @brief Gets the known spell at a class level's index. +/// @param creature The creature object. +/// @param class The class id from classes.2da. (Not class index 0-2) +/// @param level The spell level. +/// @param index The index. Index bounds: 0 <= index < NWNX_Creature_GetKnownSpellCount(). +/// @return The spell id. +int NWNX_Creature_GetKnownSpell(object creature, int class, int level, int index); + +/// @brief Clear a specific spell from the creature's spellbook for class +/// @param creature The creature object. +/// @param class The class id from classes.2da. (Not class index 0-2) +/// @param spellId The spell to clear. +void NWNX_Creature_ClearMemorisedKnownSpells(object creature, int class, int spellId); + +/// @brief Clear the memorised spell of the creature for the class, level and index. +/// @param creature The creature object. +/// @param class The class id from classes.2da. (Not class index 0-2) +/// @param level The spell level. +/// @param index The index. Index bounds: 0 <= index < NWNX_Creature_GetMemorisedSpellCountByLevel(). +void NWNX_Creature_ClearMemorisedSpell(object creature, int class, int level, int index); + +/// @brief Get the soundset index for creature. +/// @param creature The creature object. +/// @return The soundset used by the creature. +int NWNX_Creature_GetSoundset(object creature); + +/// @brief Set the soundset index for creature. +/// @param creature The creature object. +/// @param soundset The soundset index. +void NWNX_Creature_SetSoundset(object creature, int soundset); + +/// @brief Sets the creature gender. +/// @param creature The creature object. +/// @param gender The GENDER_ constant. +void NWNX_Creature_SetGender(object creature, int gender); + +/// @brief Restore all creature spells per day for given level. +/// @param creature The creature object. +/// @param level The level to restore. If -1, all spells are restored. +void NWNX_Creature_RestoreSpells(object creature, int level = -1); + +/// @brief Gets one of creature's domains. +/// @param creature The creature object. +/// @param class The class id from classes.2da. (Not class index 0-2) +/// @param index The first or second domain. +/// @deprecated Use GetDomain(). This will be removed in future NWNX releases. +int NWNX_Creature_GetDomain(object creature, int class, int index); + +/// @brief Gets the creature's specialist school. +/// @param creature The creature object. +/// @param class The class id from classes.2da. (Not class index 0-2) +/// @deprecated Use GetSpecialization(). This will be removed in future NWNX releases. +int NWNX_Creature_GetSpecialization(object creature, int class); + +/// @brief Get the number of uses left of a spell. +/// @note This function is for caster classes that don't need to memorize spells. +/// @param oCreature The creature. +/// @param nSpellID The spell ID. +/// @param nMultiClass The position of the class to check, 0-2 +/// @param nDomainLevel The domain level if checking a domain spell. +/// @param nMetaMagic A METAMAGIC_* constant. +/// @return The number of spell uses left or 0 on error. +int NWNX_Creature_GetSpellUsesLeft(object oCreature, int nSpellID, int nMultiClass, int nDomainLevel = 0, int nMetaMagic = METAMAGIC_NONE); + +/// @brief Get the number of memorized ready spells by spellid. +/// @note This function is for caster classes that need to memorize spells. +/// @param oCreature The creature. +/// @param nSpellID The spell ID. +/// @param nMultiClass The position of the class to check, 0-2 +/// @param nMetaMagic A METAMAGIC_* constant. +/// @return The number of spell uses left or 0 on error. +int NWNX_Creature_GetMemorizedSpellReadyCount(object oCreature, int nSpellID, int nMultiClass, int nMetaMagic = METAMAGIC_NONE); + +int NWNX_Creature_GetMemorisedSpellCountByLevel(object creature, int class, int level) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_GetMemorisedSpellCountByLevel"); + return GetMemorizedSpellCountByLevel(creature, class, level); +} + +struct NWNX_Creature_MemorisedSpell NWNX_Creature_GetMemorisedSpell(object creature, int class, int level, int index) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_GetMemorisedSpell"); + struct NWNX_Creature_MemorisedSpell spell; + spell.domain = GetMemorizedSpellIsDomainSpell(creature, class, level, index); + spell.meta = GetMemorizedSpellMetaMagic(creature, class, level, index); + spell.ready = GetMemorizedSpellReady(creature, class, level, index); + spell.id = GetMemorizedSpellId(creature, class, level, index); + return spell; +} + +void NWNX_Creature_SetMemorisedSpell(object creature, int class, int level, int index, struct NWNX_Creature_MemorisedSpell spell) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_SetMemorisedSpell"); + SetMemorizedSpell(creature, class, level, index, spell.id, spell.ready, spell.meta, spell.domain); +} + +int NWNX_Creature_GetKnownSpellCount(object creature, int class, int level) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_GetKnownSpellCount"); + return GetKnownSpellCount(creature, class, level); +} + +int NWNX_Creature_GetKnownSpell(object creature, int class, int level, int index) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_GetKnownSpell"); + return GetKnownSpellId(creature, class, level, index); +} + +void NWNX_Creature_ClearMemorisedKnownSpells(object creature, int class, int spellId) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_ClearMemorisedKnownSpells"); + ClearMemorizedSpellBySpellId(creature, class, spellId); +} + +void NWNX_Creature_ClearMemorisedSpell(object creature, int class, int level, int index) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_ClearMemorisedSpell"); + ClearMemorizedSpell(creature, class, level, index); +} + +int NWNX_Creature_GetSoundset(object creature) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_GetSoundset"); + return GetSoundset(creature); +} + +void NWNX_Creature_SetSoundset(object creature, int soundset) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_SetSoundset"); + SetSoundset(creature, soundset); +} + +void NWNX_Creature_SetGender(object creature, int gender) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_SetGender"); + SetGender(creature, gender); +} + +void NWNX_Creature_RestoreSpells(object creature, int level = -1) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_RestoreSpells"); + if (level == -1) + { + int i; + for (i = 0; i < 10; i++) + { + ReadySpellLevel(creature, i); + } + } + else + ReadySpellLevel(creature, level); + +} + +int NWNX_Creature_GetDomain(object creature, int class, int index) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_GetDomain"); + return GetDomain(creature, index, class); +} + +int NWNX_Creature_GetSpecialization(object creature, int class) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_GetSpecialization"); + return GetSpecialization(creature, class); +} + +int NWNX_Creature_GetSpellUsesLeft(object oCreature, int nSpellID, int nMultiClass, int nDomainLevel = 0, int nMetaMagic = METAMAGIC_NONE) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_GetSpellUsesLeft"); + return GetSpellUsesLeft(oCreature, GetClassByPosition(nMultiClass + 1), nSpellID, nMetaMagic, nDomainLevel); +} + +int NWNX_Creature_GetMemorizedSpellReadyCount(object oCreature, int nSpellID, int nMultiClass, int nMetaMagic = METAMAGIC_NONE) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Creature_GetMemorizedSpellReadyCount"); + return GetSpellUsesLeft(oCreature, GetClassByPosition(nMultiClass + 1), nSpellID, nMetaMagic); +} + +// *** NWNX_Effect + +/// @brief Set a script with optional data that runs when an effect expires +/// @param e The effect. +/// @param script The script to run when the effect expires. +/// @param data Any other data you wish to send back to the script. +/// @remark OBJECT_SELF in the script is the object the effect is applied to. +/// @note Only works for TEMPORARY and PERMANENT effects applied to an object. +effect NWNX_Effect_SetEffectExpiredScript(effect e, string script, string data = ""); + +/// @brief Get the data set with NWNX_Effect_SetEffectExpiredScript() +/// @note Should only be called from a script set with NWNX_Effect_SetEffectExpiredScript(). +/// @return The data attached to the effect. +string NWNX_Effect_GetEffectExpiredData(); + +/// @brief Get the effect creator. +/// @note Should only be called from a script set with NWNX_Effect_SetEffectExpiredScript(). +/// @return The object from which the effect originated. +object NWNX_Effect_GetEffectExpiredCreator(); + +/// @brief Accessorize an EffectVisualEffect(), making it undispellable and unable to be removed by resting or death. +/// @note If linked with a non-visualeffect or a non-accessorized visualeffect it *will* get removed. +/// @param eEffect An EffectVisualEffect(), does not work for other effect types. +/// @return The accessorized effect or an unchanged effect if not an EffectVisualEffect(). +effect NWNX_Effect_AccessorizeVisualEffect(effect eEffect); + +effect NWNX_Effect_SetEffectExpiredScript(effect e, string script, string data = "") +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Effect_SetEffectExpiredScript"); + return EffectLinkEffects(EffectRunScript("", script, "", 0.0f, data), e); +} + +string NWNX_Effect_GetEffectExpiredData() +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Effect_GetEffectExpiredData"); + return GetEffectString(GetLastRunScriptEffect(), 0); +} + +object NWNX_Effect_GetEffectExpiredCreator() +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Effect_GetEffectExpiredCreator"); + return GetEffectCreator(GetLastRunScriptEffect()); +} + +effect NWNX_Effect_AccessorizeVisualEffect(effect eEffect) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Effect_AccessorizeVisualEffect"); + if (GetEffectType(eEffect) == EFFECT_TYPE_VISUALEFFECT) + return UnyieldingEffect(eEffect); + else + return eEffect; +} + +// *** NWNX_Object + +/// @brief Convert an object id to the actual object. +/// @param id The object id. +/// @return An object from the provided object ID. +/// @remark This is the counterpart to ObjectToString. +/// @deprecated Use the basegame StringToObject() function. This will be removed in a future NWNX release. +object NWNX_Object_StringToObject(string id); + +/// @brief Check if an item can fit in an object's inventory. +/// @param obj The object with an inventory. +/// @param baseitem The base item id to check for a fit. +/// @return TRUE if an item of base item type can fit in object's inventory +int NWNX_Object_CheckFit(object obj, int baseitem); + +/// @brief Add an effect to an object that displays an icon and has no other effect. +/// @remark See effecticons.2da for a list of possible effect icons. +/// @param obj The object to apply the effect. +/// @param nIcon The icon id. +/// @param fDuration If specified the effect will be temporary and last this length in seconds, otherwise the effect +/// will be permanent. +void NWNX_Object_AddIconEffect(object obj, int nIcon, float fDuration=0.0); + +/// @brief Remove an icon effect from an object that was added by the NWNX_Object_AddIconEffect() function. +/// @param obj The object. +/// @param nIcon The icon id. +void NWNX_Object_RemoveIconEffect(object obj, int nIcon); + +/// @brief Cause oObject to face fDirection. +/// @note This function is almost identical to SetFacing(), the only difference being that it allows you to specify +/// the target object without the use of AssignCommand(). This is useful when you want to change the facing of an object +/// in an ExecuteScriptChunk() call where AssignCommand() does not work. +/// @param oObject The object to change its facing of +/// @param fDirection The direction the object should face +void NWNX_Object_SetFacing(object oObject, float fDirection); + +object NWNX_Object_StringToObject(string id) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Object_StringToObject"); + return StringToObject(id); +} + +int NWNX_Object_CheckFit(object obj, int baseitem) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Object_CheckFit"); + return GetBaseItemFitsInInventory(baseitem, obj); +} + +void NWNX_Object_AddIconEffect(object obj, int nIcon, float fDuration=0.0) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Object_AddIconEffect"); + effect eEffect = GetFirstEffect(obj); + while (GetIsEffectValid(eEffect)) + { + if (GetEffectTag(eEffect) == "NWNX_Object_IconEffect" && GetEffectInteger(eEffect, 0) == nIcon) + RemoveEffect(obj, eEffect); + eEffect = GetNextEffect(obj); + } + + effect eIcon = TagEffect(SupernaturalEffect(EffectIcon(nIcon)), "NWNX_Object_IconEffect"); + ApplyEffectToObject(fDuration == 0.0 ? DURATION_TYPE_PERMANENT : DURATION_TYPE_TEMPORARY, eIcon, obj, fDuration); +} + +void NWNX_Object_RemoveIconEffect(object obj, int nIcon) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Object_RemoveIconEffect"); + effect eEffect = GetFirstEffect(obj); + while (GetIsEffectValid(eEffect)) + { + if (GetEffectTag(eEffect) == "NWNX_Object_IconEffect" && GetEffectInteger(eEffect, 0) == nIcon) + RemoveEffect(obj, eEffect); + eEffect = GetNextEffect(obj); + } +} + +void NWNX_Object_SetFacing(object oObject, float fDirection) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Object_SetFacing"); + AssignCommand(oObject, SetFacing(fDirection)); +} + +// *** NWNX_Regex + +/// @param str The string to search. +/// @param regex The regular expression to use when searching. +/// @return TRUE if string matches the regular expression. +int NWNX_Regex_Search(string str, string regex); + +/// @brief Replaces any matches of the regular expression with a string. +/// @param str The string to search. +/// @param regex The regular expression to use when searching. +/// @param replace The string to replace the matches with. +/// @param firstOnly Set to TRUE to only replace the first match. +/// @return A new string with any replacements made. +string NWNX_Regex_Replace(string str, string regex, string replace = "", int firstOnly = FALSE); + +/// @brief Returns all matches in a string that match the regular expression. +/// @param str The string to search. +/// @param regex The regular expression to use. +/// @return A json array with json arrays of all (sub)matches. Returns JsonNull() on error. +json NWNX_Regex_Match(string str, string regex); + +int NWNX_Regex_Search(string str, string regex) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Regex_Search"); + return JsonGetLength(RegExpMatch(regex, str)); +} + +string NWNX_Regex_Replace(string str, string regex, string replace="", int firstOnly=0) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Regex_Replace"); + return RegExpReplace(regex, str, replace, firstOnly ? REGEXP_FORMAT_FIRST_ONLY : REGEXP_FORMAT_DEFAULT); +} + +json NWNX_Regex_Match(string str, string regex) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Regex_Match"); + return RegExpIterate(regex, str); +} + +// *** NWNX_Util + +/// @brief Determines if the supplied resref exists. +/// @param resref The resref to check. +/// @param type The @ref resref_types "Resref Type". +/// @return TRUE/FALSE +int NWNX_Util_IsValidResRef(string resref, int type = RESTYPE_UTC); + +/// @anchor twoda_row_count +/// @brief Gets the row count for a 2da. +/// @param str The 2da to check (do not include the .2da). +/// @return The amount of rows in the 2da. +int NWNX_Util_Get2DARowCount(string str); + +/// @brief Gets the contents of a .nss script file as a string. +/// @param sScriptName The name of the script to get the contents of. +/// @param nMaxLength The max length of the return string, -1 to get everything +/// @return The script file contents or "" on error. +string NWNX_Util_GetNSSContents(string sScriptName, int nMaxLength = -1); + +int NWNX_Util_IsValidResRef(string resref, int type = RESTYPE_UTC) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Util_IsValidResRef"); + return ResManGetAliasFor(resref, type) != ""; +} + +int NWNX_Util_Get2DARowCount(string str) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Util_Get2DARowCount"); + return Get2DARowCount(str); +} + +string NWNX_Util_GetNSSContents(string sScriptName, int nMaxLength = -1) +{ + WriteTimestampedLogEntry("WARNING: Calling deprecated NWNX Function: NWNX_Util_GetNSSContents"); + string s = ResManGetFileContents(sScriptName, RESTYPE_NSS); + return nMaxLength == -1 ? s : GetStringLeft(s, nMaxLength); +} diff --git a/Core/NWNXCore.cpp b/Core/NWNXCore.cpp index 6c11a94f75f..1d30df5e895 100644 --- a/Core/NWNXCore.cpp +++ b/Core/NWNXCore.cpp @@ -122,10 +122,12 @@ NWNXCore::NWNXCore() // This will be fixed in a future release of NWNX:EE. For now, the version check will happen *too late* - we may // crash before the version check happens. std::printf("Starting NWNX %d.%d [%s]\n", NWNX_TARGET_NWN_BUILD, NWNX_TARGET_NWN_BUILD_REVISION, NWNX_BUILD_SHA); - // This sets up the base address for every hook and patch to follow. - Platform::CalculateBaseAddress(); - m_createServerHook = Hooks::HookFunction(API::Functions::_ZN11CAppManager12CreateServerEv, (void*)&CreateServerHandler); + // Initialise export table. New plugin code should endeavour to use direct linking + // for hook naming, but these might help if you want to target a overloaded function. + NWNXLib::API::Functions::Initialize(); + + m_createServerHook = Hooks::HookFunction(&CAppManager::CreateServer, &CreateServerHandler); } NWNXCore::~NWNXCore() @@ -174,19 +176,20 @@ void NWNXCore::ConfigureLogLevel(const std::string& plugin) void NWNXCore::InitialSetupHooks() { - m_vmSetVarHook = Hooks::HookFunction(API::Functions::_ZN25CNWVirtualMachineCommands20ExecuteCommandSetVarEii, (void*)&SetVarHandler, Hooks::Order::Final); - m_vmGetVarHook = Hooks::HookFunction(API::Functions::_ZN25CNWVirtualMachineCommands20ExecuteCommandGetVarEii, (void*)&GetVarHandler, Hooks::Order::Final); - m_vmTagEffectHook = Hooks::HookFunction(API::Functions::_ZN25CNWVirtualMachineCommands23ExecuteCommandTagEffectEii, (void*)&TagEffectHandler, Hooks::Order::Final); - m_vmTagItemProperyHook = Hooks::HookFunction(API::Functions::_ZN25CNWVirtualMachineCommands29ExecuteCommandTagItemPropertyEii, (void*)&TagItemPropertyHandler, Hooks::Order::Final); - m_vmPlaySoundHook = Hooks::HookFunction(API::Functions::_ZN25CNWVirtualMachineCommands23ExecuteCommandPlaySoundEii, (void*)&PlaySoundHandler, Hooks::Order::Final); + m_vmSetVarHook = Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandSetVar, &SetVarHandler, Hooks::Order::Final); + m_vmGetVarHook = Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandGetVar, &GetVarHandler, Hooks::Order::Final); + m_vmTagEffectHook = Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandTagEffect, &TagEffectHandler, Hooks::Order::Final); + m_vmTagItemProperyHook = Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandTagItemProperty, &TagItemPropertyHandler, Hooks::Order::Final); + m_vmPlaySoundHook = Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandPlaySound, &PlaySoundHandler, Hooks::Order::Final); + - m_destroyServerHook = Hooks::HookFunction(API::Functions::_ZN11CAppManager13DestroyServerEv, (void*)&DestroyServerHandler, Hooks::Order::Final); - m_mainLoopInternalHook = Hooks::HookFunction(API::Functions::_ZN21CServerExoAppInternal8MainLoopEv, (void*)&MainLoopInternalHandler, Hooks::Order::Final); + m_destroyServerHook = Hooks::HookFunction(&CAppManager::DestroyServer, &DestroyServerHandler, Hooks::Order::Final); + m_mainLoopInternalHook = Hooks::HookFunction(&CServerExoAppInternal::MainLoop, &MainLoopInternalHandler, Hooks::Order::Final); POS::InitializeHooks(); - static Hooks::Hook loadModuleInProgressHook = Hooks::HookFunction(API::Functions::_ZN10CNWSModule20LoadModuleInProgressEii, - (void*)+[](CNWSModule *pModule, int32_t nAreasLoaded, int32_t nAreasToLoad) -> uint32_t + static Hooks::Hook loadModuleInProgressHook = Hooks::HookFunction(&CNWSModule::LoadModuleInProgress, + +[](CNWSModule *pModule, int32_t nAreasLoaded, int32_t nAreasToLoad) -> uint32_t { int index = nAreasLoaded; auto *node = pModule->m_lstModuleArea.m_pcExoLinkedListInternal->pHead; @@ -206,8 +209,8 @@ void NWNXCore::InitialSetupHooks() }, Hooks::Order::Earliest); static Hooks::Hook loadModuleFinishHook = Hooks::HookFunction( - API::Functions::_ZN10CNWSModule16LoadModuleFinishEv, - (void*)+[](CNWSModule *pModule) -> uint32_t + &CNWSModule::LoadModuleFinish, + +[](CNWSModule *pModule) -> uint32_t { MessageBus::Broadcast("NWNX_CORE_SIGNAL", { "ON_MODULE_LOAD_FINISH" }); return loadModuleFinishHook->CallOriginal(pModule); @@ -216,8 +219,8 @@ void NWNXCore::InitialSetupHooks() if (!Config::Get("ALLOW_NWNX_FUNCTIONS_IN_EXECUTE_SCRIPT_CHUNK", false)) { static Hooks::Hook runScriptChunkHook = Hooks::HookFunction( - API::Functions::_ZN15CVirtualMachine14RunScriptChunkERK10CExoStringjii, - (void*)+[](CVirtualMachine *pVirtualMachine, const CExoString& sScriptChunk, ObjectID oid, int32_t bOidValid, int32_t bWrapIntoMain) -> int32_t + &CVirtualMachine::RunScriptChunk, + +[](CVirtualMachine *pVirtualMachine, const CExoString& sScriptChunk, ObjectID oid, int32_t bOidValid, int32_t bWrapIntoMain) -> int32_t { g_core->m_ScriptChunkRecursion += 1; auto retVal = runScriptChunkHook->CallOriginal(pVirtualMachine, sScriptChunk, oid, bOidValid, bWrapIntoMain); @@ -486,13 +489,6 @@ void NWNXCore::InitialSetupCommands() Log::GetPrintSource(), Log::GetColorOutput(), Log::GetForceColor()); }); - Commands::Register("resolve", [](std::string&, std::string& args) - { - auto addr = String::FromString(args); - if (addr) - LOG_NOTICE("%s", NWNXLib::Platform::ResolveAddress(*addr)); - }); - } diff --git a/Core/NWNXCoreVM.cpp b/Core/NWNXCoreVM.cpp index ed37e178513..92f2521e460 100644 --- a/Core/NWNXCoreVM.cpp +++ b/Core/NWNXCoreVM.cpp @@ -4,7 +4,7 @@ #include "API/CAppManager.hpp" #include "API/CExoString.hpp" #include "API/Constants.hpp" -#include "API/Functions.hpp" +#include "API/nwn_api.hpp" #include "API/Globals.hpp" #include "API/Vector.hpp" #include "API/CExoString.hpp" diff --git a/NWNXLib/API/API/CExoEncapsulatedFile.hpp b/NWNXLib/API/API/CExoEncapsulatedFile.hpp index f2bf2d98dd7..ac00950e550 100644 --- a/NWNXLib/API/API/CExoEncapsulatedFile.hpp +++ b/NWNXLib/API/API/CExoEncapsulatedFile.hpp @@ -27,18 +27,13 @@ struct CExoEncapsulatedFile : CExoPackedFile CExoEncapsulatedFile(); ~CExoEncapsulatedFile(); virtual void AddRefCount(); - virtual void AddAsyncRefCount(); virtual BOOL CloseFile(); - virtual BOOL CloseAsyncFile(); virtual void DeleteRefCount(); - virtual void DeleteAsyncRefCount(); virtual uint32_t GetResourceSize(RESID nID); virtual BOOL Initialize(); virtual BOOL OpenFile(); virtual BOOL OpenFile(uint8_t * pCipher); - virtual BOOL OpenAsyncFile(); virtual uint32_t ReadResource(RESID nID, void * pData, uint32_t nSize, uint32_t nDataOffset); - virtual void ReadResourceAsync(RESID nID, void * pData, uint32_t nSize, uint32_t nDataOffset); virtual BOOL LoadHeader(const char * expectOid, uint8_t nType = 0); virtual BOOL UnloadHeader(); diff --git a/NWNXLib/API/API/CExoFile.hpp b/NWNXLib/API/API/CExoFile.hpp index fdd4a41a122..f8d7e7a5f62 100644 --- a/NWNXLib/API/API/CExoFile.hpp +++ b/NWNXLib/API/API/CExoFile.hpp @@ -32,9 +32,6 @@ struct CExoFile int32_t GetSize(); uint32_t Read(void * ptr, uint32_t size, uint32_t number); uint32_t Read(CExoString & string, uint32_t length); - void ReadAsync(void * ptr, uint32_t size, uint32_t number); - BOOL ReadAsyncComplete(); - uint32_t ReadAsyncBytesRead(); uint32_t Write(const void * ptr, uint32_t size, uint32_t number); uint32_t Write(const char * string); uint32_t Write(const CExoString & string); diff --git a/NWNXLib/API/API/CExoPackedFile.hpp b/NWNXLib/API/API/CExoPackedFile.hpp index be36d1527fc..f7abe64da14 100644 --- a/NWNXLib/API/API/CExoPackedFile.hpp +++ b/NWNXLib/API/API/CExoPackedFile.hpp @@ -21,28 +21,21 @@ struct CExoPackedFile uint16_t m_wDrives; uint32_t m_nFileSize; CExoFile * m_pExoFile; - CExoFile * m_pAsyncExoFile; int32_t m_nRefCount; - int32_t m_nAsyncRefCount; BOOL m_bLoaded; - BOOL m_bAsyncLoaded; BOOL m_bHeaderLoaded; CExoPackedFile(); virtual ~CExoPackedFile(); virtual void AddRefCount(); - virtual void AddAsyncRefCount(); virtual BOOL CloseFile(); - virtual BOOL CloseAsyncFile(); virtual void DeleteRefCount(); virtual void DeleteAsyncRefCount(); virtual CExoFile * GetFile(); - virtual CExoFile * GetAsyncFile(); virtual uint32_t GetResourceSize(RESID nID); virtual BOOL Initialize(); virtual BOOL OpenFile(); virtual BOOL OpenFile(uint8_t * pCipher); - virtual BOOL OpenAsyncFile(); virtual uint32_t ReadResource(RESID nID, void * pData, uint32_t nSize, uint32_t nDataOffset); virtual void ReadResourceAsync(RESID nID, void * pData, uint32_t nSize, uint32_t nDataOffset); virtual BOOL LoadHeader(const char * expectOid, uint8_t nType = 0); diff --git a/NWNXLib/API/API/CExoResFile.hpp b/NWNXLib/API/API/CExoResFile.hpp index eb9995e0718..43258772fbe 100644 --- a/NWNXLib/API/API/CExoResFile.hpp +++ b/NWNXLib/API/API/CExoResFile.hpp @@ -30,18 +30,13 @@ struct CExoResFile : CExoPackedFile CExoResFile(); ~CExoResFile(); virtual void AddRefCount(); - virtual void AddAsyncRefCount(); virtual BOOL CloseFile(); - virtual BOOL CloseAsyncFile(); virtual void DeleteRefCount(); - virtual void DeleteAsyncRefCount(); virtual uint32_t GetResourceSize(RESID nID); virtual BOOL Initialize(); virtual BOOL OpenFile(); virtual BOOL OpenFile(uint8_t * pCipher); - virtual BOOL OpenAsyncFile(); virtual uint32_t ReadResource(RESID nID, void * pData, uint32_t nSize, uint32_t nDataOffset); - virtual void ReadResourceAsync(RESID nID, void * pData, uint32_t nSize, uint32_t nDataOffset); virtual BOOL LoadHeader(const char * expectOid, uint8_t nType = 0); virtual BOOL UnloadHeader(); diff --git a/NWNXLib/API/API/CExoResMan.hpp b/NWNXLib/API/API/CExoResMan.hpp index 4a950e91304..e50f3b6c707 100644 --- a/NWNXLib/API/API/CExoResMan.hpp +++ b/NWNXLib/API/API/CExoResMan.hpp @@ -35,10 +35,6 @@ struct CExoResMan int64_t m_nAvailableMemory; CExoArrayList m_pKeyTables; CExoLinkedList m_lstToBeFreed; - CExoLinkedList m_lstAsyncResQueue; - CRes * m_pCurrentAsyncRes; - CExoFile * m_pAsyncFile; - BOOL m_bAsyncSuspended; uint32_t m_nTotalDemands; uint32_t m_nTotalCacheHits; uint32_t m_nTotalOldReleases; @@ -76,10 +72,8 @@ struct CExoResMan BOOL RemoveFixedKeyTableFile(const CExoString & sName); BOOL RemoveResourceDirectory(const CExoString & sName); BOOL RemoveManifest(const Hash::SHA1 & sManifestHash); - void ResumeServicing(); void SetResObject(const CResRef & cResRef, RESTYPE nType, CRes * pNewRes); BOOL SetTotalResourceMemory(int64_t totalAvailableMemory); - void SuspendServicing(); void Update(uint32_t nTimeSlice); BOOL UpdateEncapsulatedResourceFile(const CExoString & sName); BOOL UpdateFixedKeyTableFile(const CExoString & sName); @@ -88,11 +82,9 @@ struct CExoResMan RESTYPE GetResTypeFromFile(const CExoString & sName); void GetResRefFromFile(CResRef & cResRef, const CExoString & sName); BOOL GetKeyEntry(const CResRef & cResRef, RESTYPE nType, CExoKeyTable * * pNewTable, CKeyTableEntry * * pNewKey, bool bLogFailure = true); - int32_t CancelRequest(CRes * pRes); void * Demand(CRes * pRes); void Dump(CRes * pRes, BOOL bRemove = false); int32_t Release(CRes * pRes); - int32_t Request(CRes * pRes); BOOL ReadRaw(CRes * pRes, int32_t nSize, char * pBuffer); BOOL GetNewResRef(const CResRef & cResRef, RESTYPE nType, CResRef & cTarget); BOOL CreateDirectory(CExoString sDirectory); @@ -100,7 +92,6 @@ struct CExoResMan BOOL CleanDirectory(CExoString sDirectory, BOOL bDeleteSubDirectories = false, BOOL bCleanSubDirectories = false, RESTYPE restype = 0xFFFF); BOOL RemoveFile(const CExoString & sFile, RESTYPE nResType); BOOL GetFreeDiskSpace(const CExoString & sDirectory, uint64_t * pSpaceAvailable); - BOOL ServiceCurrentAsyncRes(); int32_t GetTableCount(CRes * pRes, BOOL bCountStatic); BOOL GetIsStaticType(RESTYPE nType); void RemoveFromToBeFreedList(CRes * pRes); @@ -115,11 +106,11 @@ struct CExoResMan BOOL FreeChunk(); CExoKeyTable * GetTable(CRes * pRes); BOOL Malloc(CRes * pRes); - BOOL ServiceFromDirectory(CRes * pRes, BOOL bAsync = false); - BOOL ServiceFromEncapsulated(CRes * pRes, BOOL bAsync = false); - BOOL ServiceFromResFile(CRes * pRes, BOOL bAsync = false); - BOOL ServiceFromImage(CRes * pRes, BOOL bAsync = false); - BOOL ServiceFromManifest(CRes * pRes, BOOL bAsync = false); + BOOL ServiceFromDirectory(CRes * pRes); + BOOL ServiceFromEncapsulated(CRes * pRes); + BOOL ServiceFromResFile(CRes * pRes); + BOOL ServiceFromImage(CRes * pRes); + BOOL ServiceFromManifest(CRes * pRes); BOOL UpdateKeyTable(const CExoString & sName, uint32_t nTableType); BOOL ServiceFromDirectoryRaw(CRes * pRes, int32_t nSize, char * pBuffer); BOOL ServiceFromEncapsulatedRaw(CRes * pRes, int32_t nSize, char * pBuffer); diff --git a/NWNXLib/API/API/CExoResourceImageFile.hpp b/NWNXLib/API/API/CExoResourceImageFile.hpp index fe1b62e0171..49cb47a56dc 100644 --- a/NWNXLib/API/API/CExoResourceImageFile.hpp +++ b/NWNXLib/API/API/CExoResourceImageFile.hpp @@ -24,18 +24,13 @@ struct CExoResourceImageFile : CExoPackedFile CExoResourceImageFile(); ~CExoResourceImageFile(); virtual void AddRefCount(); - virtual void AddAsyncRefCount(); virtual BOOL CloseFile(); - virtual BOOL CloseAsyncFile(); virtual void DeleteRefCount(); - virtual void DeleteAsyncRefCount(); virtual uint32_t GetResourceSize(RESID nID); virtual BOOL Initialize(); virtual BOOL OpenFile(); virtual BOOL OpenFile(uint8_t * pCipher); - virtual BOOL OpenAsyncFile(); virtual uint32_t ReadResource(RESID nID, void * pData, uint32_t nSize, uint32_t nDataOffset); - virtual void ReadResourceAsync(RESID nID, void * pData, uint32_t nSize, uint32_t nDataOffset); virtual BOOL LoadHeader(const char * expectOid, uint8_t nType = 0); virtual BOOL UnloadHeader(); virtual void * GetResource(RESID nID); diff --git a/NWNXLib/API/API/CGameEffect.hpp b/NWNXLib/API/API/CGameEffect.hpp index 0c57842f5d4..2ac6567f769 100644 --- a/NWNXLib/API/API/CGameEffect.hpp +++ b/NWNXLib/API/API/CGameEffect.hpp @@ -41,6 +41,7 @@ struct CGameEffect BOOL m_bSkipOnLoad; uint64_t m_nItemPropertySourceId; CExoString m_sCustomTag; + BOOL m_bIgnoreImmunity; CGameEffect(BOOL bCreateNewID = true); CGameEffect(CGameEffect * pParent, BOOL bCopyIconVisibility = false); diff --git a/NWNXLib/API/API/CLastUpdateObject.hpp b/NWNXLib/API/API/CLastUpdateObject.hpp index 69cf1535982..7c80956fb53 100644 --- a/NWNXLib/API/API/CLastUpdateObject.hpp +++ b/NWNXLib/API/API/CLastUpdateObject.hpp @@ -18,8 +18,10 @@ NWN_API_PROLOGUE(CLastUpdateObject) struct CLoopingVisualEffect; struct CNWSPlayerLUOQuickbarItemButton; +struct ObjectVisualTransformData; +typedef TextureReplaceInfo AnimationReplaceInfo; typedef int BOOL; typedef uint32_t OBJECT_ID; @@ -89,8 +91,8 @@ struct CLastUpdateObject CExoString m_sSubRace; CExoString m_sDeity; uint8_t m_nGender; - uint8_t m_nClass[3]; - uint8_t m_nLevel[3]; + uint8_t m_nClass[8]; + uint8_t m_nLevel[8]; int16_t m_nAlignmentLawChaos; int16_t m_nAlignmentGoodEvil; BOOL m_bSelectableWhenDead; @@ -108,17 +110,24 @@ struct CLastUpdateObject uint8_t m_nAbilityFinalINT; uint8_t m_nAbilityFinalWIS; uint8_t m_nAbilityFinalCHA; - ObjectVisualTransformData m_pObjectVisualTransformData; + ObjectVisualTransformData * m_pObjectVisualTransformData; CExoArrayList m_lMaterialShaderParameters; CExoArrayList m_lTextureReplaceInfo; + CExoArrayList m_lAnimationReplaceInfo; Vector m_vHiliteColor; int32_t m_nMouseCursor; + BOOL m_bUseable; + int32_t m_nUiDiscoveryMask; + int32_t m_nTextBubbleOverrideType; + CExoString m_sTextBubbleOverrideText; int32_t m_nUpdateDisplayNameSeq; int32_t m_nUpdateHiddenSeq; CNWSPlayerLUOQuickbarItemButton * m_pQuickbarButton; CLastUpdateObject(); ~CLastUpdateObject(); + const ObjectVisualTransformData & GetVisualTransformData(); + void SetVisualTransformData(const ObjectVisualTransformData & data); void InitializeQuickbar(); diff --git a/NWNXLib/API/API/CNWArea.hpp b/NWNXLib/API/API/CNWArea.hpp index 35e2cf350de..1b3605059cd 100644 --- a/NWNXLib/API/API/CNWArea.hpp +++ b/NWNXLib/API/API/CNWArea.hpp @@ -47,11 +47,13 @@ struct CNWArea uint32_t m_nMoonFogColor; uint8_t m_nMoonFogAmount; BOOL m_bMoonShadows; + Vector m_vMoonDirection; uint32_t m_nSunAmbientColor; uint32_t m_nSunDiffuseColor; uint32_t m_nSunFogColor; uint8_t m_nSunFogAmount; BOOL m_bSunShadows; + Vector m_vSunDirection; BOOL m_bUseDayNightCycle; BOOL m_bIsNight; uint8_t m_nSkyBox; diff --git a/NWNXLib/API/API/CNWClass.hpp b/NWNXLib/API/API/CNWClass.hpp index c6e2a45245f..24a434fffdd 100644 --- a/NWNXLib/API/API/CNWClass.hpp +++ b/NWNXLib/API/API/CNWClass.hpp @@ -19,6 +19,7 @@ typedef int BOOL; struct CNWClass { uint32_t m_nName; + uint32_t m_nShort; uint32_t m_nNameLower; uint32_t m_nNamePlural; uint32_t m_nDescription; @@ -67,10 +68,12 @@ struct CNWClass uint8_t m_nArcSpellUsePerDayLevel; uint8_t m_nDivSpellUsePerDayLevel; uint8_t m_nEpicLevel; + BOOL m_bSkipSpellSelection; CNWClass(); ~CNWClass(); CExoString GetNameText(); + CExoString GetShortNameText(); CExoString GetNameLowerText(); CExoString GetNamePluralText(); CExoString GetDescriptionText(); diff --git a/NWNXLib/API/API/CNWRace.hpp b/NWNXLib/API/API/CNWRace.hpp index 94ef767f863..f03a0630828 100644 --- a/NWNXLib/API/API/CNWRace.hpp +++ b/NWNXLib/API/API/CNWRace.hpp @@ -42,6 +42,7 @@ struct CNWRace int32_t m_nNormalFeatEveryNthLevel; int32_t m_nNumberNormalFeatsEveryNthLevel; int32_t m_nSkillPointModifierAbility; + uint16_t m_nFavoredEnemyFeat; CNWRace(); ~CNWRace(); diff --git a/NWNXLib/API/API/CNWRules.hpp b/NWNXLib/API/API/CNWRules.hpp index b010c7a524e..42bccadd9c4 100644 --- a/NWNXLib/API/API/CNWRules.hpp +++ b/NWNXLib/API/API/CNWRules.hpp @@ -73,6 +73,7 @@ struct CNWRules int32_t GetDamageIndexFromFlags(uint32_t nDamageFlags); void ReloadAll(); void UnloadAll(); + uint32_t GetHighestDamageTypeFlag(); CExoString GetRulesetStringEntry(const CExoString & label, CExoString whenMissing); int32_t GetRulesetIntEntry(const CExoString & label, int32_t whenMissing); float GetRulesetFloatEntry(const CExoString & label, float whenMissing); @@ -82,6 +83,7 @@ struct CNWRules void LoadSkillInfo(); void LoadDomainInfo(); void InitLegacyClassDefaults(uint8_t nClass); + void InitLegacyRaceDefaults(uint8_t nRace); void LoadDifficultyInfo(); void LoadRulesetInfo(); diff --git a/NWNXLib/API/API/CNWSCombatAttackData.hpp b/NWNXLib/API/API/CNWSCombatAttackData.hpp index d74206ae97c..de63addada3 100644 --- a/NWNXLib/API/API/CNWSCombatAttackData.hpp +++ b/NWNXLib/API/API/CNWSCombatAttackData.hpp @@ -33,7 +33,7 @@ struct CNWSCombatAttackData uint8_t m_nThreatRoll; int32_t m_nToHitMod; char m_nMissedBy; - int16_t m_nDamage[13]; + int16_t m_nDamage[32]; uint8_t m_nWeaponAttackType; uint8_t m_nAttackMode; uint8_t m_nConcealment; @@ -61,9 +61,9 @@ struct CNWSCombatAttackData void ClearAttackData(); void Copy(CNWSCombatAttackData * pData, BOOL bCopyDebugInfo = false); void SetBaseDamage(int32_t nDamage); - void SetDamage(uint16_t nDamageType, int32_t nDamage); - void AddDamage(uint16_t nDamageType, int32_t nDamage); - int32_t GetDamage(uint16_t nDamageType); + void SetDamage(uint32_t damageFlags, int32_t nDamage); + void AddDamage(uint32_t damageFlags, int32_t nDamage); + int32_t GetDamage(uint32_t damageFlags); int32_t GetTotalDamage(BOOL bBaseDamage = false); BOOL SaveData(CResGFF * pRes, CResStruct * pStruct); BOOL LoadData(CResGFF * pRes, CResStruct * pStruct); diff --git a/NWNXLib/API/API/CNWSCreature.hpp b/NWNXLib/API/API/CNWSCreature.hpp index 648b30fb7f0..71abdf48e37 100644 --- a/NWNXLib/API/API/CNWSCreature.hpp +++ b/NWNXLib/API/API/CNWSCreature.hpp @@ -230,6 +230,7 @@ struct CNWSCreature : CNWSObject BOOL m_bMasterDroppedFromServer; uint32_t m_nMasterDroppedCalendarDay; uint32_t m_nMasterDroppedTimeOfDay; + OBJECT_ID m_oidCommandingPlayer; int32_t m_nOriginalFactionId; CExoArrayList * m_pPersonalReputationList; CExoArrayList * m_pReputation; @@ -346,7 +347,7 @@ struct CNWSCreature : CNWSObject int16_t GetMaxHitPoints(BOOL bIncludeToughness = true); void DoDamage(int32_t nDamage); uint8_t CalculateDamagePower(CNWSObject * pTarget, BOOL bOffHand = false); - uint16_t GetDamageFlags(); + uint32_t GetDamageFlags(); float MaxAttackRange(OBJECT_ID oidTarget, BOOL bBaseValue = false, BOOL bPassiveRange = false); float DesiredAttackRange(OBJECT_ID oidTarget, BOOL bBaseValue = false); uint8_t GetDetectMode(); diff --git a/NWNXLib/API/API/CNWSCreatureAppearanceInfo.hpp b/NWNXLib/API/API/CNWSCreatureAppearanceInfo.hpp index 5d6a1d6c89e..a3d77b9d142 100644 --- a/NWNXLib/API/API/CNWSCreatureAppearanceInfo.hpp +++ b/NWNXLib/API/API/CNWSCreatureAppearanceInfo.hpp @@ -29,8 +29,8 @@ struct CNWSCreatureAppearanceInfo uint8_t m_nHairColor; uint8_t m_nTattooColor1; uint8_t m_nTattooColor2; - uint8_t m_pPartVariation[19]; - uint8_t m_nHeadVariation; + uint16_t m_pPartVariation[19]; + uint16_t m_nHeadVariation; uint32_t m_nTailVariation; uint32_t m_nWingVariation; BOOL m_bForceArmorAppearanceUpdate; @@ -38,6 +38,8 @@ struct CNWSCreatureAppearanceInfo ObjectVisualTransformData m_pRightHandItemVisualTransform; ObjectVisualTransformData m_pLeftHandItemVisualTransform; + CNWSCreatureAppearanceInfo(); + void Clear(); #ifdef NWN_CLASS_EXTENSION_CNWSCreatureAppearanceInfo diff --git a/NWNXLib/API/API/CNWSCreatureStats.hpp b/NWNXLib/API/API/CNWSCreatureStats.hpp index 6dececf90b3..472d9aed899 100644 --- a/NWNXLib/API/API/CNWSCreatureStats.hpp +++ b/NWNXLib/API/API/CNWSCreatureStats.hpp @@ -61,7 +61,7 @@ struct CNWSCreatureStats float m_fChallengeRating; uint8_t m_nStartingPackage; uint8_t m_nNumMultiClasses; - CNWSCreatureStats_ClassInfo m_ClassInfo[3]; + CNWSCreatureStats_ClassInfo m_ClassInfo[8]; uint16_t m_nRace; CExoString m_sSubRace; uint8_t m_nStrengthBase; @@ -145,8 +145,8 @@ struct CNWSCreatureStats uint8_t m_nTattoo2Color; uint16_t m_nAppearanceType; uint8_t m_nPhenoType; - uint8_t m_nHeadVariation; - uint8_t m_pPartVariation[19]; + uint16_t m_nHeadVariation; + uint16_t m_pPartVariation[19]; uint32_t m_nTailVariation; uint32_t m_nWingVariation; int32_t m_nMovementRate; @@ -257,6 +257,7 @@ struct CNWSCreatureStats uint16_t GetHighestLevelOfFeat(uint16_t nFeat); BOOL FeatRequirementsMetAfterLevelUp(uint16_t nFeatID, CNWLevelStats * pLevelUpStats, uint8_t nSchool); uint8_t GetFeatSourceClass(uint16_t nFeat); + static void GetStatBonusesFromFeats(CExoArrayList *m_pFeats, int32_t *pMods, BOOL bSubtractBonuses = false); void ComputeFeatBonuses(CExoArrayList * m_pFeats, BOOL bSubtractBonuses = false); void RemoveFeat(uint16_t nFeat); void ClearFeats(); diff --git a/NWNXLib/API/API/CNWSItem.hpp b/NWNXLib/API/API/CNWSItem.hpp index f6500efc25d..6e53ab32441 100644 --- a/NWNXLib/API/API/CNWSItem.hpp +++ b/NWNXLib/API/API/CNWSItem.hpp @@ -39,9 +39,9 @@ struct CNWSItem : CNWItem, CNWSObject uint32_t m_nUnidentifiedCost; int32_t m_nAdditionalCost; BOOL m_bRecalculateCost; - uint8_t m_nModelPart[3]; - uint8_t m_nArmorModelPart[19]; - uint8_t m_nUnalteredArmorModelPart[19]; + uint16_t m_nModelPart[3]; + uint16_t m_nArmorModelPart[19]; + uint16_t m_nUnalteredArmorModelPart[19]; OBJECT_ID m_oidPossessor; CItemRepository * m_pItemRepository; uint8_t m_nRepositoryPositionX; @@ -90,7 +90,7 @@ struct CNWSItem : CNWItem, CNWSObject uint32_t GetCost(BOOL bIncludeStackSize = true, BOOL bIdentifiedCost = false, BOOL bUseILRStackSize = false, BOOL bIgnorePlotFlag = false); void SetIdentified(BOOL bIdentified); int32_t ComputeArmorClass(); - uint16_t GetDamageFlags(); + uint32_t GetDamageFlags(); BOOL MergeItem(CNWSItem * pItemToMerge); CNWSItem * SplitItem(int32_t nNumberToSplitOff); void SetNumCharges(int32_t nNumCharges, BOOL bUpdateActiveProperties = true); diff --git a/NWNXLib/API/API/CNWSMessage.hpp b/NWNXLib/API/API/CNWSMessage.hpp index 20431ffa9a9..ff8ca99b836 100644 --- a/NWNXLib/API/API/CNWSMessage.hpp +++ b/NWNXLib/API/API/CNWSMessage.hpp @@ -8,6 +8,7 @@ #include "CResRef.hpp" #include "ObjectVisualTransformData.hpp" #include "Vector.hpp" +#include "Vector4.hpp" #include @@ -120,6 +121,7 @@ struct CNWSMessage : CNWMessage BOOL SendServerToPlayerCamera_LockPitch(CNWSPlayer * pPlayer, BOOL bLock); BOOL SendServerToPlayerCamera_LockDistance(CNWSPlayer * pPlayer, BOOL bLock); BOOL SendServerToPlayerCamera_LockYaw(CNWSPlayer * pPlayer, BOOL bLock); + BOOL SendServerToPlayerCamera_SetLimits(CNWSPlayer * pPlayer, float fMinPitch, float fMaxPitch, float fMinDist, float fMaxDist); BOOL SendServerToPlayerLogin_CharacterQuery(CNWSPlayer * pPlayer, uint8_t & nNumClasses, int32_t * pClasses, uint8_t * pLevels, uint32_t & nXP); BOOL SendServerToPlayerLogin_NeedCharacter(uint32_t nPlayerId); BOOL SendServerToPlayerLoadBar_StartStallEvent(uint32_t nStallEvent); @@ -159,8 +161,7 @@ struct CNWSMessage : CNWMessage BOOL SendServerToPlayerSoundObject_Stop(CNWSPlayer * pPlayer, OBJECT_ID oidSound); BOOL SendServerToPlayerSoundObject_ChangeVolume(CNWSPlayer * pPlayer, OBJECT_ID oidSound, int32_t nVolume); BOOL SendServerToPlayerSoundObject_ChangePosition(CNWSPlayer * pPlayer, OBJECT_ID oidSound, Vector vPos); - BOOL SendServerToPlayerGameObjUpdate(CNWSPlayer * pPlayer); - BOOL SendServerToPlayerGameObjUpdate(CNWSPlayer * pPlayer, OBJECT_ID oidObjectToUpdate); + BOOL SendServerToPlayerGameObjUpdate(CNWSPlayer * pPlayer, OBJECT_ID oidObjectToUpdate, int nMessageLimit); BOOL SendServerToPlayerGameObjUpdateVisEffect(CNWSPlayer * pPlayer, uint16_t nVisualEffectID, OBJECT_ID oidTarget, OBJECT_ID oidSource = 0x7f000000, uint8_t nSourceNode = 0, uint8_t nTargetNode = 0, Vector vTargetPosition = Vector(), float fDuration = 0.0f, ObjectVisualTransformData ovtd = ObjectVisualTransformData()); BOOL SendServerToPlayerGameObjUpdateFloatyText(CNWSPlayer * pPlayer, uint32_t nStrRef, OBJECT_ID oidTarget); BOOL SendServerToPlayerQuickChatMessage(OBJECT_ID oidSpeaker, uint16_t nSoundSetSoundID); @@ -168,7 +169,7 @@ struct CNWSMessage : CNWMessage BOOL SendServerToPlayerCombatRoundStarted(CNWSPlayer * pPlayer); BOOL SendServerToPlayerWhirlwindAttack(CNWSPlayer * pPlayer, CNWSCreature * pCreature); BOOL SendServerToPlayerWhirlwindAttackDamage(CNWSPlayer * pPlayer, CNWSCreature * pCreature); - BOOL SendServerToPlayerPlaceableUpdate_Useable(CNWSPlaceable * pPlaceable); + BOOL SendServerToPlayerObjectUpdate_Useable(CNWSObject * pObject); BOOL SendServerToPlayerGUICharacterSheet_NotPermitted(uint32_t nPlayerId, OBJECT_ID oidCharSheetFailure); BOOL SendServerToPlayerDestroyDeathGUI(uint32_t nPlayerId); BOOL SendServerToPlayerUpdateActiveItemPropertiesUses(CNWSPlayer * pPlayer, OBJECT_ID oidItem, uint8_t nUseableProperties, uint8_t nUseDiff, uint8_t * pUsesLeftPerProperty); @@ -343,6 +344,11 @@ struct CNWSMessage : CNWMessage BOOL SendServerToPlayerNui_Binds(CNWSPlayer * pPlayer, const std::vector & updates); //BOOL SendServerToPlayerNui_SetLayout(CNWSPlayer * pPlayer, Nui::JSON::WindowToken cToken, const CExoString & elementId, const json & jData); BOOL HandlePlayerToServerNuiEvent(CNWSPlayer * pPlayer, uint8_t nMinor); + BOOL SendServerToPlayerSetShaderUniform_Float(CNWSPlayer * player, const uint8_t idx, const float v); + BOOL SendServerToPlayerSetShaderUniform_Int(CNWSPlayer * player, const uint8_t idx, const int v); + BOOL SendServerToPlayerSetShaderUniform_Vec(CNWSPlayer * player, const uint8_t idx, const Vector4 & v); + BOOL SendServerToPlayerSetSpellTargetingData(CNWSPlayer * player, const int spell, const int shape, const float sizeX, const float sizeY, const int flags); + BOOL SendServerToPlayerSetEnterTargetingModeData(CNWSPlayer * player, const int shape, const float sizeX, const float sizeY, const int flags, const float range, const int spellId, const int featId); void AddDoorAppearanceToMessage(CNWSPlayer * pPlayer, CNWSDoor * pDoor); void AddPlaceableAppearanceToMessage(CNWSPlayer * pPlayer, CNWSPlaceable * pPlaceable); void AddAreaOfEffectObjectToMessage(CNWSAreaOfEffectObject * pSpellImpact); diff --git a/NWNXLib/API/API/CNWSModule.hpp b/NWNXLib/API/API/CNWSModule.hpp index 575e8a06404..78da36ab949 100644 --- a/NWNXLib/API/API/CNWSModule.hpp +++ b/NWNXLib/API/API/CNWSModule.hpp @@ -122,6 +122,7 @@ struct CNWSModule : CResHelper, CGameObject CExoArrayList m_pWorldJournal; BOOL m_bModuleLoadFinished; int32_t m_nMaxHenchmen; + int32_t m_nPartyControlMode; CExoArrayList m_aGameObjectsLimbo; CERFFile * m_pOutFile; CResStruct * m_pStructIFO; @@ -146,6 +147,7 @@ struct CNWSModule : CResHelper, CGameObject int32_t m_nLastGuiEventType; int32_t m_nLastGuiEventInteger; OBJECT_ID m_oidLastGuiEventObject; + Vector m_vLastGuiEventVector; OBJECT_ID m_oidLastPlayerToDoTileAction; int32_t m_nLastPlayerTileActionId; Vector m_vLastPlayerTileActionPosition; diff --git a/NWNXLib/API/API/CNWSObject.hpp b/NWNXLib/API/API/CNWSObject.hpp index e67b2e9857b..5edd58cd11c 100644 --- a/NWNXLib/API/API/CNWSObject.hpp +++ b/NWNXLib/API/API/CNWSObject.hpp @@ -40,6 +40,7 @@ struct CResGFF; struct CResStruct; +typedef TextureReplaceInfo AnimationReplaceInfo; typedef int BOOL; typedef CExoLinkedListNode * CExoLinkedListPosition; typedef uint32_t OBJECT_ID; @@ -136,11 +137,17 @@ struct CNWSObject : CGameObject BOOL m_bOpenDoorAnimationPlayed; Vector m_vHiliteColor; int32_t m_nMouseCursor; + BOOL m_bUseable; + float m_fVisibleDistance; + int32_t m_nUiDiscoveryMask; + int32_t m_nTextBubbleOverrideType; + CExoString m_sTextBubbleOverrideText; CNWSTransition m_pTransition; std::shared_ptr m_sqlite_db; - ObjectVisualTransformData m_pVisualTransformData; + ObjectVisualTransformData * m_pVisualTransformData; CExoArrayList m_lMaterialShaderParameters; CExoArrayList m_lTextureReplaceInfo; + CExoArrayList m_lAnimationReplaceInfo; CNWSUUID m_pUUID; CNWSObject(uint8_t nObjectType, OBJECT_ID oidId = 0x7f000000, BOOL bCharacterObject = false, BOOL bAddObjectToArray = true); @@ -206,12 +213,12 @@ struct CNWSObject : CGameObject virtual int16_t GetCurrentHitPoints(BOOL bExcludeTemporaryHits = false); virtual void DoDamage(int32_t nDamage); virtual int32_t DoDamageReduction(CNWSCreature * pDamager, int32_t nDamage, uint8_t nDamagePower, BOOL bSimulation, BOOL bCombatDamage); - virtual int32_t DoDamageResistance(CNWSCreature * pDamager, int32_t nDamage, uint16_t nFlags, BOOL bSimulation, BOOL bCombatDamage, BOOL bBaseWeaponDamage = false); - virtual int32_t GetMaximumDamageResistanceVsDamageFlag(uint16_t nDamageFlag, int32_t * nBestIndex); - virtual int32_t DoDamageImmunity(CNWSCreature * pDamager, int32_t nDamage, uint16_t nFlags, BOOL bSimulation, BOOL bCombatDamage); + virtual int32_t DoDamageResistance(CNWSCreature * pDamager, int32_t nDamage, uint32_t nFlags, BOOL bSimulation, BOOL bCombatDamage, BOOL bBaseWeaponDamage = false); + virtual int32_t GetMaximumDamageResistanceVsDamageFlag(uint32_t nDamageFlag, int32_t * nBestIndex); + virtual int32_t DoDamageImmunity(CNWSCreature * pDamager, int32_t nDamage, uint32_t nFlags, BOOL bSimulation, BOOL bCombatDamage); virtual char GetDamageImmunity(uint8_t nType); - virtual char GetDamageImmunityByFlags(uint16_t nFlags); - void SetDamageImmunity(uint16_t nFlags, int32_t nValue); + virtual char GetDamageImmunityByFlags(uint32_t nFlags); + void SetDamageImmunity(uint32_t nFlags, int32_t nValue); int32_t DoSpellLevelAbsorption(CNWSObject * pCaster, CNWSAreaOfEffectObject * pAoEObject = nullptr); int32_t DoSpellImmunity(CNWSObject * pCaster, CNWSAreaOfEffectObject * pAoEObject = nullptr); uint8_t GetDamageLevel(); @@ -233,7 +240,7 @@ struct CNWSObject : CGameObject void RemoveLoopingVisualEffect(uint16_t nVisEffectID); void BroadcastDialog(CExoString sSpokenString, float fRadius); Vector CalculateSpellRangedMissTarget(OBJECT_ID oidSource, OBJECT_ID oidTarget); - int32_t GetLastDamageAmountByFlags(int32_t nDamageFlags); + int32_t GetLastDamageAmountByFlags(uint32_t nDamageFlags); void SetLastHostileActor(OBJECT_ID oidHostileActor, BOOL bForceSet = false); int32_t SetListenExpression(CExoString sExpression, int32_t nPos); int32_t TestListenExpression(CExoString sStringToTest); @@ -268,6 +275,8 @@ struct CNWSObject : CGameObject void LoadMiscVisuals(CResGFF * pRes, CResStruct * pStruct); void SaveTextureOverrides(CResGFF * pRes, CResStruct * pStruct); void LoadTextureOverrides(CResGFF * pRes, CResStruct * pStruct); + void SaveAnimationOverrides(CResGFF * pRes, CResStruct * pStruct); + void LoadAnimationOverrides(CResGFF * pRes, CResStruct * pStruct); void LoadSqliteDatabase(CResGFF * pRes, CResStruct * pStruct); void SaveSqliteDatabase(CResGFF * pRes, CResStruct * pStruct); BOOL RunEventScript(int32_t nScript, CExoString * psOverrideScriptName = nullptr); @@ -276,6 +285,7 @@ struct CNWSObject : CGameObject void SetMaterialShaderParamVec4(const CExoString & sMaterialName, const CExoString & sParamName, float fValue1, float fValue2, float fValue3, float fValue4); void ResetMaterialShaderParams(const CExoString & sMaterialName = "", const CExoString & sParamName = ""); void SetTextureReplace(const CExoString & sOld, const CExoString & sNew); + void SetAnimationReplace(const CExoString & sOld, const CExoString & sNew); void AddActionNodeParameter(CNWSObjectActionNode * pNode, uint32_t nParameterNumber, uint32_t nParameterType, void * pParameter); void RunActions(uint32_t nCalendarDay, uint32_t nTimeOfDay, uint64_t nStartOfUpdate); BOOL TerminateAISliceAfterAction(uint32_t nActionId); diff --git a/NWNXLib/API/API/CNWSPlaceable.hpp b/NWNXLib/API/API/CNWSPlaceable.hpp index f1fe51117a4..4da2d7a2bb8 100644 --- a/NWNXLib/API/API/CNWSPlaceable.hpp +++ b/NWNXLib/API/API/CNWSPlaceable.hpp @@ -65,7 +65,6 @@ struct CNWSPlaceable : CNWSObject uint8_t m_nReflexSave; CExoArrayList m_poidCreatures; BOOL m_bHasInventory; - BOOL m_bUseable; BOOL m_bPickable; BOOL m_bLockable; BOOL m_bDieWhenEmpty; diff --git a/NWNXLib/API/API/CNWSPlayer.hpp b/NWNXLib/API/API/CNWSPlayer.hpp index 97bb28c4d95..f279fe62085 100644 --- a/NWNXLib/API/API/CNWSPlayer.hpp +++ b/NWNXLib/API/API/CNWSPlayer.hpp @@ -85,6 +85,7 @@ struct CNWSPlayer : CNWSClient BOOL m_bTargetMode; std::unordered_map m_device_properties; NuiState m_cNuiState; + OBJECT_ID m_oidCameraTarget; OBJECT_ID m_oidDungeonMasterAvatar; uint8_t m_nPossessState; BOOL m_bWasSentITP; diff --git a/NWNXLib/API/API/CNWSPlayerLUOAppearanceInfo.hpp b/NWNXLib/API/API/CNWSPlayerLUOAppearanceInfo.hpp index 90eafeab765..0322c878603 100644 --- a/NWNXLib/API/API/CNWSPlayerLUOAppearanceInfo.hpp +++ b/NWNXLib/API/API/CNWSPlayerLUOAppearanceInfo.hpp @@ -29,8 +29,8 @@ struct CNWSPlayerLUOAppearanceInfo uint8_t m_nHairColor; uint8_t m_nTattooColor1; uint8_t m_nTattooColor2; - uint8_t m_pPartVariation[19]; - uint8_t m_nHeadVariation; + uint16_t m_pPartVariation[19]; + uint16_t m_nHeadVariation; uint32_t m_nTailVariation; uint32_t m_nWingVariation; BOOL m_bForceArmorAppearanceUpdate; @@ -38,7 +38,8 @@ struct CNWSPlayerLUOAppearanceInfo ObjectVisualTransformData m_pRightHandItemVisualTransform; ObjectVisualTransformData m_pLeftHandItemVisualTransform; - + CNWSPlayerLUOAppearanceInfo(); + void Clear(); #ifdef NWN_CLASS_EXTENSION_CNWSPlayerLUOAppearanceInfo NWN_CLASS_EXTENSION_CNWSPlayerLUOAppearanceInfo diff --git a/NWNXLib/API/API/CNWSPlayerLastUpdateObject.hpp b/NWNXLib/API/API/CNWSPlayerLastUpdateObject.hpp index c95874730f8..18e8bdeadf8 100644 --- a/NWNXLib/API/API/CNWSPlayerLastUpdateObject.hpp +++ b/NWNXLib/API/API/CNWSPlayerLastUpdateObject.hpp @@ -43,13 +43,13 @@ struct CNWSPlayerLastUpdateObject uint8_t * m_pAutoMapTileData; OBJECT_ID m_oidAutoMapArea; CExoArrayList m_lstVisibilityList; - CExoArrayList m_pKnownSpellList[3][10]; - CExoArrayList m_pMemorizedSpellList[3][10]; - CExoArrayList m_lstKnownSpellsToDelete[3]; - CExoArrayList m_lstKnownSpellsToAdd[3]; - CExoArrayList m_lstMemorizedSpellsToDelete[3]; - CExoArrayList m_lstMemorizedSpellsToAdd[3]; - uint8_t m_pKnownSpellUsesLeft[3][10]; + CExoArrayList m_pKnownSpellList[8][10]; + CExoArrayList m_pMemorizedSpellList[8][10]; + CExoArrayList m_lstKnownSpellsToDelete[8]; + CExoArrayList m_lstKnownSpellsToAdd[8]; + CExoArrayList m_lstMemorizedSpellsToDelete[8]; + CExoArrayList m_lstMemorizedSpellsToAdd[8]; + uint8_t m_pKnownSpellUsesLeft[8][10]; CExoArrayList m_aEffectIcons; CExoArrayList * m_pSpellLikeAbilityList; diff --git a/NWNXLib/API/API/CNWSUUID.hpp b/NWNXLib/API/API/CNWSUUID.hpp index d9215078766..1e4ae1ebcf4 100644 --- a/NWNXLib/API/API/CNWSUUID.hpp +++ b/NWNXLib/API/API/CNWSUUID.hpp @@ -20,9 +20,14 @@ struct CNWSUUID CGameObject * m_parent; CExoString m_uuid; + static void* GetMapPtr(); + CNWSUUID(CGameObject * ); virtual ~CNWSUUID(); + static bool CanCarryUUID(int32_t objectType); bool CanCarryUUID(); + static CExoString MakeRandom(); + static OBJECT_ID LookupObjectIdByUUID(const CExoString& uuid); bool TryAssign(const CExoString & uuid); void AssignRandom(); CExoString GetOrAssignRandom(); diff --git a/NWNXLib/API/API/CNWSkill.hpp b/NWNXLib/API/API/CNWSkill.hpp index 8eb4711ca60..4f280b651bc 100644 --- a/NWNXLib/API/API/CNWSkill.hpp +++ b/NWNXLib/API/API/CNWSkill.hpp @@ -25,6 +25,7 @@ struct CNWSkill BOOL m_bUntrained; BOOL m_bArmorCheckPenalty; BOOL m_bAllClassesCanUse; + BOOL m_bHideFromLevelUp; CNWSkill(); ~CNWSkill(); diff --git a/NWNXLib/API/API/CNWSpell.hpp b/NWNXLib/API/API/CNWSpell.hpp index 1c60fc20364..d7b340ee743 100644 --- a/NWNXLib/API/API/CNWSpell.hpp +++ b/NWNXLib/API/API/CNWSpell.hpp @@ -71,6 +71,10 @@ struct CNWSpell int32_t m_nFeatId; BOOL m_bHasProjectile; uint32_t m_nSpellId; + uint32_t m_nTargetShape; + float m_nTargetSizeX; + float m_nTargetSizeY; + uint32_t m_nTargetFlags; CNWSpell(); ~CNWSpell(); diff --git a/NWNXLib/API/API/CNWVirtualMachineCommands.hpp b/NWNXLib/API/API/CNWVirtualMachineCommands.hpp index e6b3f95f7b9..6cd4bf1765e 100644 --- a/NWNXLib/API/API/CNWVirtualMachineCommands.hpp +++ b/NWNXLib/API/API/CNWVirtualMachineCommands.hpp @@ -26,8 +26,9 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer ~CNWVirtualMachineCommands(); void InitializeCommands(); int32_t ExecuteCommand(int32_t nCommandId, int32_t nParameters); - void ReportError(CExoString & sFileName, int32_t nError); - void RunScriptCallback(CExoString & sFileName); + void ReportError(const CExoString & sFileName, int32_t nError, const CExoString & customMsg = ""); + void RunScriptCallback(CExoString * sFileName, int nRecursionLevel); + void RunScriptEndCallback(CExoString * sFileName, int nRecursionLevel); void * CopyGameDefinedStructure(int32_t nEngineStructure, void * pStructureSrc); int32_t GetEqualGameDefinedStructure(int32_t nEngineStructure, void * pStructure1, void * pStructure2); void DestroyGameDefinedStructure(int32_t nEngineStructure, void * pStructureToDelete); @@ -405,6 +406,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandGetObjectType(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetObjectValid(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetObjectVisibility(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandGetObjectVisibleDistance(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetPC(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetPCChatMessage(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetPCChatSpeaker(int32_t nCommandId, int32_t nParameters); @@ -429,6 +431,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandGetReflexSavingThrow(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetReputation(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetResRef(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandGetScriptInstructionsRemaining(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetSittingCreature(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetSkillRank(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetSkyBox(int32_t nCommandId, int32_t nParameters); @@ -437,10 +440,12 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandGetSpellCast(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetSpellCasterItem(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetSpellId(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandGetSpellLevelByClass(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetSpellResistance(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetSpellSaveDC(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetSpellTargetLoc(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetSpellTargetObject(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandGetSpellUsesLeft(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetStartingPackage(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetStat(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGetStolenFlag(int32_t nCommandId, int32_t nParameters); @@ -479,6 +484,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandGetIsPossessedFamiliar(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandGuiEventManagement(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandHideEffectIcon(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandIgnoreEffectImmunity(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandIncrementRemainingFeatUses(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandInsertString(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandIntToFloat(int32_t nCommandId, int32_t nParameters); @@ -494,6 +500,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandItemActivated(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandItemPropertyEffect(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandJson(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandKnownSpellManagement(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandLevelUpHenchman(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandLineOfSight(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandLocation(int32_t nCommandId, int32_t nParameters); @@ -501,6 +508,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandLockCamera(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandMaterialShaderUniforms(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandMath(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandMemorizedSpellManagement(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandModuleAccess(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandMoveAwayFromObject(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandMoveToObject(int32_t nCommandId, int32_t nParameters); @@ -513,6 +521,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandOpenDoor(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandOpenInventory(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandOpenStore(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandPauseState(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandPersonalReputationAccess(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandPickUpItem(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandPlayAnimation(int32_t nCommandId, int32_t nParameters); @@ -529,11 +538,14 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandPutDownItem(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandRandom(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandRandomName(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandReadySpellLevel(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandRecomputeStaticLighting(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandRegExp(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandRemoveEffect(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandRemoveFromParty(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandRemoveItemProperty(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandRemoveJournalQuestEntry(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandReplaceObjectAnimation(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandReplaceObjectTexture(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandResistSpell(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandResMan(int32_t nCommandId, int32_t nParameters); @@ -552,6 +564,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandSetBaseAttackBonus(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetCalendar(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetCameraHeight(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSetCameraLimits(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetCameraLocation(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetCameraMode(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetCampaignFloat(int32_t nCommandId, int32_t nParameters); @@ -562,6 +575,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandSetCampaignString(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetColor(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetCommandable(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSetCommandingPlayer(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetCreatureAppearanceType(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetCreatureBodyPart(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetCreatureTailType(int32_t nCommandId, int32_t nParameters); @@ -575,11 +589,13 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandSetDislike(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetDroppableFlag(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetEncounterData(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSetEnterTargetingModeData(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetFacing(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetFade(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetFogAmount(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetFogColor(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetFootstepType(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSetGender(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetHardness(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetHiddenWhenEquipped(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetIdentified(int32_t nCommandId, int32_t nParameters); @@ -608,6 +624,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandSetName(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetObjectHiliteColor(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetObjectMouseCursor(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSetObjectVisibleDistance(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetPanelButtonFlash(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetPCChatMessage(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetPCChatVolume(int32_t nCommandId, int32_t nParameters); @@ -619,7 +636,11 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandSetPortraitResRef(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetSavingThrow(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetScriptParam(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSetShaderUniformFloat(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSetShaderUniformInt(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSetShaderUniformVec(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetSkyBox(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSetSpellTargetingData(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetStolenFlag(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetSubRace(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetSubType(int32_t nCommandId, int32_t nParameters); @@ -636,6 +657,7 @@ struct CNWVirtualMachineCommands : CVirtualMachineCmdImplementer int32_t ExecuteCommandSetXP(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSetXPScale(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSignalEvent(int32_t nCommandId, int32_t nParameters); + int32_t ExecuteCommandSoundset(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSoundObjectPlay(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSoundObjectSetPosition(int32_t nCommandId, int32_t nParameters); int32_t ExecuteCommandSoundObjectSetVolume(int32_t nCommandId, int32_t nParameters); diff --git a/NWNXLib/API/API/CPlayOptions.hpp b/NWNXLib/API/API/CPlayOptions.hpp index 8e4bafbb472..1277fd4ec75 100644 --- a/NWNXLib/API/API/CPlayOptions.hpp +++ b/NWNXLib/API/API/CPlayOptions.hpp @@ -42,6 +42,7 @@ struct CPlayOptions BOOL bResetEncounterSpawnPool; BOOL bHideHitPointsGained; BOOL bPlayerPartyControl; + BOOL bShowPlayerJoinMessages; diff --git a/NWNXLib/API/API/CRes.hpp b/NWNXLib/API/API/CRes.hpp index fdb269c57c8..e705aa99bfd 100644 --- a/NWNXLib/API/API/CRes.hpp +++ b/NWNXLib/API/API/CRes.hpp @@ -18,7 +18,6 @@ typedef CExoLinkedListNode * CExoLinkedListPosition; struct CRes { uint16_t m_nDemands; - uint16_t m_nRequests; RESID m_nID; uint32_t m_status; void * m_pResource; @@ -33,7 +32,6 @@ struct CRes CRes(); CRes(RESID nNewID); virtual ~CRes(); - int32_t CancelRequest(); void * Demand(); BOOL ReadRaw(int32_t nSize, char * pBuffer); void Dump(BOOL bRemove = false); @@ -41,7 +39,6 @@ struct CRes int32_t GetDemands(); virtual int32_t GetFixedResourceSize(); virtual int32_t GetFixedResourceDataOffset(); - int32_t GetRequests(); RESID GetID(); int32_t GetSize(); virtual BOOL OnResourceFreed(); diff --git a/NWNXLib/API/API/CResHelper.hpp b/NWNXLib/API/API/CResHelper.hpp index 3fb3b994cfd..4782aa5bf3b 100644 --- a/NWNXLib/API/API/CResHelper.hpp +++ b/NWNXLib/API/API/CResHelper.hpp @@ -15,16 +15,14 @@ typedef int BOOL; template struct CResHelper { - BOOL m_bAutoRequest; T * m_pRes; CResRef m_cResRef; CResHelper(); - CResHelper(const CResRef & cNewResRef, BOOL bSetAutoRequest = true); + CResHelper(const CResRef & cNewResRef, BOOL bThisDoesNothing = true); virtual ~CResHelper(); - int32_t CancelRequest(); - int32_t Request(); - void SetResRef(const CResRef & cNewResRef, BOOL bSetAutoRequest = true); + void SetResRef(const CResRef & cNewResRef, BOOL bThisDoesNothing = true); + bool ClearResHelper(); #ifdef NWN_CLASS_EXTENSION_CResHelper diff --git a/NWNXLib/API/API/CServerExoApp.hpp b/NWNXLib/API/API/CServerExoApp.hpp index d1ae89a2185..f82cbd839dd 100644 --- a/NWNXLib/API/API/CServerExoApp.hpp +++ b/NWNXLib/API/API/CServerExoApp.hpp @@ -13,6 +13,7 @@ NWN_API_PROLOGUE(CServerExoApp) #endif +struct AdvertLUT; struct CCampaignDB; struct CConnectionLib; struct CGameObject; @@ -206,6 +207,11 @@ struct CServerExoApp : CBaseExoApp void SetSkillBonusLimit(int32_t newLimit, BOOL isModuleOverride = false); CExoString GetHostedPublicInternetAddressAndPort(); BOOL SetDDCipherForModule(CExoString moduleName); + AdvertLUT & GetNWSyncAdvertLUT(); + void SetGameObjectUpdateIntervalTarget(int target); + void SetGameObjectUpdateIntervalTargetLoading(int target); + void SetGameObjectUpdateMessageLimit(int target); + void SetGameObjectUpdateMessageLimitLoading(int target); #ifdef NWN_CLASS_EXTENSION_CServerExoApp diff --git a/NWNXLib/API/API/CServerExoAppInternal.hpp b/NWNXLib/API/API/CServerExoAppInternal.hpp index e252bc34d37..43935c54a51 100644 --- a/NWNXLib/API/API/CServerExoAppInternal.hpp +++ b/NWNXLib/API/API/CServerExoAppInternal.hpp @@ -28,6 +28,7 @@ struct CNWSEncounter; struct CNWSItem; struct CNWSMessage; struct CNWSModule; +struct CNWSObject; struct CNWSPlaceable; struct CNWSPlayer; struct CNWSSoundObject; @@ -44,6 +45,9 @@ struct SSubNetProfile; namespace NWSync { struct Advertisement; // NWSyncAdvertisement } +struct AdvertLUT { + std::unordered_map> m_map; +}; typedef int BOOL; typedef CExoLinkedListNode * CExoLinkedListPosition; @@ -138,6 +142,7 @@ struct CServerExoAppInternal int32_t m_AbilityPenaltyLimitModule; int32_t m_SkillBonusLimitModule; NWSyncAdvertisement m_nwsyncModuleSourceAdvert; + AdvertLUT m_nwsyncAdvertLUT; CServerExoAppInternal(); ~CServerExoAppInternal(); @@ -253,6 +258,12 @@ struct CServerExoAppInternal BOOL StripColorTokens(CExoString & sInput); void AddSubNetProfileSendSize(uint32_t nPlayerID, uint32_t nSize); CExoString GetHostedPublicInternetAddressAndPort(); + int GetGameObjectUpdateInterval(CNWSObject * creature); + int GetGameObjectUpdateMessageLimit(CNWSObject * creature); + void SetGameObjectUpdateIntervalTarget(int target); + void SetGameObjectUpdateIntervalTargetLoading(int target); + void SetGameObjectUpdateMessageLimit(int target); + void SetGameObjectUpdateMessageLimitLoading(int target); BOOL StorePlayerCharacters(); BOOL SendEnteringStartNewModuleMessage(); BOOL SendExitingStartNewModuleMessage(BOOL bSuccess); diff --git a/NWNXLib/API/API/CTwoDimArrays.hpp b/NWNXLib/API/API/CTwoDimArrays.hpp index 2e2af817530..51e7689e34c 100644 --- a/NWNXLib/API/API/CTwoDimArrays.hpp +++ b/NWNXLib/API/API/CTwoDimArrays.hpp @@ -105,6 +105,8 @@ struct CTwoDimArrays C2DA * m_pItemValue; C2DA * m_pPackages; C2DA * m_pRuleset; + C2DA * m_pDamageTypes; + C2DA * m_pDamageTypeGroups; C2DA * m_pXpBase; C2DA * m_pRangesTable; C2DA * m_pPolymorphTable; diff --git a/NWNXLib/API/API/CVirtualMachine.hpp b/NWNXLib/API/API/CVirtualMachine.hpp index cecba7e8a29..07e2b2a377b 100644 --- a/NWNXLib/API/API/CVirtualMachine.hpp +++ b/NWNXLib/API/API/CVirtualMachine.hpp @@ -21,6 +21,7 @@ struct CScriptLog; struct CScriptLog; struct CVirtualMachineCmdImplementer; struct CVirtualMachineDebuggingContext; +struct CVirtualMachineDebuggerInstance; typedef int BOOL; @@ -44,6 +45,7 @@ struct CVirtualMachine int32_t m_nSecondaryInstructionPointer; int32_t m_nStackSizeToSave; int32_t m_nBaseStackSizeToSave; + int32_t * m_pCurrentInstructionPointer[8]; CVirtualMachineCmdImplementer * m_pCmdImplementer; BOOL m_bDebugGUIRequired; BOOL m_bDebuggerSpawned; @@ -55,6 +57,7 @@ struct CVirtualMachine uint32_t m_nScriptStartTime; uint32_t m_nScriptEndTime; uint32_t m_nInstructionLimit; + CExoString m_sAbortCustomError; CVirtualMachine(); ~CVirtualMachine(); @@ -83,7 +86,7 @@ struct CVirtualMachine int32_t ExecuteCode(int32_t * nInstructionPointer, DataBlockRef pCode, CVirtualMachineDebuggingContext * pDebugContext = nullptr); BOOL Test_RunAllScriptsInDirectory(CExoString & sRunDirectoryAlias); BOOL DeleteScript(CVirtualMachineScript * pScript); - void InitializeScript(CVirtualMachineScript * pScript, DataBlockRef pData); + void InitializeScript(CVirtualMachineScript * pScript, DataBlockRef pData, DataBlockRef pDataNDB = nullptr); BOOL PopInstructionPtr(int32_t * nInstructionPointer); BOOL PushInstructionPtr(int32_t nInstructionPointer); int32_t ReadScriptFile(CExoString * sFileName, int32_t nScriptEvent = 0); @@ -95,6 +98,7 @@ struct CVirtualMachine BOOL SaveScriptSituation_Internal(CVirtualMachineScript * pScript, CResGFF * pRes, CResStruct * pStruct); BOOL LoadScriptSituation_Internal(CVirtualMachineScript * * pScript, CResGFF * pRes, CResStruct * pStruct); CScriptLog * GetScriptLog(const CExoString & sScript); + std::shared_ptr GetDebuggerInstance(); #ifdef NWN_CLASS_EXTENSION_CVirtualMachine diff --git a/NWNXLib/API/API/CVirtualMachineCmdImplementer.hpp b/NWNXLib/API/API/CVirtualMachineCmdImplementer.hpp index 05520b9ebe8..a1adf2121a8 100644 --- a/NWNXLib/API/API/CVirtualMachineCmdImplementer.hpp +++ b/NWNXLib/API/API/CVirtualMachineCmdImplementer.hpp @@ -24,8 +24,9 @@ struct CVirtualMachineCmdImplementer virtual ~CVirtualMachineCmdImplementer(); virtual void InitializeCommands(); virtual int32_t ExecuteCommand(int32_t nCommandId, int32_t nParameters); - virtual void RunScriptCallback(CExoString & sFileName); - virtual void ReportError(CExoString & sFileName, int32_t nError); + virtual void RunScriptCallback(CExoString * psFileName, int nRecursionLevel); + virtual void RunScriptEndCallback(CExoString * psFileName, int nRecursionLevel); + virtual void ReportError(const CExoString & sFileName, int32_t nError, const CExoString & customMsg = ""); virtual void * CreateGameDefinedStructure(int32_t nUserDefinedType); virtual void DestroyGameDefinedStructure(int32_t nUserDefinedType, void * pStructureToDelete); virtual BOOL GetEqualGameDefinedStructure(int32_t nUserDefinedType, void * pStructure1, void * pStructure2); diff --git a/NWNXLib/API/API/CVirtualMachineDebugLoader.hpp b/NWNXLib/API/API/CVirtualMachineDebugLoader.hpp index b5225cbacdf..5525d97d3d5 100644 --- a/NWNXLib/API/API/CVirtualMachineDebugLoader.hpp +++ b/NWNXLib/API/API/CVirtualMachineDebugLoader.hpp @@ -18,8 +18,11 @@ typedef int BOOL; struct CVirtualMachineDebugLoader : CResHelper { BOOL m_bLoaded; + DataBlockRef m_pNDB; + int32_t SetDebugInfo(DataBlockRef pNDB); int32_t DemandDebugInfo(CExoString * psFileName); + bool Verify(); uint8_t * GetDataPtr(); uint32_t GetSize(); int32_t ReleaseDebugInfo(); diff --git a/NWNXLib/API/API/CVirtualMachineScript.hpp b/NWNXLib/API/API/CVirtualMachineScript.hpp index b093e3759fb..d7d18428191 100644 --- a/NWNXLib/API/API/CVirtualMachineScript.hpp +++ b/NWNXLib/API/API/CVirtualMachineScript.hpp @@ -21,8 +21,27 @@ struct CVirtualMachineScript int32_t m_nSecondaryInstructPtr; CExoString m_sScriptName; DataBlockRef m_pCode; + DataBlockRef m_pNDB; int32_t m_nScriptEventID; + struct JmpData + { + struct Target + { + int32_t nVMInstPtr; + int32_t nInstPtr; + int32_t nStackPtr; + int32_t nInstPtrLevel; + }; + + bool bFromLongJmp; + int32_t nRetVal; + Target cTarget; + }; + + std::unordered_map m_cLongJmpData; + CExoString m_sScriptChunk; + #ifdef NWN_CLASS_EXTENSION_CVirtualMachineScript diff --git a/NWNXLib/API/API/CassowarySolverEngineStructure.hpp b/NWNXLib/API/API/CassowarySolverEngineStructure.hpp index 6737947fe70..b5b46f8e5e0 100644 --- a/NWNXLib/API/API/CassowarySolverEngineStructure.hpp +++ b/NWNXLib/API/API/CassowarySolverEngineStructure.hpp @@ -8,14 +8,6 @@ NWN_API_PROLOGUE(CassowarySolverEngineStructure) #endif -template -struct SharedPtrEngineStructure -{ - std::shared_ptr m_shared; - virtual ~SharedPtrEngineStructure() {} -}; - - struct CassowarySolverEngineStructureShared; struct CassowarySolverEngineStructure : public SharedPtrEngineStructure { diff --git a/NWNXLib/API/API/JsonEngineStructure.hpp b/NWNXLib/API/API/JsonEngineStructure.hpp index a09c1c62a99..1d015852969 100644 --- a/NWNXLib/API/API/JsonEngineStructure.hpp +++ b/NWNXLib/API/API/JsonEngineStructure.hpp @@ -2,29 +2,25 @@ #include "nwn_api.hpp" #include "CExoString.hpp" - #ifdef NWN_API_PROLOGUE NWN_API_PROLOGUE(JsonEngineStructure) #endif - -struct JsonEngineStructure +struct JsonEngineStructureShared { + const uint64_t m_id; json m_json; CExoString m_error; +}; - JsonEngineStructure() {} - JsonEngineStructure(const json& j, const CExoString& err = "") : m_json(j), m_error(err) {} - JsonEngineStructure(const JsonEngineStructure& other) : m_json(other.m_json), m_error(other.m_error) {} - JsonEngineStructure& operator=(const JsonEngineStructure& other) - { - m_json = other.m_json; - m_error = other.m_error; - return *this; - } - - bool IsEmpty() const { return m_json.is_null(); } - void Clear() { m_json = {}; m_error = ""; } +struct JsonEngineStructure : public SharedPtrEngineStructure +{ + JsonEngineStructure(); + JsonEngineStructure(const json& j, const CExoString& err); + JsonEngineStructure(json&& j, CExoString&& err); + virtual ~JsonEngineStructure() {} + bool IsEmpty() const { return m_shared->m_json.is_null(); } + void Clear() { m_shared->m_json = nullptr; m_shared->m_error = ""; } }; diff --git a/NWNXLib/API/API/LerpFloat.hpp b/NWNXLib/API/API/LerpFloat.hpp index 66245ce9ec2..7037c49c17c 100644 --- a/NWNXLib/API/API/LerpFloat.hpp +++ b/NWNXLib/API/API/LerpFloat.hpp @@ -29,11 +29,13 @@ enum class LerpTimerType { struct LerpFloat { LerpTimerType m_timer_type; - float m_value_to; - float m_value_from; + mutable float m_value_to; + mutable float m_value_from; int m_lerp_type; float m_lerp_duration; float m_lerp_existing_progress; + int m_behavior_flags; + mutable int m_repeats_remaining; struct TimeType { @@ -67,16 +69,21 @@ struct LerpFloat m_value_from(initial), m_lerp_type(0), m_lerp_duration(0.0), - m_lerp_existing_progress(0.0) + m_lerp_existing_progress(0.0), + m_behavior_flags(0), + m_repeats_remaining(0) {} - LerpFloat(LerpTimerType type, float to, float from, int lerpType, float lerpDuration, float existingProgress = 0.0) : + LerpFloat(LerpTimerType type, float to, float from, int lerpType, float lerpDuration, float existingProgress = 0.0, + int behaviorFlags = 0, int repeatsRemaining = 0) : m_timer_type(type), m_value_to(to), m_value_from(from), m_lerp_type(lerpType), m_lerp_duration(lerpDuration), - m_lerp_existing_progress(existingProgress) + m_lerp_existing_progress(existingProgress), + m_behavior_flags(behaviorFlags), + m_repeats_remaining(repeatsRemaining) { Refresh(); } @@ -120,6 +127,8 @@ struct LerpFloat m_lerp_type = 0; m_lerp_duration = 0; m_lerp_existing_progress = 0.0; + m_behavior_flags = 0; + m_repeats_remaining = 0; } void AdoptLerp(const LerpFloat& other) @@ -132,6 +141,8 @@ struct LerpFloat m_lerp_existing_progress = other.m_lerp_existing_progress; m_lerp_start = other.m_lerp_start; m_lerp_end = other.m_lerp_end; + m_behavior_flags = other.m_behavior_flags; + m_repeats_remaining = other.m_repeats_remaining; Refresh(); } diff --git a/NWNXLib/API/API/ObjectVisualTransformData.hpp b/NWNXLib/API/API/ObjectVisualTransformData.hpp index c06a138a993..5d03804db8c 100644 --- a/NWNXLib/API/API/ObjectVisualTransformData.hpp +++ b/NWNXLib/API/API/ObjectVisualTransformData.hpp @@ -2,6 +2,7 @@ #include "nwn_api.hpp" #include "CAurObjectVisualTransformData.hpp" +#include #ifdef NWN_API_PROLOGUE @@ -12,10 +13,10 @@ NWN_API_PROLOGUE(ObjectVisualTransformData) -struct ObjectVisualTransformData : CAurObjectVisualTransformData +struct ObjectVisualTransformData { - - + std::map m_scopes; + ObjectVisualTransformData() {} #ifdef NWN_CLASS_EXTENSION_ObjectVisualTransformData NWN_CLASS_EXTENSION_ObjectVisualTransformData diff --git a/NWNXLib/API/API/Vector4.hpp b/NWNXLib/API/API/Vector4.hpp new file mode 100644 index 00000000000..56780f52d6f --- /dev/null +++ b/NWNXLib/API/API/Vector4.hpp @@ -0,0 +1,33 @@ +#pragma once +#include "nwn_api.hpp" + + + +#ifdef NWN_API_PROLOGUE +NWN_API_PROLOGUE(Vector4) +#endif + + + + + +struct Vector4 +{ + float x; + float y; + float z; + float w; + + Vector4() : x(0.0f), y(0.0f), z(0.0f), w(0.0f) { } + Vector4(float xx, float yy, float zz, float ww) : x(xx), y(yy), z(zz), w(ww) { } + +#ifdef NWN_CLASS_EXTENSION_Vector + NWN_CLASS_EXTENSION_Vector +#endif +}; + + +#ifdef NWN_API_EPILOGUE +NWN_API_EPILOGUE(Vector4) +#endif + diff --git a/NWNXLib/API/Constants/MiscRules.hpp b/NWNXLib/API/Constants/MiscRules.hpp index 4f1638d2d49..25dcfc1bcfb 100644 --- a/NWNXLib/API/Constants/MiscRules.hpp +++ b/NWNXLib/API/Constants/MiscRules.hpp @@ -143,9 +143,10 @@ namespace SavingThrowType Evil = 17, Law = 18, Chaos = 19, + Paralysis = 20, }; constexpr int32_t MIN = 0; - constexpr int32_t MAX = 19; + constexpr int32_t MAX = 20; constexpr const char* ToString(const unsigned value) { @@ -171,6 +172,7 @@ namespace SavingThrowType "Evil", "Law", "Chaos", + "Paralysis", }; return (value > MAX) ? "(invalid)" : TYPE_STRINGS[value]; diff --git a/NWNXLib/API/Functions.hpp b/NWNXLib/API/Functions.hpp index 56d8433bbf3..91a1a6c420e 100644 --- a/NWNXLib/API/Functions.hpp +++ b/NWNXLib/API/Functions.hpp @@ -1,15 +1,18 @@ #pragma once #include "API/nwn_api.hpp" -#include namespace NWNXLib::API::Functions { -#define NWNXLIB_FUNCTION(name, address) \ - constexpr uintptr_t name = address; + void Initialize(); + +#define NWNXLIB_FUNCTION(name) \ + extern void* name; #ifdef _WIN32 static_assert(false, "Windows is not supported."); #else #include "API/FunctionsLinux.hpp" #endif + +#undef NWNXLIB_FUNCTION } diff --git a/NWNXLib/API/FunctionsLinux.cpp b/NWNXLib/API/FunctionsLinux.cpp index 6af67e40d78..d2ad7af06e2 100644 --- a/NWNXLib/API/FunctionsLinux.cpp +++ b/NWNXLib/API/FunctionsLinux.cpp @@ -1,22 +1,24 @@ -__asm__ ( +#include +#include -".global NWNX_API_START\n" -"NWNX_API_START:\n" -" nop\n" +#include "Functions.hpp" #define NWNXLIB_FUNCTION_NO_VERSION_CHECK -#define NWNXLIB_FUNCTION(name, address) \ -".global " #name "\n" \ -#name ":\n" \ -"movq $0x0000abcd12345678, %rax\n" \ -"addq $" #address ", %rax\n" \ -"pushq %rax\n" \ -"ret\n" +#define NWNXLIB_FUNCTION(name) \ + void* NWNXLib::API::Functions::name; #include "FunctionsLinux.hpp" +#undef NWNXLIB_FUNCTION -".global NWNX_API_END\n" -"NWNX_API_END:\n" -" nop\n" +void NWNXLib::API::Functions::Initialize() +{ +#define NWNXLIB_FUNCTION(name) \ + name = const_cast(dlsym(RTLD_DEFAULT, #name )); \ + if (!name) \ + { \ + printf("dlsym(%s) = null\n", #name); \ + } -); +#include "FunctionsLinux.hpp" +#undef NWNXLIB_FUNCTION +} diff --git a/NWNXLib/API/FunctionsLinux.hpp b/NWNXLib/API/FunctionsLinux.hpp index 52a3633835b..c76059597f3 100644 --- a/NWNXLib/API/FunctionsLinux.hpp +++ b/NWNXLib/API/FunctionsLinux.hpp @@ -1,7268 +1,9 @@ #ifndef NWNXLIB_FUNCTION_NO_VERSION_CHECK -NWNX_EXPECT_VERSION(8193, 34); +NWNX_EXPECT_VERSION(8193, 35); #endif -NWNXLIB_FUNCTION(_ZN10CERFString4ReadEv, 0x000000000079a000) -NWNXLIB_FUNCTION(_ZN10CERFString5ResetEv, 0x0000000000799e60) -NWNXLIB_FUNCTION(_ZN10CERFString5WriteER8CExoFile, 0x000000000079a010) -NWNXLIB_FUNCTION(_ZN10CERFString7GetTextEv, 0x0000000000799ea0) -NWNXLIB_FUNCTION(_ZN10CERFString7SetTextER10CExoString, 0x0000000000799ed0) -NWNXLIB_FUNCTION(_ZN10CERFStringC1Ev, 0x0000000000799e20) -NWNXLIB_FUNCTION(_ZN10CERFStringC2Ev, 0x0000000000799e20) -NWNXLIB_FUNCTION(_ZN10CERFStringD1Ev, 0x0000000000799e40) -NWNXLIB_FUNCTION(_ZN10CERFStringD2Ev, 0x0000000000799e40) -NWNXLIB_FUNCTION(_ZN10CExoResMan10RemoveFileERK10CExoStringt, 0x000000000013fef0) -NWNXLIB_FUNCTION(_ZN10CExoResMan11AddKeyTableEjRK10CExoStringjPhi, 0x00000000001403b0) -NWNXLIB_FUNCTION(_ZN10CExoResMan11AddManifestERKN4Hash4SHA1Ej, 0x0000000000140690) -NWNXLIB_FUNCTION(_ZN10CExoResMan11AddOverrideERK7CResRefS2_t, 0x0000000000143620) -NWNXLIB_FUNCTION(_ZN10CExoResMan11GetKeyEntryERK7CResReftPP12CExoKeyTablePP14CKeyTableEntryb, 0x00000000001426c0) -NWNXLIB_FUNCTION(_ZN10CExoResMan11GetOverrideERK7CResReft, 0x00000000001422d0) -NWNXLIB_FUNCTION(_ZN10CExoResMan12GetNewResRefERK7CResReftRS0_, 0x0000000000142960) -NWNXLIB_FUNCTION(_ZN10CExoResMan12GetResObjectERK7CResReft, 0x0000000000142d20) -NWNXLIB_FUNCTION(_ZN10CExoResMan12GetResOfTypeEti, 0x000000000013e310) -NWNXLIB_FUNCTION(_ZN10CExoResMan12GetResOfTypeEtP4CRes, 0x000000000013e420) -NWNXLIB_FUNCTION(_ZN10CExoResMan12SetResObjectERK7CResReftP4CRes, 0x0000000000142da0) -NWNXLIB_FUNCTION(_ZN10CExoResMan13CancelRequestEP4CRes, 0x000000000013dc90) -NWNXLIB_FUNCTION(_ZN10CExoResMan13DumpAllOfTypeEt, 0x000000000013df90) -NWNXLIB_FUNCTION(_ZN10CExoResMan13GetTableCountEP4CResi, 0x000000000013e6d0) -NWNXLIB_FUNCTION(_ZN10CExoResMan13NukeDirectoryE10CExoStringii, 0x0000000000141870) -NWNXLIB_FUNCTION(_ZN10CExoResMan13WipeDirectoryE10CExoStringiiiit, 0x0000000000140730) -NWNXLIB_FUNCTION(_ZN10CExoResMan14CleanDirectoryE10CExoStringiit, 0x0000000000140f60) -NWNXLIB_FUNCTION(_ZN10CExoResMan14ClearOverridesEv, 0x0000000000142150) -NWNXLIB_FUNCTION(_ZN10CExoResMan14RemoveKeyTableERK10CExoStringji, 0x000000000013f1c0) -NWNXLIB_FUNCTION(_ZN10CExoResMan14RemoveManifestERKN4Hash4SHA1E, 0x000000000013f330) -NWNXLIB_FUNCTION(_ZN10CExoResMan14RemoveOverrideERK7CResReft, 0x0000000000143210) -NWNXLIB_FUNCTION(_ZN10CExoResMan14UpdateKeyTableERK10CExoStringj, 0x000000000013f890) -NWNXLIB_FUNCTION(_ZN10CExoResMan14UpdateManifestERK10CExoString, 0x000000000013f960) -NWNXLIB_FUNCTION(_ZN10CExoResMan15CreateDirectoryE10CExoString, 0x000000000013fe00) -NWNXLIB_FUNCTION(_ZN10CExoResMan15GetIsStaticTypeEt, 0x000000000013e8a0) -NWNXLIB_FUNCTION(_ZN10CExoResMan15ResumeServicingEv, 0x000000000013f3d0) -NWNXLIB_FUNCTION(_ZN10CExoResMan16CountKeyTablesOfEiRK10CExoString, 0x000000000013dbe0) -NWNXLIB_FUNCTION(_ZN10CExoResMan16FreeResourceDataEP4CRes, 0x000000000013e060) -NWNXLIB_FUNCTION(_ZN10CExoResMan16GetFreeDiskSpaceERK10CExoStringPm, 0x000000000013fcc0) -NWNXLIB_FUNCTION(_ZN10CExoResMan16ReleaseResObjectEP4CResb, 0x000000000013efc0) -NWNXLIB_FUNCTION(_ZN10CExoResMan16ServiceFromImageEP4CResi, 0x000000000013f800) -NWNXLIB_FUNCTION(_ZN10CExoResMan16SuspendServicingEv, 0x000000000013f880) -NWNXLIB_FUNCTION(_ZN10CExoResMan17GetResRefFromFileER7CResRefRK10CExoString, 0x000000000013e480) -NWNXLIB_FUNCTION(_ZN10CExoResMan18GetResTypeFromFileERK10CExoString, 0x000000000013e570) -NWNXLIB_FUNCTION(_ZN10CExoResMan18ServiceFromResFileEP4CResi, 0x000000000013f7e0) -NWNXLIB_FUNCTION(_ZN10CExoResMan19ServiceFromImageRawEP4CResiPc, 0x000000000013fca0) -NWNXLIB_FUNCTION(_ZN10CExoResMan19ServiceFromManifestEP4CResi, 0x0000000000141910) -NWNXLIB_FUNCTION(_ZN10CExoResMan20AddFixedKeyTableFileERK10CExoStringj, 0x0000000000140650) -NWNXLIB_FUNCTION(_ZN10CExoResMan20AddResourceDirectoryERK10CExoStringji, 0x0000000000140670) -NWNXLIB_FUNCTION(_ZN10CExoResMan20AddResourceImageFileERK10CExoStringPhj, 0x0000000000140630) -NWNXLIB_FUNCTION(_ZN10CExoResMan20g_fMaxMemoryFractionE, 0x0000000000ccd078) -NWNXLIB_FUNCTION(_ZN10CExoResMan20ServiceFromDirectoryEP4CResi, 0x000000000013f3e0) -NWNXLIB_FUNCTION(_ZN10CExoResMan21ServiceFromResFileRawEP4CResiPc, 0x000000000013fc80) -NWNXLIB_FUNCTION(_ZN10CExoResMan22GetTotalPhysicalMemoryEv, 0x000000000013e8d0) -NWNXLIB_FUNCTION(_ZN10CExoResMan22ServiceCurrentAsyncResEv, 0x0000000000140050) -NWNXLIB_FUNCTION(_ZN10CExoResMan22SetTotalResourceMemoryEl, 0x000000000013f820) -NWNXLIB_FUNCTION(_ZN10CExoResMan22SetupDefaultSearchPathEv, 0x0000000000141000) -NWNXLIB_FUNCTION(_ZN10CExoResMan23RemoveFixedKeyTableFileERK10CExoString, 0x000000000013f2f0) -NWNXLIB_FUNCTION(_ZN10CExoResMan23RemoveFromToBeFreedListEP4CRes, 0x000000000013e730) -NWNXLIB_FUNCTION(_ZN10CExoResMan23RemoveResourceDirectoryERK10CExoString, 0x000000000013f310) -NWNXLIB_FUNCTION(_ZN10CExoResMan23RemoveResourceImageFileERK10CExoString, 0x000000000013f2d0) -NWNXLIB_FUNCTION(_ZN10CExoResMan23ServiceFromDirectoryRawEP4CResiPc, 0x000000000013f970) -NWNXLIB_FUNCTION(_ZN10CExoResMan23ServiceFromEncapsulatedEP4CResi, 0x000000000013f7c0) -NWNXLIB_FUNCTION(_ZN10CExoResMan23UpdateFixedKeyTableFileERK10CExoString, 0x000000000013f940) -NWNXLIB_FUNCTION(_ZN10CExoResMan23UpdateResourceDirectoryERK10CExoString, 0x000000000013f950) -NWNXLIB_FUNCTION(_ZN10CExoResMan26ServiceFromEncapsulatedRawEP4CResiPc, 0x000000000013fc60) -NWNXLIB_FUNCTION(_ZN10CExoResMan27AddEncapsulatedResourceFileERK10CExoStringj, 0x0000000000140610) -NWNXLIB_FUNCTION(_ZN10CExoResMan30GetEncapsulatedFileDescriptionERK10CExoString, 0x000000000013e220) -NWNXLIB_FUNCTION(_ZN10CExoResMan30RemoveEncapsulatedResourceFileERK10CExoStringi, 0x000000000013f2b0) -NWNXLIB_FUNCTION(_ZN10CExoResMan30UpdateEncapsulatedResourceFileERK10CExoString, 0x000000000013f930) -NWNXLIB_FUNCTION(_ZN10CExoResMan3GetERK7CResReft, 0x0000000000142ec0) -NWNXLIB_FUNCTION(_ZN10CExoResMan4DumpEP4CResi, 0x000000000013de70) -NWNXLIB_FUNCTION(_ZN10CExoResMan4FreeEP4CRes, 0x000000000013e030) -NWNXLIB_FUNCTION(_ZN10CExoResMan6DemandEP4CRes, 0x0000000000141bc0) -NWNXLIB_FUNCTION(_ZN10CExoResMan6ExistsERK7CResReftPj, 0x00000000001428f0) -NWNXLIB_FUNCTION(_ZN10CExoResMan6MallocEP4CRes, 0x000000000013e8e0) -NWNXLIB_FUNCTION(_ZN10CExoResMan6UpdateEj, 0x0000000000141f00) -NWNXLIB_FUNCTION(_ZN10CExoResMan7DumpAllEv, 0x000000000013df00) -NWNXLIB_FUNCTION(_ZN10CExoResMan7ReadRawEP4CResiPc, 0x000000000013fbf0) -NWNXLIB_FUNCTION(_ZN10CExoResMan7ReleaseEP4CRes, 0x000000000013f040) -NWNXLIB_FUNCTION(_ZN10CExoResMan7RequestEP4CRes, 0x0000000000141eb0) -NWNXLIB_FUNCTION(_ZN10CExoResMan8GetResIDERK7CResReft, 0x0000000000142e40) -NWNXLIB_FUNCTION(_ZN10CExoResMan8GetTableEP4CRes, 0x000000000013e680) -NWNXLIB_FUNCTION(_ZN10CExoResMan9FreeChunkEv, 0x000000000013e090) -NWNXLIB_FUNCTION(_ZN10CExoResManC1Ev, 0x0000000000140190) -NWNXLIB_FUNCTION(_ZN10CExoResManC2Ev, 0x0000000000140190) -NWNXLIB_FUNCTION(_ZN10CExoResManD1Ev, 0x0000000000142170) -NWNXLIB_FUNCTION(_ZN10CExoResManD2Ev, 0x0000000000142170) -NWNXLIB_FUNCTION(_ZN10CExoString10WhitespaceE, 0x0000000000ccd060) -NWNXLIB_FUNCTION(_ZN10CExoString11FormatBytesEm, 0x000000000012bd40) -NWNXLIB_FUNCTION(_ZN10CExoString12AlphanumericE, 0x0000000000ccd048) -NWNXLIB_FUNCTION(_ZN10CExoString14FormatDurationEmiibPKc, 0x000000000012bf10) -NWNXLIB_FUNCTION(_ZN10CExoString19FormatUnixTimestampEmPKc, 0x000000000012c280) -NWNXLIB_FUNCTION(_ZN10CExoString1FIJPKcEEES_S2_DpOT_, 0x000000000013aee0) -NWNXLIB_FUNCTION(_ZN10CExoString20StripNonAlphaNumericEiii, 0x000000000012b880) -NWNXLIB_FUNCTION(_ZN10CExoString4JoinERKSt6vectorIS_SaIS_EERKS_, 0x000000000012c350) -NWNXLIB_FUNCTION(_ZN10CExoString5SplitERKS_S1_, 0x000000000012c9f0) -NWNXLIB_FUNCTION(_ZN10CExoString6FormatEPKcz, 0x000000000012aed0) -NWNXLIB_FUNCTION(_ZN10CExoString6InsertERKS_i, 0x000000000012b0d0) -NWNXLIB_FUNCTION(_ZN10CExoString7LettersE, 0x0000000000ccd058) -NWNXLIB_FUNCTION(_ZN10CExoString7NumbersE, 0x0000000000ccd050) -NWNXLIB_FUNCTION(_ZN10CExoStringaSEPKc, 0x000000000012a400) -NWNXLIB_FUNCTION(_ZN10CExoStringaSERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, 0x000000000012a210) -NWNXLIB_FUNCTION(_ZN10CExoStringaSERKS_, 0x000000000012a320) -NWNXLIB_FUNCTION(_ZN10CExoStringC1Ei, 0x000000000012a0d0) -NWNXLIB_FUNCTION(_ZN10CExoStringC1EPKc, 0x0000000000129f70) -NWNXLIB_FUNCTION(_ZN10CExoStringC1EPKci, 0x000000000012a070) -NWNXLIB_FUNCTION(_ZN10CExoStringC1ERK7CResRef, 0x0000000000129fa0) -NWNXLIB_FUNCTION(_ZN10CExoStringC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, 0x000000000012a1b0) -NWNXLIB_FUNCTION(_ZN10CExoStringC1ERKS_, 0x000000000012a010) -NWNXLIB_FUNCTION(_ZN10CExoStringC1Ev, 0x0000000000129f50) -NWNXLIB_FUNCTION(_ZN10CExoStringC2Ei, 0x000000000012a0d0) -NWNXLIB_FUNCTION(_ZN10CExoStringC2EPKc, 0x0000000000129f70) -NWNXLIB_FUNCTION(_ZN10CExoStringC2EPKci, 0x000000000012a070) -NWNXLIB_FUNCTION(_ZN10CExoStringC2ERK7CResRef, 0x0000000000129fa0) -NWNXLIB_FUNCTION(_ZN10CExoStringC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, 0x000000000012a1b0) -NWNXLIB_FUNCTION(_ZN10CExoStringC2ERKS_, 0x000000000012a010) -NWNXLIB_FUNCTION(_ZN10CExoStringC2Ev, 0x0000000000129f50) -NWNXLIB_FUNCTION(_ZN10CExoStringD1Ev, 0x000000000012a180) -NWNXLIB_FUNCTION(_ZN10CExoStringD2Ev, 0x000000000012a180) -NWNXLIB_FUNCTION(_ZNK10CExoString13CompareNoCaseERKS_, 0x000000000012b6b0) -NWNXLIB_FUNCTION(_ZNK10CExoString15RemoveAllExceptEPKc, 0x000000000012ade0) -NWNXLIB_FUNCTION(_ZNK10CExoString19ComparePrefixNoCaseERKS_i, 0x000000000012b840) -NWNXLIB_FUNCTION(_ZNK10CExoString4CStrEv, 0x000000000012aa00) -NWNXLIB_FUNCTION(_ZNK10CExoString4FindEci, 0x000000000012ab40) -NWNXLIB_FUNCTION(_ZNK10CExoString4FindERKS_i, 0x000000000012aa20) -NWNXLIB_FUNCTION(_ZNK10CExoString4LeftEi, 0x000000000012b200) -NWNXLIB_FUNCTION(_ZNK10CExoString5AsINTEv, 0x000000000012a9a0) -NWNXLIB_FUNCTION(_ZNK10CExoString5AsTAGEv, 0x000000000012bc60) -NWNXLIB_FUNCTION(_ZNK10CExoString5RightEi, 0x000000000012b3f0) -NWNXLIB_FUNCTION(_ZNK10CExoString5SplitERKS_, 0x000000000012cd00) -NWNXLIB_FUNCTION(_ZNK10CExoString5StripEbbPKc, 0x000000000012bb40) -NWNXLIB_FUNCTION(_ZNK10CExoString7AsFLOATEv, 0x000000000012a9d0) -NWNXLIB_FUNCTION(_ZNK10CExoString7FindNotEci, 0x000000000012ac10) -NWNXLIB_FUNCTION(_ZNK10CExoString7IsEmptyEv, 0x000000000012b1e0) -NWNXLIB_FUNCTION(_ZNK10CExoString9GetLengthEv, 0x000000000012b0b0) -NWNXLIB_FUNCTION(_ZNK10CExoString9LowerCaseEv, 0x000000000012b2a0) -NWNXLIB_FUNCTION(_ZNK10CExoString9RemoveAllEPKc, 0x000000000012ace0) -NWNXLIB_FUNCTION(_ZNK10CExoString9SubStringEii, 0x000000000012b4a0) -NWNXLIB_FUNCTION(_ZNK10CExoString9UpperCaseEv, 0x000000000012b560) -NWNXLIB_FUNCTION(_ZNK10CExoStringcvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEB5cxx11Ev, 0x000000000012a2b0) -NWNXLIB_FUNCTION(_ZNK10CExoStringcvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEv, 0x000000000012a2b0) -NWNXLIB_FUNCTION(_ZNK10CExoStringeqEPKc, 0x000000000012a540) -NWNXLIB_FUNCTION(_ZNK10CExoStringeqERKS_, 0x000000000012a4e0) -NWNXLIB_FUNCTION(_ZNK10CExoStringgeEPKc, 0x000000000012a820) -NWNXLIB_FUNCTION(_ZNK10CExoStringgeERKS_, 0x000000000012a7d0) -NWNXLIB_FUNCTION(_ZNK10CExoStringgtEPKc, 0x000000000012a6f0) -NWNXLIB_FUNCTION(_ZNK10CExoStringgtERKS_, 0x000000000012a6b0) -NWNXLIB_FUNCTION(_ZNK10CExoStringixEi, 0x000000000012a860) -NWNXLIB_FUNCTION(_ZNK10CExoStringleEPKc, 0x000000000012a790) -NWNXLIB_FUNCTION(_ZNK10CExoStringleERKS_, 0x000000000012a730) -NWNXLIB_FUNCTION(_ZNK10CExoStringltEPKc, 0x000000000012a670) -NWNXLIB_FUNCTION(_ZNK10CExoStringltERKS_, 0x000000000012a630) -NWNXLIB_FUNCTION(_ZNK10CExoStringneEPKc, 0x000000000012a5e0) -NWNXLIB_FUNCTION(_ZNK10CExoStringneERKS_, 0x000000000012a590) -NWNXLIB_FUNCTION(_ZNK10CExoStringplERKS_, 0x000000000012a880) -NWNXLIB_FUNCTION(_ZN10CExoTimers21GetLowResolutionTimerEv, 0x000000000012d070) -NWNXLIB_FUNCTION(_ZN10CExoTimers22GetHighResolutionTimerEv, 0x000000000012d080) -NWNXLIB_FUNCTION(_ZN10CExoTimersC1Ev, 0x000000000012cff0) -NWNXLIB_FUNCTION(_ZN10CExoTimersC2Ev, 0x000000000012cff0) -NWNXLIB_FUNCTION(_ZN10CExoTimersD1Ev, 0x000000000012d030) -NWNXLIB_FUNCTION(_ZN10CExoTimersD2Ev, 0x000000000012d030) -NWNXLIB_FUNCTION(_ZN10CMemRecord5ClearEv, 0x0000000000797a00) -NWNXLIB_FUNCTION(_ZN10CNWMessage10ReadDOUBLEEddi, 0x00000000001d7310) -NWNXLIB_FUNCTION(_ZN10CNWMessage10ReadDOUBLEEdi, 0x00000000001d7290) -NWNXLIB_FUNCTION(_ZN10CNWMessage10ReadSignedEi, 0x00000000001d6da0) -NWNXLIB_FUNCTION(_ZN10CNWMessage10WriteDWORDEji, 0x00000000001d7b50) -NWNXLIB_FUNCTION(_ZN10CNWMessage10WriteFLOATEfffi, 0x00000000001d7d30) -NWNXLIB_FUNCTION(_ZN10CNWMessage10WriteFLOATEffi, 0x00000000001d7c50) -NWNXLIB_FUNCTION(_ZN10CNWMessage10WriteINT64Eli, 0x00000000001d7bf0) -NWNXLIB_FUNCTION(_ZN10CNWMessage10WriteSHORTEsi, 0x00000000001d7ae0) -NWNXLIB_FUNCTION(_ZN10CNWMessage11ReadCResRefEi, 0x00000000001d73b0) -NWNXLIB_FUNCTION(_ZN10CNWMessage11ReadDWORD64Ei, 0x00000000001d7010) -NWNXLIB_FUNCTION(_ZN10CNWMessage11ReadVOIDPtrEi, 0x00000000001d7510) -NWNXLIB_FUNCTION(_ZN10CNWMessage11WriteDOUBLEEdddi, 0x00000000001d7f30) -NWNXLIB_FUNCTION(_ZN10CNWMessage11WriteDOUBLEEddi, 0x00000000001d7e60) -NWNXLIB_FUNCTION(_ZN10CNWMessage11WriteSignedEli, 0x00000000001d7980) -NWNXLIB_FUNCTION(_ZN10CNWMessage12ReadUnsignedEi, 0x00000000001d6bb0) -NWNXLIB_FUNCTION(_ZN10CNWMessage12WriteCResRefE7CResRefi, 0x00000000001d8030) -NWNXLIB_FUNCTION(_ZN10CNWMessage12WriteDWORD64Emi, 0x00000000001d7bd0) -NWNXLIB_FUNCTION(_ZN10CNWMessage12WriteVOIDPtrEPvi, 0x00000000001d80f0) -NWNXLIB_FUNCTION(_ZN10CNWMessage13WriteUnsignedEmi, 0x00000000001d77c0) -NWNXLIB_FUNCTION(_ZN10CNWMessage14ReadCExoStringEi, 0x00000000001d7450) -NWNXLIB_FUNCTION(_ZN10CNWMessage14SetReadMessageEPhjji, 0x00000000001d6de0) -NWNXLIB_FUNCTION(_ZN10CNWMessage15GetWriteMessageEPPhPj, 0x00000000001d8150) -NWNXLIB_FUNCTION(_ZN10CNWMessage15WriteCExoStringE10CExoStringi, 0x00000000001d8080) -NWNXLIB_FUNCTION(_ZN10CNWMessage16ClearReadMessageEv, 0x00000000001d6990) -NWNXLIB_FUNCTION(_ZN10CNWMessage17ExtendWriteBufferEj, 0x00000000001d75e0) -NWNXLIB_FUNCTION(_ZN10CNWMessage18CreateWriteMessageEjji, 0x00000000001d7920) -NWNXLIB_FUNCTION(_ZN10CNWMessage19MessageReadOverflowEi, 0x00000000001d7540) -NWNXLIB_FUNCTION(_ZN10CNWMessage20MessageReadUnderflowEi, 0x00000000001d7560) -NWNXLIB_FUNCTION(_ZN10CNWMessage21MessageMoreDataToReadEv, 0x00000000001d75a0) -NWNXLIB_FUNCTION(_ZN10CNWMessage22PeekAtWriteMessageSizeEv, 0x00000000001d8140) -NWNXLIB_FUNCTION(_ZN10CNWMessage25DEFAULT_WRITE_BUFFER_SIZEE, 0x00000000008cf598) -NWNXLIB_FUNCTION(_ZN10CNWMessage26ExtendWriteFragmentsBufferEj, 0x00000000001d7750) -NWNXLIB_FUNCTION(_ZN10CNWMessage7ReadBitEh, 0x00000000001d69b0) -NWNXLIB_FUNCTION(_ZN10CNWMessage7ReadINTEi, 0x00000000001d6fb0) -NWNXLIB_FUNCTION(_ZN10CNWMessage8ReadBitsEi, 0x00000000001d6a00) -NWNXLIB_FUNCTION(_ZN10CNWMessage8ReadBOOLEv, 0x00000000001d6dc0) -NWNXLIB_FUNCTION(_ZN10CNWMessage8ReadBYTEEi, 0x00000000001d6b70) -NWNXLIB_FUNCTION(_ZN10CNWMessage8ReadCHAREi, 0x00000000001d6e70) -NWNXLIB_FUNCTION(_ZN10CNWMessage8ReadJSONB5cxx11Ev, 0x00000000001d8cf0) -NWNXLIB_FUNCTION(_ZN10CNWMessage8ReadWORDEi, 0x00000000001d6ee0) -NWNXLIB_FUNCTION(_ZN10CNWMessage8WriteBitEh, 0x00000000001d6ac0) -NWNXLIB_FUNCTION(_ZN10CNWMessage8WriteINTEii, 0x00000000001d7b70) -NWNXLIB_FUNCTION(_ZN10CNWMessage9ReadDWORDEi, 0x00000000001d6f90) -NWNXLIB_FUNCTION(_ZN10CNWMessage9ReadFLOATEffi, 0x00000000001d7190) -NWNXLIB_FUNCTION(_ZN10CNWMessage9ReadFLOATEfi, 0x00000000001d70a0) -NWNXLIB_FUNCTION(_ZN10CNWMessage9ReadINT64Ei, 0x00000000001d7050) -NWNXLIB_FUNCTION(_ZN10CNWMessage9ReadSHORTEi, 0x00000000001d6f20) -NWNXLIB_FUNCTION(_ZN10CNWMessage9WriteBitsEmi, 0x00000000001d6b00) -NWNXLIB_FUNCTION(_ZN10CNWMessage9WriteBOOLEi, 0x00000000001d7a00) -NWNXLIB_FUNCTION(_ZN10CNWMessage9WriteBYTEEhi, 0x00000000001d7a20) -NWNXLIB_FUNCTION(_ZN10CNWMessage9WriteCHAREci, 0x00000000001d7a50) -NWNXLIB_FUNCTION(_ZN10CNWMessage9WriteJSONERKN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS0_14adl_serializerES3_IhSaIhEEEE, 0x00000000001d8a10) -NWNXLIB_FUNCTION(_ZN10CNWMessage9WriteWORDEti, 0x00000000001d7ab0) -NWNXLIB_FUNCTION(_ZN10CNWMessageC1Ev, 0x00000000001d6900) -NWNXLIB_FUNCTION(_ZN10CNWMessageC2Ev, 0x00000000001d6900) -NWNXLIB_FUNCTION(_ZN10CNWMessageD0Ev, 0x00000000001d63a0) -NWNXLIB_FUNCTION(_ZN10CNWMessageD1Ev, 0x00000000001d6350) -NWNXLIB_FUNCTION(_ZN10CNWMessageD2Ev, 0x00000000001d6350) -NWNXLIB_FUNCTION(_ZN10CNWNameGen13GetRandomNameEth, 0x00000000007a7cb0) -NWNXLIB_FUNCTION(_ZN10CNWNameGen13GetRandomNameEv, 0x00000000007a7660) -NWNXLIB_FUNCTION(_ZN10CNWNameGen13LoadNameTableE10CExoString, 0x00000000007a7c30) -NWNXLIB_FUNCTION(_ZN10CNWNameGen15UnloadNameTableEv, 0x00000000007a7630) -NWNXLIB_FUNCTION(_ZN10CNWNameGenC1Ev, 0x00000000007a75a0) -NWNXLIB_FUNCTION(_ZN10CNWNameGenC2Ev, 0x00000000007a75a0) -NWNXLIB_FUNCTION(_ZN10CNWNameGenD0Ev, 0x00000000007a7570) -NWNXLIB_FUNCTION(_ZN10CNWNameGenD1Ev, 0x00000000007a7530) -NWNXLIB_FUNCTION(_ZN10CNWNameGenD2Ev, 0x00000000007a7530) -NWNXLIB_FUNCTION(_ZN10CNWSBarter10MAX_HEIGHTE, 0x00000000008e117a) -NWNXLIB_FUNCTION(_ZN10CNWSBarter10RemoveItemEjRhS0_, 0x00000000003ba970) -NWNXLIB_FUNCTION(_ZN10CNWSBarter11PullItemOutEj, 0x00000000003bac30) -NWNXLIB_FUNCTION(_ZN10CNWSBarter13SetListLockedEi, 0x00000000003bb570) -NWNXLIB_FUNCTION(_ZN10CNWSBarter15SetListAcceptedEi, 0x00000000003bae60) -NWNXLIB_FUNCTION(_ZN10CNWSBarter22STATE_INITIATOR_LOCKEDE, 0x00000000008e1179) -NWNXLIB_FUNCTION(_ZN10CNWSBarter22STATE_RECIPIENT_LOCKEDE, 0x00000000008e1177) -NWNXLIB_FUNCTION(_ZN10CNWSBarter24STATE_INITIATOR_ACCEPTEDE, 0x00000000008e1178) -NWNXLIB_FUNCTION(_ZN10CNWSBarter24STATE_RECIPIENT_ACCEPTEDE, 0x00000000008e1176) -NWNXLIB_FUNCTION(_ZN10CNWSBarter31STARTBARTER_REJECTION_ASSOCIATEE, 0x00000000008e1170) -NWNXLIB_FUNCTION(_ZN10CNWSBarter32STARTBARTER_REJECTION_TOOFARAWAYE, 0x00000000008e1171) -NWNXLIB_FUNCTION(_ZN10CNWSBarter35STARTBARTER_REJECTION_BUSYINITIATORE, 0x00000000008e1173) -NWNXLIB_FUNCTION(_ZN10CNWSBarter35STARTBARTER_REJECTION_BUSYRECIPIENTE, 0x00000000008e1174) -NWNXLIB_FUNCTION(_ZN10CNWSBarter35STARTBARTER_REJECTION_INVALIDTARGETE, 0x00000000008e1175) -NWNXLIB_FUNCTION(_ZN10CNWSBarter37STARTBARTER_REJECTION_RECIPIENTREJECTE, 0x00000000008e1172) -NWNXLIB_FUNCTION(_ZN10CNWSBarter5ResetEji, 0x00000000003ba360) -NWNXLIB_FUNCTION(_ZN10CNWSBarter7AddItemEjRhS0_, 0x00000000003ba750) -NWNXLIB_FUNCTION(_ZN10CNWSBarter7CleanUpEv, 0x00000000003ba380) -NWNXLIB_FUNCTION(_ZN10CNWSBarter8GetStateEv, 0x00000000003bad40) -NWNXLIB_FUNCTION(_ZN10CNWSBarter8MoveItemEjRhS0_, 0x00000000003bab00) -NWNXLIB_FUNCTION(_ZN10CNWSBarter9MAX_WIDTHE, 0x00000000008e117b) -NWNXLIB_FUNCTION(_ZN10CNWSBarterC1EP12CNWSCreature, 0x00000000003ba290) -NWNXLIB_FUNCTION(_ZN10CNWSBarterC2EP12CNWSCreature, 0x00000000003ba290) -NWNXLIB_FUNCTION(_ZN10CNWSBarterD1Ev, 0x00000000003ba640) -NWNXLIB_FUNCTION(_ZN10CNWSBarterD2Ev, 0x00000000003ba640) -NWNXLIB_FUNCTION(_ZN10CNWSClient11AsNWSPlayerEv, 0x00000000003bb720) -NWNXLIB_FUNCTION(_ZN10CNWSClient18AsNWSDungeonMasterEv, 0x00000000003bb710) -NWNXLIB_FUNCTION(_ZN10CNWSClientC1Ej, 0x00000000003bb6f0) -NWNXLIB_FUNCTION(_ZN10CNWSClientC2Ej, 0x00000000003bb6f0) -NWNXLIB_FUNCTION(_ZN10CNWSClientD0Ev, 0x00000000003bb6e0) -NWNXLIB_FUNCTION(_ZN10CNWSClientD1Ev, 0x00000000003bb6d0) -NWNXLIB_FUNCTION(_ZN10CNWSClientD2Ev, 0x00000000003bb6d0) -NWNXLIB_FUNCTION(_ZN10CNWSDialog10GetSpeakerEP10CNWSObjectRK10CExoString, 0x00000000003c1380) -NWNXLIB_FUNCTION(_ZN10CNWSDialog10LoadDialogEP7CResGFFi, 0x00000000003c3dc0) -NWNXLIB_FUNCTION(_ZN10CNWSDialog11CheckScriptEP10CNWSObjectRK7CResRefRK13CExoArrayListI11ScriptParamE, 0x00000000003c1860) -NWNXLIB_FUNCTION(_ZN10CNWSDialog11HandleReplyEjP10CNWSObjectjij, 0x00000000003c2f00) -NWNXLIB_FUNCTION(_ZN10CNWSDialog12RemovePlayerEj, 0x00000000003c11b0) -NWNXLIB_FUNCTION(_ZN10CNWSDialog13GetStartEntryEP10CNWSObject, 0x00000000003c1a40) -NWNXLIB_FUNCTION(_ZN10CNWSDialog14SetDialogDelayEP10CNWSObject13CExoLocStringji, 0x00000000003c1b80) -NWNXLIB_FUNCTION(_ZN10CNWSDialog15AddJournalEntryERK10CExoStringjj, 0x00000000003c1d20) -NWNXLIB_FUNCTION(_ZN10CNWSDialog15SendDialogEntryEP10CNWSObjectjji, 0x00000000003c28b0) -NWNXLIB_FUNCTION(_ZN10CNWSDialog16IsPlayerInDialogEj, 0x00000000003c12e0) -NWNXLIB_FUNCTION(_ZN10CNWSDialog16LoadScriptParamsEP7CResGFFR13CExoArrayListI11ScriptParamEP10CResStructPc, 0x00000000003c3ba0) -NWNXLIB_FUNCTION(_ZN10CNWSDialog17SendDialogRepliesEP10CNWSObjectj, 0x00000000003c2010) -NWNXLIB_FUNCTION(_ZN10CNWSDialog21GetStartEntryOneLinerEP10CNWSObjectR13CExoLocStringR7CResRefS5_R13CExoArrayListI11ScriptParamE, 0x00000000003c5310) -NWNXLIB_FUNCTION(_ZN10CNWSDialog24ClearDialogOwnerInObjectEj, 0x00000000003c10f0) -NWNXLIB_FUNCTION(_ZN10CNWSDialog7CleanupEv, 0x00000000003c3620) -NWNXLIB_FUNCTION(_ZN10CNWSDialog9RunScriptEP10CNWSObjectRK7CResRefRK13CExoArrayListI11ScriptParamE, 0x00000000003c1970) -NWNXLIB_FUNCTION(_ZN10CNWSDialogC1Ev, 0x00000000003c1000) -NWNXLIB_FUNCTION(_ZN10CNWSDialogC2Ev, 0x00000000003c1000) -NWNXLIB_FUNCTION(_ZN10CNWSDialogD0Ev, 0x00000000002f4980) -NWNXLIB_FUNCTION(_ZN10CNWSDialogD1Ev, 0x00000000002f4950) -NWNXLIB_FUNCTION(_ZN10CNWSDialogD2Ev, 0x00000000002f4950) -NWNXLIB_FUNCTION(_ZN10CNWSModule10SaveStaticEP8CERFFile10CExoStringti, 0x00000000002d0ca0) -NWNXLIB_FUNCTION(_ZN10CNWSModule10UpdateTimeEjjj, 0x00000000002d38d0) -NWNXLIB_FUNCTION(_ZN10CNWSModule11AsNWSModuleEv, 0x00000000002deb90) -NWNXLIB_FUNCTION(_ZN10CNWSModule11GetWaypointERK10CExoString, 0x00000000002d31d0) -NWNXLIB_FUNCTION(_ZN10CNWSModule11PostProcessEv, 0x00000000002d57e0) -NWNXLIB_FUNCTION(_ZN10CNWSModule11SavePlayersEP7CResGFFP10CResStructR10CExoStringR13CExoArrayListIjE, 0x00000000002d6e80) -NWNXLIB_FUNCTION(_ZN10CNWSModule12EventHandlerEjjPvjj, 0x00000000002d4420) -NWNXLIB_FUNCTION(_ZN10CNWSModule12GetAreaByTagER10CExoString, 0x00000000002cec30) -NWNXLIB_FUNCTION(_ZN10CNWSModule12InterAreaDFSEiiP20CPathfindInformation, 0x00000000002cee40) -NWNXLIB_FUNCTION(_ZN10CNWSModule12LoadTURDListEP7CResGFFP10CResStruct, 0x00000000002d35f0) -NWNXLIB_FUNCTION(_ZN10CNWSModule12SaveTURDListEP7CResGFFP10CResStruct, 0x00000000002d0420) -NWNXLIB_FUNCTION(_ZN10CNWSModule12UnloadModuleEv, 0x00000000002d2a30) -NWNXLIB_FUNCTION(_ZN10CNWSModule13AddToTURDListEP14CNWSPlayerTURD, 0x00000000002d33d0) -NWNXLIB_FUNCTION(_ZN10CNWSModule13GetAreaByNameER10CExoString, 0x00000000002cead0) -NWNXLIB_FUNCTION(_ZN10CNWSModule13GetFullCipherE10CExoString, 0x00000000002d9b00) -NWNXLIB_FUNCTION(_ZN10CNWSModule13SaveModuleFACEP8CERFFile, 0x00000000002d06c0) -NWNXLIB_FUNCTION(_ZN10CNWSModule14PlotPathInAreaEP20CPathfindInformationj, 0x00000000002cf880) -NWNXLIB_FUNCTION(_ZN10CNWSModule14RunEventScriptEiP10CExoString, 0x00000000002d4390) -NWNXLIB_FUNCTION(_ZN10CNWSModule15AddTURDsToWorldEv, 0x00000000002cf450) -NWNXLIB_FUNCTION(_ZN10CNWSModule15IsObjectInLimboEj, 0x00000000002d3c10) -NWNXLIB_FUNCTION(_ZN10CNWSModule15LoadModuleStartE10CExoStringiiRKN6NWSync13AdvertisementE, 0x00000000002db080) -NWNXLIB_FUNCTION(_ZN10CNWSModule15SaveModuleStartER10CExoStringS1_, 0x00000000002d2000) -NWNXLIB_FUNCTION(_ZN10CNWSModule16AddObjectToLimboEj, 0x00000000002d5ca0) -NWNXLIB_FUNCTION(_ZN10CNWSModule16CleanUpLimboListEv, 0x00000000002d3c70) -NWNXLIB_FUNCTION(_ZN10CNWSModule16LoadModuleFinishEv, 0x00000000002d59e0) -NWNXLIB_FUNCTION(_ZN10CNWSModule16SaveModuleFinishER10CExoStringS1_, 0x00000000002d95f0) -NWNXLIB_FUNCTION(_ZN10CNWSModule16SetIntraAreaGoalEP20CPathfindInformation, 0x00000000002d2a00) -NWNXLIB_FUNCTION(_ZN10CNWSModule17PlotInterAreaPathEP20CPathfindInformationj, 0x00000000002d0140) -NWNXLIB_FUNCTION(_ZN10CNWSModule18IsOfficialCampaignEv, 0x00000000002d3e90) -NWNXLIB_FUNCTION(_ZN10CNWSModule18LoadLimboCreaturesEP7CResGFFP10CResStructi, 0x00000000002d5d00) -NWNXLIB_FUNCTION(_ZN10CNWSModule18LoadSqliteDatabaseEv, 0x00000000002d5250) -NWNXLIB_FUNCTION(_ZN10CNWSModule18RemoveFromTURDListEP10CNWSPlayer, 0x00000000002d3700) -NWNXLIB_FUNCTION(_ZN10CNWSModule18SaveLimboCreaturesEP7CResGFFP10CResStruct, 0x00000000002d0f60) -NWNXLIB_FUNCTION(_ZN10CNWSModule18SaveModuleIFOStartEP7CResGFFP10CResStruct, 0x00000000002d1100) -NWNXLIB_FUNCTION(_ZN10CNWSModule18SaveSqliteDatabaseEP8CERFFile, 0x00000000002d4d90) -NWNXLIB_FUNCTION(_ZN10CNWSModule19SaveModuleIFOFinishEP7CResGFFP10CResStructP8CERFFileR10CExoStringR13CExoArrayListIjE, 0x00000000002d94b0) -NWNXLIB_FUNCTION(_ZN10CNWSModule19TimeStopSanityCheckEv, 0x00000000002d3db0) -NWNXLIB_FUNCTION(_ZN10CNWSModule20AddWorldJournalEntryEi10CExoStringS0_jj, 0x00000000002d5fc0) -NWNXLIB_FUNCTION(_ZN10CNWSModule20ComputeInterAreaPathEP20CPathfindInformation, 0x00000000002cf150) -NWNXLIB_FUNCTION(_ZN10CNWSModule20LoadModuleInProgressEii, 0x00000000002cf240) -NWNXLIB_FUNCTION(_ZN10CNWSModule20SaveModuleInProgressEv, 0x00000000002d0a90) -NWNXLIB_FUNCTION(_ZN10CNWSModule21ClearAreaVisitedFlagsEv, 0x00000000002cedd0) -NWNXLIB_FUNCTION(_ZN10CNWSModule21GetPlayerTURDFromListEP10CNWSPlayer, 0x00000000002d04f0) -NWNXLIB_FUNCTION(_ZN10CNWSModule21GetPrimaryPlayerIndexEv, 0x00000000002d2550) -NWNXLIB_FUNCTION(_ZN10CNWSModule21PackModuleIntoMessageEj, 0x00000000002d4080) -NWNXLIB_FUNCTION(_ZN10CNWSModule21RemoveObjectFromLimboEj, 0x00000000002d3b80) -NWNXLIB_FUNCTION(_ZN10CNWSModule22AddObjectToLookupTableE10CExoStringj, 0x00000000002d2ad0) -NWNXLIB_FUNCTION(_ZN10CNWSModule22FindObjectByTagOrdinalERK10CExoStringj, 0x00000000002d2f80) -NWNXLIB_FUNCTION(_ZN10CNWSModule22FindTagPositionInTableEPc, 0x00000000002d2a40) -NWNXLIB_FUNCTION(_ZN10CNWSModule23DeleteWorldJournalEntryEi, 0x00000000002d4ab0) -NWNXLIB_FUNCTION(_ZN10CNWSModule26AddWorldJournalEntryStrrefEjjjj, 0x00000000002d6280) -NWNXLIB_FUNCTION(_ZN10CNWSModule26FindObjectByTagTypeOrdinalERK10CExoStringij, 0x00000000002d3070) -NWNXLIB_FUNCTION(_ZN10CNWSModule26GetPlayerIndexInPlayerListEP10CNWSPlayer, 0x00000000002d23c0) -NWNXLIB_FUNCTION(_ZN10CNWSModule26GetWorldJournalIndexUniqueEv, 0x00000000002d3360) -NWNXLIB_FUNCTION(_ZN10CNWSModule27DestroyModuleSqliteDatabaseEv, 0x00000000002d4f70) -NWNXLIB_FUNCTION(_ZN10CNWSModule27RemoveObjectFromLookupTableE10CExoStringj, 0x00000000002d2e20) -NWNXLIB_FUNCTION(_ZN10CNWSModule28DeleteWorldJournalAllEntriesEv, 0x00000000002d31f0) -NWNXLIB_FUNCTION(_ZN10CNWSModule29DeleteWorldJournalEntryStrrefEj, 0x00000000002d4bf0) -NWNXLIB_FUNCTION(_ZN10CNWSModule30GenerateInterAreaDFSSuccessorsEiP20CPathfindInformationPPj, 0x00000000002cea20) -NWNXLIB_FUNCTION(_ZN10CNWSModule30PackModuleResourcesIntoMessageEv, 0x00000000002cf500) -NWNXLIB_FUNCTION(_ZN10CNWSModule34PackPlayerCharacterListIntoMessageEP10CNWSPlayerR13CExoArrayListIP24NWPlayerCharacterList_stE, 0x00000000002d25f0) -NWNXLIB_FUNCTION(_ZN10CNWSModule7GetAreaE7CResRef, 0x00000000002ce8e0) -NWNXLIB_FUNCTION(_ZN10CNWSModule7GetAreaEj, 0x00000000002ce9b0) -NWNXLIB_FUNCTION(_ZN10CNWSModule7GetTimeEPjS0_S0_S0_PhS0_, 0x00000000002d3b40) -NWNXLIB_FUNCTION(_ZN10CNWSModule8AIUpdateEv, 0x00000000002d48e0) -NWNXLIB_FUNCTION(_ZN10CNWSModule8DoUpdateEv, 0x00000000002d4a50) -NWNXLIB_FUNCTION(_ZN10CNWSModule8PlotPathEP20CPathfindInformationj, 0x00000000002d0330) -NWNXLIB_FUNCTION(_ZN10CNWSModuleC1E10CExoString5CUUIDiii, 0x00000000002da070) -NWNXLIB_FUNCTION(_ZN10CNWSModuleC2E10CExoString5CUUIDiii, 0x00000000002da070) -NWNXLIB_FUNCTION(_ZN10CNWSModuleD0Ev, 0x00000000002d6e40) -NWNXLIB_FUNCTION(_ZN10CNWSModuleD1Ev, 0x00000000002d64b0) -NWNXLIB_FUNCTION(_ZN10CNWSModuleD2Ev, 0x00000000002d64b0) -NWNXLIB_FUNCTION(_ZN10CNWSObject10RunActionsEjjm, 0x00000000002fb130) -NWNXLIB_FUNCTION(_ZN10CNWSObject10StopDialogEv, 0x00000000002eb030) -NWNXLIB_FUNCTION(_ZN10CNWSObject11ApplyEffectEP11CGameEffectii, 0x00000000002f0a10) -NWNXLIB_FUNCTION(_ZN10CNWSObject11AsNWSObjectEv, 0x000000000023ee70) -NWNXLIB_FUNCTION(_ZN10CNWSObject11ClearActionEP20CNWSObjectActionNodei, 0x00000000002a0be0) -NWNXLIB_FUNCTION(_ZN10CNWSObject11GetLastNameEv, 0x00000000002a0c00) -NWNXLIB_FUNCTION(_ZN10CNWSObject11GetNodeByIdEtt, 0x00000000002e1220) -NWNXLIB_FUNCTION(_ZN10CNWSObject11GetPortraitEv, 0x00000000002a0c60) -NWNXLIB_FUNCTION(_ZN10CNWSObject11RemoveGroupEt, 0x00000000002e1370) -NWNXLIB_FUNCTION(_ZN10CNWSObject11ReplyDialogEjjij, 0x00000000002eaed0) -NWNXLIB_FUNCTION(_ZN10CNWSObject11SetPortraitE7CResRef, 0x00000000002a0d20) -NWNXLIB_FUNCTION(_ZN10CNWSObject11SetPositionE6Vectori, 0x00000000002e5530) -NWNXLIB_FUNCTION(_ZN10CNWSObject11StartDialogEjRK10CExoStringii, 0x00000000002f4260) -NWNXLIB_FUNCTION(_ZN10CNWSObject12AIActionWaitEP20CNWSObjectActionNode, 0x00000000002f6a20) -NWNXLIB_FUNCTION(_ZN10CNWSObject12GetFirstNameEv, 0x00000000002f47f0) -NWNXLIB_FUNCTION(_ZN10CNWSObject12GetIsPCDyingEv, 0x00000000002e69c0) -NWNXLIB_FUNCTION(_ZN10CNWSObject12LoadVarTableEP7CResGFFP10CResStruct, 0x00000000002e23f0) -NWNXLIB_FUNCTION(_ZN10CNWSObject12PlaySoundSetEP10CNWSPlayerh, 0x00000000002e5a80) -NWNXLIB_FUNCTION(_ZN10CNWSObject12RemoveEffectEP11CGameEffect, 0x00000000002e47d0) -NWNXLIB_FUNCTION(_ZN10CNWSObject12SaveVarTableEP7CResGFFP10CResStruct, 0x00000000002e2410) -NWNXLIB_FUNCTION(_ZN10CNWSObject12SetAnimationEi, 0x00000000002e0240) -NWNXLIB_FUNCTION(_ZN10CNWSObject12SpawnBodyBagEv, 0x00000000002e89b0) -NWNXLIB_FUNCTION(_ZN10CNWSObject12UpdateDialogEv, 0x00000000002eb410) -NWNXLIB_FUNCTION(_ZN10CNWSObject13ACTION_FAILEDE, 0x00000000008d8708) -NWNXLIB_FUNCTION(_ZN10CNWSObject13AIActionSpeakEP20CNWSObjectActionNode, 0x00000000002f6860) -NWNXLIB_FUNCTION(_ZN10CNWSObject13AI_TIME_SLICEE, 0x00000000008d8704) -NWNXLIB_FUNCTION(_ZN10CNWSObject13GetNewGroupIDEv, 0x00000000002e14a0) -NWNXLIB_FUNCTION(_ZN10CNWSObject13GetPortraitIdEv, 0x000000000023ee80) -NWNXLIB_FUNCTION(_ZN10CNWSObject13GetReputationEjRii, 0x00000000002f9c20) -NWNXLIB_FUNCTION(_ZN10CNWSObject13GetScriptNameEi, 0x00000000002c6210) -NWNXLIB_FUNCTION(_ZN10CNWSObject13IsDialogDelayEv, 0x00000000002e56e0) -NWNXLIB_FUNCTION(_ZN10CNWSObject13SetPortraitIdEt, 0x00000000002e0290) -NWNXLIB_FUNCTION(_ZN10CNWSObject14CopyScriptVarsEP18CNWSScriptVarTable, 0x00000000002f31a0) -NWNXLIB_FUNCTION(_ZN10CNWSObject14GetDamageLevelEv, 0x00000000002e3c10) -NWNXLIB_FUNCTION(_ZN10CNWSObject14LoadEffectListEP7CResGFFP10CResStruct, 0x00000000002f0fc0) -NWNXLIB_FUNCTION(_ZN10CNWSObject14LoadListenDataEP7CResGFFP10CResStruct, 0x00000000002e5da0) -NWNXLIB_FUNCTION(_ZN10CNWSObject14ReportOverflowEiiii, 0x00000000002e8da0) -NWNXLIB_FUNCTION(_ZN10CNWSObject14RunEventScriptEiP10CExoString, 0x00000000002eac90) -NWNXLIB_FUNCTION(_ZN10CNWSObject14SaveEffectListEP7CResGFFP10CResStruct, 0x00000000002e2430) -NWNXLIB_FUNCTION(_ZN10CNWSObject14SaveListenDataEP7CResGFFP10CResStruct, 0x00000000002e2450) -NWNXLIB_FUNCTION(_ZN10CNWSObject14SetDialogDelayEf, 0x00000000002e5600) -NWNXLIB_FUNCTION(_ZN10CNWSObject14SetDialogOwnerEj, 0x00000000002e5a20) -NWNXLIB_FUNCTION(_ZN10CNWSObject14SetOrientationE6Vector, 0x00000000002e3d30) -NWNXLIB_FUNCTION(_ZN10CNWSObject14TestActionListEv, 0x00000000002e1640) -NWNXLIB_FUNCTION(_ZN10CNWSObject15ACTION_COMPLETEE, 0x00000000008d870c) -NWNXLIB_FUNCTION(_ZN10CNWSObject15BroadcastDialogE10CExoStringf, 0x00000000002e6230) -NWNXLIB_FUNCTION(_ZN10CNWSObject15ClearAllActionsEv, 0x00000000002e3430) -NWNXLIB_FUNCTION(_ZN10CNWSObject15DoSpellImmunityEPS_P22CNWSAreaOfEffectObject, 0x00000000002e3990) -NWNXLIB_FUNCTION(_ZN10CNWSObject15GetDialogResrefEv, 0x00000000002bcb60) -NWNXLIB_FUNCTION(_ZN10CNWSObject15GetMaxHitPointsEi, 0x00000000002a0c10) -NWNXLIB_FUNCTION(_ZN10CNWSObject15LoadActionQueueEP7CResGFFP10CResStruct, 0x00000000002e1a20) -NWNXLIB_FUNCTION(_ZN10CNWSObject15LoadMiscVisualsEP7CResGFFP10CResStruct, 0x00000000002e2b00) -NWNXLIB_FUNCTION(_ZN10CNWSObject15LoadObjectStateEP7CResGFFP10CResStruct, 0x00000000002f10f0) -NWNXLIB_FUNCTION(_ZN10CNWSObject15SaveActionQueueEP7CResGFFP10CResStruct, 0x00000000002e2060) -NWNXLIB_FUNCTION(_ZN10CNWSObject15SaveMiscVisualsEP7CResGFFP10CResStruct, 0x00000000002e2a30) -NWNXLIB_FUNCTION(_ZN10CNWSObject15SaveObjectStateEP7CResGFFP10CResStruct, 0x00000000002e2380) -NWNXLIB_FUNCTION(_ZN10CNWSObject15SendDialogEntryEji, 0x00000000002ead20) -NWNXLIB_FUNCTION(_ZN10CNWSObject16AddActionToFrontEjtjPvjS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_, 0x00000000002e2c00) -NWNXLIB_FUNCTION(_ZN10CNWSObject16AIActionGiveItemEP20CNWSObjectActionNode, 0x00000000002f70f0) -NWNXLIB_FUNCTION(_ZN10CNWSObject16AIActionOpenDoorEP20CNWSObjectActionNode, 0x00000000002f9f80) -NWNXLIB_FUNCTION(_ZN10CNWSObject16AIActionTakeItemEP20CNWSObjectActionNode, 0x00000000002f7640) -NWNXLIB_FUNCTION(_ZN10CNWSObject16DoDamageImmunityEP12CNWSCreatureitii, 0x00000000002f07b0) -NWNXLIB_FUNCTION(_ZN10CNWSObject16GetEffectSpellIdEv, 0x00000000002a0c20) -NWNXLIB_FUNCTION(_ZN10CNWSObject16RemoveEffectByIdEm, 0x00000000002e49d0) -NWNXLIB_FUNCTION(_ZN10CNWSObject16SetEffectSpellIdEj, 0x00000000002a0c30) -NWNXLIB_FUNCTION(_ZN10CNWSObject16UpdateEffectListEjj, 0x00000000002f1150) -NWNXLIB_FUNCTION(_ZN10CNWSObject16UpdateEffectPtrsEv, 0x00000000002a0c90) -NWNXLIB_FUNCTION(_ZN10CNWSObject17AddOpenDoorActionEji, 0x00000000002e6a90) -NWNXLIB_FUNCTION(_ZN10CNWSObject17AIActionCloseDoorEP20CNWSObjectActionNode, 0x00000000002f7820) -NWNXLIB_FUNCTION(_ZN10CNWSObject17AIActionDoCommandEP20CNWSObjectActionNode, 0x00000000002f69b0) -NWNXLIB_FUNCTION(_ZN10CNWSObject17AIActionPlaySoundEP20CNWSObjectActionNode, 0x00000000002f6b20) -NWNXLIB_FUNCTION(_ZN10CNWSObject17AIActionUseObjectEP20CNWSObjectActionNode, 0x00000000002fa690) -NWNXLIB_FUNCTION(_ZN10CNWSObject17DoDamageReductionEP12CNWSCreatureihii, 0x00000000002ec6b0) -NWNXLIB_FUNCTION(_ZN10CNWSObject17GetAQActionIDByIDEti, 0x00000000002f5c70) -NWNXLIB_FUNCTION(_ZN10CNWSObject17GetDamageImmunityEh, 0x00000000002e0900) -NWNXLIB_FUNCTION(_ZN10CNWSObject17GetIDByAQActionIDEt, 0x00000000002f5df0) -NWNXLIB_FUNCTION(_ZN10CNWSObject17GetScriptLocationEv, 0x00000000002e6770) -NWNXLIB_FUNCTION(_ZN10CNWSObject17RunDialogOneLinerERK10CExoStringj, 0x00000000002f3e70) -NWNXLIB_FUNCTION(_ZN10CNWSObject17SendDialogRepliesEv, 0x00000000002eb280) -NWNXLIB_FUNCTION(_ZN10CNWSObject17SetDamageImmunityEti, 0x00000000002e3900) -NWNXLIB_FUNCTION(_ZN10CNWSObject17SetTextureReplaceERK10CExoStringS2_, 0x00000000002ec470) -NWNXLIB_FUNCTION(_ZN10CNWSObject18ACTION_IN_PROGRESSE, 0x00000000008d8710) -NWNXLIB_FUNCTION(_ZN10CNWSObject18AddCloseDoorActionEji, 0x00000000002e6b10) -NWNXLIB_FUNCTION(_ZN10CNWSObject18AddDoCommandActionEPv, 0x00000000002f9b90) -NWNXLIB_FUNCTION(_ZN10CNWSObject18AddGiveItemActionsEjji, 0x00000000002f9870) -NWNXLIB_FUNCTION(_ZN10CNWSObject18AddTakeItemActionsEjji, 0x00000000002f9950) -NWNXLIB_FUNCTION(_ZN10CNWSObject18AddUseObjectActionEj, 0x00000000002f97d0) -NWNXLIB_FUNCTION(_ZN10CNWSObject18AIActionLockObjectEP20CNWSObjectActionNode, 0x00000000002f8a40) -NWNXLIB_FUNCTION(_ZN10CNWSObject18BroadcastSpellDataEP8CNWSpellP16CNWCCMessageData, 0x00000000002e7030) -NWNXLIB_FUNCTION(_ZN10CNWSObject18DoDamageResistanceEP12CNWSCreatureitiii, 0x00000000002ed520) -NWNXLIB_FUNCTION(_ZN10CNWSObject18GetActionByGroupIdEtPP20CNWSObjectActionNode, 0x00000000002e1060) -NWNXLIB_FUNCTION(_ZN10CNWSObject18GetAIStateReactionEj, 0x00000000002fbe90) -NWNXLIB_FUNCTION(_ZN10CNWSObject18GetNumActionGroupsEv, 0x00000000002e12c0) -NWNXLIB_FUNCTION(_ZN10CNWSObject18LoadSqliteDatabaseEP7CResGFFP10CResStruct, 0x00000000002f2770) -NWNXLIB_FUNCTION(_ZN10CNWSObject18RemoveEffectTargetEj, 0x00000000002e46c0) -NWNXLIB_FUNCTION(_ZN10CNWSObject18SaveSqliteDatabaseEP7CResGFFP10CResStruct, 0x00000000002f2290) -NWNXLIB_FUNCTION(_ZN10CNWSObject18SpellCastAndImpactEj6Vectorjhjiihi, 0x00000000002e7580) -NWNXLIB_FUNCTION(_ZN10CNWSObject19AddActionAfterFrontEjtjPvjS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_, 0x00000000002e2f60) -NWNXLIB_FUNCTION(_ZN10CNWSObject19AddLockObjectActionEj, 0x00000000002e6c10) -NWNXLIB_FUNCTION(_ZN10CNWSObject19AIActionPauseDialogEP20CNWSObjectActionNode, 0x00000000002f6510) -NWNXLIB_FUNCTION(_ZN10CNWSObject19AIActionSpeakStrRefEP20CNWSObjectActionNode, 0x00000000002f67d0) -NWNXLIB_FUNCTION(_ZN10CNWSObject19AnimationStationaryEt, 0x00000000002e33e0) -NWNXLIB_FUNCTION(_ZN10CNWSObject19BroadcastFloatyDataEP16CNWCCMessageData, 0x00000000002e0280) -NWNXLIB_FUNCTION(_ZN10CNWSObject19GetAcceptableActionEj, 0x00000000002f5c40) -NWNXLIB_FUNCTION(_ZN10CNWSObject19GetCurrentHitPointsEi, 0x00000000002e0250) -NWNXLIB_FUNCTION(_ZN10CNWSObject19LoadVisualTransformEP7CResGFFP10CResStruct, 0x00000000002ea2b0) -NWNXLIB_FUNCTION(_ZN10CNWSObject19SaveVisualTransformEP7CResGFFP10CResStruct, 0x00000000002e2540) -NWNXLIB_FUNCTION(_ZN10CNWSObject19SetLastHostileActorEji, 0x00000000002e9080) -NWNXLIB_FUNCTION(_ZN10CNWSObject19SetListenExpressionE10CExoStringi, 0x00000000002e5bc0) -NWNXLIB_FUNCTION(_ZN10CNWSObject20AIActionDialogObjectEP20CNWSObjectActionNode, 0x00000000002f5e10) -NWNXLIB_FUNCTION(_ZN10CNWSObject20AIActionResumeDialogEP20CNWSObjectActionNode, 0x00000000002f6640) -NWNXLIB_FUNCTION(_ZN10CNWSObject20AIActionUnlockObjectEP20CNWSObjectActionNode, 0x00000000002f7c00) -NWNXLIB_FUNCTION(_ZN10CNWSObject20GetObjectSqlDatabaseEv, 0x00000000002f23e0) -NWNXLIB_FUNCTION(_ZN10CNWSObject20LoadTextureOverridesEP7CResGFFP10CResStruct, 0x00000000002ec230) -NWNXLIB_FUNCTION(_ZN10CNWSObject20SaveTextureOverridesEP7CResGFFP10CResStruct, 0x00000000002e28d0) -NWNXLIB_FUNCTION(_ZN10CNWSObject20TestListenExpressionE10CExoString, 0x00000000002e5fa0) -NWNXLIB_FUNCTION(_ZN10CNWSObject21AddUnlockObjectActionEjji, 0x00000000002e6b90) -NWNXLIB_FUNCTION(_ZN10CNWSObject21AIActionPlayAnimationEP20CNWSObjectActionNode, 0x00000000002f6d50) -NWNXLIB_FUNCTION(_ZN10CNWSObject21DeleteCurrentAIActionEv, 0x00000000002e3360) -NWNXLIB_FUNCTION(_ZN10CNWSObject21HasSpellEffectAppliedEj, 0x00000000002e67b0) -NWNXLIB_FUNCTION(_ZN10CNWSObject21LoadMaterialOverridesEP7CResGFFP10CResStruct, 0x00000000002eb620) -NWNXLIB_FUNCTION(_ZN10CNWSObject21RemoveEffectByCreatorEj, 0x00000000002e4960) -NWNXLIB_FUNCTION(_ZN10CNWSObject21RemoveEffectBySpellIdEj, 0x00000000002e6810) -NWNXLIB_FUNCTION(_ZN10CNWSObject21SaveMaterialOverridesEP7CResGFFP10CResStruct, 0x00000000002e26a0) -NWNXLIB_FUNCTION(_ZN10CNWSObject21SetGroupInterruptableEti, 0x00000000002e15a0) -NWNXLIB_FUNCTION(_ZN10CNWSObject22AddActionNodeParameterEP20CNWSObjectActionNodejjPv, 0x00000000002e14d0) -NWNXLIB_FUNCTION(_ZN10CNWSObject22AddLoopingVisualEffectEtjh25ObjectVisualTransformData, 0x00000000002e3d50) -NWNXLIB_FUNCTION(_ZN10CNWSObject22AIActionSetCommandableEP20CNWSObjectActionNode, 0x00000000002f9780) -NWNXLIB_FUNCTION(_ZN10CNWSObject22ClearAllHostileActionsEj, 0x00000000002e3570) -NWNXLIB_FUNCTION(_ZN10CNWSObject22DoSpellLevelAbsorptionEPS_P22CNWSAreaOfEffectObject, 0x00000000002e4c30) -NWNXLIB_FUNCTION(_ZN10CNWSObject22GetCanCarrySqlDatabaseEv, 0x00000000002a0c80) -NWNXLIB_FUNCTION(_ZN10CNWSObject22GetDialogInterruptableEv, 0x00000000002a0bf0) -NWNXLIB_FUNCTION(_ZN10CNWSObject22GetListenExpressionObjEi, 0x00000000002e5b70) -NWNXLIB_FUNCTION(_ZN10CNWSObject22GetNearestObjectByNameERK10CExoStringf, 0x00000000002e5770) -NWNXLIB_FUNCTION(_ZN10CNWSObject22RemoveObjectFromDialogEj, 0x00000000002eb210) -NWNXLIB_FUNCTION(_ZN10CNWSObject22SetVisualTransformDataERK25ObjectVisualTransformData, 0x00000000002e91e0) -NWNXLIB_FUNCTION(_ZN10CNWSObject23BroadcastSafeProjectileEjj6VectorS0_jhjhh, 0x00000000002e7370) -NWNXLIB_FUNCTION(_ZN10CNWSObject23GetHasFeatEffectAppliedEt, 0x00000000002e8d10) -NWNXLIB_FUNCTION(_ZN10CNWSObject23GetPositionByGroupIndexEi, 0x00000000002e1160) -NWNXLIB_FUNCTION(_ZN10CNWSObject23SetMaterialShaderParamIERK10CExoStringS2_i, 0x00000000002eba50) -NWNXLIB_FUNCTION(_ZN10CNWSObject24DestroyObjectSqlDatabaseEv, 0x00000000002eabd0) -NWNXLIB_FUNCTION(_ZN10CNWSObject24GetDamageImmunityByFlagsEt, 0x00000000002e0940) -NWNXLIB_FUNCTION(_ZN10CNWSObject24UpdateAttributesOnEffectEP11CGameEffecti, 0x00000000002a0ca0) -NWNXLIB_FUNCTION(_ZN10CNWSObject25BroadcastCounterSpellDataEP8CNWSpellP16CNWCCMessageData, 0x00000000002e6c90) -NWNXLIB_FUNCTION(_ZN10CNWSObject25BroadcastFloatyDataSTRREFEj, 0x00000000002e0650) -NWNXLIB_FUNCTION(_ZN10CNWSObject25ClearSpellEffectsOnOthersEv, 0x00000000002e52e0) -NWNXLIB_FUNCTION(_ZN10CNWSObject25RemoveLoopingVisualEffectEt, 0x00000000002e4600) -NWNXLIB_FUNCTION(_ZN10CNWSObject25ResetMaterialShaderParamsERK10CExoStringS2_, 0x00000000002ebfb0) -NWNXLIB_FUNCTION(_ZN10CNWSObject26AddMatchedExpressionStringERK10CExoString, 0x00000000002e6030) -NWNXLIB_FUNCTION(_ZN10CNWSObject26GetLastDamageAmountByFlagsEi, 0x00000000002e3950) -NWNXLIB_FUNCTION(_ZN10CNWSObject26GetLockOrientationToObjectEv, 0x00000000002a0c50) -NWNXLIB_FUNCTION(_ZN10CNWSObject26SetLockOrientationToObjectEj, 0x00000000002a0c40) -NWNXLIB_FUNCTION(_ZN10CNWSObject26SetMaterialShaderParamVec4ERK10CExoStringS2_ffff, 0x00000000002ebcd0) -NWNXLIB_FUNCTION(_ZN10CNWSObject27TerminateAISliceAfterActionEj, 0x00000000002f5c20) -NWNXLIB_FUNCTION(_ZN10CNWSObject29ClearMatchedExpressionStringsEv, 0x00000000002e6190) -NWNXLIB_FUNCTION(_ZN10CNWSObject30CalculateSpellRangedMissTargetEjj, 0x00000000002e7ef0) -NWNXLIB_FUNCTION(_ZN10CNWSObject31RemoveSomeEffectsOfDurationTypeEt, 0x00000000002e5260) -NWNXLIB_FUNCTION(_ZN10CNWSObject32CalculateLastSpellProjectileTimeEh, 0x00000000002e7bf0) -NWNXLIB_FUNCTION(_ZN10CNWSObject38GetMaximumDamageResistanceVsDamageFlagEtPi, 0x00000000002e0450) -NWNXLIB_FUNCTION(_ZN10CNWSObject6SetTagE10CExoString, 0x0000000000447ac0) -NWNXLIB_FUNCTION(_ZN10CNWSObject7GetAreaEv, 0x00000000002e54b0) -NWNXLIB_FUNCTION(_ZN10CNWSObject7GetDeadEv, 0x00000000002e6890) -NWNXLIB_FUNCTION(_ZN10CNWSObject7SetAreaEP8CNWSArea, 0x00000000002e55c0) -NWNXLIB_FUNCTION(_ZN10CNWSObject8DoDamageEi, 0x00000000002e0b50) -NWNXLIB_FUNCTION(_ZN10CNWSObject9AddActionEjtjPvjS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_jS0_, 0x00000000002e16c0) -NWNXLIB_FUNCTION(_ZN10CNWSObject9GetGenderEv, 0x00000000002e0270) -NWNXLIB_FUNCTION(_ZN10CNWSObjectC1Ehjii, 0x00000000002f31c0) -NWNXLIB_FUNCTION(_ZN10CNWSObjectC2Ehjii, 0x00000000002f31c0) -NWNXLIB_FUNCTION(_ZN10CNWSObjectD0Ev, 0x00000000002f3e40) -NWNXLIB_FUNCTION(_ZN10CNWSObjectD1Ev, 0x00000000002f3a30) -NWNXLIB_FUNCTION(_ZN10CNWSObjectD2Ev, 0x00000000002f3a30) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer11AsNWSPlayerEv, 0x000000000030e960) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer12CleanMyTURDsEv, 0x0000000000305030) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer13AllocateAreasEi, 0x0000000000306ab0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer13GetGameObjectEv, 0x0000000000305f20) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer13GetIsPlayerDMEv, 0x0000000000309190) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer13GetPlayerNameEv, 0x0000000000306b90) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer13SetGameObjectEP10CNWSObject, 0x0000000000307050) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer14AddDMAbilitiesEP12CNWSCreature, 0x0000000000305400) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer14SatisfiesBuildEii, 0x00000000003079f0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer15LoadDMCharacterEv, 0x000000000030e6e0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer15PossessCreatureEjh, 0x0000000000307a90) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer16HasExpansionPackEhi, 0x0000000000307700) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer16LoadCreatureDataE7CResRefP12CNWSCreature, 0x000000000030d860) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer17ValidateCharacterEPi, 0x0000000000309480) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer18AsNWSDungeonMasterEv, 0x000000000023f080) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer18GetIsAllowedToSaveEv, 0x0000000000308080) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer18LoadLocalCharacterEv, 0x000000000030e5f0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer19GetLastUpdateObjectEj, 0x0000000000305080) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer19LoadServerCharacterE7CResRefi, 0x000000000030e800) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer19LoadTURDInfoFromIFOEj, 0x0000000000306100) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer19SaveServerCharacterEi, 0x000000000030ba00) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer19StoreCameraSettingsEv, 0x0000000000307720) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer20LoadCharacterFromIFOEjiiii, 0x0000000000308180) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer20SetAreaTransitionBMPEi10CExoString, 0x0000000000305120) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer21BackupServerCharacterERK10CExoString, 0x0000000000305cb0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer21RestoreCameraSettingsEv, 0x0000000000307760) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer23GetCharacterInfoFromIFOERhPiPhRj, 0x0000000000305160) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer23PackCreatureIntoMessageEv, 0x00000000003063e0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer24ClearPlayerOnDestroyGameEv, 0x00000000003091e0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer27ClearPlayerLastUpdateObjectEv, 0x0000000000307010) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer31CreateNewPlayerLastUpdateObjectEv, 0x0000000000306f90) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer32PermittedToDisplayCharacterSheetEj, 0x00000000003080d0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer35StripAllInvalidItemPropertiesOnItemEP8CNWSItem, 0x00000000003077a0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer37ValidateCharacter_SetNormalBonusFlagsEtRiS0_h, 0x0000000000305e40) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer40StripAllInvalidItemPropertiesInInventoryEP12CNWSCreature, 0x0000000000307900) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer7AddAreaEj, 0x0000000000306b30) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer7EatTURDEP14CNWSPlayerTURD, 0x0000000000307340) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer7GetIsDMEv, 0x0000000000307a50) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer8DropTURDEv, 0x0000000000306c00) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer8NuiState11WindowState16IngestBindUpdateERKN3Nui4JSON10BindUpdateE, 0x0000000000471ef0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer8NuiState11WindowStateD1Ev, 0x000000000046d950) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer8NuiState11WindowStateD2Ev, 0x000000000046d950) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer8NuiState15FindWindowStateEi, 0x000000000046cb20) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer8NuiState17CreateWindowStateENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE, 0x000000000046e330) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer8NuiState18DestroyWindowStateEi, 0x000000000046fda0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer8NuiStateD1Ev, 0x000000000030eaf0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayer8NuiStateD2Ev, 0x000000000030eaf0) -NWNXLIB_FUNCTION(_ZN10CNWSPlayerC1Ej, 0x000000000030c830) -NWNXLIB_FUNCTION(_ZN10CNWSPlayerC2Ej, 0x000000000030c830) -NWNXLIB_FUNCTION(_ZN10CNWSPlayerD0Ev, 0x000000000030d830) -NWNXLIB_FUNCTION(_ZN10CNWSPlayerD1Ev, 0x000000000030cc40) -NWNXLIB_FUNCTION(_ZN10CNWSPlayerD2Ev, 0x000000000030cc40) -NWNXLIB_FUNCTION(_ZN10CNWTileSet11GetEdgeTypeEihh, 0x00000000001fc6b0) -NWNXLIB_FUNCTION(_ZN10CNWTileSet11GetTileDataEi, 0x00000000001fc750) -NWNXLIB_FUNCTION(_ZN10CNWTileSet11LoadTileSetEv, 0x00000000001fc890) -NWNXLIB_FUNCTION(_ZN10CNWTileSet12SetTileValueEPcS0_, 0x00000000001fd510) -NWNXLIB_FUNCTION(_ZN10CNWTileSet13GetCornerTypeEihh, 0x00000000001fc640) -NWNXLIB_FUNCTION(_ZN10CNWTileSet13UnloadTileSetEv, 0x00000000001fda50) -NWNXLIB_FUNCTION(_ZN10CNWTileSet15GetEnvMapResRefEv, 0x00000000001fc720) -NWNXLIB_FUNCTION(_ZN10CNWTileSet19GetHeightTransitionEv, 0x00000000001fc740) -NWNXLIB_FUNCTION(_ZN10CNWTileSet9ParseLineEPc, 0x00000000001fd840) -NWNXLIB_FUNCTION(_ZN10CNWTileSetC1E7CResRefi, 0x00000000001fdb70) -NWNXLIB_FUNCTION(_ZN10CNWTileSetC2E7CResRefi, 0x00000000001fdb70) -NWNXLIB_FUNCTION(_ZN10CNWTileSetD0Ev, 0x00000000001fdb40) -NWNXLIB_FUNCTION(_ZN10CNWTileSetD1Ev, 0x00000000001fdb00) -NWNXLIB_FUNCTION(_ZN10CNWTileSetD2Ev, 0x00000000001fdb00) -NWNXLIB_FUNCTION(_ZN10CResHelperI4CResLt2077EE9SetResRefERK7CResRefi, 0x00000000002df620) -NWNXLIB_FUNCTION(_ZN10CResHelperI4CResLt2077EED0Ev, 0x00000000002dee40) -NWNXLIB_FUNCTION(_ZN10CResHelperI4CResLt2077EED1Ev, 0x00000000002ded90) -NWNXLIB_FUNCTION(_ZN10CResHelperI4CResLt2077EED2Ev, 0x00000000002ded90) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CRes2DALt2017EE9SetResRefERK7CResRefi, 0x0000000000149470) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CRes2DALt2017EEC1Ev, 0x00000000001493f0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CRes2DALt2017EEC2Ev, 0x00000000001493f0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CRes2DALt2017EED0Ev, 0x00000000001493c0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CRes2DALt2017EED1Ev, 0x0000000000149310) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CRes2DALt2017EED2Ev, 0x0000000000149310) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResARELt2012EE9SetResRefERK7CResRefi, 0x00000000003b0780) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResARELt2012EED0Ev, 0x00000000003b0700) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResARELt2012EED1Ev, 0x00000000003b0650) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResARELt2012EED2Ev, 0x00000000003b0650) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResDWKLt2052EE9SetResRefERK7CResRefi, 0x00000000008b1130) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResDWKLt2052EED0Ev, 0x00000000008b1100) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResDWKLt2052EED1Ev, 0x00000000008b1050) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResDWKLt2052EED2Ev, 0x00000000008b1050) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResIFOLt2014EE9SetResRefERK7CResRefi, 0x00000000002df370) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResIFOLt2014EED0Ev, 0x00000000002ded60) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResIFOLt2014EED1Ev, 0x00000000002decb0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResIFOLt2014EED2Ev, 0x00000000002decb0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResLTRLt2036EE9SetResRefERK7CResRefi, 0x00000000007a83c0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResLTRLt2036EED0Ev, 0x00000000007a8390) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResLTRLt2036EED1Ev, 0x00000000007a82e0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResLTRLt2036EED2Ev, 0x00000000007a82e0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNCSLt2010EE9SetResRefERK7CResRefi, 0x00000000007cecf0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNCSLt2010EEC1Ev, 0x00000000007cec70) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNCSLt2010EEC2Ev, 0x00000000007cec70) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNCSLt2010EED0Ev, 0x00000000007ceb80) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNCSLt2010EED1Ev, 0x00000000007cead0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNCSLt2010EED2Ev, 0x00000000007cead0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNDBLt2064EE9SetResRefERK7CResRefi, 0x00000000007d5100) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNDBLt2064EED0Ev, 0x00000000007ae620) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNDBLt2064EED1Ev, 0x00000000007ae570) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNDBLt2064EED2Ev, 0x00000000007ae570) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNSSLt2009EE9SetResRefERK7CResRefi, 0x00000000007ae720) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNSSLt2009EEC1Ev, 0x00000000007ae6a0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNSSLt2009EEC2Ev, 0x00000000007ae6a0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNSSLt2009EED0Ev, 0x00000000007ae4f0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNSSLt2009EED1Ev, 0x00000000007ae440) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResNSSLt2009EED2Ev, 0x00000000007ae440) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResPWKLt2053EE9SetResRefERK7CResRefi, 0x00000000008aef80) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResPWKLt2053EED0Ev, 0x00000000008aef50) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResPWKLt2053EED1Ev, 0x00000000008aeea0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResPWKLt2053EED2Ev, 0x00000000008aeea0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResSETLt2013EE9SetResRefERK7CResRefi, 0x00000000001fde00) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResSETLt2013EED0Ev, 0x00000000001fddd0) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResSETLt2013EED1Ev, 0x00000000001fdd20) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResSETLt2013EED2Ev, 0x00000000001fdd20) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResTLKLt2018EE9SetResRefERK7CResRefi, 0x0000000000146670) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResTLKLt2018EED0Ev, 0x0000000000146540) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResTLKLt2018EED1Ev, 0x0000000000146490) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResTLKLt2018EED2Ev, 0x0000000000146490) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResWOKLt2016EE9SetResRefERK7CResRefi, 0x000000000020a340) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResWOKLt2016EED0Ev, 0x000000000020a210) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResWOKLt2016EED1Ev, 0x000000000020a160) -NWNXLIB_FUNCTION(_ZN10CResHelperI7CResWOKLt2016EED2Ev, 0x000000000020a160) -NWNXLIB_FUNCTION(_ZN10QuaternionmLEf, 0x00000000007a4160) -NWNXLIB_FUNCTION(_ZN11CAppManager12CreateServerEv, 0x00000000000eb390) -NWNXLIB_FUNCTION(_ZN11CAppManager13DestroyServerEv, 0x00000000000eb280) -NWNXLIB_FUNCTION(_ZN11CAppManager13GetLanguageIdEv, 0x00000000000eb700) -NWNXLIB_FUNCTION(_ZN11CAppManager13GetPlatformIdEv, 0x00000000000eb6e0) -NWNXLIB_FUNCTION(_ZN11CAppManager13GetWorldTimerEv, 0x00000000000eb640) -NWNXLIB_FUNCTION(_ZN11CAppManager13ShowServerMemEv, 0x00000000000eb270) -NWNXLIB_FUNCTION(_ZN11CAppManager14GetPublicCdKeyEv, 0x00000000000eb6b0) -NWNXLIB_FUNCTION(_ZN11CAppManager15ConnectToServerE10CExoStringi, 0x00000000000eb5b0) -NWNXLIB_FUNCTION(_ZN11CAppManager19ReadProgressFromINIEh, 0x00000000000eb410) -NWNXLIB_FUNCTION(_ZN11CAppManager20DoSaveGameScreenShotER10CExoString, 0x00000000000eb260) -NWNXLIB_FUNCTION(_ZN11CAppManager20SetDDCipherForModuleE10CExoString, 0x00000000000eb5c0) -NWNXLIB_FUNCTION(_ZN11CAppManager21GetObjectTableManagerEj, 0x00000000000eb230) -NWNXLIB_FUNCTION(_ZN11CAppManager26DestroyScriptDebuggerPopupEv, 0x00000000000eb5a0) -NWNXLIB_FUNCTION(_ZN11CAppManager26DisplayScriptDebuggerPopupEv, 0x00000000000eb590) -NWNXLIB_FUNCTION(_ZN11CAppManager26GetCryptoKxPublicKeyBase64Ev, 0x00000000000eb650) -NWNXLIB_FUNCTION(_ZN11CAppManager26GetDungeonMasterEXERunningEv, 0x00000000000eb400) -NWNXLIB_FUNCTION(_ZN11CAppManager26SetDungeonMasterEXERunningEi, 0x00000000000eb3f0) -NWNXLIB_FUNCTION(_ZN11CAppManagerC1Ev, 0x00000000000eb0c0) -NWNXLIB_FUNCTION(_ZN11CAppManagerC2Ev, 0x00000000000eb0c0) -NWNXLIB_FUNCTION(_ZN11CAppManagerD1Ev, 0x00000000000eb2e0) -NWNXLIB_FUNCTION(_ZN11CAppManagerD2Ev, 0x00000000000eb2e0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB10DecompressERKSt10shared_ptrI8DataViewEbRK10CExoString, 0x00000000003950b0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB11GetLocationERK10CExoStringS2_S2_, 0x000000000039a9c0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB11HandleErrorERSt9exception, 0x0000000000394e50) -NWNXLIB_FUNCTION(_ZN11CCampaignDB11SetLocationERK10CExoStringS2_S2_RK15CScriptLocation, 0x0000000000399110) -NWNXLIB_FUNCTION(_ZN11CCampaignDB12OpenDatabaseERK10CExoStringb, 0x0000000000395230) -NWNXLIB_FUNCTION(_ZN11CCampaignDB13GetBinaryDataERK10CExoStringS2_S2_, 0x000000000039adb0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB13SetBinaryDataERK10CExoStringS2_S2_RKSt10shared_ptrI8DataViewEt, 0x0000000000399400) -NWNXLIB_FUNCTION(_ZN11CCampaignDB14GetDatabaseForERK10CExoStringb, 0x00000000003989a0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB15DestroyDatabaseERK10CExoString, 0x0000000000398380) -NWNXLIB_FUNCTION(_ZN11CCampaignDB20MigrateLegacyRecordsEv, 0x000000000039bce0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB6GetIntERK10CExoStringS2_S2_i, 0x000000000039a850) -NWNXLIB_FUNCTION(_ZN11CCampaignDB6SetIntERK10CExoStringS2_S2_i, 0x0000000000398ff0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB6WithDBIbEET_RK10CExoStringS1_St8functionIFS1_RN6sqlite8databaseEEE, 0x00000000003a0080) -NWNXLIB_FUNCTION(_ZN11CCampaignDB7GetJsonERK10CExoStringS2_S2_, 0x000000000039af30) -NWNXLIB_FUNCTION(_ZN11CCampaignDB7SetJsonERK10CExoStringS2_S2_RK19JsonEngineStructure, 0x000000000039a030) -NWNXLIB_FUNCTION(_ZN11CCampaignDB8CompressERKSt10shared_ptrI8DataViewEtRK10CExoString, 0x00000000003956a0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB8GetFloatERK10CExoStringS2_S2_f, 0x000000000039a6d0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB8HasEntryERK10CExoStringcS2_S2_, 0x0000000000398d20) -NWNXLIB_FUNCTION(_ZN11CCampaignDB8SetFloatERK10CExoStringS2_S2_f, 0x0000000000398ec0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB9DeleteVarERK10CExoStringS2_S2_, 0x0000000000398e20) -NWNXLIB_FUNCTION(_ZN11CCampaignDB9GetStringERK10CExoStringS2_S2_S2_, 0x000000000039ac00) -NWNXLIB_FUNCTION(_ZN11CCampaignDB9GetVectorERK10CExoStringS2_S2_, 0x000000000039aae0) -NWNXLIB_FUNCTION(_ZN11CCampaignDB9SetStringERK10CExoStringS2_S2_S2_, 0x0000000000399750) -NWNXLIB_FUNCTION(_ZN11CCampaignDB9SetVectorERK10CExoStringS2_S2_RK6Vector, 0x00000000003992c0) -NWNXLIB_FUNCTION(_ZN11CCampaignDBC1Ev, 0x000000000039d1a0) -NWNXLIB_FUNCTION(_ZN11CCampaignDBC2Ev, 0x000000000039d1a0) -NWNXLIB_FUNCTION(_ZN11CCampaignDBD0Ev, 0x0000000000395040) -NWNXLIB_FUNCTION(_ZN11CCampaignDBD1Ev, 0x0000000000394fe0) -NWNXLIB_FUNCTION(_ZN11CCampaignDBD2Ev, 0x0000000000394fe0) -NWNXLIB_FUNCTION(_ZN11CExoEncrypt13EncryptStringERK10CExoString, 0x00000000007967b0) -NWNXLIB_FUNCTION(_ZN11CExoEncrypt17GenerateChallengeEt, 0x00000000007968f0) -NWNXLIB_FUNCTION(_ZN11CExoResFile10InitializeEv, 0x0000000000149700) -NWNXLIB_FUNCTION(_ZN11CExoResFile10LoadHeaderEPKch, 0x0000000000149ec0) -NWNXLIB_FUNCTION(_ZN11CExoResFile11AddRefCountEv, 0x0000000000149660) -NWNXLIB_FUNCTION(_ZN11CExoResFile12ReadResourceE5RESIDPvjj, 0x000000000014ee80) -NWNXLIB_FUNCTION(_ZN11CExoResFile12UnloadHeaderEv, 0x000000000014aa90) -NWNXLIB_FUNCTION(_ZN11CExoResFile13OpenAsyncFileEv, 0x000000000014aca0) -NWNXLIB_FUNCTION(_ZN11CExoResFile14CloseAsyncFileEv, 0x000000000014a840) -NWNXLIB_FUNCTION(_ZN11CExoResFile14DeleteRefCountEv, 0x000000000014a890) -NWNXLIB_FUNCTION(_ZN11CExoResFile15GetResourceSizeE5RESID, 0x00000000001496e0) -NWNXLIB_FUNCTION(_ZN11CExoResFile16AddAsyncRefCountEv, 0x00000000001496a0) -NWNXLIB_FUNCTION(_ZN11CExoResFile17ReadResourceAsyncE5RESIDPvjj, 0x000000000014ae20) -NWNXLIB_FUNCTION(_ZN11CExoResFile19DeleteAsyncRefCountEv, 0x000000000014a8c0) -NWNXLIB_FUNCTION(_ZN11CExoResFile8OpenFileEPh, 0x0000000000149750) -NWNXLIB_FUNCTION(_ZN11CExoResFile8OpenFileEv, 0x000000000014ab90) -NWNXLIB_FUNCTION(_ZN11CExoResFile9CloseFileEv, 0x000000000014aff0) -NWNXLIB_FUNCTION(_ZN11CExoResFileC1Ev, 0x000000000014c950) -NWNXLIB_FUNCTION(_ZN11CExoResFileC2Ev, 0x000000000014c950) -NWNXLIB_FUNCTION(_ZN11CExoResFileD0Ev, 0x000000000014b150) -NWNXLIB_FUNCTION(_ZN11CExoResFileD1Ev, 0x000000000014b110) -NWNXLIB_FUNCTION(_ZN11CExoResFileD2Ev, 0x000000000014b110) -NWNXLIB_FUNCTION(_ZN11CFriendInfo8SanitizeEv, 0x00000000001503c0) -NWNXLIB_FUNCTION(_ZN11CGameEffect10CopyEffectEPS_i, 0x00000000002a1480) -NWNXLIB_FUNCTION(_ZN11CGameEffect10GetIntegerEi, 0x00000000002a1300) -NWNXLIB_FUNCTION(_ZN11CGameEffect10SetCreatorEj, 0x00000000002a1ed0) -NWNXLIB_FUNCTION(_ZN11CGameEffect10SetIntegerEii, 0x00000000002a1310) -NWNXLIB_FUNCTION(_ZN11CGameEffect11GetObjectIDEi, 0x00000000002a1340) -NWNXLIB_FUNCTION(_ZN11CGameEffect11SetObjectIDEij, 0x00000000002a1350) -NWNXLIB_FUNCTION(_ZN11CGameEffect12SetCustomTagERK10CExoString, 0x00000000002a1460) -NWNXLIB_FUNCTION(_ZN11CGameEffect12UpdateLinkedEi, 0x00000000002a2030) -NWNXLIB_FUNCTION(_ZN11CGameEffect13GetExpiryTimeEPjS0_, 0x00000000002a1420) -NWNXLIB_FUNCTION(_ZN11CGameEffect13SetExpiryTimeEjj, 0x00000000002a1410) -NWNXLIB_FUNCTION(_ZN11CGameEffect14LoadGameEffectEP7CResGFFP10CResStruct, 0x00000000002a2270) -NWNXLIB_FUNCTION(_ZN11CGameEffect14SaveGameEffectEP7CResGFFP10CResStruct, 0x00000000002a1ae0) -NWNXLIB_FUNCTION(_ZN11CGameEffect14SetNumIntegersEi, 0x00000000002a0e30) -NWNXLIB_FUNCTION(_ZN11CGameEffect15SUBTYPE_MAGICALE, 0x00000000008d6b64) -NWNXLIB_FUNCTION(_ZN11CGameEffect19GetScriptEffectTypeEv, 0x00000000002a28c0) -NWNXLIB_FUNCTION(_ZN11CGameEffect20DURATION_TYPE_INNATEE, 0x00000000008d6b66) -NWNXLIB_FUNCTION(_ZN11CGameEffect20SUBTYPE_SUPERNATURALE, 0x00000000008d6b62) -NWNXLIB_FUNCTION(_ZN11CGameEffect21SUBTYPE_EXTRAORDINARYE, 0x00000000008d6b60) -NWNXLIB_FUNCTION(_ZN11CGameEffect22DURATION_TYPE_EQUIPPEDE, 0x00000000008d6b6c) -NWNXLIB_FUNCTION(_ZN11CGameEffect23DURATION_TYPE_PERMANENTE, 0x00000000008d6b68) -NWNXLIB_FUNCTION(_ZN11CGameEffect23DURATION_TYPE_TEMPORARYE, 0x00000000008d6b6a) -NWNXLIB_FUNCTION(_ZN11CGameEffect27DURATION_TYPE_INSTANTANEOUSE, 0x00000000008d6b6e) -NWNXLIB_FUNCTION(_ZN11CGameEffect37SetNumIntegersInitializeToNegativeOneEi, 0x00000000002a1290) -NWNXLIB_FUNCTION(_ZN11CGameEffect8GetFloatEi, 0x00000000002a1320) -NWNXLIB_FUNCTION(_ZN11CGameEffect8SetFloatEif, 0x00000000002a1330) -NWNXLIB_FUNCTION(_ZN11CGameEffect9GetStringEi, 0x00000000002a1360) -NWNXLIB_FUNCTION(_ZN11CGameEffect9GetVectorEi, 0x00000000002a13b0) -NWNXLIB_FUNCTION(_ZN11CGameEffect9m_nNextIDE, 0x0000000000ccd1f0) -NWNXLIB_FUNCTION(_ZN11CGameEffect9SetLinkedEPS_S0_, 0x00000000002a2250) -NWNXLIB_FUNCTION(_ZN11CGameEffect9SetStringEi10CExoString, 0x00000000002a1390) -NWNXLIB_FUNCTION(_ZN11CGameEffect9SetVectorEi6Vector, 0x00000000002a13e0) -NWNXLIB_FUNCTION(_ZN11CGameEffectaSERKS_, 0x00000000002a1730) -NWNXLIB_FUNCTION(_ZN11CGameEffectC1Ei, 0x00000000002a0ea0) -NWNXLIB_FUNCTION(_ZN11CGameEffectC1EPS_i, 0x00000000002a1080) -NWNXLIB_FUNCTION(_ZN11CGameEffectC2Ei, 0x00000000002a0ea0) -NWNXLIB_FUNCTION(_ZN11CGameEffectC2EPS_i, 0x00000000002a1080) -NWNXLIB_FUNCTION(_ZN11CGameEffectD1Ev, 0x00000000002a0d70) -NWNXLIB_FUNCTION(_ZN11CGameEffectD2Ev, 0x00000000002a0d70) -NWNXLIB_FUNCTION(_ZNK11CGameEffect12GetCustomTagEv, 0x00000000002a1430) -NWNXLIB_FUNCTION(_ZNK11CGameEffecteqERKS_, 0x00000000002a1960) -NWNXLIB_FUNCTION(_ZNK11CGameEffectneERKS_, 0x00000000002a1ac0) -NWNXLIB_FUNCTION(_ZN11CGameObject10AsNWCStoreEv, 0x000000000023ee30) -NWNXLIB_FUNCTION(_ZN11CGameObject10AsNWSStoreEv, 0x000000000023ee40) -NWNXLIB_FUNCTION(_ZN11CGameObject11AsNWCModuleEv, 0x000000000023ed20) -NWNXLIB_FUNCTION(_ZN11CGameObject11AsNWCObjectEv, 0x000000000023ecf0) -NWNXLIB_FUNCTION(_ZN11CGameObject11AsNWSModuleEv, 0x000000000023ed30) -NWNXLIB_FUNCTION(_ZN11CGameObject11AsNWSObjectEv, 0x00000000002deb80) -NWNXLIB_FUNCTION(_ZN11CGameObject12AsNWCTriggerEv, 0x000000000023ed90) -NWNXLIB_FUNCTION(_ZN11CGameObject12AsNWSTriggerEv, 0x000000000023eda0) -NWNXLIB_FUNCTION(_ZN11CGameObject13AsNWCCreatureEv, 0x000000000023ed60) -NWNXLIB_FUNCTION(_ZN11CGameObject13AsNWSCreatureEv, 0x00000000002a0bd0) -NWNXLIB_FUNCTION(_ZN11CGameObject13AsNWSWaypointEv, 0x000000000023ee10) -NWNXLIB_FUNCTION(_ZN11CGameObject14AsNWCPlaceableEv, 0x000000000023ede0) -NWNXLIB_FUNCTION(_ZN11CGameObject14AsNWSEncounterEv, 0x000000000023ee20) -NWNXLIB_FUNCTION(_ZN11CGameObject14AsNWSPlaceableEv, 0x000000000023edd0) -NWNXLIB_FUNCTION(_ZN11CGameObject15AsNWCProjectileEv, 0x000000000023edb0) -NWNXLIB_FUNCTION(_ZN11CGameObject15AsNWSPlayerTURDEv, 0x000000000023edc0) -NWNXLIB_FUNCTION(_ZN11CGameObject15OBJECT_TYPE_GUIE, 0x000000000095ef07) -NWNXLIB_FUNCTION(_ZN11CGameObject16AsNWCSoundObjectEv, 0x000000000023ee60) -NWNXLIB_FUNCTION(_ZN11CGameObject16AsNWSSoundObjectEv, 0x000000000023ee50) -NWNXLIB_FUNCTION(_ZN11CGameObject16OBJECT_TYPE_AREAE, 0x000000000095ef04) -NWNXLIB_FUNCTION(_ZN11CGameObject16OBJECT_TYPE_DOORE, 0x000000000095eefe) -NWNXLIB_FUNCTION(_ZN11CGameObject16OBJECT_TYPE_ITEME, 0x000000000095ef02) -NWNXLIB_FUNCTION(_ZN11CGameObject16OBJECT_TYPE_TILEE, 0x000000000095ef06) -NWNXLIB_FUNCTION(_ZN11CGameObject16ResetUpdateTimesEjj, 0x00000000002a0bc0) -NWNXLIB_FUNCTION(_ZN11CGameObject17OBJECT_TYPE_SOUNDE, 0x000000000095eef8) -NWNXLIB_FUNCTION(_ZN11CGameObject17OBJECT_TYPE_STOREE, 0x000000000095eefa) -NWNXLIB_FUNCTION(_ZN11CGameObject18OBJECT_TYPE_MODULEE, 0x000000000095ef05) -NWNXLIB_FUNCTION(_ZN11CGameObject18OBJECT_TYPE_PORTALE, 0x000000000095eef9) -NWNXLIB_FUNCTION(_ZN11CGameObject19OBJECT_TYPE_TRIGGERE, 0x000000000095ef01) -NWNXLIB_FUNCTION(_ZN11CGameObject20OBJECT_TYPE_CREATUREE, 0x000000000095ef03) -NWNXLIB_FUNCTION(_ZN11CGameObject20OBJECT_TYPE_WAYPOINTE, 0x000000000095eefc) -NWNXLIB_FUNCTION(_ZN11CGameObject21OBJECT_TYPE_ENCOUNTERE, 0x000000000095eefb) -NWNXLIB_FUNCTION(_ZN11CGameObject21OBJECT_TYPE_PLACEABLEE, 0x000000000095eeff) -NWNXLIB_FUNCTION(_ZN11CGameObject22OBJECT_TYPE_PROJECTILEE, 0x000000000095ef00) -NWNXLIB_FUNCTION(_ZN11CGameObject23AsNWCAreaOfEffectObjectEv, 0x000000000023ee00) -NWNXLIB_FUNCTION(_ZN11CGameObject23AsNWSAreaOfEffectObjectEv, 0x000000000023edf0) -NWNXLIB_FUNCTION(_ZN11CGameObject30OBJECT_TYPE_AREAOFEFFECTOBJECTE, 0x000000000095eefd) -NWNXLIB_FUNCTION(_ZN11CGameObject5SetIdEj, 0x00000000002a0bb0) -NWNXLIB_FUNCTION(_ZN11CGameObject9AsNWCAreaEv, 0x000000000023ed40) -NWNXLIB_FUNCTION(_ZN11CGameObject9AsNWCDoorEv, 0x000000000023ed00) -NWNXLIB_FUNCTION(_ZN11CGameObject9AsNWCItemEv, 0x000000000023ed70) -NWNXLIB_FUNCTION(_ZN11CGameObject9AsNWSAreaEv, 0x000000000023ed50) -NWNXLIB_FUNCTION(_ZN11CGameObject9AsNWSDoorEv, 0x000000000023ed10) -NWNXLIB_FUNCTION(_ZN11CGameObject9AsNWSItemEv, 0x000000000023ed80) -NWNXLIB_FUNCTION(_ZN11CGameObjectC1Ehj, 0x00000000008980f0) -NWNXLIB_FUNCTION(_ZN11CGameObjectC2Ehj, 0x00000000008980f0) -NWNXLIB_FUNCTION(_ZN11CGameObjectD0Ev, 0x00000000008989c0) -NWNXLIB_FUNCTION(_ZN11CGameObjectD1Ev, 0x00000000008989b0) -NWNXLIB_FUNCTION(_ZN11CGameObjectD2Ev, 0x00000000008989b0) -NWNXLIB_FUNCTION(_ZN11CNWBaseItem11GetNameTextEv, 0x000000000089ba90) -NWNXLIB_FUNCTION(_ZN11CNWBaseItem13GetIconResRefEhsc, 0x000000000089b8f0) -NWNXLIB_FUNCTION(_ZN11CNWBaseItem14GetModelResRefEhsc, 0x000000000089bb40) -NWNXLIB_FUNCTION(_ZN11CNWBaseItem15GetRequiredFeatEh, 0x000000000089ba60) -NWNXLIB_FUNCTION(_ZN11CNWBaseItem15SetRequiredFeatEht, 0x000000000089ba40) -NWNXLIB_FUNCTION(_ZN11CNWBaseItem17m_PartResRefChunkE, 0x000000000095fbc0) -NWNXLIB_FUNCTION(_ZN11CNWBaseItem20SetRequiredFeatCountEh, 0x000000000089b9e0) -NWNXLIB_FUNCTION(_ZN11CNWBaseItemC1Ev, 0x000000000089b820) -NWNXLIB_FUNCTION(_ZN11CNWBaseItemC2Ev, 0x000000000089b820) -NWNXLIB_FUNCTION(_ZN11CNWBaseItemD1Ev, 0x000000000089b8c0) -NWNXLIB_FUNCTION(_ZN11CNWBaseItemD2Ev, 0x000000000089b8c0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction10GetWorstACEji, 0x00000000002fd280) -NWNXLIB_FUNCTION(_ZN11CNWSFaction10InitialiseEv, 0x00000000002fd9f0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction11AttemptJoinEj, 0x00000000002fe1f0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction12GetAverageXPEv, 0x00000000002fd060) -NWNXLIB_FUNCTION(_ZN11CNWSFaction12GetIsInvitedEj, 0x00000000002fd800) -NWNXLIB_FUNCTION(_ZN11CNWSFaction12InviteMemberEjj, 0x00000000002fc0c0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction12RemoveMemberEj, 0x00000000002fdd40) -NWNXLIB_FUNCTION(_ZN11CNWSFaction13AttemptRemoveEjj, 0x00000000002fe230) -NWNXLIB_FUNCTION(_ZN11CNWSFaction13GetMemberListEPPj, 0x00000000002fc0b0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction14ChangeMemberIdEjj, 0x00000000002fc150) -NWNXLIB_FUNCTION(_ZN11CNWSFaction15GetAverageLevelEv, 0x00000000002fcfb0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction15SendChatMessageEj10CExoString, 0x00000000002fc1a0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction16GetFactionMemberEii, 0x00000000002fd900) -NWNXLIB_FUNCTION(_ZN11CNWSFaction16GetWeakestMemberEji, 0x00000000002fc450) -NWNXLIB_FUNCTION(_ZN11CNWSFaction17GetFactionManagerEv, 0x00000000002fd9c0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction17GetSingletonPartyEv, 0x00000000002fd850) -NWNXLIB_FUNCTION(_ZN11CNWSFaction18GetCreatureInPartyEj, 0x00000000002fd690) -NWNXLIB_FUNCTION(_ZN11CNWSFaction18GetStrongestMemberEji, 0x00000000002fc660) -NWNXLIB_FUNCTION(_ZN11CNWSFaction18TransferLeadershipEjj, 0x00000000002fdb20) -NWNXLIB_FUNCTION(_ZN11CNWSFaction20GetAverageReputationEj, 0x00000000002fcd20) -NWNXLIB_FUNCTION(_ZN11CNWSFaction20GetMostDamagedMemberEji, 0x00000000002fc870) -NWNXLIB_FUNCTION(_ZN11CNWSFaction20GetMostFrequentClassEv, 0x00000000002fd100) -NWNXLIB_FUNCTION(_ZN11CNWSFaction20SendFactionUpdateAddEj, 0x00000000002fc310) -NWNXLIB_FUNCTION(_ZN11CNWSFaction21GetLeastDamagedMemberEji, 0x00000000002fcaa0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction21SendFactionUpdateListEv, 0x00000000002fc280) -NWNXLIB_FUNCTION(_ZN11CNWSFaction23SendFactionUpdateRemoveEj, 0x00000000002fc3b0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction26ClearAllReputationsTowardsEj, 0x00000000002fda80) -NWNXLIB_FUNCTION(_ZN11CNWSFaction27GetAverageGoodEvilAlignmentEv, 0x00000000002fcdf0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction27GetAverageLawChaosAlignmentEv, 0x00000000002fced0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction7GetGoldEv, 0x00000000002fccc0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction9AddMemberEji, 0x00000000002fdfe0) -NWNXLIB_FUNCTION(_ZN11CNWSFaction9GetBestACEji, 0x00000000002fd490) -NWNXLIB_FUNCTION(_ZN11CNWSFaction9GetLeaderEv, 0x00000000002fd6d0) -NWNXLIB_FUNCTION(_ZN11CNWSFactionC1Ej, 0x00000000002fdc10) -NWNXLIB_FUNCTION(_ZN11CNWSFactionC1Ev, 0x00000000002fe2a0) -NWNXLIB_FUNCTION(_ZN11CNWSFactionC2Ej, 0x00000000002fdc10) -NWNXLIB_FUNCTION(_ZN11CNWSFactionC2Ev, 0x00000000002fe2a0) -NWNXLIB_FUNCTION(_ZN11CNWSFactionD1Ev, 0x00000000002fc070) -NWNXLIB_FUNCTION(_ZN11CNWSFactionD2Ev, 0x00000000002fc070) -NWNXLIB_FUNCTION(_ZN11CNWSJournal10SetPictureE10CExoStringii, 0x00000000002c6980) -NWNXLIB_FUNCTION(_ZN11CNWSJournal7DestroyE10CExoString, 0x00000000002c6990) -NWNXLIB_FUNCTION(_ZN11CNWSJournal7SetDateE10CExoStringji, 0x00000000002c6d10) -NWNXLIB_FUNCTION(_ZN11CNWSJournal7SetTimeE10CExoStringji, 0x00000000002c7100) -NWNXLIB_FUNCTION(_ZN11CNWSJournal8SetStateE10CExoStringji, 0x00000000002c74f0) -NWNXLIB_FUNCTION(_ZN11CNWSJournalC1Ev, 0x00000000002c68d0) -NWNXLIB_FUNCTION(_ZN11CNWSJournalC2Ev, 0x00000000002c68d0) -NWNXLIB_FUNCTION(_ZN11CNWSJournalD1Ev, 0x00000000002c68f0) -NWNXLIB_FUNCTION(_ZN11CNWSJournalD2Ev, 0x00000000002c68f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage10ParseTokenEPKcPPhRji, 0x00000000003e40b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage12ParseGetBoolEPhjRi, 0x00000000003e4030) -NWNXLIB_FUNCTION(_ZN11CNWSMessage14HasValidStringER13CExoLocStringh, 0x000000000032b710) -NWNXLIB_FUNCTION(_ZN11CNWSMessage14ParseGetStringEPhjR10CExoStringj, 0x00000000003e4080) -NWNXLIB_FUNCTION(_ZN11CNWSMessage17TestObjectVisibleEP10CNWSObjectS1_, 0x000000000031a030) -NWNXLIB_FUNCTION(_ZN11CNWSMessage18GetLocStringServerEj13CExoLocStringS0_R10CExoStringRfh, 0x00000000002c87f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage18ReadOBJECTIDServerEv, 0x00000000002c8750) -NWNXLIB_FUNCTION(_ZN11CNWSMessage19AssignCreatureListsEP13CExoArrayListIjES2_, 0x000000000032e190) -NWNXLIB_FUNCTION(_ZN11CNWSMessage19WriteOBJECTIDServerEj, 0x00000000002c8790) -NWNXLIB_FUNCTION(_ZN11CNWSMessage20CompareCreatureListsEP13CExoArrayListIjES2_, 0x0000000000316630) -NWNXLIB_FUNCTION(_ZN11CNWSMessage21ComputeUpdateRequiredEP10CNWSPlayerP10CNWSObjectP17CLastUpdateObjecti, 0x00000000003175f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage21WriteRepositoryUpdateEP10CNWSPlayerP10CNWSObjectP15CItemRepositoryP22CNWSPlayerLUOInventoryhch, 0x000000000031abf0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage22ComputeVisibilityListsEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x0000000000316690) -NWNXLIB_FUNCTION(_ZN11CNWSMessage22UpdateLastUpdateObjectEP10CNWSPlayerP10CNWSObjectP17CLastUpdateObjectj, 0x0000000000338ce0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage23AssignVisualEffectListsEP13CExoArrayListIP20CLoopingVisualEffectES4_, 0x00000000003158d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage23UpdateLastUpdateAutoMapEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x0000000000316ea0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage24CompareVisualEffectListsEP13CExoArrayListIP20CLoopingVisualEffectES4_, 0x0000000000316340) -NWNXLIB_FUNCTION(_ZN11CNWSMessage24WriteCExoLocStringServerERK13CExoLocStringh, 0x00000000002c8c30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage25ComputeLastUpdate_AutoMapEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x00000000003171c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage25CreateNewLastUpdateObjectEP10CNWSPlayerP10CNWSObjectPjS4_, 0x000000000033a3a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage25HandlePlayerToServerPartyEP10CNWSPlayerh, 0x00000000003d3270) -NWNXLIB_FUNCTION(_ZN11CNWSMessage25SendServerToPlayerMessageEjhhPhj, 0x000000000031bfb0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage25STRREF_AREAPVPSETTINGFULLE, 0x00000000008e22a8) -NWNXLIB_FUNCTION(_ZN11CNWSMessage25STRREF_AREAPVPSETTINGNONEE, 0x00000000008e22a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage25UpdateLastUpdateInventoryEP10CNWSPlayerjP22CNWSPlayerInventoryGUI, 0x0000000000324920) -NWNXLIB_FUNCTION(_ZN11CNWSMessage25WriteGuiEffectIconsUpdateEP12CNWSCreatureP13CExoArrayListIP17CEffectIconObjectEi, 0x0000000000330620) -NWNXLIB_FUNCTION(_ZN11CNWSMessage25WriteStoreInventoryUpdateEP10CNWSPlayerP9CNWSStore, 0x000000000031b120) -NWNXLIB_FUNCTION(_ZN11CNWSMessage26AddDoorAppearanceToMessageEP10CNWSPlayerP8CNWSDoor, 0x00000000003150e0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage26AddItemAppearanceToMessageEP10CNWSPlayerP8CNWSItem, 0x0000000000315600) -NWNXLIB_FUNCTION(_ZN11CNWSMessage26ComputeLastUpdate_GuiFeatsEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x0000000000316820) -NWNXLIB_FUNCTION(_ZN11CNWSMessage26HandlePlayerToServerBarterEP10CNWSPlayerh, 0x00000000003d5c90) -NWNXLIB_FUNCTION(_ZN11CNWSMessage26HandlePlayerToServerDeviceEP10CNWSPlayerh, 0x00000000003dd730) -NWNXLIB_FUNCTION(_ZN11CNWSMessage26HandlePlayerToServerPortalEP10CNWSPlayerh, 0x00000000003d6520) -NWNXLIB_FUNCTION(_ZN11CNWSMessage26SendServerToPlayerCharListEP10CNWSPlayer, 0x0000000000337bd0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage26STRREF_AREAPVPSETTINGPARTYE, 0x00000000008e22a4) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27AddTriggerGeometryToMessageEP11CNWSTrigger, 0x0000000000319f60) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27ComputeLastUpdate_GuiSkillsEP12CNWSCreature, 0x0000000000316790) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27HandlePlayerToServerMessageEjPhj, 0x00000000003e0450) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27SelectCategoryForGameObjectEP11CGameObjectP10CNWSObject, 0x0000000000319a30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27SendServerToPlayerCCMessageEjhP16CNWCCMessageDataP20CNWSCombatAttackData, 0x0000000000324980) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27SendServerToPlayerChat_TalkEjj10CExoString, 0x000000000031e960) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27SendServerToPlayerChat_TellEjj10CExoString, 0x000000000031ef90) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27SendServerToPlayerNui_BindsEP10CNWSPlayerRKSt6vectorIN3Nui4JSON10BindUpdateESaIS5_EE, 0x000000000032df70) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27SendServerToPlayerPolymorphEP10CNWSPlayerjii, 0x000000000032d510) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27SendServerToPlayerQuickChatEjjt, 0x000000000031ecd0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27TestObjectUpdateDifferencesEP10CNWSPlayerP10CNWSObjectPP17CLastUpdateObjectPjS7_, 0x000000000033b9b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27TestPlayerUpdateDifferencesEP10CNWSPlayerP26CNWSPlayerLastUpdateObjectP17CLastUpdateObjectRt, 0x00000000003325f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage27UpdateLastUpdateActionQueueEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x00000000003170c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage28HandlePlayerToServerCutsceneEP10CNWSPlayerh, 0x00000000003d6990) -NWNXLIB_FUNCTION(_ZN11CNWSMessage28HandlePlayerToServerGuiEventEP10CNWSPlayerh, 0x00000000003d6d10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage28HandlePlayerToServerNuiEventEP10CNWSPlayerh, 0x00000000003dd890) -NWNXLIB_FUNCTION(_ZN11CNWSMessage28SendServerToPlayerChat_PartyEjj10CExoString, 0x000000000031e6d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage28SendServerToPlayerChat_ShoutEjj10CExoString, 0x000000000031f2f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage28SendServerToPlayerCheatNastyEjj, 0x0000000000326b90) -NWNXLIB_FUNCTION(_ZN11CNWSMessage28SendServerToPlayerLogin_FailEjj, 0x00000000003235b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage28SendServerToPlayerNui_CreateEP10CNWSPlayeriNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKN8nlohmann10basic_jsonISt3mapSt6vectorS7_blmdSaNS8_14adl_serializerESB_IhSaIhEEEE, 0x000000000032dcb0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage28SendServerToPlayerParty_ListEjiPjhj, 0x0000000000324360) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29ComputeLastUpdate_ActionQueueEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x0000000000317130) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29ComputeLastUpdate_PlayerStateEP12CNWSCreature, 0x00000000003173f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29SendServerToPlayerChatMessageEhj10CExoStringjRKS0_, 0x0000000000320000) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29SendServerToPlayerChat_StrRefEjjhj, 0x000000000031e370) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29SendServerToPlayerDialogCloseEj, 0x0000000000321e30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29SendServerToPlayerDialogEntryEjjj13CExoLocStringjh, 0x0000000000321a70) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29SendServerToPlayerMapPinAddedEP10CNWSPlayer6Vector10CExoStringj, 0x000000000032a030) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29SendServerToPlayerModule_InfoEj, 0x0000000000324260) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29SendServerToPlayerNui_DestroyEP10CNWSPlayeri, 0x000000000032ded0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage29StoreValuesInLastUpdateObjectEP10CNWSPlayerP17CLastUpdateObjectP10CNWSObjectjj, 0x000000000033a340) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30AddAreaOfEffectObjectToMessageEP22CNWSAreaOfEffectObject, 0x0000000000315820) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30ComputeInventoryUpdateRequiredEP10CNWSPlayerjP22CNWSPlayerInventoryGUI, 0x0000000000315890) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30HandlePlayerToServerPlayerListEP10CNWSPlayerh, 0x00000000003d6a90) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SendServerToPlayerArea_SetNameEP10CNWSPlayerj, 0x000000000031d590) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SendServerToPlayerArea_WeatherEP10CNWSPlayerhi, 0x000000000031d420) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SendServerToPlayerBarterRejectEjhhj, 0x000000000032b390) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SendServerToPlayerCamera_StoreEP10CNWSPlayer, 0x000000000031c2e0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SendServerToPlayerChat_DM_TalkEjj10CExoString, 0x000000000031ea40) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SendServerToPlayerChat_WhisperEjj10CExoString, 0x000000000031fa10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SendServerToPlayerParty_InviteEjj, 0x0000000000324350) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SendServerToPlayerUpdateSkyBoxEij, 0x0000000000327960) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SendServerToServerAdminMessageEj10CExoString, 0x00000000003ed630) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30SortObjectsForGameObjectUpdateEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayPi, 0x0000000000319b00) -NWNXLIB_FUNCTION(_ZN11CNWSMessage30UpdateLastUpdateVisibilityListEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x00000000003318c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31AddPlaceableAppearanceToMessageEP10CNWSPlayerP13CNWSPlaceable, 0x0000000000315140) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31ComputeAppearanceUpdateRequiredEP10CNWSObjectP17CLastUpdateObject, 0x0000000000315860) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31ComputeRepositoryUpdateRequiredEP10CNWSPlayerP18CExoLinkedListNodeS3_, 0x00000000003158c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31HandlePlayerToServerAreaMessageEP10CNWSPlayerh, 0x00000000003d3110) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31HandlePlayerToServerChatMessageEP10CNWSPlayerh, 0x00000000003c70b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31HandlePlayerToServerGoldMessageEP10CNWSPlayerh, 0x00000000003ccc80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31HandlePlayerToServerGuiQuickbarEP10CNWSPlayerh, 0x00000000003d4dd0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31HandlePlayerToServerPlayerDeathEP10CNWSPlayerh, 0x00000000003d5d40) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerCheatPonyRideEjj, 0x0000000000326c30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerDialogRepliesEjP13CExoLocStringPjjjjhiji, 0x0000000000321b50) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerGameObjUpdateEP10CNWSPlayer, 0x000000000033c230) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerGameObjUpdateEP10CNWSPlayerj, 0x000000000033bd80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerLevelUp_BeginEjP12CNWSCreature, 0x00000000003295b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerLogin_ConfirmEj, 0x0000000000323570) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerMapPinCreatedEP10CNWSPlayerj6Vector13CExoLocStringi, 0x000000000032a170) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerMapPinEnabledEP10CNWSPlayerji, 0x0000000000329f80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerNui_SetLayoutEP10CNWSPlayeriRK10CExoStringRKN8nlohmann10basic_jsonISt3mapSt6vectorNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEblmdSaNS5_14adl_serializerES8_IhSaIhEEEE, 0x000000000032e0a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerPopUpGUIPanelEjiiii10CExoString, 0x000000000032b460) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31SendServerToPlayerStringMessageEjh10CExoString, 0x0000000000320c70) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31UpdateLastUpdate_GuiEffectIconsEP12CNWSCreatureP13CExoArrayListIP17CEffectIconObjectEi, 0x000000000032c960) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31WriteGameObjUpdate_PartyAIStateEP10CNWSPlayer, 0x00000000003377b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31WriteGameObjUpdate_PlayerUpdateEP10CNWSPlayerP26CNWSPlayerLastUpdateObjectP17CLastUpdateObjectt, 0x00000000003329d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage31WriteGameObjUpdate_UpdateObjectEP10CNWSPlayerP10CNWSObjectP17CLastUpdateObjectjj, 0x00000000003349a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32AddActiveItemPropertiesToMessageEP8CNWSItemP12CNWSCreature, 0x0000000000315310) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32ComputeGameObjectUpdateForObjectEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayj, 0x000000000033baf0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32ComputeLastUpdate_AssociateStateEP12CNWSCreature, 0x0000000000317540) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32ComputeLastUpdate_GuiEffectIconsEP12CNWSCreatureP13CExoArrayListIP17CEffectIconObjectEi, 0x000000000032c8c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32ComputeLastUpdate_GuiKnownSpellsEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x000000000032e200) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32ComputeNumAutoMapUpdatesRequiredEP12CNWSCreatureP26CNWSPlayerLastUpdateObjectPj, 0x0000000000316f60) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32DeleteLastUpdateObjectsForObjectEP10CNWSPlayerj, 0x000000000031a8b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32HandlePlayerToServerCheatMessageEP10CNWSPlayerh, 0x00000000003c75f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32HandlePlayerToServerInputMessageEP10CNWSPlayerh, 0x00000000003cce30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32HandlePlayerToServerLoginMessageEP10CNWSPlayerh, 0x00000000003d2490) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32HandlePlayerToServerStoreMessageEP10CNWSPlayerh, 0x00000000003cc700) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32HandleServerAdminToServerMessageEjPhj, 0x00000000003e4190) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerActivatePortalEj10CExoStringS0_S0_i, 0x000000000032c3b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerArea_DestroyedEP10CNWSPlayerj, 0x000000000031d710) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerBarterLockListEjjii, 0x000000000032b1d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerCamera_LockYawEP10CNWSPlayeri, 0x000000000031c510) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerCamera_RestoreEP10CNWSPlayer, 0x000000000031c300) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerCamera_SetModeEP10CNWSPlayerh, 0x000000000031c240) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerCheatDebugModeEi, 0x0000000000326d90) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerDebugInfo_AreaEP10CNWSPlayerj, 0x000000000032ae30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerDebugInfo_DoorEP10CNWSPlayerj, 0x000000000032abc0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerDebugInfo_ItemEP10CNWSPlayerj, 0x000000000032a6c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerGuiTimingEventEP10CNWSPlayerihj, 0x000000000032ce00) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerInventory_DropEjji, 0x0000000000322d10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerJournalUpdatedEP10CNWSPlayerii13CExoLocString, 0x00000000003294b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerModule_EndGameEP10CNWSPlayerRK10CExoStringRKN4Hash4SHA1E, 0x000000000031c780) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerModule_LoadingEP10CNWSPlayer, 0x000000000031cb30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerPlayerList_AddEjP10CNWSPlayer, 0x000000000033ccd0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerPlayerList_AllEP10CNWSPlayer, 0x000000000033c660) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerResmanOverrideEjtRK7CResRefS2_, 0x000000000032da80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerSafeProjectileEP10CNWSPlayerjj6VectorS2_jhjhhh, 0x0000000000320a30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerSetCustomTokenEjiRK10CExoString, 0x000000000031d7b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerSetTlkOverrideEjiRK10CExoString, 0x000000000031da60) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerShutDownServerEjj, 0x000000000032cd40) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerUpdateFogColorEjjj, 0x0000000000327af0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerUpdateItemNameEP10CNWSPlayerP8CNWSItem, 0x0000000000327700) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32SendServerToPlayerVoiceChat_PlayEP10CNWSPlayerjh, 0x0000000000327f90) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32TestPartyObjectUpdateDifferencesEP10CNWSPlayerP12CNWSCreaturePP22CLastUpdatePartyObjectPj, 0x000000000031b5e0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32UpdateLastUpdateObjectAppearanceEP10CNWSObjectP17CLastUpdateObjectj, 0x0000000000324950) -NWNXLIB_FUNCTION(_ZN11CNWSMessage32WriteGameObjUpdate_WorkRemainingEP10CNWSObjectP8CNWSAreaii, 0x0000000000319f40) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33HandlePlayerToServerBarter_WindowEP10CNWSPlayer, 0x00000000003d5c10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33HandlePlayerToServerDialogMessageEP10CNWSPlayerh, 0x00000000003ca710) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33HandlePlayerToServerMapPinMessageEP10CNWSPlayerh, 0x00000000003d5610) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33HandlePlayerToServerModuleMessageEP10CNWSPlayerh, 0x00000000003d2c30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerArea_ClientAreaEP10CNWSPlayerP8CNWSAreafffRK6Vectori, 0x000000000031cd10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerArea_UpdateWindEP10CNWSPlayer6Vectorfff, 0x0000000000327e40) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerChat_DM_WhisperEjj10CExoString, 0x000000000031fd80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerChat_ServerTellEj10CExoString, 0x000000000031f220) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerCheatRainOfCowsEjj, 0x0000000000326ce0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerCutscene_StatusEP10CNWSPlayerii, 0x00000000003281b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerDestroyDeathGUIEj, 0x000000000032cde0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerInventory_EquipEjjji, 0x0000000000322e70) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerJournalAddQuestEP10CNWSPlayer10CExoStringijtijj13CExoLocStringS3_, 0x00000000003286a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerJournalAddWorldEP10CNWSPlayeri10CExoStringS2_jj, 0x00000000003289e0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerSaveLoad_StatusEP10CNWSPlayerhj, 0x000000000031cb50) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerUpdateFogAmountEhhj, 0x0000000000327c90) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToPlayerWhirlwindAttackEP10CNWSPlayerP12CNWSCreature, 0x000000000032d5d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToServerAdminBannedListEj, 0x00000000003eda40) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToServerAdminModuleListEj, 0x00000000003ef590) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToServerAdminPlayerListEj, 0x00000000003ed900) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToServerAdminPortalListEj, 0x00000000003edb80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33SendServerToServerAdminSaveStatusEjh, 0x00000000003ef4c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33WriteGameObjUpdate_CharacterSheetEP10CNWSPlayerj, 0x00000000003308d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33WriteGameObjUpdate_MajorGUIPanelsEP10CNWSPlayer, 0x0000000000334800) -NWNXLIB_FUNCTION(_ZN11CNWSMessage33WriteGameObjUpdate_MinorGUIPanelsEP10CNWSPlayer, 0x0000000000331700) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34ComputeGameObjectUpdateForCategoryEjjP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayP29CNWSPlayerLUOSortedObjectListi, 0x000000000033bc30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34ComputeGameObjectUpdateForYourselfEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayj, 0x000000000033bc00) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34HandlePlayerToServerBarter_AddItemEP10CNWSPlayer, 0x00000000003d57f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34HandlePlayerToServerJournalMessageEP10CNWSPlayerh, 0x00000000003d4100) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34HandlePlayerToServerLevelUpMessageEP10CNWSPlayerh, 0x00000000003d6d30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34HandlePlayerToServerShutDownServerEP10CNWSPlayerh, 0x00000000003d6620) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerAmbientMusicPlayEji, 0x000000000032be80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerCamera_LockPitchEP10CNWSPlayeri, 0x000000000031c3d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerCamera_SetHeightEP10CNWSPlayerf, 0x000000000031c320) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerCutscene_HideGuiEP10CNWSPlayeri, 0x0000000000328410) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerDebugInfo_StringEP10CNWSPlayerRK10CExoString, 0x000000000032af30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerGuiEvent_DisableEjii, 0x000000000032dc00) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerInventory_PickupEjji, 0x00000000003232b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerNui_CreateClientEP10CNWSPlayeriNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERK7CResRef, 0x000000000032ddb0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerQuickChatMessageEjt, 0x000000000031ed80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerSoundObject_PlayEP10CNWSPlayerj, 0x000000000031e090) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerSoundObject_StopEP10CNWSPlayerj, 0x000000000031e130) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34SendServerToPlayerUpdateItemHiddenEP10CNWSPlayerP8CNWSItem, 0x00000000003278a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage34StoreValuesInLastUpdatePartyObjectEP12CNWSCreatureP22CLastUpdatePartyObjectS1_j, 0x000000000031bc50) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35ComputeLastUpdate_GuiKnownSpellUsesEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x0000000000316dc0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35DeleteLastUpdateObjectsInOtherAreasEP10CNWSPlayer, 0x000000000031a610) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35HandlePlayerToServerBarter_LockListEP10CNWSPlayer, 0x00000000003d5af0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35HandlePlayerToServerBarter_MoveItemEP10CNWSPlayer, 0x00000000003d59f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35HandlePlayerToServerCharListMessageEP10CNWSPlayerh, 0x00000000003d2ac0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35HandlePlayerToServerMapPinChangePinEP10CNWSPlayer, 0x00000000003d5370) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerAIActionPlaySoundEjj10CExoString, 0x000000000031dfb0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerArea_VisualEffectEP10CNWSPlayert6Vector25ObjectVisualTransformData, 0x000000000031d2f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerBarterAcceptTradeEjjii, 0x000000000032b2b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerBarterCloseBarterEjji, 0x000000000032b0e0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerBarterStartBarterEjjjj, 0x000000000032b000) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerChat_Silent_ShoutEjj10CExoString, 0x000000000031f680) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerChatStrRefMessageEhjj, 0x000000000031e430) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerCutscene_StopFadeEP10CNWSPlayer, 0x00000000003283d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerDebugInfo_TriggerEP10CNWSPlayerj, 0x000000000032a820) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerDialogReplyChosenEjjj13CExoLocStringjhi, 0x0000000000321d30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerInventory_UnequipEjji, 0x0000000000323410) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerJournalFullUpdateEP10CNWSPlayer, 0x0000000000328ef0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerLogin_GetWaypointEj, 0x0000000000323590) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerModule_DumpPlayerEP10CNWSPlayer, 0x000000000031ccf0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerModuleUpdate_TimeEP10CNWSPlayerhjjjjhj, 0x00000000003296f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToPlayerPlayerList_DeleteEjP10CNWSPlayer, 0x0000000000324540) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToServerAdminSaveGameListEj, 0x00000000003f01f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35SendServerToServerAdminServerStatusEj, 0x00000000003ed6f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35StoreValuesInLastPlayerUpdateObjectEP10CNWSPlayerP26CNWSPlayerLastUpdateObjectP17CLastUpdateObjectt, 0x0000000000331a10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage35WriteGameObjUpdate_UpdateAppearanceEP10CNWSObjectP17CLastUpdateObjectjP10CNWSPlayer, 0x000000000032e430) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36ComputeLastUpdate_GuiMemorizedSpellsEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x0000000000332240) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36HandlePlayerToServerGameObjectUpdateEP10CNWSPlayerh, 0x00000000003ca850) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36HandlePlayerToServerInventoryMessageEP10CNWSPlayerh, 0x00000000003d1610) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36HandlePlayerToServerQuickChatMessageEP10CNWSPlayerh, 0x00000000003c6ff0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36SendServerToPlayerCombatRoundStartedEP10CNWSPlayer, 0x00000000003273b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36SendServerToPlayerDebugInfo_CreatureEP10CNWSPlayerj, 0x000000000032a290) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36SendServerToPlayerJournalDeleteWorldEP10CNWSPlayeri, 0x0000000000328c20) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36SendServerToPlayerJournalRemoveQuestEP10CNWSPlayer10CExoString, 0x0000000000328810) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36SendServerToPlayerModule_ExportReplyEP10CNWSPlayer, 0x000000000031caa0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36SendServerToPlayerOpenStoreInventoryEP10CNWSPlayerjh, 0x0000000000323650) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36SendServerToPlayerSetCustomTokenListEj, 0x000000000031d8a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36SendServerToPlayerSetTlkOverrideListEj, 0x0000000000324140) -NWNXLIB_FUNCTION(_ZN11CNWSMessage36SendServerToPlayerUpdateCharResponseEP10CNWSPlayerh7CResRef, 0x000000000033d960) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37ComputeGameObjectUpdateForYourselfTooEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayj, 0x000000000033bc10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37HandlePlayerToServerBarter_RemoveItemEP10CNWSPlayer, 0x00000000003d58f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37HandlePlayerToServerCharacterDownloadEP10CNWSPlayerh, 0x00000000003d65b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37HandlePlayerToServerGroupInputMessageEP10CNWSPlayerh, 0x00000000003cf880) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37HandlePlayerToServerInputDriveControlEP10CNWSPlayer, 0x00000000003cb9b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37HandlePlayerToServerMapPinSetMapPinAtEP10CNWSPlayer, 0x00000000003d4df0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37HandlePlayerToServerPVPListOperationsEP10CNWSPlayerh, 0x00000000003d5e10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37HandlePlayerToServerServerChatMessageEP10CNWSPlayerh, 0x00000000003d4090) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendPlayerToServerGuiInventory_StatusEP10CNWSPlayerij, 0x0000000000328100) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerArea_ChangeDayNightEP10CNWSPlayerif, 0x000000000031d4d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerCamera_LockDistanceEP10CNWSPlayeri, 0x000000000031c470) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerCloseStoreInventoryEP10CNWSPlayer, 0x0000000000320d50) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerDebugInfo_PlaceableEP10CNWSPlayerj, 0x000000000032a960) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerExamineGui_DoorDataEP10CNWSPlayerj, 0x0000000000321820) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerExamineGui_ItemDataEP10CNWSPlayerj, 0x000000000032b870) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerExamineGui_TrapDataEP10CNWSPlayerjP12CNWSCreaturei, 0x0000000000320f10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerLogin_NeedCharacterEj, 0x000000000031c6c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerPVP_Attitude_ChangeEjji, 0x000000000032c740) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToPlayerServerStatus_StatusEj, 0x0000000000324710) -NWNXLIB_FUNCTION(_ZN11CNWSMessage37SendServerToServerAdminServerSettingsEj, 0x00000000003edcc0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38HandlePlayerToServerBarter_AcceptTradeEP10CNWSPlayer, 0x00000000003d5b80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38HandlePlayerToServerBarter_CloseBarterEP10CNWSPlayer, 0x00000000003d56f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38HandlePlayerToServerBarter_StartBarterEP10CNWSPlayer, 0x00000000003d5660) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerPlayerItemUpdate_DestroyItemEP10CNWSPlayerj, 0x0000000000328600) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerAmbientMusicSetDelayEji, 0x000000000032bf20) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerAmbientSoundLoopPlayEji, 0x000000000032c1b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerChat_DM_Silent_ShoutEjj10CExoString, 0x000000000031faf0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerChatMultiLang_HelperEjhj13CExoLocStringjhiRK7CResRefij, 0x000000000031dc70) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerChatMultiLangMessageEhj13CExoLocStringjhPjjiRK7CResRefij, 0x000000000031dcc0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerCutscene_BlackScreenEP10CNWSPlayer, 0x00000000003283f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerCutscene_FadeToBlackEP10CNWSPlayerf, 0x0000000000328270) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerInventory_DropCancelEjji, 0x0000000000322dc0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerInventory_SelectPageEjh, 0x000000000031bfa0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerLevelUp_ConfirmationEji, 0x0000000000329580) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerLogin_CharacterQueryEP10CNWSPlayerRhPiPhRj, 0x000000000031c5b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerModule_SetPauseStateEhi, 0x00000000003238a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage38SendServerToPlayerUpdateBlackoutEffectEP10CNWSPlayeri, 0x000000000032ced0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39ComputeLastUpdate_WriteSpellLikeAbilityEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x0000000000316a50) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39HandlePlayerToServerGuiContainerMessageEP10CNWSPlayerh, 0x00000000003cb5b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39HandlePlayerToServerGuiInventoryMessageEP10CNWSPlayerh, 0x00000000003cb410) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39HandlePlayerToServerInputWalkToWaypointEP10CNWSPlayer, 0x00000000003cbca0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39HandlePlayerToServerMapPinDestroyMapPinEP10CNWSPlayer, 0x00000000003d51b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39HandlePlayerToServerServerStatusMessageEP10CNWSPlayerh, 0x00000000003d40a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerCamera_ChangeLocationEP10CNWSPlayerifffi, 0x000000000031c0e0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerCharacterDownloadFailEP10CNWSPlayer, 0x000000000032c5e0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerDungeonMasterAreaListEj, 0x0000000000321e50) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerDungeonMasterAreaListEP10CNWSPlayer, 0x0000000000322090) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerGuiQuickbar_SetButtonEP10CNWSPlayerhi, 0x0000000000329930) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerInventory_ConfirmDropEjji, 0x0000000000323160) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerInventory_EquipCancelEjjji, 0x0000000000322f30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerInventory_LearnScrollEjjh, 0x000000000032cbe0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerInventory_SelectPanelEjh, 0x0000000000323210) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerJournalAddWorldStrrefEP10CNWSPlayerjjjj, 0x0000000000328b30) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerJournalDeleteWorldAllEP10CNWSPlayer, 0x0000000000328d80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerLoadBar_EndStallEventEjj, 0x000000000031c9f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerModule_SaveGameStatusEh, 0x000000000031c6e0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39SendServerToPlayerWhirlwindAttackDamageEP10CNWSPlayerP12CNWSCreature, 0x000000000032d760) -NWNXLIB_FUNCTION(_ZN11CNWSMessage39WriteGameObjUpdate_DungeonMasterAIStateEP10CNWSPlayer, 0x00000000003379f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage40HandlePlayerToServerDungeonMasterMessageEP10CNWSPlayerhi, 0x00000000003d7340) -NWNXLIB_FUNCTION(_ZN11CNWSMessage40SendServerToPlayerAmbientBattleMusicPlayEji, 0x000000000032c070) -NWNXLIB_FUNCTION(_ZN11CNWSMessage40SendServerToPlayerAmbientSoundLoopChangeEjii, 0x000000000032c250) -NWNXLIB_FUNCTION(_ZN11CNWSMessage40SendServerToPlayerCharacterDownloadReplyEP10CNWSPlayer, 0x000000000032c500) -NWNXLIB_FUNCTION(_ZN11CNWSMessage40SendServerToPlayerCutscene_FadeFromBlackEP10CNWSPlayerf, 0x0000000000328320) -NWNXLIB_FUNCTION(_ZN11CNWSMessage40SendServerToPlayerGameObjUpdateVisEffectEP10CNWSPlayertjjhh6Vectorf25ObjectVisualTransformData, 0x0000000000326eb0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage40SendServerToPlayerInventory_PickupCancelEjji, 0x0000000000323360) -NWNXLIB_FUNCTION(_ZN11CNWSMessage40SendServerToPlayerJournalSetQuestPictureEP10CNWSPlayer10CExoStringi, 0x00000000003288f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage40WriteGameObjUpdate_WriteInventorySlotAddEP10CNWSPlayerP12CNWSCreatureP8CNWSItemj, 0x00000000003190b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41ComputeLastUpdate_CompareSpellLikeAbilityEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x00000000003169c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41ComputeQuickbarItemUseCountUpdateRequiredEP10CNWSObjectP17CLastUpdateObject, 0x000000000032cf70) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41HandlePlayerToServerCharacterSheetMessageEP10CNWSPlayerh, 0x00000000003cb860) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41HandlePlayerToServerGuiQuickbar_SetButtonEP10CNWSPlayerhh, 0x00000000003d4490) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41SendServerToPlayerAmbientMusicChangeTrackEjii, 0x000000000032bfc0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41SendServerToPlayerDungeonMasterLoginStateEP10CNWSPlayerii, 0x0000000000322270) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41SendServerToPlayerDungeonMasterObjectListEP10CNWSPlayerji, 0x000000000032f910) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41SendServerToPlayerExamineGui_CreatureDataEP10CNWSPlayerj, 0x000000000033d1e0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41SendServerToPlayerGameObjUpdateFloatyTextEP10CNWSPlayerjj, 0x0000000000327300) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41SendServerToPlayerInventory_UnequipCancelEjji, 0x00000000003234c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41SendServerToPlayerLoadBar_StartStallEventEj, 0x000000000031c8a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41SendServerToPlayerPlaceableUpdate_UseableEP13CNWSPlaceable, 0x000000000032d8f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage41SendServerToPlayerStoreConfirmTransactionEP10CNWSPlayeriji, 0x0000000000329880) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42ComputeLastUpdate_GuiNumberMemorizedSpellsEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x0000000000317300) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42HandlePlayerToServerInputAbortDriveControlEP10CNWSPlayer, 0x00000000003cbba0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42SendServerToPlayerAmbientBattleMusicChangeEji, 0x000000000032c110) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42SendServerToPlayerAmbientSoundVolumeChangeEjii, 0x000000000032c300) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42SendServerToPlayerExamineGui_PlaceableDataEP10CNWSPlayerj, 0x0000000000320d70) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42SendServerToPlayerGameObjUpdate_ObjControlEjj, 0x00000000003219c0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42SendServerToPlayerInventory_RepositoryMoveEjji, 0x0000000000323000) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42SendServerToPlayerJournalDeleteWorldStrrefEP10CNWSPlayerj, 0x0000000000328cd0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42SendServerToPlayerLoadBar_UpdateStallEventEjj, 0x000000000031c940) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42SendServerToPlayerModule_EndStartNewModuleEi, 0x000000000031cc50) -NWNXLIB_FUNCTION(_ZN11CNWSMessage42SendServerToPlayerSoundObject_ChangeVolumeEP10CNWSPlayerji, 0x000000000031e1d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage43HandlePlayerToServerPlayModuleCharacterListEP10CNWSPlayerh, 0x00000000003d6920) -NWNXLIB_FUNCTION(_ZN11CNWSMessage43SendServerToPlayerDungeonMasterCreatorListsEP10CNWSPlayer, 0x0000000000322340) -NWNXLIB_FUNCTION(_ZN11CNWSMessage43SendServerToPlayerGuiContainerObject_StatusEP10CNWSPlayerji, 0x0000000000328050) -NWNXLIB_FUNCTION(_ZN11CNWSMessage43SendServerToPlayerPartyBar_PanelButtonFlashEjhi, 0x000000000032cc80) -NWNXLIB_FUNCTION(_ZN11CNWSMessage43WriteGameObjUpdate_MajorGUIPanels_InventoryEP10CNWSPlayerP22CNWSPlayerInventoryGUI, 0x000000000032f510) -NWNXLIB_FUNCTION(_ZN11CNWSMessage43WriteGameObjUpdate_WriteInventorySlotDeleteEP12CNWSCreaturej, 0x0000000000319130) -NWNXLIB_FUNCTION(_ZN11CNWSMessage43WriteGameObjUpdate_WriteInventorySlotUpdateEP10CNWSPlayerjj, 0x0000000000319180) -NWNXLIB_FUNCTION(_ZN11CNWSMessage44HandlePlayerToServerGroupInputWalkToWaypointEP10CNWSPlayerP12CNWSCreaturejfffhiij, 0x00000000003cc280) -NWNXLIB_FUNCTION(_ZN11CNWSMessage44SendServerToPlayerJournalFullUpdateNotNeededEP10CNWSPlayeri, 0x0000000000328e20) -NWNXLIB_FUNCTION(_ZN11CNWSMessage44SendServerToPlayerModule_StartStartNewModuleEv, 0x000000000031cc20) -NWNXLIB_FUNCTION(_ZN11CNWSMessage44SendServerToPlayerSoundObject_ChangePositionEP10CNWSPlayerj6Vector, 0x000000000031e280) -NWNXLIB_FUNCTION(_ZN11CNWSMessage44SendServerToPlayerUpdateActiveItemPropertiesEP10CNWSPlayerP8CNWSItem, 0x0000000000327560) -NWNXLIB_FUNCTION(_ZN11CNWSMessage45ComputeLastUpdate_StoreUpdateSpellLikeAbilityEP12CNWSCreatureP26CNWSPlayerLastUpdateObject, 0x0000000000316c10) -NWNXLIB_FUNCTION(_ZN11CNWSMessage45HandlePlayerToServerInputCancelGuiTimingEventEP10CNWSPlayer, 0x00000000003cbc40) -NWNXLIB_FUNCTION(_ZN11CNWSMessage45SendServerToPlayerParty_TransferObjectControlEjjj, 0x0000000000324490) -NWNXLIB_FUNCTION(_ZN11CNWSMessage45SendServerToPlayerPlayerList_ReauthorizeCDKeyEjRK10CExoStringS2_, 0x0000000000324600) -NWNXLIB_FUNCTION(_ZN11CNWSMessage45WriteGameObjUpdate_UpdateQuickbarItemUseCountEP10CNWSObjectP17CLastUpdateObject, 0x000000000032d0f0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage46SendServerToPlayerArea_RecomputeStaticLightingEj, 0x0000000000323bd0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage46SendServerToPlayerDungeonMasterUpdatePartyListEj, 0x0000000000322c90) -NWNXLIB_FUNCTION(_ZN11CNWSMessage46SendServerToPlayerDungeonMasterUpdatePartyListEP10CNWSPlayer, 0x0000000000322cb0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage47SendServerToPlayerDungeonMasterSearchByIdResultEP10CNWSPlayerjij, 0x00000000003221b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage48HandlePlayerToServerPlayModuleCharacterList_StopEP10CNWSPlayer, 0x00000000003d68d0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage48SendServerToPlayerDungeonMastersDifficultyChangeEi, 0x0000000000323a40) -NWNXLIB_FUNCTION(_ZN11CNWSMessage48SendServerToPlayerDungeonMasterSearchByTagResultEP10CNWSPlayerRK10CExoStringij, 0x000000000032ff70) -NWNXLIB_FUNCTION(_ZN11CNWSMessage48SendServerToPlayerGUICharacterSheet_NotPermittedEjj, 0x000000000032d470) -NWNXLIB_FUNCTION(_ZN11CNWSMessage48SendServerToPlayerInventory_RepositoryMoveCancelEjji, 0x00000000003230b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage48SendServerToPlayerUpdateActiveItemPropertiesUsesEP10CNWSPlayerjhhPh, 0x0000000000327450) -NWNXLIB_FUNCTION(_ZN11CNWSMessage49HandlePlayerToServerPlayModuleCharacterList_StartEP10CNWSPlayer, 0x00000000003d67a0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage49SendServerToPlayerPlayModuleCharacterListResponseEjji, 0x000000000033c240) -NWNXLIB_FUNCTION(_ZN11CNWSMessage55SendServerToAllPlayersCreatureUpdate_StripEquippedItemsEjii, 0x00000000003284b0) -NWNXLIB_FUNCTION(_ZN11CNWSMessage55WriteGameObjUpdate_MajorGUIPanels_HenchmanInventoryDataEP10CNWSPlayer, 0x000000000031aaa0) -NWNXLIB_FUNCTION(_ZN11CNWSMessageC1Ev, 0x00000000003c6fc0) -NWNXLIB_FUNCTION(_ZN11CNWSMessageC2Ev, 0x00000000003c6fc0) -NWNXLIB_FUNCTION(_ZN11CNWSMessageD0Ev, 0x00000000003c6da0) -NWNXLIB_FUNCTION(_ZN11CNWSMessageD1Ev, 0x00000000003c6d80) -NWNXLIB_FUNCTION(_ZN11CNWSMessageD2Ev, 0x00000000003c6d80) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger11LoadTriggerEP7CResGFFP10CResStruct, 0x0000000000345890) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger11OnEnterTrapEi, 0x0000000000347bb0) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger11SaveTriggerEP7CResGFFP10CResStruct, 0x0000000000346cd0) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger12AsNWSTriggerEv, 0x0000000000349290) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger12EventHandlerEjjPvjj, 0x0000000000348030) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger12GetFirstNameEv, 0x000000000033e490) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger13GetScriptNameEi, 0x0000000000344a00) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger13GetTargetAreaEv, 0x0000000000344ed0) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger14GetIsClickableEv, 0x000000000033e560) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger14RemoveFromAreaEv, 0x0000000000347e30) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger16LoadFromTemplateE7CResRef, 0x00000000003486a0) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger17CreateNewGeometryEf6VectorP8CNWSArea, 0x00000000003475d0) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger17CreateNewGeometryEfP15CScriptLocationP8CNWSArea, 0x0000000000347830) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger17GetFacingPositionEv, 0x0000000000345280) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger18ComputeBoundingBoxEPfS0_S0_S0_, 0x0000000000345140) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger21CalculateNearestPointE6VectorPS0_, 0x0000000000344f30) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger22GetCanFireTrapOnObjectEji, 0x0000000000347b90) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger27LineSegmentIntersectTriggerE6VectorS0_, 0x0000000000345360) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger28GetClosestPointWithinTriggerE6VectorPS0_, 0x0000000000345640) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger8AIUpdateEv, 0x0000000000344a30) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger9AddToAreaEP8CNWSAreafffi, 0x00000000003483e0) -NWNXLIB_FUNCTION(_ZN11CNWSTrigger9InTriggerE6Vector, 0x00000000003454b0) -NWNXLIB_FUNCTION(_ZN11CNWSTriggerC1Ej, 0x0000000000344c50) -NWNXLIB_FUNCTION(_ZN11CNWSTriggerC2Ej, 0x0000000000344c50) -NWNXLIB_FUNCTION(_ZN11CNWSTriggerD0Ev, 0x0000000000348000) -NWNXLIB_FUNCTION(_ZN11CNWSTriggerD1Ev, 0x0000000000347eb0) -NWNXLIB_FUNCTION(_ZN11CNWSTriggerD2Ev, 0x0000000000347eb0) -NWNXLIB_FUNCTION(_ZN11CNWTileData10GetMapIconEv, 0x000000000020ade0) -NWNXLIB_FUNCTION(_ZN11CNWTileData10SetMapIconE7CResRef, 0x000000000020ae00) -NWNXLIB_FUNCTION(_ZN11CNWTileData11GetEdgeTypeEh, 0x000000000020ad30) -NWNXLIB_FUNCTION(_ZN11CNWTileData11SetEdgeTypeEh10CExoString, 0x000000000020acc0) -NWNXLIB_FUNCTION(_ZN11CNWTileData13GetCornerTypeEh, 0x000000000020ac30) -NWNXLIB_FUNCTION(_ZN11CNWTileData13SetCornerTypeEh10CExoStringi, 0x000000000020aae0) -NWNXLIB_FUNCTION(_ZN11CNWTileData14GetModelResRefEv, 0x000000000020aa70) -NWNXLIB_FUNCTION(_ZN11CNWTileData14SetModelResRefE7CResRef, 0x000000000020aa90) -NWNXLIB_FUNCTION(_ZN11CNWTileData23AddPropertyMethodStringEj10CExoString, 0x000000000020a9d0) -NWNXLIB_FUNCTION(_ZN11CNWTileData27GetPropertyMethodStringListEj, 0x000000000020aa50) -NWNXLIB_FUNCTION(_ZN11CNWTileDataC1Ev, 0x000000000020ae50) -NWNXLIB_FUNCTION(_ZN11CNWTileDataC2Ev, 0x000000000020ae50) -NWNXLIB_FUNCTION(_ZN11CNWTileDataD0Ev, 0x000000000020b220) -NWNXLIB_FUNCTION(_ZN11CNWTileDataD1Ev, 0x000000000020b0e0) -NWNXLIB_FUNCTION(_ZN11CNWTileDataD2Ev, 0x000000000020b0e0) -NWNXLIB_FUNCTION(_ZN11CServerInfo15FindOptionIndexE10CExoStringS0_, 0x00000000001d6250) -NWNXLIB_FUNCTION(_ZN11CServerInfo18SetDifficultyLevelEii, 0x00000000001d62e0) -NWNXLIB_FUNCTION(_ZN11CServerInfoC1Ev, 0x00000000001d5720) -NWNXLIB_FUNCTION(_ZN11CServerInfoC2Ev, 0x00000000001d5720) -NWNXLIB_FUNCTION(_ZN11CTlkResFileC1ERK7CResRef, 0x0000000000144fb0) -NWNXLIB_FUNCTION(_ZN11CTlkResFileC2ERK7CResRef, 0x0000000000144fb0) -NWNXLIB_FUNCTION(_ZN11CTlkResFileD0Ev, 0x0000000000144f70) -NWNXLIB_FUNCTION(_ZN11CTlkResFileD1Ev, 0x0000000000144f00) -NWNXLIB_FUNCTION(_ZN11CTlkResFileD2Ev, 0x0000000000144f00) -NWNXLIB_FUNCTION(_ZN11CWorldTimer10MAX_MINUTEE, 0x00000000008e69e0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer10MAX_SECONDE, 0x00000000008e69d4) -NWNXLIB_FUNCTION(_ZN11CWorldTimer10MIN_MINUTEE, 0x00000000008e69e8) -NWNXLIB_FUNCTION(_ZN11CWorldTimer10MIN_SECONDE, 0x00000000008e69dc) -NWNXLIB_FUNCTION(_ZN11CWorldTimer10ResetTimerEPS_, 0x00000000004756e0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer11DEFAULT_DAYE, 0x00000000008e69fc) -NWNXLIB_FUNCTION(_ZN11CWorldTimer12DAYS_IN_YEARE, 0x00000000008e69bc) -NWNXLIB_FUNCTION(_ZN11CWorldTimer12DEFAULT_HOURE, 0x00000000008e69f0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer12DEFAULT_YEARE, 0x00000000008e6a18) -NWNXLIB_FUNCTION(_ZN11CWorldTimer12GetWorldTimeEPjS0_, 0x0000000000475640) -NWNXLIB_FUNCTION(_ZN11CWorldTimer12HOURS_IN_DAYE, 0x00000000008e69b8) -NWNXLIB_FUNCTION(_ZN11CWorldTimer12SetWorldTimeEjji, 0x0000000000475430) -NWNXLIB_FUNCTION(_ZN11CWorldTimer12SetWorldTimeEjjjjjjji, 0x00000000004754e0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer13AddWorldTimesEjjjjPjS0_, 0x0000000000475740) -NWNXLIB_FUNCTION(_ZN11CWorldTimer13AdvanceToTimeEiiii, 0x0000000000475fc0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer13DAYS_IN_MONTHE, 0x00000000008e69c0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer13DEFAULT_MONTHE, 0x00000000008e6a08) -NWNXLIB_FUNCTION(_ZN11CWorldTimer14DEFAULT_MINUTEE, 0x00000000008e69e4) -NWNXLIB_FUNCTION(_ZN11CWorldTimer14DEFAULT_SECONDE, 0x00000000008e69d8) -NWNXLIB_FUNCTION(_ZN11CWorldTimer14MAX_YEAR_LIMITE, 0x00000000008e6a10) -NWNXLIB_FUNCTION(_ZN11CWorldTimer14MONTHS_IN_YEARE, 0x00000000008e69c4) -NWNXLIB_FUNCTION(_ZN11CWorldTimer15GetSnapshotTimeEv, 0x0000000000475280) -NWNXLIB_FUNCTION(_ZN11CWorldTimer15GetWorldTimeDayEv, 0x0000000000475d40) -NWNXLIB_FUNCTION(_ZN11CWorldTimer15MAX_MILLISECONDE, 0x00000000008e69c8) -NWNXLIB_FUNCTION(_ZN11CWorldTimer15MIN_MILLISECONDE, 0x00000000008e69d0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer15PauseWorldTimerEv, 0x0000000000475880) -NWNXLIB_FUNCTION(_ZN11CWorldTimer15SetSnapshotTimeEv, 0x0000000000475220) -NWNXLIB_FUNCTION(_ZN11CWorldTimer16GetWorldTimeHourEv, 0x0000000000475da0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer16GetWorldTimeYearEv, 0x0000000000475c70) -NWNXLIB_FUNCTION(_ZN11CWorldTimer17CompareWorldTimesEjjjj, 0x0000000000475840) -NWNXLIB_FUNCTION(_ZN11CWorldTimer17GetTimeDifferenceEjjjj, 0x0000000000475610) -NWNXLIB_FUNCTION(_ZN11CWorldTimer17GetWorldTimeMonthEv, 0x0000000000475cd0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer17SECONDS_IN_MINUTEE, 0x00000000008e69b4) -NWNXLIB_FUNCTION(_ZN11CWorldTimer17SetMinutesPerHourEh, 0x00000000004751e0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer17UnpauseWorldTimerEv, 0x00000000004758e0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer18ConvertToTimeOfDayEjjjj, 0x00000000004752f0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer18GetWorldTimeMinuteEv, 0x0000000000475e00) -NWNXLIB_FUNCTION(_ZN11CWorldTimer18GetWorldTimeSecondEv, 0x0000000000475e60) -NWNXLIB_FUNCTION(_ZN11CWorldTimer18SubtractWorldTimesEjjjjPjS0_, 0x0000000000475780) -NWNXLIB_FUNCTION(_ZN11CWorldTimer18WORLD_TIME_INVALIDE, 0x00000000008e69a4) -NWNXLIB_FUNCTION(_ZN11CWorldTimer19DEFAULT_MILLISECONDE, 0x00000000008e69cc) -NWNXLIB_FUNCTION(_ZN11CWorldTimer20ConvertFromTimeOfDayEjPjS0_S0_S0_, 0x00000000004753c0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer20ConvertToCalendarDayEjjj, 0x00000000004752a0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer20SetFixedSnapshotRateEii, 0x0000000000475f20) -NWNXLIB_FUNCTION(_ZN11CWorldTimer21GetWorldTimeTimeOfDayEv, 0x0000000000475a50) -NWNXLIB_FUNCTION(_ZN11CWorldTimer22ConvertFromCalendarDayEjPjS0_S0_, 0x0000000000475350) -NWNXLIB_FUNCTION(_ZN11CWorldTimer22MILLISECONDS_IN_MINUTEE, 0x00000000008e69ac) -NWNXLIB_FUNCTION(_ZN11CWorldTimer22MILLISECONDS_IN_SECONDE, 0x00000000008e69b0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer23GetTimeOfDayFromSecondsEf, 0x0000000000475f70) -NWNXLIB_FUNCTION(_ZN11CWorldTimer23GetWorldTimeCalendarDayEv, 0x0000000000475930) -NWNXLIB_FUNCTION(_ZN11CWorldTimer23GetWorldTimeMillisecondEv, 0x0000000000475ec0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer25GetCalendarDayFromSecondsEf, 0x0000000000475f40) -NWNXLIB_FUNCTION(_ZN11CWorldTimer25GetSnapshotTimeDifferenceEv, 0x0000000000475290) -NWNXLIB_FUNCTION(_ZN11CWorldTimer26TranslateWorldTimeToStringEjjR10CExoStringS1_, 0x0000000000475b60) -NWNXLIB_FUNCTION(_ZN11CWorldTimer27GetWorldTimeTimeOfDayStringEv, 0x0000000000475a90) -NWNXLIB_FUNCTION(_ZN11CWorldTimer27MICROSECONDS_IN_MILLISECONDE, 0x00000000008e69a8) -NWNXLIB_FUNCTION(_ZN11CWorldTimer29GetWorldTimeCalendarDayStringEv, 0x0000000000475970) -NWNXLIB_FUNCTION(_ZN11CWorldTimer30GetTimeDifferenceFromWorldTimeEjj, 0x00000000004757d0) -NWNXLIB_FUNCTION(_ZN11CWorldTimer7MAX_DAYE, 0x00000000008e69f8) -NWNXLIB_FUNCTION(_ZN11CWorldTimer7MIN_DAYE, 0x00000000008e6a00) -NWNXLIB_FUNCTION(_ZN11CWorldTimer8MAX_HOURE, 0x00000000008e69ec) -NWNXLIB_FUNCTION(_ZN11CWorldTimer8MAX_YEARE, 0x00000000008e6a14) -NWNXLIB_FUNCTION(_ZN11CWorldTimer8MIN_HOURE, 0x00000000008e69f4) -NWNXLIB_FUNCTION(_ZN11CWorldTimer8MIN_YEARE, 0x00000000008e6a1c) -NWNXLIB_FUNCTION(_ZN11CWorldTimer9MAX_MONTHE, 0x00000000008e6a04) -NWNXLIB_FUNCTION(_ZN11CWorldTimer9MIN_MONTHE, 0x00000000008e6a0c) -NWNXLIB_FUNCTION(_ZN11CWorldTimerC1Ev, 0x00000000004755a0) -NWNXLIB_FUNCTION(_ZN11CWorldTimerC2Ev, 0x00000000004755a0) -NWNXLIB_FUNCTION(_ZN11CWorldTimerD1Ev, 0x00000000004751d0) -NWNXLIB_FUNCTION(_ZN11CWorldTimerD2Ev, 0x00000000004751d0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable12DestroyTableEv, 0x000000000014b7c0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable12RebuildTableEPh, 0x000000000014e5f0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable13AllocateTableEji, 0x000000000014b410) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable13BuildNewTableEjRK10CExoStringjiPh, 0x000000000014e470) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable13GetEntryCountEi, 0x000000000014b520) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable13GetKeysOfTypeEt, 0x000000000014bac0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable13GetTableEntryEjR7CResRefRt, 0x000000000014bd60) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable13GetTableIndexERjRK7CResReft, 0x000000000014bde0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable13LocateBifFileERK10CExoString, 0x000000000014b6f0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable15DeleteTableListEP14CExoLinkedListI13CKeyTableInfoE, 0x000000000014ba30) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable19AddKeyTableContentsEi, 0x000000000014d320) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable19AddManifestContentsEi, 0x000000000014c470) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable20AddDirectoryContentsEi, 0x000000000014d110) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable21DropContentsFromCacheEv, 0x000000000014b600) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable21SetAllowDynamicReloadEi, 0x000000000014b5b0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable23AddEncapsulatedContentsEi, 0x000000000014ca70) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable24AddResourceImageContentsEiPh, 0x000000000014c1d0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable30CheckForModificationsInStorageEv, 0x000000000014b650) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable4HashERK7CResReft, 0x000000000014be90) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable6AddKeyERK7CResReft5RESIDi, 0x000000000014bf20) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable6GetResERK7CResReft, 0x000000000014c850) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable7FindKeyEP4CRes, 0x000000000014c820) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable7FindKeyERK7CResReft, 0x000000000014c770) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable8GetResIDERK7CResReft, 0x000000000014c880) -NWNXLIB_FUNCTION(_ZN12CExoKeyTable8m_nCRC32E, 0x0000000000ce9700) -NWNXLIB_FUNCTION(_ZN12CExoKeyTableC1Ev, 0x000000000014b1f0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTableC2Ev, 0x000000000014b1f0) -NWNXLIB_FUNCTION(_ZN12CExoKeyTableD1Ev, 0x000000000014b300) -NWNXLIB_FUNCTION(_ZN12CExoKeyTableD2Ev, 0x000000000014b300) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10CancelRestEt, 0x000000000022e4a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10CanUseItemEP8CNWSItemi, 0x000000000024e1e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10GetFactionEv, 0x0000000000249240) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10GetFlankedEPS_, 0x00000000002623d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10GetJournalEv, 0x000000000021d130) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10GetRunRateEv, 0x0000000000216790) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10GetUnarmedEv, 0x0000000000211c00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10RemoveGoldEii, 0x0000000000227a20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10RemoveItemEP8CNWSItemiiii, 0x000000000024f200) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10RequestBuyEjjj, 0x0000000000227bc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10RunUnequipEjjhhij, 0x0000000000226140) -NWNXLIB_FUNCTION(_ZN12CNWSCreature10ToggleModeEh, 0x0000000000232ed0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11AcquireItemEPP8CNWSItemjjhhii, 0x0000000000250940) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11AIActionSitEP20CNWSObjectActionNode, 0x000000000024a3d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11BumpFriendsEPS_RK6VectorS3_, 0x000000000022b890) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11ClearActionEP20CNWSObjectActionNodei, 0x000000000022e670) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11GetActivityEi, 0x000000000020fe90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11GetLastNameEv, 0x000000000023ef20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11GetPortraitEv, 0x000000000023efd0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11GetUseRangeEjR6VectorRf, 0x000000000022a9f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11GetWalkRateEv, 0x0000000000216760) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11LearnScrollEj, 0x00000000002301d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11PostProcessEv, 0x000000000023b440) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11RequestSellEjj, 0x0000000000227d10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11SetActivityEii, 0x0000000000210320) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11SetPortraitE7CResRef, 0x000000000023f020) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11StartBarterEjji, 0x000000000022b070) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11UnequipItemEP8CNWSItemi, 0x0000000000225740) -NWNXLIB_FUNCTION(_ZN12CNWSCreature11UnPolymorphEP11CGameEffect, 0x000000000022a040) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12AddAssociateEjt, 0x0000000000256660) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12AddToPVPListEj, 0x000000000025d7b0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12AIActionHealEP20CNWSObjectActionNode, 0x000000000024fee0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12AIActionRestEP20CNWSObjectActionNode, 0x0000000000252000) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12CancelActionEtt, 0x0000000000216820) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12CanEquipItemEP8CNWSItemPjiiiP10CNWSPlayer, 0x000000000024dd60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12DoCombatStepEhij, 0x0000000000261c80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12EvaluateLockEP10CNWSObjecti, 0x00000000002249c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12EventHandlerEjjPvjj, 0x0000000000236530) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12GetFirstNameEv, 0x000000000023ef00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12GetInvisibleEP10CNWSObjecti, 0x000000000022d260) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12GetIsInMeleeEv, 0x00000000002624b0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12GetItemCountEi, 0x0000000000219b20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12LoadCreatureEP7CResGFFP10CResStructiiii, 0x000000000023e400) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12SaveCreatureEP7CResGFFP10CResStructiiii, 0x0000000000213580) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12SetAnimationEi, 0x000000000020e2b0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12SetInTransitEi, 0x000000000022a000) -NWNXLIB_FUNCTION(_ZN12CNWSCreature12TransferGoldEj6Vectorjihh, 0x000000000022b480) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13ActionManagerEj, 0x0000000000212460) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13AddSitActionsEj, 0x0000000000211830) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13AIActionDriveEP20CNWSObjectActionNode, 0x0000000000257d30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13AIActionTauntEP20CNWSObjectActionNode, 0x000000000025da70) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13ApplyWoundingEP11CGameEffect, 0x0000000000234110) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13AsNWSCreatureEv, 0x000000000023ee90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13GetArmorClassEv, 0x0000000000219c30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13GetBarterInfoEi, 0x000000000021d1a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13GetDetectModeEv, 0x000000000021c000) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13GetFlatFootedEv, 0x0000000000262340) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13GetNumInvitedEv, 0x000000000024eea0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13GetScriptNameEi, 0x000000000023eea0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13ResolveAttackEjii, 0x000000000026db40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13ResolveDamageEP10CNWSObject, 0x000000000026ba20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13SetCombatModeEhi, 0x00000000002409e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13SetDetectModeEh, 0x0000000000240870) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13SetPortraitIdEt, 0x000000000020fbe0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13UpdateAutoMapEj, 0x0000000000235820) -NWNXLIB_FUNCTION(_ZN12CNWSCreature13UseLoreOnItemEj, 0x000000000021e4e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14AddDriveActionEtRK6Vectoriiii, 0x0000000000210930) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14AddHealActionsEjji, 0x0000000000224890) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14AddTrapActionsEjhj6Vectorj, 0x00000000002124c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14AIActionAppearEP20CNWSObjectActionNode, 0x000000000024a170) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14AIActionBarterEP20CNWSObjectActionNode, 0x0000000000240400) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14ApplyOnHitDazeEP10CNWSObjecti, 0x0000000000263150) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14ApplyOnHitDoomEP10CNWSObjecti, 0x0000000000263790) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14ApplyOnHitFearEP10CNWSObjecti, 0x0000000000263be0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14ApplyOnHitHoldEP10CNWSObjecti, 0x0000000000263df0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14ApplyOnHitSlowEP10CNWSObjecti, 0x0000000000264810) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14ApplyOnHitStunEP10CNWSObjecti, 0x0000000000264a10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14CanEquipShieldEP8CNWSItemii, 0x0000000000246c50) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14CanEquipWeaponEP8CNWSItemPjiiP10CNWSPlayer, 0x00000000002460e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14ComputeAIStateEv, 0x0000000000212390) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14DMClearScriptsEi, 0x000000000024b2e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14GetAssociateIdEti, 0x000000000024be00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14GetDamageFlagsEv, 0x0000000000219d90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14GetWeaponPowerEP10CNWSObjecti, 0x000000000021e6a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14MaxAttackRangeEjii, 0x0000000000211e90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14PacifyCreatureEj, 0x000000000022d120) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14PacifyCreatureEv, 0x000000000022d030) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14RemoveFromAreaEi, 0x000000000021d210) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14SetAutoMapDataEiPjPPh, 0x000000000023cf90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14SetCombatStateEi, 0x00000000002180d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14SetStealthModeEh, 0x00000000002408a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14SummonFamiliarEv, 0x0000000000257250) -NWNXLIB_FUNCTION(_ZN12CNWSCreature14UnsummonMyselfEv, 0x000000000024af20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15ActivityManagerEj, 0x0000000000210610) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15AddTauntActionsEj, 0x0000000000227810) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15AIActionExamineEP20CNWSObjectActionNode, 0x0000000000240720) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15AIActionSetTrapEP20CNWSObjectActionNode, 0x0000000000255360) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15ApplyOnHitKnockEP10CNWSObjectj, 0x000000000026ef20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15ApplyOnHitSleepEP10CNWSObjecti, 0x0000000000264560) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15ClearActivitiesEi, 0x000000000020feb0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15CutWaypointPathEv, 0x0000000000229f40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15DoSpotDetectionEPS_i, 0x000000000021c8c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15GetDialogResrefEv, 0x000000000023ef80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15GetIsInUseRangeEjfi, 0x000000000022adc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15GetMaxHitPointsEi, 0x000000000020e4c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15GetNearestEnemyEfjii, 0x0000000000218680) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15GetTileExploredEjii, 0x0000000000235560) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15LoadAutoMapDataEP7CResGFFP10CResStruct, 0x000000000022ffc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15PossessCreatureEj, 0x000000000024b180) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15PossessFamiliarEv, 0x000000000024bec0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15RemoveAssociateEj, 0x0000000000254d20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15SaveAutoMapDataEP7CResGFFP10CResStruct, 0x0000000000214890) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15SavingThrowRollEhthjiti, 0x0000000000266a70) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15SetExcitedStateEh, 0x0000000000219090) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15SetTileExploredEjiii, 0x0000000000235470) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15SummonAssociateE7CResRef10CExoStringt, 0x0000000000256a60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature15UpdateTrapCheckEv, 0x0000000000239480) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16AddAppearActionsEi, 0x0000000000218f00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16AddAttackActionsEjiii, 0x0000000000228320) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16AddToVisibleListEjiihi, 0x0000000000249390) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16AdjustReputationEii, 0x0000000000249270) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16AIActionAreaWaitEP20CNWSObjectActionNode, 0x0000000000247040) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16AIActionDropItemEP20CNWSObjectActionNode, 0x000000000024f320) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16AIActionFlagTrapEP20CNWSObjectActionNode, 0x000000000023f4a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16ApplyOnHitPoisonEP10CNWSObjectP15CNWItemProperty, 0x0000000000265090) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16ApplyOnHitVorpalEP10CNWSObjectP15CNWItemProperty, 0x00000000002657e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16CanUnEquipWeaponEP8CNWSItem, 0x0000000000248e80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16CheckVisibleListEj, 0x0000000000249990) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16ClearAutoMapDataEv, 0x000000000022f920) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16ClearVisibleListEv, 0x0000000000249550) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16ForceMoveToPointEP16CNWSForcedAction, 0x000000000021e2d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16GetEffectSpellIdEv, 0x000000000023ef40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16GetHenchmanIndexEj, 0x0000000000233ec0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16GetPVPReputationEj, 0x0000000000252a40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16LoadFromTemplateE7CResRefP10CExoString, 0x000000000023ea30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16LoadQuickBarHackE10CExoString, 0x000000000023e960) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16LoadQuickButtonsEP7CResGFFP10CResStruct, 0x0000000000232130) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16MOVE_AWAY_RADIUSE, 0x00000000008d2ea4) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16ReadItemsFromGffEP7CResGFFP10CResStructii, 0x000000000023d0d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16RemoveBadEffectsEv, 0x00000000002199f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16RemoveDominationEv, 0x0000000000254fe0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16ResetUpdateTimesEjj, 0x000000000020dbf0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16SaveQuickBarHackE10CExoString, 0x000000000022c260) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16SaveQuickButtonsEP7CResGFFP10CResStruct, 0x0000000000214b30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16SetAssociateTypeEt, 0x0000000000232d90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16SetEffectSpellIdEj, 0x000000000023ef50) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16StopGuiTimingBarEv, 0x000000000022e430) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16TranslateAddressEjiiPiS0_, 0x00000000002167c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature16UpdateEffectPtrsEv, 0x000000000020dc20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17AddUnequipActionsEP8CNWSItemjhhiij, 0x00000000002244a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17AIActionCastSpellEP20CNWSObjectActionNode, 0x0000000000241d70) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17AIActionDisappearEP20CNWSObjectActionNode, 0x000000000024a2a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17AIActionEquipItemEP20CNWSObjectActionNode, 0x0000000000251380) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17ApplyOnHitDiseaseEP10CNWSObjectP15CNWItemProperty, 0x0000000000264e50) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17ApplyOnHitSilenceEP10CNWSObjecti, 0x0000000000264360) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17ComputeSpellRangeE10CExoStringj, 0x0000000000210660) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17DoListenDetectionEPS_i, 0x000000000021c150) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17GetQuickbarButtonEh, 0x0000000000232d70) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17InitialisePVPListEv, 0x000000000025d7f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17LoadAssociateListEP7CResGFFP10CResStructi, 0x000000000023e0a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17LoadPolymorphDataEP7CResGFFP10CResStructi, 0x00000000002131e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17PayToIdentifyItemEjj, 0x0000000000227b10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17PossessCreatureDMEjh, 0x000000000024b820) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17RemoveFromPVPListEj, 0x0000000000252bf0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17ReplyToInvitationEij, 0x000000000025d690) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17ResolveAmmunitionEj, 0x000000000025ee10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17ResolveAttackRollEP10CNWSObject, 0x000000000026aec0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17ResolveInitiativeEv, 0x0000000000218160) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17ResolveRangedMissEP10CNWSObject, 0x000000000025f750) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17SaveAssociateListEP7CResGFFP10CResStructi, 0x0000000000214870) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17SetInvitedToPartyEi, 0x000000000022ecc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17SignalMeleeDamageEP10CNWSObjecti, 0x0000000000260ed0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17StartGuiTimingBarEjh, 0x000000000022e3a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17StoreCutsceneVarsEv, 0x0000000000233f60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17TestAIStateAsModeEi, 0x0000000000211f20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17UnpossessCreatureEv, 0x000000000024b1b0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17UnpossessFamiliarEv, 0x000000000024c260) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17UpdateActionQueueEv, 0x000000000022c960) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17UpdateTrapCheckDMEv, 0x0000000000211ab0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature17UpdateVisibleListEv, 0x00000000002496c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18AddDropItemActionsEj6Vectori, 0x0000000000224780) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18AddToAssociateListEj, 0x0000000000256600) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18AIActionDisarmTrapEP20CNWSObjectActionNode, 0x0000000000253d90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18AIActionPickPocketEP20CNWSObjectActionNode, 0x000000000025c710) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18AIActionPickUpItemEP20CNWSObjectActionNode, 0x0000000000250d10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18AIActionRandomWalkEP20CNWSObjectActionNode, 0x00000000002470b0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ApplyOnHitDeafnessEP10CNWSObjecti, 0x0000000000263370) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ApplyOnHitDominateEP10CNWSObjecti, 0x0000000000263570) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ApplyOnHitWoundingEP10CNWSObjectP15CNWItemProperty, 0x00000000002656e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ApplyPoisonPayloadEP11CGameEffectjj, 0x000000000022f590) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18AutoCloseGUIPanelsEi, 0x00000000002298a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18BroadcastBattleCryEv, 0x0000000000217e50) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18BroadcastSkillDataEP16CNWCCMessageData, 0x00000000002172a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18BroadcastSpellCastEjht, 0x000000000023bf30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18BroadcastVoiceChatEh, 0x0000000000217fa0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18CancelGoldTransferEj, 0x000000000021ba60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ChangeAttackTargetEP20CNWSObjectActionNodej, 0x000000000025ebe0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18CheckMasterIsValidEjj, 0x000000000021d560) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18CheckProficienciesEP8CNWSItemj, 0x0000000000246de0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ComputeArmourClassEP8CNWSItemii, 0x0000000000224f40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18DesiredAttackRangeEji, 0x0000000000211d40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18DoStealthDetectionEPS_iPiS1_i, 0x000000000021ced0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18GetAttackResultHitEP20CNWSCombatAttackData, 0x0000000000262b30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18GetNewCombatTargetEj, 0x000000000025ead0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18InitializeQuickbarEv, 0x00000000002310f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ReadScriptsFromGffEP7CResGFFP10CResStruct, 0x0000000000212770) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18RemoveSleepEffectsEv, 0x0000000000219870) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ResetItemPossessorEv, 0x000000000024d580) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ResolveDeathAttackEPS_, 0x0000000000266310) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ResolveMeleeAttackEP10CNWSObjectii, 0x000000000026db20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ResolveOnHitEffectEP10CNWSObjectii, 0x0000000000268e80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18ResolveSneakAttackEPS_, 0x0000000000265980) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18SendFeedbackStringE10CExoStringP10CNWSPlayer, 0x00000000002297d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18SignalRangedDamageEP10CNWSObjecti, 0x0000000000260970) -NWNXLIB_FUNCTION(_ZN12CNWSCreature18WalkUpdateLocationEt, 0x0000000000259230) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19AddCastSpellActionsEjiiii6Vectorjiiihiiih, 0x0000000000223010) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19AddDisappearActionsEii, 0x0000000000218f90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19AddEquipItemActionsEP8CNWSItemjiij, 0x0000000000223d90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19AIActionExamineTrapEP20CNWSObjectActionNode, 0x000000000023fc80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19AIActionJumpToPointEP20CNWSObjectActionNode, 0x000000000025b530) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19AIActionMoveToPointEP20CNWSObjectActionNode, 0x0000000000259880) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19AIActionRecoverTrapEP20CNWSObjectActionNode, 0x0000000000252f10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19AIActionUnequipItemEP20CNWSObjectActionNode, 0x0000000000249010) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19ApplyDiseasePayloadEP11CGameEffectjj, 0x000000000022ee20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19ApplyOnHitBlindnessEP10CNWSObjecti, 0x0000000000262d20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19ApplyOnHitCastSpellEP10CNWSObjectP15CNWItemPropertyP8CNWSItem, 0x000000000026b4f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19ApplyOnHitConfusionEP10CNWSObjecti, 0x0000000000262f30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19BroadcastFloatyDataEP16CNWCCMessageData, 0x000000000020ee60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19DriveUpdateLocationEi, 0x00000000002578f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19GetCanSlayAlignmentEP10CNWSObjectP15CNWItemProperty, 0x0000000000262a20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19GetPVPPlayerLikesMeEj, 0x0000000000252b90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19GetTotalEffectBonusEhP10CNWSObjectiihhhhi, 0x000000000021f900) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19GetTurnResistanceHDEv, 0x000000000022b7a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19GetUseMonkAbilitiesEv, 0x0000000000216430) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19RemoveAllAssociatesEv, 0x0000000000252e20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19ResolveOnHitVisualsEP10CNWSObject, 0x0000000000262b50) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19ResolveRangedAttackEP10CNWSObjectii, 0x000000000026c550) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19RestoreCutsceneVarsEv, 0x0000000000233f80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19SendFeedbackMessageEtP16CNWCCMessageDataP10CNWSPlayer, 0x0000000000222f20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19SetAllTilesExploredEji, 0x0000000000235fe0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19SetBroadcastedAOOToEi, 0x0000000000217560) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19SetPVPPlayerLikesMeEjii, 0x000000000025bde0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19UnpossessCreatureDMEv, 0x000000000024bdc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature19UpdatePersonalSpaceEv, 0x000000000021bb10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20AddMoveToPointActionEt6Vectorjjiffiiiiii, 0x0000000000210ae0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20AddPickPocketActionsEj, 0x00000000002115e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20AddPickUpItemActionsEjjhh, 0x0000000000211770) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20AIActionAttackObjectEP20CNWSObjectActionNode, 0x000000000026df30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20AIActionCounterSpellEP20CNWSObjectActionNode, 0x000000000024a860) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20AIActionJumpToObjectEP20CNWSObjectActionNode, 0x000000000025ad60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20AIActionOrientCameraEP20CNWSObjectActionNode, 0x0000000000248db0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20ApplyDeathExperienceEv, 0x000000000023aeb0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20ApplyOnHitLevelDrainEP10CNWSObjectP15CNWItemProperty, 0x0000000000264f10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20CalculateDamagePowerEP10CNWSObjecti, 0x000000000021eaf0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20CalculateSpellSaveDCEi, 0x00000000002306e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20CleanInvitationListsEi, 0x000000000024eb70) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20DestroyEquippedItemsEv, 0x0000000000211ac0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20GetBodyBagAppearanceEv, 0x000000000022c440) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20GetIsWeaponEffectiveEji, 0x000000000021e160) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20GetSpotCheckDistanceEv, 0x000000000022b740) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20RealizeAssociateListEv, 0x0000000000238110) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20ReconcileAutoMapDataEv, 0x0000000000235450) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20RemoveCounterspellerEj, 0x0000000000211c20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20ResolveDamageShieldsEPS_, 0x00000000002618a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20ResolveItemCastSpellEP10CNWSObject, 0x000000000026b7d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature20UpdateSpecialAttacksEv, 0x000000000022c890) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21AIActionAnimalEmpathyEP20CNWSObjectActionNode, 0x0000000000249a20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21AIActionItemCastSpellEP20CNWSObjectActionNode, 0x0000000000240f00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21ApplyOnHitDeathAttackEP10CNWSObjecti, 0x0000000000264090) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21ApplyOnHitDispelMagicEP10CNWSObjectj, 0x000000000026ebe0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21ApplyOnHitDispelMagicEP10CNWSObjectP15CNWItemProperty, 0x0000000000264d90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21CanEquipMiscellaneousEP8CNWSItemPjii, 0x0000000000246f50) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21DMResetClearedScriptsEi, 0x000000000024b8c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21ExternalResolveAttackEji, 0x000000000026ebc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21GetCreatureReputationEjii, 0x000000000025c2e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21GetFilteredEffectListEh, 0x000000000023d800) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21GetIsCreatureBumpableEPS_, 0x000000000022b860) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21GetMovementRateFactorEv, 0x0000000000216560) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21GetRelativeWeaponSizeEP8CNWSItem, 0x0000000000219ae0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21GetVisibleListElementEj, 0x00000000002499d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21RemoveFromVisibleListEj, 0x00000000002495e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21RemoveWoundingEffectsEv, 0x0000000000219a80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21ResolveSafeProjectileEji, 0x000000000025ecb0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21RestoreItemPropertiesEv, 0x0000000000218610) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21SetMovementRateFactorEf, 0x0000000000214fe0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21SetPCDominatedScriptsEv, 0x000000000024c7e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature21SummonAnimalCompanionEv, 0x0000000000256da0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22AddAnimalEmpathyActionEj, 0x00000000002276e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22AddCounterSpellActionsEj, 0x0000000000218cf0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22AIActionRepositoryMoveEP20CNWSObjectActionNode, 0x00000000002514f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22ApplyOnHitLesserDispelEP10CNWSObjectj, 0x000000000026f130) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22ComputeAIStateOnActionEij, 0x0000000000211f30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22CopyQuickButtonsFromDMEP10CNWSPlayer, 0x0000000000214bc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22GetAmmunitionAvailableEi, 0x000000000025ef80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22GetCanCarrySqlDatabaseEv, 0x000000000023ef60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22GetDialogInterruptableEv, 0x000000000023eee0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22GetDominatedCreatureIdEv, 0x000000000024d520) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22GetIsPossessedFamiliarEv, 0x000000000024d560) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22GetListenCheckDistanceEv, 0x000000000022b770) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22GetNumAssociatesOfTypeEt, 0x000000000024c750) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22GetRangeWeaponEquippedEv, 0x0000000000211bc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22RemoveDominationEffectEv, 0x000000000024d170) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22ReprocessAssociateListEv, 0x0000000000256960) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22ResolveElementalDamageEP10CNWSObject, 0x0000000000261830) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22ResolveMeleeAnimationsEiiP10CNWSObjecti, 0x0000000000260eb0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22ResolvePostMeleeDamageEP10CNWSObject, 0x0000000000269f90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22SetQuickbarButton_ItemEhjij, 0x000000000021d710) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22UpdateCombatRoundTimerEv, 0x0000000000211c60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22UpdateEncumbranceStateEi, 0x000000000024eec0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature22UpdateSubareasOnMoveToE6VectorS0_iP13CExoArrayListIjEi, 0x0000000000257660) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23AddItemCastSpellActionsEjii6Vectorjii, 0x0000000000210c20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23AddToInvitationsIgnoredEj, 0x000000000025d5d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23AddToInvitationsOfferedEj, 0x000000000025d510) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23ApplyOnHitAbilityDamageEP10CNWSObjectP15CNWItemProperty, 0x0000000000264c30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23ApplyOnHitGreaterDispelEP10CNWSObjectj, 0x000000000026ed80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23ApplyOnHitSlayAlignmentEP10CNWSObjectP15CNWItemProperty, 0x0000000000265280) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23ClearPersonalReputationEj, 0x000000000025bb30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23DisplayFloatyDataToSelfEj, 0x000000000022ed10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23EquipMostEffectiveArmorEv, 0x0000000000224240) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23ReceiveAssociateCommandEi, 0x000000000024d220) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23RemoveFromAssociateListEj, 0x0000000000254cf0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23ResetPCDominatedScriptsEv, 0x000000000024ccc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23ResolveDefensiveEffectsEP10CNWSObjecti, 0x0000000000268260) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23ResolvePostRangedDamageEP10CNWSObject, 0x000000000026a920) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23ResolveRangedAnimationsEP10CNWSObjecti, 0x0000000000262a00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23SawTrapInformAssociatesEj, 0x00000000002564c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23SetDefensiveCastingModeEh, 0x0000000000240980) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23SetQuickbarButton_SpellEhhjhh, 0x000000000021d770) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23TerminateClientSidePathEi, 0x0000000000247570) -NWNXLIB_FUNCTION(_ZN12CNWSCreature23UpdateExcitedStateTimerEv, 0x0000000000219380) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24AddRepositoryMoveActionsEP8CNWSItemjhh, 0x0000000000211530) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24AIActionCheckMoveToPointEP20CNWSObjectActionNode, 0x0000000000245b50) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24BroadcastSavingThrowDataEP16CNWCCMessageData, 0x0000000000217410) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24BroadcastWhirlwindAttackEi, 0x0000000000233fa0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24CalculateDeathExperienceEii, 0x0000000000214de0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24CheckUseMagicDeviceSkillEP8CNWSItemi, 0x000000000024d670) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24ComputeTotalWalkDistanceEv, 0x0000000000247da0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24DecrementSpellReadyCountEjhhhh, 0x000000000021e650) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24RemoveItemFromRepositoryEP8CNWSItemi, 0x0000000000231020) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24UpdateAttributesOnEffectEP11CGameEffecti, 0x0000000000229b40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature24ValidateCounterSpellDataEjhh, 0x0000000000217d60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25AIActionChangeFacingPointEP20CNWSObjectActionNode, 0x0000000000244ac0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25AIActionCheckMoveToObjectEP20CNWSObjectActionNode, 0x0000000000245440) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25AIActionForceFollowObjectEP20CNWSObjectActionNode, 0x0000000000248a10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25AIActionWaitForEndOfRoundEP20CNWSObjectActionNode, 0x00000000002491c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25ApplyOnHitSlayRacialGroupEP10CNWSObjectP15CNWItemProperty, 0x0000000000265570) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25BroadcastAssociateCommandEi, 0x00000000002184c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25BroadcastDeathDataToPartyEP16CNWCCMessageDataPS_, 0x0000000000216f90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25CheckItemRaceRestrictionsEP8CNWSItem, 0x000000000024d960) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25ClearHostileActionsVersusEPS_, 0x000000000022d010) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25ComputeTotalWeightCarriedEv, 0x0000000000211b30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25CreateDefaultQuickButtonsEv, 0x0000000000231260) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25GetIsInInvitationsIgnoredEj, 0x000000000024e8f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25GetIsInInvitationsOfferedEj, 0x000000000024e670) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25HandleSubAreaStateChangesEP13CExoArrayListIjES2_i, 0x00000000002475e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25QuickbarButton_RemoveItemEj, 0x000000000021df40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature25ResolveMeleeSpecialAttackEiiP10CNWSObjecti, 0x000000000026c760) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26AIActionChangeFacingObjectEP20CNWSObjectActionNode, 0x0000000000244940) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26BroadcastAttackDataToPartyEP16CNWCCMessageDataP20CNWSCombatAttackDataPS_, 0x0000000000216a10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26BroadcastDamageDataToPartyEP16CNWCCMessageDataPS_, 0x0000000000216d00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26CheckInventoryForPlotItemsEv, 0x000000000022c5d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26CheckItemClassRestrictionsEP8CNWSItem, 0x000000000024d860) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26ComputeTotalEquippedWeightEv, 0x0000000000211b60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26FailedOpenInformAssociatesEv, 0x0000000000252b10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26GetIsAbleToPossessFamiliarEv, 0x000000000021ba40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26GetLockOrientationToObjectEv, 0x000000000023eed0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26GetSpellOrHealActionQueuedEv, 0x0000000000234430) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26GetTakesCommandsFromPlayerEP10CNWSPlayer, 0x00000000002350f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26LoadPersonalReputationListEP7CResGFFP10CResStruct, 0x000000000023dd90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26QuickbarButton_RemoveSpellEj, 0x000000000021e030) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26RemoveSpellActionFromRoundEv, 0x000000000022ce00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26ResolveRangedSpecialAttackEP10CNWSObjecti, 0x000000000026bf40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26SavePersonalReputationListEP7CResGFFP10CResStruct, 0x0000000000212fd0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26SetAssociateListenPatternsEv, 0x000000000024abe0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26SetLockOrientationToObjectEj, 0x000000000020efe0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26SpawnInHeartbeatPerceptionEi, 0x0000000000235840) -NWNXLIB_FUNCTION(_ZN12CNWSCreature26WalkUpdateLocationDistanceEfP6VectorS1_P13CExoArrayListIjE, 0x0000000000248290) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27AddMoveToPointActionToFrontEt6Vectorjjiffiiiiii, 0x00000000002107f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27AddToPersonalReputationListEjiif, 0x000000000025d920) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27AddUseTalentOnObjectActionsEiijhjihh, 0x0000000000233cd0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27ApplyOnHitMordysDisjunctionEP10CNWSObjectj, 0x000000000026f2d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27BringAssociatesToNewFactionEi, 0x000000000024eab0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27BroadcastCombatStateToPartyEv, 0x0000000000219210) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27CalculateMaxElementalDamageEP10CNWSObjecti, 0x0000000000261850) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27ComputeModifiedMovementRateEv, 0x000000000022bf50) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27CreateDefaultQuickButtonsDMEv, 0x0000000000214b50) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27EquipMostDamagingAmmunitionEjP8CNWSItem, 0x0000000000227260) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27NotifyAssociateActionToggleEi, 0x0000000000232dc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27ProcessPendingCombatActionsEv, 0x000000000022e200) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27ResolveCachedSpecialAttacksEv, 0x00000000002614e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature27ResolveSituationalModifiersEP10CNWSObject, 0x0000000000261620) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28ApplyOnHitSlayAlignmentGroupEP10CNWSObjectP15CNWItemProperty, 0x00000000002653f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28BroadcastAttackOfOpportunityEji, 0x00000000002345a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28CheckAttackClearLineToTargetEj6VectorP8CNWSArea, 0x000000000025e8a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28ConvertModeToggleQuickButtonEP18CNWSQuickbarButton, 0x00000000002149b0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28DoPerceptionUpdateOnCreatureEPS_i, 0x000000000022d680) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28EquipMostDamagingMeleeWeaponEjii, 0x00000000002268d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28GetStandardFactionReputationEi, 0x0000000000252ca0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28RemoveCharmEffectsByOBJECTIDEji, 0x00000000002193b0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28RemoveFromInvitationsOfferedEj, 0x000000000024e830) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28SetStandardFactionReputationEii, 0x000000000025bf10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28UpdateSubareasOnJumpPositionE6Vectorj, 0x000000000025ab60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature28XP_CALCULATIONS_MAX_XP_SCALEE, 0x00000000008d2e94) -NWNXLIB_FUNCTION(_ZN12CNWSCreature29AddUseTalentAtLocationActionsEii6Vectorhjihh, 0x0000000000233bb0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature29EquipMostDamagingRangedWeaponEj, 0x0000000000227280) -NWNXLIB_FUNCTION(_ZN12CNWSCreature29RemoveCharmEffectsByFactionIDEii, 0x0000000000219610) -NWNXLIB_FUNCTION(_ZN12CNWSCreature29SetQuickbarButton_CommandLineEhRK10CExoStringS2_, 0x000000000021ddc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature29UpdateAppearanceDependantInfoEv, 0x000000000021bd30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature30AIActionCheckForceFollowObjectEP20CNWSObjectActionNode, 0x0000000000248ca0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature30AIActionCheckMoveToPointRadiusEP20CNWSObjectActionNode, 0x0000000000245db0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature30ApplyOnHitVampiricRegenerationEP10CNWSObjectP15CNWItemProperty, 0x0000000000265890) -NWNXLIB_FUNCTION(_ZN12CNWSCreature30CheckItemAlignmentRestrictionsEP8CNWSItem, 0x000000000024da30) -NWNXLIB_FUNCTION(_ZN12CNWSCreature30CleanOutPersonalReputationListEv, 0x000000000025c580) -NWNXLIB_FUNCTION(_ZN12CNWSCreature30GetHasInvisbilityEffectAppliedEv, 0x0000000000234500) -NWNXLIB_FUNCTION(_ZN12CNWSCreature30GetNumCounterSpellingCreaturesEj, 0x0000000000217590) -NWNXLIB_FUNCTION(_ZN12CNWSCreature30RecomputeAmbientAnimationStateEv, 0x0000000000218420) -NWNXLIB_FUNCTION(_ZN12CNWSCreature30WalkUpdateLocationTestDistanceE6VectorS0_, 0x0000000000247ef0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature31AddPathfindingWaitActionToFrontEt, 0x0000000000210a20) -NWNXLIB_FUNCTION(_ZN12CNWSCreature31AIActionCheckMoveAwayFromObjectEP20CNWSObjectActionNode, 0x0000000000244bc0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature31AIActionCheckMoveToObjectRadiusEP20CNWSObjectActionNode, 0x00000000002456c0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature31CalculateProjectileTimeToTargetE6Vectori, 0x00000000002624f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature31ProcessMasterDeathForAssociatesEv, 0x0000000000255060) -NWNXLIB_FUNCTION(_ZN12CNWSCreature31RemoveCombatInvisibilityEffectsEv, 0x000000000022a650) -NWNXLIB_FUNCTION(_ZN12CNWSCreature31SetAssociatesToForgetAggressionEj, 0x000000000025bbf0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature31XP_CALCULATIONS_PC_BONUS_AMOUNTE, 0x00000000008d2e9c) -NWNXLIB_FUNCTION(_ZN12CNWSCreature32RestorePolymorphToOutputCreatureEP27CNWSCreRestorePolymorphData, 0x0000000000234f80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature32SetQuickbarButton_GeneralNoParamEhh, 0x000000000021dec0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature32UpdateAppearanceForEquippedItemsEv, 0x0000000000219df0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature32XP_CALCULATIONS_HENCHMEN_ALLOWEDE, 0x00000000008d2ea0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature33AIActionCheckInterAreaPathfindingEP20CNWSObjectActionNode, 0x0000000000245160) -NWNXLIB_FUNCTION(_ZN12CNWSCreature33AIActionCheckMoveAwayFromLocationEP20CNWSObjectActionNode, 0x0000000000244ef0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature33CreateDefaultQuickButtons_AddFeatERhti, 0x0000000000214b10) -NWNXLIB_FUNCTION(_ZN12CNWSCreature33RelayQuickChatCommandToAssociatesEt, 0x000000000024d430) -NWNXLIB_FUNCTION(_ZN12CNWSCreature33RemovePolymorphFromOutputCreatureEv, 0x0000000000234c90) -NWNXLIB_FUNCTION(_ZN12CNWSCreature33RestoreItemPropertiesInRepositoryEP15CItemRepository, 0x0000000000218530) -NWNXLIB_FUNCTION(_ZN12CNWSCreature33SetQuickbarButton_GeneralINTParamEhhi, 0x000000000021df00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature34SetQuickbarButton_AssociateCommandEhitj, 0x000000000021d820) -NWNXLIB_FUNCTION(_ZN12CNWSCreature34SetQuickbarButton_SpellLikeAbilityEhjh, 0x000000000021d7d0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature35CreateDefaultQuickButtons_CheckItemEP8CNWSItemRjS2_S2_S2_, 0x0000000000214a60) -NWNXLIB_FUNCTION(_ZN12CNWSCreature36AIActionEncounterCreatureDestroySelfEv, 0x0000000000246000) -NWNXLIB_FUNCTION(_ZN12CNWSCreature37CalculatePersonalReputationAdjustmentEj, 0x000000000025c050) -NWNXLIB_FUNCTION(_ZN12CNWSCreature37XP_CALCULATIONS_HENCHMEN_BONUS_AMOUNTE, 0x00000000008d2e98) -NWNXLIB_FUNCTION(_ZN12CNWSCreature40SetQuickbarButton_DM_General_ResRefParamEhhRK7CResRef, 0x000000000021de40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature42SetQuickbarButton_DungeonMaster_CreateItemEhRK7CResRefRK10CExoString, 0x000000000021d940) -NWNXLIB_FUNCTION(_ZN12CNWSCreature44SetQuickbarButton_DungeonMaster_CreatePortalEhRK7CResRefRK10CExoString, 0x000000000021dc40) -NWNXLIB_FUNCTION(_ZN12CNWSCreature45SetQuickbarButton_DungeonMaster_CreateTriggerEhRK7CResRefRK10CExoString, 0x000000000021db80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature46SetQuickbarButton_DungeonMaster_CreateCreatureEhRK7CResRefRK10CExoString, 0x000000000021d880) -NWNXLIB_FUNCTION(_ZN12CNWSCreature46SetQuickbarButton_DungeonMaster_CreateWaypointEhRK7CResRefRK10CExoString, 0x000000000021dac0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature47SetQuickbarButton_DungeonMaster_CreateEncounterEhRK7CResRefRK10CExoString, 0x000000000021da00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature47SetQuickbarButton_DungeonMaster_CreatePlaceableEhRK7CResRefRK10CExoString, 0x000000000021dd00) -NWNXLIB_FUNCTION(_ZN12CNWSCreature4RestEii, 0x0000000000227f80) -NWNXLIB_FUNCTION(_ZN12CNWSCreature5SetIdEj, 0x000000000020e260) -NWNXLIB_FUNCTION(_ZN12CNWSCreature7AddGoldEii, 0x0000000000227920) -NWNXLIB_FUNCTION(_ZN12CNWSCreature7GetModeEh, 0x000000000021c050) -NWNXLIB_FUNCTION(_ZN12CNWSCreature7SetGoldEi, 0x000000000021e630) -NWNXLIB_FUNCTION(_ZN12CNWSCreature7SetModeEhi, 0x0000000000233310) -NWNXLIB_FUNCTION(_ZN12CNWSCreature7UseFeatEttjjP6Vector, 0x0000000000228760) -NWNXLIB_FUNCTION(_ZN12CNWSCreature7UseItemEjhhj6Vectorji, 0x00000000002338f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature8AIUpdateEv, 0x000000000023a790) -NWNXLIB_FUNCTION(_ZN12CNWSCreature8DoDamageEi, 0x000000000020ecd0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature8GetBlindEv, 0x000000000022a610) -NWNXLIB_FUNCTION(_ZN12CNWSCreature8RunEquipEjjj, 0x00000000002259f0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature8UseSkillEhhj6Vectorjji, 0x0000000000233360) -NWNXLIB_FUNCTION(_ZN12CNWSCreature9AddToAreaEP8CNWSAreafffii, 0x0000000000236100) -NWNXLIB_FUNCTION(_ZN12CNWSCreature9DumpToLogEv, 0x000000000022f850) -NWNXLIB_FUNCTION(_ZN12CNWSCreature9EquipItemEjP8CNWSItemii, 0x0000000000225840) -NWNXLIB_FUNCTION(_ZN12CNWSCreature9GetGenderEv, 0x000000000023f320) -NWNXLIB_FUNCTION(_ZN12CNWSCreature9MergeItemEP8CNWSItemS1_, 0x0000000000224070) -NWNXLIB_FUNCTION(_ZN12CNWSCreature9PolymorphEiP11CGameEffecti, 0x00000000002383a0) -NWNXLIB_FUNCTION(_ZN12CNWSCreature9SplitItemEP8CNWSItemi, 0x0000000000211940) -NWNXLIB_FUNCTION(_ZN12CNWSCreatureC1Ejii, 0x00000000002150e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreatureC2Ejii, 0x00000000002150e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreatureD0Ev, 0x000000000022ff90) -NWNXLIB_FUNCTION(_ZN12CNWSCreatureD1Ev, 0x000000000022f9e0) -NWNXLIB_FUNCTION(_ZN12CNWSCreatureD2Ev, 0x000000000022f9e0) -NWNXLIB_FUNCTION(_ZN12CNWSSysAdmin13AsNWSSysAdminEv, 0x00000000003f1ca0) -NWNXLIB_FUNCTION(_ZN12CNWSSysAdminC1Ej, 0x00000000003f1c70) -NWNXLIB_FUNCTION(_ZN12CNWSSysAdminC2Ej, 0x00000000003f1c70) -NWNXLIB_FUNCTION(_ZN12CNWSSysAdminD0Ev, 0x00000000003f1c40) -NWNXLIB_FUNCTION(_ZN12CNWSSysAdminD1Ev, 0x00000000003f1c20) -NWNXLIB_FUNCTION(_ZN12CNWSSysAdminD2Ev, 0x00000000003f1c20) -NWNXLIB_FUNCTION(_ZN12CNWSWaypoint12EventHandlerEjjPvjj, 0x00000000003f3cd0) -NWNXLIB_FUNCTION(_ZN12CNWSWaypoint12GetFirstNameEv, 0x00000000003f3eb0) -NWNXLIB_FUNCTION(_ZN12CNWSWaypoint12LoadWaypointEP7CResGFFP10CResStructP10CExoString, 0x00000000003f33a0) -NWNXLIB_FUNCTION(_ZN12CNWSWaypoint12SaveWaypointEP7CResGFFP10CResStruct, 0x00000000003f38b0) -NWNXLIB_FUNCTION(_ZN12CNWSWaypoint13AsNWSWaypointEv, 0x00000000003f3ea0) -NWNXLIB_FUNCTION(_ZN12CNWSWaypoint14RemoveFromAreaEv, 0x00000000003f3ab0) -NWNXLIB_FUNCTION(_ZN12CNWSWaypoint16LoadFromTemplateE7CResRefP10CExoString, 0x00000000003f3d10) -NWNXLIB_FUNCTION(_ZN12CNWSWaypoint8AIUpdateEv, 0x00000000003f32f0) -NWNXLIB_FUNCTION(_ZN12CNWSWaypoint9AddToAreaEP8CNWSAreafffi, 0x00000000003f3c00) -NWNXLIB_FUNCTION(_ZN12CNWSWaypointC1Ej, 0x00000000003f3300) -NWNXLIB_FUNCTION(_ZN12CNWSWaypointC2Ej, 0x00000000003f3300) -NWNXLIB_FUNCTION(_ZN12CNWSWaypointD0Ev, 0x00000000003f3bd0) -NWNXLIB_FUNCTION(_ZN12CNWSWaypointD1Ev, 0x00000000003f3b00) -NWNXLIB_FUNCTION(_ZN12CNWSWaypointD2Ev, 0x00000000003f3b00) -NWNXLIB_FUNCTION(_ZN12CScriptEvent10GetIntegerEi, 0x0000000000313000) -NWNXLIB_FUNCTION(_ZN12CScriptEvent10SetIntegerEii, 0x00000000003134c0) -NWNXLIB_FUNCTION(_ZN12CScriptEvent11GetObjectIDEi, 0x0000000000313040) -NWNXLIB_FUNCTION(_ZN12CScriptEvent11SetObjectIDEij, 0x00000000003136b0) -NWNXLIB_FUNCTION(_ZN12CScriptEvent15CopyScriptEventEPS_, 0x00000000003136f0) -NWNXLIB_FUNCTION(_ZN12CScriptEvent8GetFloatEi, 0x0000000000313020) -NWNXLIB_FUNCTION(_ZN12CScriptEvent8SetFloatEif, 0x0000000000313500) -NWNXLIB_FUNCTION(_ZN12CScriptEvent9GetStringEi, 0x0000000000313060) -NWNXLIB_FUNCTION(_ZN12CScriptEvent9LoadEventEP7CResGFFP10CResStruct, 0x0000000000313820) -NWNXLIB_FUNCTION(_ZN12CScriptEvent9SaveEventEP7CResGFFP10CResStruct, 0x00000000003130b0) -NWNXLIB_FUNCTION(_ZN12CScriptEvent9SetStringEi10CExoString, 0x0000000000313540) -NWNXLIB_FUNCTION(_ZN12CScriptEventC1Ev, 0x0000000000312fb0) -NWNXLIB_FUNCTION(_ZN12CScriptEventC2Ev, 0x0000000000312fb0) -NWNXLIB_FUNCTION(_ZN12CScriptEventD1Ev, 0x0000000000313590) -NWNXLIB_FUNCTION(_ZN12CScriptEventD2Ev, 0x0000000000313590) -NWNXLIB_FUNCTION(_ZNK12CScriptEventeqERKS_, 0x0000000000313320) -NWNXLIB_FUNCTION(_ZNK12CScriptEventneERKS_, 0x00000000003134a0) -NWNXLIB_FUNCTION(_ZN13CExoAliasList3AddE10CExoStringS0_, 0x0000000000125970) -NWNXLIB_FUNCTION(_ZN13CExoAliasList5ClearEv, 0x0000000000125a20) -NWNXLIB_FUNCTION(_ZN13CExoAliasList6DeleteE10CExoString, 0x0000000000125a30) -NWNXLIB_FUNCTION(_ZN13CExoAliasListC1Ev, 0x00000000001258f0) -NWNXLIB_FUNCTION(_ZN13CExoAliasListC2Ev, 0x00000000001258f0) -NWNXLIB_FUNCTION(_ZN13CExoAliasListD1Ev, 0x0000000000125930) -NWNXLIB_FUNCTION(_ZN13CExoAliasListD2Ev, 0x0000000000125930) -NWNXLIB_FUNCTION(_ZNK13CExoAliasList12GetAliasPathERK10CExoStringi, 0x0000000000125aa0) -NWNXLIB_FUNCTION(_ZNK13CExoAliasList15ResolveFileNameERK10CExoStringt, 0x0000000000125ab0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI10CExoStringE3AddES0_, 0x00000000001244d0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI10CExoStringE6InsertES0_i, 0x0000000000124520) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI10CExoStringE6RemoveES0_, 0x000000000036fcb0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI10CExoStringE7SetSizeEi, 0x0000000000313dc0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI10CExoStringE8AllocateEi, 0x00000000000f57e0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI10CExoStringE9AddUniqueES0_, 0x00000000000f5960) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI10CExoStringED1Ev, 0x00000000000f54c0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI10CExoStringED2Ev, 0x00000000000f54c0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI11ScriptParamE3AddES0_, 0x00000000003c5700) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI11ScriptParamE8AllocateEi, 0x00000000003c5540) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI11ScriptParamED1Ev, 0x00000000002f4890) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI11ScriptParamED2Ev, 0x00000000002f4890) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI12CNWSPVPEntryE3AddES0_, 0x000000000025e500) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI13SJournalEntryE3AddES0_, 0x00000000002c8690) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI13SJournalEntryE8AllocateEi, 0x00000000002c8400) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI15ChangeContainerE9AddUniqueES0_, 0x000000000033eae0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI15CNWItemPropertyE3AddES0_, 0x00000000002c66d0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI15CNWItemPropertyE7SetSizeEi, 0x00000000002c6620) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI15CNWItemPropertyE8AllocateEi, 0x00000000002c63d0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI15CNWItemPropertyE8DelIndexEi, 0x00000000002c62e0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI15CNWItemPropertyEaSERKS1_, 0x00000000002c67a0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI15CNWItemPropertyED1Ev, 0x00000000002c6260) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI15CNWItemPropertyED2Ev, 0x00000000002c6260) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI18CWorldJournalEntryE3AddES0_, 0x00000000002dfac0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI18CWorldJournalEntryE8AllocateEi, 0x00000000002df880) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI18CWorldJournalEntryE8DelIndexEi, 0x00000000002df560) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI18CWorldJournalEntryED1Ev, 0x00000000002df2d0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI18CWorldJournalEntryED2Ev, 0x00000000002df2d0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI18TextureReplaceInfoE3AddES0_, 0x00000000002f4bf0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI18TextureReplaceInfoE8AllocateEi, 0x000000000033eca0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI19MaterialShaderParamE3AddES0_, 0x00000000002f4a00) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI19MaterialShaderParamE8AllocateEi, 0x000000000033ed90) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI21CNWSInvitationDetailsE3AddES0_, 0x000000000025e400) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI22CNWSPersonalReputationE3AddES0_, 0x0000000000312f40) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI22CNWSPersonalReputationE8AllocateEi, 0x000000000023f210) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI22CNWSPersonalReputationE8DelIndexEi, 0x000000000025e2b0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI24CNetLayerPlayerCDKeyInfoE8AllocateEi, 0x0000000000161c20) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI24CNetLayerPlayerCDKeyInfoED1Ev, 0x0000000000161ae0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI24CNetLayerPlayerCDKeyInfoED2Ev, 0x0000000000161ae0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI29CNWSPlayerJournalQuestUpdatesE3AddES0_, 0x00000000002c83a0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI29CNWSPlayerJournalQuestUpdatesE8AllocateEi, 0x00000000002c81f0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI29CNWSPlayerJournalQuestUpdatesED1Ev, 0x000000000030e970) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI29CNWSPlayerJournalQuestUpdatesED2Ev, 0x000000000030e970) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI29NWPlayerCharacterListClass_stE3AddES0_, 0x000000000033e770) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI7CResRefE3AddES0_, 0x000000000036f940) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI9CFileInfoE3AddES0_, 0x00000000001247b0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI9CFileInfoE8AllocateEi, 0x0000000000124600) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI9CFileInfoED1Ev, 0x00000000003f0910) -NWNXLIB_FUNCTION(_ZN13CExoArrayListI9CFileInfoED2Ev, 0x00000000003f0910) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIcE3AddEc, 0x000000000033ea20) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIfE3AddEf, 0x00000000002bcb90) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIfE6InsertEfi, 0x0000000000440ca0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIfE7SetSizeEi, 0x00000000001da640) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIfE8AllocateEi, 0x0000000000313d30) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIfED1Ev, 0x00000000002bcb40) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIfED2Ev, 0x00000000002bcb40) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIhE3AddEh, 0x000000000029bdc0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIiE3AddEi, 0x00000000000f57a0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIiE7SetSizeEi, 0x00000000001da580) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIiE8AllocateEi, 0x00000000000f5710) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIiE9AddUniqueEi, 0x00000000002c8fb0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIjE3AddEj, 0x00000000000f7b40) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIjE6RemoveEj, 0x000000000023f0b0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIjE7SetSizeEi, 0x00000000001da700) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIjE8AllocateEi, 0x00000000002df7f0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIjE9AddUniqueEj, 0x00000000001310f0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIjEaSERKS0_, 0x0000000000131090) -NWNXLIB_FUNCTION(_ZN13CExoArrayListImE3AddEm, 0x00000000002b7900) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIN14CConnectionLib13RoomListEntryEE3AddES1_, 0x00000000000f7a60) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIN6CSteam12InstalledModEE8AllocateEi, 0x0000000000162540) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIN6CSteam12InstalledModEEC1ERKS2_, 0x0000000000162780) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIN6CSteam12InstalledModEEC2ERKS2_, 0x0000000000162780) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIN6CSteam12InstalledModEED1Ev, 0x0000000000168130) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIN6CSteam12InstalledModEED2Ev, 0x0000000000168130) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP10CExoStringE3AddES1_, 0x00000000003c6ca0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP10CExoStringEC1ERKS2_, 0x0000000000440df0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP10CExoStringEC2ERKS2_, 0x0000000000440df0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP10CSpell_AddE3AddES1_, 0x000000000033e690) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP11CGameEffectE3AddES1_, 0x000000000023f130) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP11CGameEffectE6InsertES1_i, 0x00000000002f4d60) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP11CGameEffectEaSERKS2_, 0x000000000029bba0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP11CGameObjectE3AddES1_, 0x00000000003b0970) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP11CNWSFactionE3AddES1_, 0x00000000002fe350) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP12CExoKeyTableE6InsertES1_i, 0x0000000000143b70) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP12CExoKeyTableEC1ERKS2_, 0x00000000004696e0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP12CExoKeyTableEC2ERKS2_, 0x00000000004696e0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP12SMstKeyEntryE3AddES1_, 0x00000000007907a0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP13CNWLevelStatsE3AddES1_, 0x000000000029bac0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP13SMstNameEntryE3AddES1_, 0x0000000000790880) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP14SMstBuddyEntryE3AddES1_, 0x0000000000790960) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP16CNWCCMessageDataE3AddES1_, 0x000000000026f480) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP16SMstDigiDistInfoE6RemoveES1_, 0x0000000000790a40) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP17CFeatUseListEntryE3AddES1_, 0x000000000029bce0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP17CNWVisibilityNodeE3AddES1_, 0x000000000033e5b0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP18CNWSExpressionListE3AddES1_, 0x00000000003c6ae0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP18CNWSExpressionNodeE3AddES1_, 0x00000000003c6bc0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP19CNWSSpellScriptDataE3AddES1_, 0x000000000026f560) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP22CCombatInformationNodeE3AddES1_, 0x000000000029b900) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP24NWPlayerCharacterList_stE9AddUniqueES1_, 0x000000000033e8f0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP26CNWTileSurfaceMeshAABBNodeE3AddES1_, 0x000000000020a510) -NWNXLIB_FUNCTION(_ZN13CExoArrayListIP8CNWSItemE3AddES1_, 0x000000000025e320) -NWNXLIB_FUNCTION(_ZN13CExoArrayListItE3AddEt, 0x000000000029b9e0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListItE6InsertEti, 0x00000000003c0f40) -NWNXLIB_FUNCTION(_ZN13CExoArrayListItE7SetSizeEi, 0x00000000003c0fb0) -NWNXLIB_FUNCTION(_ZN13CExoArrayListItE8AllocateEi, 0x00000000003c0ec0) -NWNXLIB_FUNCTION(_ZNK13CExoArrayListI10CExoStringE8ContainsES0_, 0x000000000036fc40) -NWNXLIB_FUNCTION(_ZNK13CExoArrayListI7CResRefE8ContainsES0_, 0x000000000036fae0) -NWNXLIB_FUNCTION(_ZNK13CExoArrayListIP24NWPlayerCharacterList_stE13DerefContainsES1_, 0x000000000033e850) -NWNXLIB_FUNCTION(_ZN13CExoLocString12RemoveStringEi, 0x0000000000128ae0) -NWNXLIB_FUNCTION(_ZN13CExoLocString12RemoveStringEih, 0x0000000000128b20) -NWNXLIB_FUNCTION(_ZN13CExoLocString14ClearLocStringEv, 0x0000000000128820) -NWNXLIB_FUNCTION(_ZN13CExoLocString9AddStringEi10CExoStringh, 0x00000000001286b0) -NWNXLIB_FUNCTION(_ZN13CExoLocStringaSERKS_, 0x0000000000128680) -NWNXLIB_FUNCTION(_ZN13CExoLocStringC1Ej, 0x0000000000128500) -NWNXLIB_FUNCTION(_ZN13CExoLocStringC1ERK10CExoStringi, 0x0000000000128740) -NWNXLIB_FUNCTION(_ZN13CExoLocStringC1ERKS_, 0x0000000000128560) -NWNXLIB_FUNCTION(_ZN13CExoLocStringC1Ev, 0x00000000001284b0) -NWNXLIB_FUNCTION(_ZN13CExoLocStringC2Ej, 0x0000000000128500) -NWNXLIB_FUNCTION(_ZN13CExoLocStringC2ERK10CExoStringi, 0x0000000000128740) -NWNXLIB_FUNCTION(_ZN13CExoLocStringC2ERKS_, 0x0000000000128560) -NWNXLIB_FUNCTION(_ZN13CExoLocStringC2Ev, 0x00000000001284b0) -NWNXLIB_FUNCTION(_ZN13CExoLocStringD1Ev, 0x00000000001285d0) -NWNXLIB_FUNCTION(_ZN13CExoLocStringD2Ev, 0x00000000001285d0) -NWNXLIB_FUNCTION(_ZN13CExoLocStringeqERS_, 0x0000000000128610) -NWNXLIB_FUNCTION(_ZN13CExoLocStringneERS_, 0x0000000000128640) -NWNXLIB_FUNCTION(_ZNK13CExoLocString12GetStringLocEiP10CExoStringh, 0x0000000000128a90) -NWNXLIB_FUNCTION(_ZNK13CExoLocString14GetStringCountEv, 0x0000000000128ab0) -NWNXLIB_FUNCTION(_ZNK13CExoLocString15GetStringLengthEj, 0x0000000000128ac0) -NWNXLIB_FUNCTION(_ZNK13CExoLocString17GetStringInternalEiP10CExoString, 0x0000000000128ad0) -NWNXLIB_FUNCTION(_ZNK13CExoLocString9GetSimpleEh, 0x0000000000128b40) -NWNXLIB_FUNCTION(_ZNK13CExoLocString9GetStringEiP10CExoStringhb, 0x0000000000128870) -NWNXLIB_FUNCTION(_ZNK13CExoLocString9GetStringEjPiP10CExoStringPh, 0x0000000000128830) -NWNXLIB_FUNCTION(_ZN13CNWLevelStats10ClearFeatsEv, 0x0000000000898cc0) -NWNXLIB_FUNCTION(_ZN13CNWLevelStats18GetSkillRankChangeEt, 0x0000000000898d10) -NWNXLIB_FUNCTION(_ZN13CNWLevelStats18SetSkillRankChangeEtc, 0x0000000000898d40) -NWNXLIB_FUNCTION(_ZN13CNWLevelStats7AddFeatEt, 0x0000000000898d70) -NWNXLIB_FUNCTION(_ZN13CNWLevelStatsC1Ev, 0x00000000008989d0) -NWNXLIB_FUNCTION(_ZN13CNWLevelStatsC2Ev, 0x00000000008989d0) -NWNXLIB_FUNCTION(_ZN13CNWLevelStatsD1Ev, 0x0000000000898b70) -NWNXLIB_FUNCTION(_ZN13CNWLevelStatsD2Ev, 0x0000000000898b70) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter12EventHandlerEjjPvjj, 0x00000000002bc180) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter12GetFirstNameEv, 0x00000000002bcb00) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter13GetScriptNameEi, 0x00000000002bcb10) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter13LoadEncounterEP7CResGFFP10CResStruct, 0x00000000002bacc0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter13MakeSpawnListEP19CEncounterListEntryRi, 0x00000000002b8150) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter13SaveEncounterEP7CResGFFP10CResStruct, 0x00000000002b8dc0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter13SetDifficultyEi, 0x00000000002bb110) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter14AsNWSEncounterEv, 0x00000000002bcaf0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter14m_sPowerLookupE, 0x0000000000cec5a0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter14RemoveFromAreaEv, 0x00000000002b79e0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter16LoadFromTemplateE7CResRefiP6Vector, 0x00000000002bc930) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter17GetInActivateAreaE6Vector, 0x00000000002b7fc0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter18CalculateSpawnPoolEf, 0x00000000002bbfe0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter18SpawnIfAppropriateEjf, 0x00000000002bc0f0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter19PadOutCreatureCountEP19CEncounterListEntryRi, 0x00000000002bb1e0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter20LoadFractionalCRDataEv, 0x00000000002bc560) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter20ReadEncounterFromGffEP7CResGFFP10CResStructiP6Vector, 0x00000000002b9a40) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter21AddToActivateAreaListEj, 0x00000000002b85d0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter21CalculatePointsFromCREf, 0x00000000002b96c0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter21GetInActivateAreaListEj, 0x00000000002b8580) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter22TallyEnemyRadiusPointsEv, 0x00000000002bbce0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter22UpdateActivateAreaListEj, 0x00000000002b8790) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter23AddCreaturesToSpawnListEP19CEncounterListEntryRiiS0_, 0x00000000002b9780) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter23SpawnEncounterCreaturesEv, 0x00000000002bb480) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter26RemoveFromActivateAreaListEj, 0x00000000002b8700) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter27ReadEncounterScriptsFromGffEP7CResGFFP10CResStruct, 0x00000000002b8a20) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter29RemoveFromActiveCreatureCountEfi, 0x00000000002baf50) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter32LineSegmentIntersectActivateAreaE6VectorS0_, 0x00000000002b7e70) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter8AIUpdateEv, 0x00000000002bc280) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter9AddToAreaEP8CNWSAreafffi, 0x00000000002b7ce0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounter9SetActiveEi, 0x00000000002bc530) -NWNXLIB_FUNCTION(_ZN13CNWSEncounterC1Ej, 0x00000000002bc640) -NWNXLIB_FUNCTION(_ZN13CNWSEncounterC2Ej, 0x00000000002bc640) -NWNXLIB_FUNCTION(_ZN13CNWSEncounterD0Ev, 0x00000000002b7cb0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounterD1Ev, 0x00000000002b7ac0) -NWNXLIB_FUNCTION(_ZN13CNWSEncounterD2Ev, 0x00000000002b7ac0) -NWNXLIB_FUNCTION(_ZN13CNWSInventory10RemoveItemEP8CNWSItem, 0x00000000002bd1b0) -NWNXLIB_FUNCTION(_ZN13CNWSInventory13GetItemInSlotEj, 0x00000000002bd170) -NWNXLIB_FUNCTION(_ZN13CNWSInventory13PutItemInSlotEjP8CNWSItem, 0x00000000002bd1f0) -NWNXLIB_FUNCTION(_ZN13CNWSInventory15GetSlotFromItemEP8CNWSItem, 0x00000000002bcfd0) -NWNXLIB_FUNCTION(_ZN13CNWSInventory18GetItemInInventoryEP8CNWSItem, 0x00000000002bcf90) -NWNXLIB_FUNCTION(_ZN13CNWSInventory24GetArraySlotFromSlotFlagEj, 0x00000000002bd010) -NWNXLIB_FUNCTION(_ZN13CNWSInventoryC1Ev, 0x00000000002bcf50) -NWNXLIB_FUNCTION(_ZN13CNWSInventoryC2Ev, 0x00000000002bcf50) -NWNXLIB_FUNCTION(_ZN13CNWSInventoryD0Ev, 0x00000000002bcf20) -NWNXLIB_FUNCTION(_ZN13CNWSInventoryD1Ev, 0x00000000002bceb0) -NWNXLIB_FUNCTION(_ZN13CNWSInventoryD2Ev, 0x00000000002bceb0) -NWNXLIB_FUNCTION(_ZN13CNWSpellArray4LoadEv, 0x00000000008a6ba0) -NWNXLIB_FUNCTION(_ZN13CNWSpellArrayC1Ev, 0x00000000008a6ad0) -NWNXLIB_FUNCTION(_ZN13CNWSpellArrayC2Ev, 0x00000000008a6ad0) -NWNXLIB_FUNCTION(_ZN13CNWSpellArrayD1Ev, 0x00000000008a6af0) -NWNXLIB_FUNCTION(_ZN13CNWSpellArrayD2Ev, 0x00000000008a6af0) -NWNXLIB_FUNCTION(_ZNK13CNWSpellArray8GetSpellEi, 0x00000000008a6b70) -NWNXLIB_FUNCTION(_ZNK13CNWSpellArrayixEi, 0x00000000008a8900) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable10RemoveItemEP8CNWSItemi, 0x00000000002ff5a0) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable11AcquireItemEPP8CNWSItemjhhi, 0x00000000002ff610) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable11LoadBodyBagEt, 0x00000000002feb90) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable11PostProcessEv, 0x00000000002ff270) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable12EventHandlerEjjPvjj, 0x0000000000303220) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable12GetFirstNameEv, 0x0000000000304a10) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable12GetItemCountEi, 0x0000000000302c90) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable12GetLightIsOnEv, 0x0000000000300380) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable12SetLightIsOnEi, 0x00000000003002a0) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable13GetScriptNameEi, 0x0000000000304a20) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable13LoadPlaceableEP7CResGFFP10CResStructiP10CExoString, 0x0000000000300430) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable13OpenInventoryEj, 0x00000000002ff980) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable13SavePlaceableEP7CResGFFP10CResStructi, 0x0000000000301c60) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable14AsNWSPlaceableEv, 0x0000000000304a00) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable14CloseInventoryEji, 0x00000000002ff7d0) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable14RemoveFromAreaEv, 0x0000000000302e20) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable14SetOrientationE6Vector, 0x00000000002ff480) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable15GetDialogResrefEv, 0x0000000000304a50) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable16GetEffectSpellIdEv, 0x0000000000304a70) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable16LoadFromTemplateE7CResRefP10CExoString, 0x0000000000304850) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable16SetEffectSpellIdEj, 0x0000000000304a80) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable17AIActionCastSpellEP20CNWSObjectActionNode, 0x00000000002fff80) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable17DropItemsIntoAreaEv, 0x00000000002ffbe0) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable19AddCastSpellActionsEji6Vectorjih, 0x00000000002ffdf0) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable20GetBodyBagAppearanceEv, 0x0000000000302b20) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable21CalculateActionPointsEv, 0x00000000002ff280) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable21GetNearestActionPointERK6Vector, 0x00000000002ffcb0) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable22AcquireItemsFromObjectEji, 0x0000000000304210) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable27ClosePlaceableForAllPlayersEv, 0x0000000000302d50) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable8AIUpdateEv, 0x00000000002fe470) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable8DoDamageEi, 0x00000000002fe430) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceable9AddToAreaEP8CNWSAreafffi, 0x0000000000303080) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceableC1Ej, 0x00000000002fe740) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceableC2Ej, 0x00000000002fe740) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceableD0Ev, 0x0000000000303050) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceableD1Ev, 0x0000000000302ec0) -NWNXLIB_FUNCTION(_ZN13CNWSPlaceableD2Ev, 0x0000000000302ec0) -NWNXLIB_FUNCTION(_ZN13CNWSScriptVar5ResetEj, 0x000000000034ae10) -NWNXLIB_FUNCTION(_ZN13CNWSScriptVaraSERKS_, 0x000000000034c0e0) -NWNXLIB_FUNCTION(_ZN13CNWSScriptVarC1ERKS_, 0x000000000034c290) -NWNXLIB_FUNCTION(_ZN13CNWSScriptVarC1Ev, 0x000000000034b2f0) -NWNXLIB_FUNCTION(_ZN13CNWSScriptVarC2ERKS_, 0x000000000034c290) -NWNXLIB_FUNCTION(_ZN13CNWSScriptVarC2Ev, 0x000000000034b2f0) -NWNXLIB_FUNCTION(_ZN13CScriptTalent10LoadTalentEP7CResGFFP10CResStruct, 0x00000000002e0e00) -NWNXLIB_FUNCTION(_ZN13CScriptTalent10SaveTalentEP7CResGFFP10CResStruct, 0x00000000002e0d30) -NWNXLIB_FUNCTION(_ZN13CScriptTalent16CopyScriptTalentEPS_, 0x00000000002e0cf0) -NWNXLIB_FUNCTION(_ZN13CScriptTalent6EqualsEPS_, 0x00000000002e0f10) -NWNXLIB_FUNCTION(_ZN13CScriptTalentC1Ev, 0x00000000002e0cb0) -NWNXLIB_FUNCTION(_ZN13CScriptTalentC2Ev, 0x00000000002e0cb0) -NWNXLIB_FUNCTION(_ZN13CScriptTalentD1Ev, 0x00000000002e0ce0) -NWNXLIB_FUNCTION(_ZN13CScriptTalentD2Ev, 0x00000000002e0ce0) -NWNXLIB_FUNCTION(_ZN13CServerAIList12RemoveObjectEj, 0x00000000003578a0) -NWNXLIB_FUNCTION(_ZN13CServerAIList13GetNextObjectEv, 0x0000000000355ce0) -NWNXLIB_FUNCTION(_ZN13CServerAIList9AddObjectEj, 0x0000000000357890) -NWNXLIB_FUNCTION(_ZN13CServerAIListC1Ev, 0x0000000000355ca0) -NWNXLIB_FUNCTION(_ZN13CServerAIListC2Ev, 0x0000000000355ca0) -NWNXLIB_FUNCTION(_ZN13CServerAIListD1Ev, 0x0000000000355cc0) -NWNXLIB_FUNCTION(_ZN13CServerAIListD2Ev, 0x0000000000355cc0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp10InitializeEv, 0x00000000003599c0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp10LoadModuleE10CExoString5CUUIDiP10CNWSPlayeriRKN6NWSync13AdvertisementE, 0x0000000000359a20) -NWNXLIB_FUNCTION(_ZN13CServerExoApp10OnCDChangeEv, 0x0000000000359bd0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp11GetNetLayerEv, 0x0000000000358c90) -NWNXLIB_FUNCTION(_ZN13CServerExoApp11OnGainFocusEv, 0x0000000000359bf0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp11OnLostFocusEv, 0x0000000000359c00) -NWNXLIB_FUNCTION(_ZN13CServerExoApp12GetDebugModeEv, 0x00000000003599b0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp12SetDebugModeEi, 0x00000000003599a0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp12StopServicesEv, 0x0000000000359cc0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp12UninitializeEv, 0x0000000000359c30) -NWNXLIB_FUNCTION(_ZN13CServerExoApp12UnloadModuleEv, 0x0000000000359a10) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetCampaignDBEv, 0x0000000000359c60) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetGameObjectEj, 0x0000000000359770) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetModuleNameEv, 0x00000000003593f0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetNWSMessageEv, 0x00000000003598b0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetPauseStateEh, 0x0000000000359d80) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetPauseTimerEv, 0x0000000000359980) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetPlayerListEv, 0x0000000000359890) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetServerInfoEv, 0x0000000000358c70) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetServerModeEv, 0x00000000003598f0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13GetWorldTimerEv, 0x0000000000359940) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13HandleMessageEjPhji, 0x0000000000358e50) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13OnVideoChangeEv, 0x0000000000359c10) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13SetPauseStateEhi, 0x0000000000359db0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp13StartServicesEv, 0x0000000000359c90) -NWNXLIB_FUNCTION(_ZN13CServerExoApp14GetActiveTimerEj, 0x0000000000359930) -NWNXLIB_FUNCTION(_ZN13CServerExoApp14GetObjectArrayEv, 0x0000000000359750) -NWNXLIB_FUNCTION(_ZN13CServerExoApp14SetForceUpdateEv, 0x0000000000359c40) -NWNXLIB_FUNCTION(_ZN13CServerExoApp14StartNewModuleER10CExoString, 0x0000000000359470) -NWNXLIB_FUNCTION(_ZN13CServerExoApp15AdmitPlayerNameE10CExoString, 0x0000000000358f70) -NWNXLIB_FUNCTION(_ZN13CServerExoApp15GetNextPCObjectEv, 0x000000000035a140) -NWNXLIB_FUNCTION(_ZN13CServerExoApp15GetSysAdminListEv, 0x00000000003598d0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp15RestartNetLayerEv, 0x0000000000359cb0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16ExportAllPlayersEv, 0x00000000003596a0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16GetApplicationIdEv, 0x0000000000358cf0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16GetConnectionLibEv, 0x0000000000358cb0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16GetFirstPCObjectEv, 0x000000000035a130) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16GetImportingCharEv, 0x00000000003596d0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16GetIsMultiPlayerEv, 0x0000000000358cd0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16GetLoadingModuleEv, 0x00000000003596b0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16GetTimestopTimerEv, 0x0000000000359960) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16MovePlayerToAreaEPv, 0x0000000000359d20) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16PlayerListChangeEjii, 0x0000000000358ff0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16SetEndGameStringER10CExoString, 0x0000000000359500) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16SetImportingCharEi, 0x00000000003596e0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16SetLoadingModuleEi, 0x00000000003596c0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16ShutdownNetLayerEv, 0x0000000000359ca0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16StripColorTokensER10CExoString, 0x000000000035a170) -NWNXLIB_FUNCTION(_ZN13CServerExoApp16TogglePauseStateEh, 0x0000000000359d60) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17AddIPToBannedListE10CExoString, 0x0000000000359e90) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17GetGameSpyEnabledEv, 0x000000000035a160) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17GetModuleLanguageEv, 0x0000000000359860) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17GetPlayerLanguageEj, 0x0000000000359850) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17GetServerAIMasterEv, 0x0000000000359870) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17IsOnExclusionListEj, 0x0000000000359e80) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17LoadPrimaryPlayerEP10CNWSPlayer, 0x0000000000359740) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17RemovePCFromWorldEP10CNWSPlayer, 0x00000000003599f0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17SetEndGamePendingEi, 0x00000000003594f0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp17SetGameSpyEnabledEi, 0x000000000035a150) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18AddCharListRequestEj, 0x0000000000359e70) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18AddToExclusionListEjh, 0x0000000000359dd0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18GetAutoSavePendingEv, 0x0000000000359700) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18GetFactionOfObjectEjPi, 0x0000000000359d50) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18GetSkillBonusLimitEv, 0x000000000035a340) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18IsPlayerNameStickyEv, 0x0000000000359280) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18LoadCharacterStartEhP10CNWSPlayer7CResRefPvj, 0x0000000000359710) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18SendCharacterQueryEP10CNWSPlayer, 0x0000000000359450) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18SetAutoSavePendingEi, 0x00000000003596f0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18SetSkillBonusLimitEii, 0x000000000035a360) -NWNXLIB_FUNCTION(_ZN13CServerExoApp18ShutDownToMainMenuEv, 0x00000000001616f0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19AdmitNetworkAddressEj10CExoString, 0x0000000000358e60) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetActivePauseStateEv, 0x0000000000359da0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetAttackBonusLimitEv, 0x000000000035a200) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetBannedListStringEv, 0x0000000000359b30) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetDamageBonusLimitEv, 0x000000000035a240) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetDifficultyOptionEi, 0x0000000000359e60) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetHeartBeatLoggingEv, 0x000000000035a1b0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetIsIPOnBannedListE10CExoString, 0x0000000000359020) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetPlaceMeshManagerEv, 0x0000000000359910) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetPlayerListStringEv, 0x0000000000359ae0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19GetPortalListStringEv, 0x0000000000359b80) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19LoadCharacterFinishEP10CNWSPlayerii, 0x0000000000359730) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19PushMessageOverWallEPhj, 0x0000000000359380) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19SetAttackBonusLimitEii, 0x000000000035a220) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19SetDamageBonusLimitEii, 0x000000000035a260) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19SetGameSpyReportingEi, 0x0000000000359c20) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19SetHeartBeatLoggingEi, 0x000000000035a1c0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp19ValidatePlayerLoginEPv, 0x0000000000359d00) -NWNXLIB_FUNCTION(_ZN13CServerExoApp20AddCDKeyToBannedListE10CExoString, 0x0000000000359f70) -NWNXLIB_FUNCTION(_ZN13CServerExoApp20GetAbilityBonusLimitEv, 0x000000000035a2c0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp20GetModuleDescriptionEv, 0x0000000000358da0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp20GetPlayerAddressDataEjPjPPhS2_S0_, 0x0000000000359c80) -NWNXLIB_FUNCTION(_ZN13CServerExoApp20SetAbilityBonusLimitEii, 0x000000000035a2e0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp20SetDDCipherForModuleE10CExoString, 0x000000000035a3d0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp20SetNetworkAddressBanEj10CExoStringi, 0x0000000000358ee0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp20SetWeGotDisconnectedEv, 0x0000000000161740) -NWNXLIB_FUNCTION(_ZN13CServerExoApp21GetAreaByGameObjectIDEj, 0x00000000003597c0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp21GetDoorByGameObjectIDEj, 0x00000000003597f0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp21GetExtendedServerInfoEP19CExtendedServerInfo, 0x0000000000358d90) -NWNXLIB_FUNCTION(_ZN13CServerExoApp21GetExtendedServerInfoEv, 0x0000000000161700) -NWNXLIB_FUNCTION(_ZN13CServerExoApp21GetItemByGameObjectIDEj, 0x0000000000359790) -NWNXLIB_FUNCTION(_ZN13CServerExoApp21GetMoveToModuleStringEv, 0x00000000003594c0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp21GetMultiplayerEnabledEv, 0x0000000000358cd0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp21SetMoveToModuleStringER10CExoString, 0x00000000003594a0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp22GetAbilityPenaltyLimitEv, 0x000000000035a300) -NWNXLIB_FUNCTION(_ZN13CServerExoApp22GetActiveExclusionListEv, 0x0000000000359e10) -NWNXLIB_FUNCTION(_ZN13CServerExoApp22GetIsCDKeyOnBannedListE10CExoString, 0x0000000000359120) -NWNXLIB_FUNCTION(_ZN13CServerExoApp22GetMoveToModulePendingEv, 0x0000000000359490) -NWNXLIB_FUNCTION(_ZN13CServerExoApp22GetStoreByGameObjectIDEj, 0x0000000000359780) -NWNXLIB_FUNCTION(_ZN13CServerExoApp22RemoveIPFromBannedListE10CExoString, 0x0000000000359fe0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp22SetAbilityPenaltyLimitEii, 0x000000000035a320) -NWNXLIB_FUNCTION(_ZN13CServerExoApp22SetApplicationIdsMatchEi, 0x0000000000161720) -NWNXLIB_FUNCTION(_ZN13CServerExoApp22SetMoveToModulePendingEi, 0x0000000000359480) -NWNXLIB_FUNCTION(_ZN13CServerExoApp23GetCreatureDeathLoggingEv, 0x000000000035a190) -NWNXLIB_FUNCTION(_ZN13CServerExoApp23GetIsControlledByPlayerEj, 0x0000000000359d30) -NWNXLIB_FUNCTION(_ZN13CServerExoApp23GetModuleByGameObjectIDEj, 0x00000000003597b0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp23InitiateModuleForPlayerEPv, 0x0000000000359d10) -NWNXLIB_FUNCTION(_ZN13CServerExoApp23IsOnActiveExclusionListEj, 0x0000000000359e20) -NWNXLIB_FUNCTION(_ZN13CServerExoApp23RemoveFromExclusionListEjh, 0x0000000000359df0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp23SetCreatureDeathLoggingEi, 0x000000000035a1a0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp23VomitServerOptionsToLogEv, 0x00000000003599e0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp24AddSubNetProfileSendSizeEjj, 0x000000000035a180) -NWNXLIB_FUNCTION(_ZN13CServerExoApp24GetReloadModuleWhenEmptyEv, 0x0000000000359e50) -NWNXLIB_FUNCTION(_ZN13CServerExoApp24GetSavingThrowBonusLimitEv, 0x000000000035a280) -NWNXLIB_FUNCTION(_ZN13CServerExoApp24GetTriggerByGameObjectIDEj, 0x00000000003597d0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp24ResolvePlayerByFirstNameERK10CExoString, 0x0000000000359e30) -NWNXLIB_FUNCTION(_ZN13CServerExoApp24SetReloadModuleWhenEmptyEi, 0x0000000000359e40) -NWNXLIB_FUNCTION(_ZN13CServerExoApp24SetSavingThrowBonusLimitEii, 0x000000000035a2a0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25AddPlayerNameToBannedListE10CExoString, 0x0000000000359f00) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25ContinueMessageProcessingEv, 0x0000000000359000) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25GetClientObjectByObjectIdEj, 0x0000000000359cd0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25GetClientObjectByPlayerIdEjh, 0x0000000000359ce0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25GetCreatureByGameObjectIDEj, 0x00000000003597a0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25GetExportCharacterPendingEv, 0x0000000000359520) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25GetPlayerIDByGameObjectIDEj, 0x0000000000359840) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25GetWaypointByGameObjectIDEj, 0x0000000000359810) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25RemoveCDKeyFromBannedListE10CExoString, 0x000000000035a0c0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp25SetExportCharacterPendingEi, 0x0000000000359530) -NWNXLIB_FUNCTION(_ZN13CServerExoApp26GetEncounterByGameObjectIDEj, 0x0000000000359820) -NWNXLIB_FUNCTION(_ZN13CServerExoApp26GetPlaceableByGameObjectIDEj, 0x00000000003597e0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp27GetIsPlayerNameOnBannedListE10CExoString, 0x00000000003590a0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp27GetStickyCombatModesEnabledEv, 0x000000000035a1e0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp27SetStickyCombatModesEnabledEi, 0x000000000035a1f0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp28GetSoundObjectByGameObjectIDEj, 0x0000000000359830) -NWNXLIB_FUNCTION(_ZN13CServerExoApp28HandleGameSpyToServerMessageEiPvi, 0x0000000000359010) -NWNXLIB_FUNCTION(_ZN13CServerExoApp29CheckStickyPlayerNameReservedE10CExoStringS0_S0_i, 0x0000000000359290) -NWNXLIB_FUNCTION(_ZN13CServerExoApp29GetAreaOfEffectByGameObjectIDEj, 0x0000000000359800) -NWNXLIB_FUNCTION(_ZN13CServerExoApp29HandleOldServerVaultMigrationE10CExoStringS0_S0_, 0x00000000003591a0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp30RemovePlayerNameFromBannedListE10CExoString, 0x000000000035a050) -NWNXLIB_FUNCTION(_ZN13CServerExoApp32AddExportPlayersCharacterRequestEj, 0x0000000000359540) -NWNXLIB_FUNCTION(_ZN13CServerExoApp33GetExportPlayersCharacterRequestsEv, 0x0000000000359640) -NWNXLIB_FUNCTION(_ZN13CServerExoApp34ClearExportPlayerCharacterRequestsEv, 0x0000000000359650) -NWNXLIB_FUNCTION(_ZN13CServerExoApp35GetClientsRequiredToDisableCPUSleepEv, 0x000000000035a1d0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp37GetHostedPublicInternetAddressAndPortEv, 0x000000000035a380) -NWNXLIB_FUNCTION(_ZN13CServerExoApp6GetFPSEv, 0x0000000000161710) -NWNXLIB_FUNCTION(_ZN13CServerExoApp6OnExitEv, 0x0000000000359be0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp8LoadGameEjR10CExoStringS1_P10CNWSPlayer, 0x0000000000359460) -NWNXLIB_FUNCTION(_ZN13CServerExoApp8MainLoopEv, 0x00000000003599d0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp8SaveGameEjR10CExoStringS1_P10CNWSPlayeriS1_, 0x0000000000359440) -NWNXLIB_FUNCTION(_ZN13CServerExoApp8ShutdownEii, 0x0000000000359a00) -NWNXLIB_FUNCTION(_ZN13CServerExoApp9GetCDKeysEPP13CExoArrayListI10CExoStringE, 0x0000000000161730) -NWNXLIB_FUNCTION(_ZN13CServerExoApp9GetModuleEv, 0x00000000003593e0) -NWNXLIB_FUNCTION(_ZN13CServerExoApp9RunModuleEv, 0x0000000000359ad0) -NWNXLIB_FUNCTION(_ZN13CServerExoAppC1Ev, 0x0000000000359390) -NWNXLIB_FUNCTION(_ZN13CServerExoAppC2Ev, 0x0000000000359390) -NWNXLIB_FUNCTION(_ZN13CServerExoAppD0Ev, 0x0000000000358d60) -NWNXLIB_FUNCTION(_ZN13CServerExoAppD1Ev, 0x0000000000358d10) -NWNXLIB_FUNCTION(_ZN13CServerExoAppD2Ev, 0x0000000000358d10) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays12GetCached2DAE10CExoStringi, 0x00000000008acc10) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays12Load2DArraysEv, 0x00000000008aad60) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays13LoadEpicSavesEv, 0x00000000008aaac0) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays14UnLoad2DArraysEv, 0x00000000008a96d0) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays14Update2DACacheEP14CExoLinkedListI4C2DAEiPS1_, 0x00000000008acfd0) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays15ClearCached2DAsEv, 0x00000000008ad000) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays15LoadEpicAttacksEv, 0x00000000008aac50) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays16GetIPRPCostTableEh, 0x00000000008aaa90) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays18GetEpicAttackBonusEh, 0x00000000008acbf0) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays18LoadIPRPCostTablesEv, 0x00000000008aa7b0) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays19GetEpicRefSaveBonusEh, 0x00000000008acb90) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays20GetEpicFortSaveBonusEh, 0x00000000008acb70) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays20GetEpicWillSaveBonusEh, 0x00000000008acbc0) -NWNXLIB_FUNCTION(_ZN13CTwoDimArrays20UnLoadIPRPCostTablesEv, 0x00000000008aaa60) -NWNXLIB_FUNCTION(_ZN13CTwoDimArraysC1Ev, 0x00000000008a9210) -NWNXLIB_FUNCTION(_ZN13CTwoDimArraysC2Ev, 0x00000000008a9210) -NWNXLIB_FUNCTION(_ZN13CTwoDimArraysD1Ev, 0x00000000008ad0a0) -NWNXLIB_FUNCTION(_ZN13CTwoDimArraysD2Ev, 0x00000000008ad0a0) -NWNXLIB_FUNCTION(_ZN13SJournalEntryD1Ev, 0x00000000002c81c0) -NWNXLIB_FUNCTION(_ZN13SJournalEntryD2Ev, 0x00000000002c81c0) -NWNXLIB_FUNCTION(_ZN14CExoFileThread4ReadEPvjjP8_IO_FILE, 0x0000000000126260) -NWNXLIB_FUNCTION(_ZN14CExoFileThread9AsyncReadEv, 0x0000000000126150) -NWNXLIB_FUNCTION(_ZN14CExoFileThreadC1Ev, 0x0000000000126090) -NWNXLIB_FUNCTION(_ZN14CExoFileThreadC2Ev, 0x0000000000126090) -NWNXLIB_FUNCTION(_ZN14CExoFileThreadD1Ev, 0x0000000000125e90) -NWNXLIB_FUNCTION(_ZN14CExoFileThreadD2Ev, 0x0000000000125e90) -NWNXLIB_FUNCTION(_ZN14CExoPackedFile12GetAsyncFileEv, 0x0000000000149650) -NWNXLIB_FUNCTION(_ZN14CExoPackedFile22ReadNWCompressedBufferEPvjj, 0x000000000014e970) -NWNXLIB_FUNCTION(_ZN14CExoPackedFile7GetFileEv, 0x0000000000149640) -NWNXLIB_FUNCTION(_ZN14CExoPackedFileC1Ev, 0x000000000014c8b0) -NWNXLIB_FUNCTION(_ZN14CExoPackedFileC2Ev, 0x000000000014c8b0) -NWNXLIB_FUNCTION(_ZN14CExoPackedFileD0Ev, 0x000000000014c910) -NWNXLIB_FUNCTION(_ZN14CExoPackedFileD1Ev, 0x000000000014c8f0) -NWNXLIB_FUNCTION(_ZN14CExoPackedFileD2Ev, 0x000000000014c8f0) -NWNXLIB_FUNCTION(_ZN14CExoStringList12GetDuplicateEv, 0x0000000000797010) -NWNXLIB_FUNCTION(_ZN14CExoStringList3AddEP10CExoString, 0x0000000000796d90) -NWNXLIB_FUNCTION(_ZN14CExoStringList5ClearEv, 0x0000000000796e60) -NWNXLIB_FUNCTION(_ZN14CExoStringList5MergeEPS_ii, 0x0000000000797070) -NWNXLIB_FUNCTION(_ZN14CExoStringList6DeleteEP10CExoString, 0x0000000000796ed0) -NWNXLIB_FUNCTION(_ZN14CExoStringList6InsertEP10CExoStringi, 0x0000000000797050) -NWNXLIB_FUNCTION(_ZN14CExoStringList6RemoveEi, 0x0000000000797460) -NWNXLIB_FUNCTION(_ZN14CExoStringList7GetSizeEv, 0x0000000000797020) -NWNXLIB_FUNCTION(_ZN14CExoStringList8GetCountEv, 0x0000000000797000) -NWNXLIB_FUNCTION(_ZN14CExoStringList9AddSortedEP10CExoString, 0x0000000000796a20) -NWNXLIB_FUNCTION(_ZN14CExoStringList9GetSortedEv, 0x0000000000797030) -NWNXLIB_FUNCTION(_ZN14CExoStringList9GetStringEi, 0x0000000000797040) -NWNXLIB_FUNCTION(_ZN14CExoStringList9IntroduceEP10CExoStringi, 0x0000000000796940) -NWNXLIB_FUNCTION(_ZN14CExoStringListaSERS_, 0x0000000000797510) -NWNXLIB_FUNCTION(_ZN14CExoStringListC1Eiii, 0x0000000000796be0) -NWNXLIB_FUNCTION(_ZN14CExoStringListC1EPS_, 0x0000000000796c30) -NWNXLIB_FUNCTION(_ZN14CExoStringListC1Ev, 0x0000000000796bc0) -NWNXLIB_FUNCTION(_ZN14CExoStringListC2Eiii, 0x0000000000796be0) -NWNXLIB_FUNCTION(_ZN14CExoStringListC2EPS_, 0x0000000000796c30) -NWNXLIB_FUNCTION(_ZN14CExoStringListC2Ev, 0x0000000000796bc0) -NWNXLIB_FUNCTION(_ZN14CExoStringListD1Ev, 0x0000000000796d10) -NWNXLIB_FUNCTION(_ZN14CExoStringListD2Ev, 0x0000000000796d10) -NWNXLIB_FUNCTION(_ZN14CExoStringListixEi, 0x0000000000797500) -NWNXLIB_FUNCTION(_ZN14CNWSExpression10ClearGraphEv, 0x00000000003c5b40) -NWNXLIB_FUNCTION(_ZN14CNWSExpression10TestStringERK10CExoStringi, 0x00000000003c63f0) -NWNXLIB_FUNCTION(_ZN14CNWSExpression11ParseStringE10CExoString, 0x00000000003c5bc0) -NWNXLIB_FUNCTION(_ZN14CNWSExpression14ClearAlternateEP18CNWSExpressionNode, 0x00000000003c5ae0) -NWNXLIB_FUNCTION(_ZN14CNWSExpression7NewNodeEi, 0x00000000003c5960) -NWNXLIB_FUNCTION(_ZN14CNWSExpressionC1Ev, 0x00000000003c59c0) -NWNXLIB_FUNCTION(_ZN14CNWSExpressionC2Ev, 0x00000000003c59c0) -NWNXLIB_FUNCTION(_ZN14CNWSExpressionD1Ev, 0x00000000003c5a20) -NWNXLIB_FUNCTION(_ZN14CNWSExpressionD2Ev, 0x00000000003c5a20) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD11GetLastNameEv, 0x00000000002debc0) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD12EventHandlerEjjPvjj, 0x0000000000311970) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD12GetFirstNameEv, 0x00000000002debb0) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD13SetReputationEP13CExoArrayListIiE, 0x00000000003127a0) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD14CopyEffectListEP13CExoArrayListIP11CGameEffectE, 0x0000000000311b60) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD14RemoveFromAreaEv, 0x0000000000311a60) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD15AsNWSPlayerTURDEv, 0x0000000000312f30) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD15CopyAutomapDataEiP13CExoArrayListIjEPPh, 0x0000000000311f00) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD15LoadAutoMapDataEP7CResGFFP10CResStruct, 0x0000000000312030) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD15SaveAutoMapDataEP7CResGFFP10CResStruct, 0x0000000000312220) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD16ClearAutomapDataEv, 0x0000000000311ce0) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD21SetPersonalReputationEP13CExoArrayListI22CNWSPersonalReputationE, 0x0000000000312860) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD8AIUpdateEv, 0x0000000000311960) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD8LoadTURDEP7CResGFFP10CResStruct, 0x0000000000312940) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD8SaveTURDEP7CResGFFP10CResStruct, 0x0000000000312330) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURD9AddToAreaEP8CNWSAreai, 0x0000000000311aa0) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURDC1Ej, 0x0000000000311980) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURDC2Ej, 0x0000000000311980) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURDD0Ev, 0x0000000000311ed0) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURDD1Ev, 0x0000000000311d90) -NWNXLIB_FUNCTION(_ZN14CNWSPlayerTURDD2Ev, 0x0000000000311d90) -NWNXLIB_FUNCTION(_ZN14CNWSTransition11LoadFromGffEP7CResGFFP10CResStruct, 0x0000000000344880) -NWNXLIB_FUNCTION(_ZN14CNWSTransition12LookupTargetEv, 0x0000000000344660) -NWNXLIB_FUNCTION(_ZN14CNWSTransition6UnlinkEi, 0x0000000000344830) -NWNXLIB_FUNCTION(_ZN14CNWSTransition9SaveToGffEP7CResGFFP10CResStruct, 0x0000000000344970) -NWNXLIB_FUNCTION(_ZN14CNWSTransition9SetTargetEP10CNWSObject, 0x0000000000344760) -NWNXLIB_FUNCTION(_ZN14CNWSTransition9SetTargetERK10CExoString, 0x00000000003447b0) -NWNXLIB_FUNCTION(_ZN14CStoreCustomerC1Ev, 0x0000000000341ce0) -NWNXLIB_FUNCTION(_ZN14CStoreCustomerC2Ev, 0x0000000000341ce0) -NWNXLIB_FUNCTION(_ZN15CExoIniInternal12ReadIniEntryER10CExoStringRKiRKS0_S5_, 0x0000000000127cb0) -NWNXLIB_FUNCTION(_ZN15CExoIniInternal13WriteIniEntryERK10CExoStringRKiS2_S2_i, 0x0000000000127d90) -NWNXLIB_FUNCTION(_ZN15CExoIniInternalC1E10CExoString, 0x0000000000127820) -NWNXLIB_FUNCTION(_ZN15CExoIniInternalC2E10CExoString, 0x0000000000127820) -NWNXLIB_FUNCTION(_ZN15CExoIniInternalD1Ev, 0x0000000000127c30) -NWNXLIB_FUNCTION(_ZN15CExoIniInternalD2Ev, 0x0000000000127c30) -NWNXLIB_FUNCTION(_ZN15CFactionManager10GetFactionEi, 0x00000000003a3fc0) -NWNXLIB_FUNCTION(_ZN15CFactionManager12LoadFactionsEP7CResGFFP8CResList, 0x00000000003a40b0) -NWNXLIB_FUNCTION(_ZN15CFactionManager12SaveFactionsEP7CResGFFP8CResList, 0x00000000003a43b0) -NWNXLIB_FUNCTION(_ZN15CFactionManager13DeleteFactionEi, 0x00000000003a4600) -NWNXLIB_FUNCTION(_ZN15CFactionManager15GetIsNPCFactionEi, 0x00000000003a4090) -NWNXLIB_FUNCTION(_ZN15CFactionManager15LoadReputationsEP7CResGFFP8CResList, 0x00000000003a4970) -NWNXLIB_FUNCTION(_ZN15CFactionManager15SaveReputationsEP7CResGFFP8CResList, 0x00000000003a44e0) -NWNXLIB_FUNCTION(_ZN15CFactionManager18GetFactionIdByNameERK10CExoString, 0x00000000003a4670) -NWNXLIB_FUNCTION(_ZN15CFactionManager21CreateDefaultFactionsEv, 0x00000000003a4b20) -NWNXLIB_FUNCTION(_ZN15CFactionManager22GetDefaultPCReputationEv, 0x00000000003a48e0) -NWNXLIB_FUNCTION(_ZN15CFactionManager23GetNPCFactionReputationEii, 0x00000000003a4010) -NWNXLIB_FUNCTION(_ZN15CFactionManager23SetNPCFactionReputationEiii, 0x00000000003a3ff0) -NWNXLIB_FUNCTION(_ZN15CFactionManagerC1Ev, 0x00000000003a3e90) -NWNXLIB_FUNCTION(_ZN15CFactionManagerC2Ev, 0x00000000003a3e90) -NWNXLIB_FUNCTION(_ZN15CFactionManagerD1Ev, 0x00000000003a3f00) -NWNXLIB_FUNCTION(_ZN15CFactionManagerD2Ev, 0x00000000003a3f00) -NWNXLIB_FUNCTION(_ZN15CItemRepository10RemoveItemEP8CNWSItem, 0x00000000002bfe00) -NWNXLIB_FUNCTION(_ZN15CItemRepository12FindPositionEP8CNWSItemRhS2_i, 0x00000000002c3650) -NWNXLIB_FUNCTION(_ZN15CItemRepository13CalculatePageEhh, 0x00000000002bf3a0) -NWNXLIB_FUNCTION(_ZN15CItemRepository15FindItemWithTagEP10CExoString, 0x00000000002bfb50) -NWNXLIB_FUNCTION(_ZN15CItemRepository15ItemListGetItemEP18CExoLinkedListNode, 0x00000000002c00a0) -NWNXLIB_FUNCTION(_ZN15CItemRepository17CheckBaseItemFitsEjhh, 0x00000000002bf640) -NWNXLIB_FUNCTION(_ZN15CItemRepository17CheckItemOverlapsEP8CNWSItemS1_hh, 0x00000000002bf8c0) -NWNXLIB_FUNCTION(_ZN15CItemRepository19GetItemInRepositoryEhh, 0x00000000002c0100) -NWNXLIB_FUNCTION(_ZN15CItemRepository19GetItemInRepositoryEP8CNWSItemi, 0x00000000002bfc90) -NWNXLIB_FUNCTION(_ZN15CItemRepository22FindItemWithBaseItemIdEji, 0x00000000002bfa30) -NWNXLIB_FUNCTION(_ZN15CItemRepository23CalculateContentsWeightEv, 0x00000000002c1bb0) -NWNXLIB_FUNCTION(_ZN15CItemRepository23ItemListGetItemObjectIDEP18CExoLinkedListNode, 0x00000000002c00e0) -NWNXLIB_FUNCTION(_ZN15CItemRepository7AddItemEPP8CNWSItemhhii, 0x00000000002c3bf0) -NWNXLIB_FUNCTION(_ZN15CItemRepository8AddPanelEv, 0x00000000002c01e0) -NWNXLIB_FUNCTION(_ZN15CItemRepository8CheckFitEP8CNWSItemhh, 0x00000000002bf3c0) -NWNXLIB_FUNCTION(_ZN15CItemRepository8MoveItemEP8CNWSItemhh, 0x00000000002bff80) -NWNXLIB_FUNCTION(_ZN15CItemRepositoryC1Ejhhji, 0x00000000002bf170) -NWNXLIB_FUNCTION(_ZN15CItemRepositoryC2Ejhhji, 0x00000000002bf170) -NWNXLIB_FUNCTION(_ZN15CItemRepositoryD1Ev, 0x00000000002bf220) -NWNXLIB_FUNCTION(_ZN15CItemRepositoryD2Ev, 0x00000000002bf220) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow10InitializeEP17CNetLayerInternal, 0x0000000000150ea0) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow11NUM_BUFFERSE, 0x00000000008bf748) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow11SetAckTimerEv, 0x0000000000150e00) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow12FrameReceiveEPhj, 0x000000000015dd90) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow12FrameTimeoutEj, 0x000000000015c920) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow12MAX_SEQUENCEE, 0x00000000008bf74c) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow12TestAckTimerEj, 0x0000000000150e40) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow15SetInFrameTimerEv, 0x0000000000150d60) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow16SetOutFrameTimerEj, 0x00000000001515b0) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow16TestInFrameTimerEj, 0x0000000000150dc0) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow17SetFauxNagleTimerEv, 0x0000000000150e60) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow17TestOutFrameTimerEjj, 0x0000000000151610) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow18FrameNumberBetweenEjjj, 0x0000000000150d30) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow18TestFauxNagleTimerEj, 0x0000000000151530) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow19DEFAULT_ACK_TIMEOUTE, 0x00000000008bf73c) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow20LoadWindowWithFramesEv, 0x0000000000155df0) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow21AddToLowOutgoingQueueEt, 0x000000000015c720) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow21CutOutgoingBufferSizeEv, 0x0000000000151640) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow22AddToHighOutgoingQueueEt, 0x000000000015c6c0) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow22DEFAULT_PACKET_TIMEOUTE, 0x00000000008bf740) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow22DEFAULT_PLAYER_TIMEOUTE, 0x00000000008bf72c) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow23UnpacketizeFullMessagesEi, 0x0000000000152bb0) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow24DoubleOutgoingBufferSizeEv, 0x0000000000151740) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow24MAX_TIMEOUT_LOWRES_COUNTE, 0x00000000008bf744) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow26DEFAULT_FAUX_NAGLE_TIMEOUTE, 0x00000000008bf738) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow26PACKETS_SENT_BEFORE_DOUBLEE, 0x00000000008bf724) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow27FAUX_NAGLE_SIZE_FIRST_SPLITE, 0x00000000008bf734) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow27PACKETS_TIMEDOUT_BEFORE_CUTE, 0x00000000008bf728) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow27PlaceFrameInOutgoingBuffersEt, 0x0000000000155d90) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow28FAUX_NAGLE_SIZE_SECOND_SPLITE, 0x00000000008bf730) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow28InitializeCompressionBuffersEv, 0x0000000000150bc0) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow8ShutDownEv, 0x0000000000150fd0) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow9FauxNagleEv, 0x000000000015c880) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindow9FrameSendEhtt, 0x0000000000155b70) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindowC1Ev, 0x0000000000151450) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindowC2Ev, 0x0000000000151450) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindowD1Ev, 0x00000000001512e0) -NWNXLIB_FUNCTION(_ZN15CNetLayerWindowD2Ev, 0x00000000001512e0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound11AddReactionEii, 0x00000000003be6e0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound13AddParryIndexEv, 0x00000000003be870) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound13SetPauseTimerEii, 0x00000000003bd080) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound14AddEquipActionEjj, 0x00000000003be8f0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound14AddParryAttackEj, 0x00000000003c0060) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound14AddSpellActionEv, 0x00000000003be770) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound14EndCombatRoundEv, 0x00000000003bcd90) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound14GetExtraAttackEv, 0x00000000003bd6d0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound14GetNewAttackIDEv, 0x00000000003be600) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound14IncrementTimerEi, 0x00000000003bd320) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound14RecomputeRoundEv, 0x00000000003bdd00) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound14SetRoundPausedEij, 0x00000000003bd050) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound15AddCleaveAttackEji, 0x00000000003c01e0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound15ClearAllAttacksEv, 0x00000000003bd890) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound15GetTotalAttacksEv, 0x00000000003bf930) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound15LoadCombatRoundEP7CResGFFP10CResStruct, 0x00000000003c0710) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound15SaveCombatRoundEP7CResGFFP10CResStruct, 0x00000000003bf970) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound15SetDeflectArrowEi, 0x00000000003bf960) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound16AddSpecialAttackEt, 0x00000000003bfe70) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound16AddUnequipActionEjjhh, 0x00000000003beb00) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound16GetActionPendingEv, 0x00000000003bd1b0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound16GetOffHandAttackEv, 0x00000000003bd690) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound16GetSpecialAttackEi, 0x00000000003be440) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound16RemoveAllActionsEv, 0x00000000003bd630) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound16SetCurrentAttackEh, 0x00000000003bd880) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound16StartCombatRoundEj, 0x00000000003bf6a0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound17CheckActionLengthEji, 0x00000000003bd0e0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound17RemoveSpellActionEv, 0x00000000003be790) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound18AddWhirlwindAttackEji, 0x00000000003c04c0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound18GetSpecialAttackIDEi, 0x00000000003be520) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound18HasCreatureWeaponsEv, 0x00000000003bed60) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound19AddCircleKickAttackEj, 0x00000000003c0360) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound19AddCombatStepActionEjj, 0x00000000003becc0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound19DecrementPauseTimerEi, 0x00000000003bd030) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound19GetWeaponAttackTypeEv, 0x00000000003bee20) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound19InsertSpecialAttackEti, 0x00000000003bffb0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound19RemoveSpecialAttackEi, 0x00000000003be1c0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound20DecrementRoundLengthEii, 0x00000000003bd0c0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound20GetNumSpecialAttacksEv, 0x00000000003be3a0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound20StartCombatRoundCastEj, 0x00000000003bd520) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound21GetCombatStepRequiredEj, 0x00000000003bf1b0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound21GetSpellActionPendingEv, 0x00000000003bd270) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound21InitializeCombatModesEv, 0x00000000003bd8d0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound22AddAttackOfOpportunityEj, 0x00000000003c05b0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound22ClearAllSpecialAttacksEv, 0x00000000003be630) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound22GetAttackActionPendingEv, 0x00000000003bd200) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound22GetCurrentAttackWeaponEi, 0x00000000003bf050) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound23CalculateOffHandAttacksEv, 0x00000000003bd700) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound23CheckActionLengthAtTimeEjii, 0x00000000003bd140) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound23InitializeAttackActionsEj, 0x00000000003bf340) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound24SignalCombatRoundStartedEv, 0x00000000003bcd30) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound25InitializeNumberOfAttacksEv, 0x00000000003bd920) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound31UpdateAttackTargetForAllActionsEj, 0x00000000003bf880) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound9AddActionEP21CNWSCombatRoundAction, 0x00000000003bd3f0) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound9GetActionEv, 0x00000000003bd390) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRound9GetAttackEi, 0x00000000003bd850) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRoundC1EP12CNWSCreature, 0x00000000003bc970) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRoundC2EP12CNWSCreature, 0x00000000003bc970) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRoundD1Ev, 0x00000000003bcc50) -NWNXLIB_FUNCTION(_ZN15CNWSCombatRoundD2Ev, 0x00000000003bcc50) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject12ChangeVolumeEi, 0x00000000003f13b0) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject12EventHandlerEjjPvjj, 0x00000000003f09a0) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject14ChangePositionE6Vector, 0x00000000003f14e0) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject14RemoveFromAreaEv, 0x00000000003f0d90) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject15PackIntoMessageEP11CNWSMessage, 0x00000000003f0f00) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject16AsNWSSoundObjectEv, 0x00000000003f1c10) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject21GetPeopleInSoundRangeEv, 0x00000000003f1650) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject4LoadEP7CResGFFP10CResStruct, 0x00000000003f1670) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject4PlayEv, 0x00000000003f1190) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject4SaveEP7CResGFFP10CResStruct, 0x00000000003f0a80) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject4StopEv, 0x00000000003f12a0) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject8AIUpdateEv, 0x00000000003f0990) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObject9AddToAreaEP8CNWSAreai, 0x00000000003f0dd0) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObjectC1Ej, 0x00000000003f09b0) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObjectC2Ej, 0x00000000003f09b0) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObjectD0Ev, 0x00000000003f0ed0) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObjectD1Ev, 0x00000000003f0e90) -NWNXLIB_FUNCTION(_ZN15CNWSSoundObjectD2Ev, 0x00000000003f0e90) -NWNXLIB_FUNCTION(_ZN15CNWSStats_SpellC1Ev, 0x0000000000270ad0) -NWNXLIB_FUNCTION(_ZN15CNWSStats_SpellC2Ev, 0x0000000000270ad0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler10HashStringEPKc, 0x00000000007a9cc0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler10HashStringERK10CExoString, 0x00000000007a9d30) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler10InitializeEv, 0x00000000007aa530) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler10PopSRStackEPiS0_S0_PP20CScriptParseTreeNodeS3_, 0x00000000007c00e0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler11CompileFileERK10CExoString, 0x00000000007aca60) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler11HandleTokenEv, 0x00000000007bed50) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler11OutputErrorEiP10CExoStringiRKS0_, 0x00000000007ac290) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler11ParseSourceEPci, 0x00000000007c7ba0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler11PushSRStackEiiiP20CScriptParseTreeNode, 0x00000000007bff50) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler13InstallLoaderEv, 0x00000000007b5890) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler13ResolveLabelsEv, 0x00000000007b06e0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler13WalkParseTreeEP20CScriptParseTreeNode, 0x00000000007bd410) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler14HashManagerAddEjj, 0x00000000007a9e50) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler14SetOutputAliasERK10CExoString, 0x00000000007abd80) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler15DeleteParseTreeEiP20CScriptParseTreeNode, 0x00000000007aba10) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler15TokenInitializeEv, 0x00000000007bff30) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler16GetStructureSizeERK10CExoString, 0x00000000007afbb0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler17CheckForBadLValueEP20CScriptParseTreeNode, 0x00000000007c0870) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler17FinalizeFinalCodeEv, 0x00000000007ae970) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler17GenerateParseTreeEv, 0x00000000007c18b0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler17GetStructureFieldERK10CExoStringS2_, 0x00000000007afcf0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler17HashManagerDeleteEjj, 0x00000000007a9fa0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler18AddVariableToStackEiP10CExoStringi, 0x00000000007b00e0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler18CompileScriptChunkERK10CExoStringi, 0x00000000007abf30) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler18DeleteCompileStackEv, 0x00000000007c7930) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler18GetHashEntryByNameEPKc, 0x00000000007a9d50) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler18ParseNextCharacterEiiPci, 0x00000000007bf9e0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler18PrintBinaryAddressEv, 0x00000000007afad0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19AddStructureToStackERK10CExoStringi, 0x00000000007afdd0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19CleanUpAfterCompileEiP20CScriptParseTreeNode, 0x00000000007af0c0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19ClearAllSymbolListsEv, 0x00000000007af050) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19GetIdentifierByNameERK10CExoString, 0x00000000007afc30) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19InitializeFinalCodeEv, 0x00000000007ae8f0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19InVisitGenerateCodeEP20CScriptParseTreeNode, 0x00000000007b4350) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19OutputWalkTreeErrorEiP20CScriptParseTreeNode, 0x00000000007af150) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19ParseCharacterCaratEi, 0x00000000007bf600) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19ParseCharacterColonEv, 0x00000000007bf6e0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19ParseCharacterCommaEv, 0x00000000007bf680) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19ParseCharacterSlashEi, 0x00000000007beda0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19ParseCharacterTildeEv, 0x00000000007bf650) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19ParseIdentifierFileEv, 0x00000000007be7b0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19ShutdownIncludeFileEi, 0x00000000007ab9c0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19TestIdentifierTokenEv, 0x00000000007bf710) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler19WriteResolvedOutputEv, 0x00000000007af970) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20AddSymbolToLabelListEiiii, 0x00000000007b0a90) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20AddSymbolToQueryListEiiii, 0x00000000007b0cc0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20CleanUpAfterCompilesEv, 0x00000000007abde0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20CleanUpDuringCompileEi, 0x00000000007c79c0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20ClearSwitchLabelListEv, 0x00000000007b14c0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20ParseCharacterHyphenEi, 0x00000000007bf150) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20ParseCharacterPeriodEv, 0x00000000007bf920) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20ParseStringCharacterEiiPci, 0x00000000007befb0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20PreVisitGenerateCodeEP20CScriptParseTreeNode, 0x00000000007b1730) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20SetCompileDebugLevelEi, 0x00000000007abad0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler20WriteFinalCodeToFileERK10CExoString, 0x00000000007aea20) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler21GetCompiledScriptCodeEPPcPi, 0x00000000007ac220) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler21HandleIdentifierTokenEv, 0x00000000007bf8e0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler21InitializeIncludeFileEi, 0x00000000007ab950) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler21OutputIdentifierErrorERK10CExoStringii, 0x00000000007af2b0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler21ParseCharacterNumericEi, 0x00000000007bea80) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler21PostVisitGenerateCodeEP20CScriptParseTreeNode, 0x00000000007b6250) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler21PrintParseSourceErrorEi, 0x00000000007c7a30) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler22GenerateIdentifierListEv, 0x00000000007bd620) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler22ParseCharacterAlphabetEi, 0x00000000007beaf0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler22ParseCharacterAsteriskEi, 0x00000000007bef20) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler22ParseCharacterEllipsisEv, 0x00000000007bed10) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler22ParseCharacterPlusSignEi, 0x00000000007bf500) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler23AddToGlobalVariableListEP20CScriptParseTreeNode, 0x00000000007c1830) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler23ClearCompiledScriptCodeEv, 0x00000000007ac240) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler23DetermineLocationOfCodeEv, 0x00000000007b05e0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler23ModifySRStackReturnTreeEP20CScriptParseTreeNode, 0x00000000007c0170) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler23ParseCharacterAmpersandEi, 0x00000000007bee20) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler23ParseCharacterEqualSignEi, 0x00000000007bf4b0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler23ParseCharacterLeftAngleEi, 0x00000000007bf3d0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler23ParseCharacterLeftBraceEv, 0x00000000007bf1d0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler23ParseCharacterSemicolonEv, 0x00000000007bf5d0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler24AddToSymbolTableVarStackEiii, 0x00000000007b5500) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler24AddUserDefinedIdentifierEP20CScriptParseTreeNodei, 0x00000000007c08b0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler24CompileScriptConditionalERK10CExoString, 0x00000000007ac0f0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler24DuplicateScriptParseTreeEP20CScriptParseTreeNode, 0x00000000007c0720) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler24ParseCharacterRightAngleEi, 0x00000000007bf2f0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler24ParseCharacterRightBraceEv, 0x00000000007bf200) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler24SetCompileSymbolicOutputEi, 0x00000000007abaf0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25CreateScriptParseTreeNodeEiP20CScriptParseTreeNodeS1_, 0x00000000007c0590) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25DeleteScriptParseTreeNodeEP20CScriptParseTreeNode, 0x00000000007c04e0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25GetNewScriptParseTreeNodeEv, 0x00000000007c0190) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25InitializeSwitchLabelListEv, 0x00000000007af400) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25ParseCharacterLeftBracketEv, 0x00000000007bf230) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25ParseCharacterPercentSignEi, 0x00000000007bf580) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25ParseCharacterVerticalBarEi, 0x00000000007beea0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25ParseFloatFromTokenStringEv, 0x00000000007be9a0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25SetCompileConditionalFileEi, 0x00000000007abdb0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25SetGenerateDebuggerOutputEi, 0x00000000007abae0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25Test_CompareFileInclusionER10CExoStringS1_P14CExoStringListt, 0x00000000007ac490) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler25WriteDebuggerOutputToFileE10CExoString, 0x00000000007b34d0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler26ParseCharacterQuestionMarkEv, 0x00000000007bf6b0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler26ParseCharacterRightBracketEv, 0x00000000007bf260) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler26ParseCommentedOutCharacterEi, 0x00000000007bebe0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler26SetIdentifierSpecificationERK10CExoString, 0x00000000007abb00) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler27ClearUserDefinedIdentifiersEv, 0x00000000007aec80) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler27GenerateCodeForSwitchLabelsEP20CScriptParseTreeNode, 0x00000000007b42d0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler27ParseCharacterQuotationMarkEv, 0x00000000007bef70) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler27ResolveDebuggingInformationEv, 0x00000000007b3240) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler27SetCompileConditionalOrMainEi, 0x00000000007abdc0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler27SetOptimizeBinaryCodeLengthEi, 0x00000000007abda0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler27TraverseTreeForSwitchLabelsEP20CScriptParseTreeNode, 0x00000000007b0e80) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler28ValidateLocationOfIdentifierERK10CExoString, 0x00000000007b0420) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler29PrintParseIdentifierFileErrorEi, 0x00000000007be6e0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler29RemoveFromSymbolTableVarStackEiii, 0x00000000007b5ef0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler29Test_CompareDirectoryContentsER10CExoStringS1_, 0x00000000007ad4c0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler30GenerateFinalCodeFromParseTreeE10CExoString, 0x00000000007bd430) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler30InitializePreDefinedStructuresEv, 0x00000000007aa430) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler30ParseCharacterExclamationPointEi, 0x00000000007bf460) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler31ParseCharacterLeftSquareBracketEv, 0x00000000007bf290) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler32EndLineNumberAtBinaryInstructionEiii, 0x00000000007b4090) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler32GenerateDebuggerTypeAbbreviationEi10CExoString, 0x00000000007b3300) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler32InsertGlobalVariablesInParseTreeEP20CScriptParseTreeNode, 0x00000000007af260) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler32ParseCharacterRightSquareBracketEv, 0x00000000007bf2c0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler32SetAutomaticCleanUpAfterCompilesEi, 0x00000000007abdd0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler33FoundReturnStatementOnAllBranchesEP20CScriptParseTreeNode, 0x00000000007afb10) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler33GetFunctionNameFromSymbolSubTypesEii, 0x00000000007b0320) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler33Test_CompileAllScriptsInDirectoryER10CExoStringS1_S1_, 0x00000000007acdd0) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler34StartLineNumberAtBinaryInstructionEiii, 0x00000000007b1690) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler40GenerateIdentifiersFromConstantVariablesEP20CScriptParseTreeNode, 0x00000000007af440) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler40ResolveDebuggingInformationForIdentifierEi, 0x00000000007b3090) -NWNXLIB_FUNCTION(_ZN15CScriptCompiler8ShutDownEv, 0x00000000007aa120) -NWNXLIB_FUNCTION(_ZN15CScriptCompilerC1Ev, 0x00000000007add80) -NWNXLIB_FUNCTION(_ZN15CScriptCompilerC2Ev, 0x00000000007add80) -NWNXLIB_FUNCTION(_ZN15CScriptCompilerD1Ev, 0x00000000007adad0) -NWNXLIB_FUNCTION(_ZN15CScriptCompilerD2Ev, 0x00000000007adad0) -NWNXLIB_FUNCTION(_ZN15CScriptLocation12LoadLocationEP7CResGFFP10CResStruct, 0x00000000008b1330) -NWNXLIB_FUNCTION(_ZN15CScriptLocation12SaveLocationEP7CResGFFP10CResStruct, 0x00000000008b1480) -NWNXLIB_FUNCTION(_ZN15CScriptLocation18CopyScriptLocationEPS_, 0x00000000008b1300) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster10SetAILevelEP10CNWSObjecti, 0x0000000000357900) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster11UpdateStateEv, 0x0000000000356410) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster12EventPendingEjj, 0x00000000003561d0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster12RemoveObjectEP10CNWSObject, 0x00000000003578b0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster13EVENT_BOOT_PCE, 0x00000000008da4cc) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster13GetScriptsRunEv, 0x0000000000357720) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster14LoadEventQueueEP7CResGFFP10CResStruct, 0x0000000000357610) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster14SaveEventQueueEP7CResGFFP10CResStruct, 0x0000000000356f10) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster15ClearEventQueueEv, 0x0000000000355d60) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster15ClearScriptsRunEv, 0x0000000000357710) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster15DeleteEventDataEjPv, 0x0000000000356330) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster15GetPendingEventEPjS0_S0_S0_S0_PPv, 0x0000000000356220) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster15OnEffectAppliedEP10CNWSObjectP11CGameEffecti, 0x00000000003562b0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster15OnEffectRemovedEP10CNWSObjectP11CGameEffect, 0x00000000003562d0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster17AddEventDeltaTimeEjjjjjPv, 0x0000000000355fd0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster17EVENT_LOCK_OBJECTE, 0x00000000008da504) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster17EVENT_OPEN_OBJECTE, 0x00000000008da51c) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster17EVENT_TIMED_EVENTE, 0x00000000008da534) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster17SetExoAppInternalEP21CServerExoAppInternal, 0x0000000000355d50) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster18AppendToScriptsRunE10CExoString, 0x0000000000357850) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster18EVENT_ACQUIRE_ITEME, 0x00000000008da4d4) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster18EVENT_APPLY_EFFECTE, 0x00000000008da524) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster18EVENT_CLOSE_OBJECTE, 0x00000000008da520) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster18EVENT_DESTROY_AREAE, 0x00000000008da4c8) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster18EVENT_LEFT_TRIGGERE, 0x00000000008da52c) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster18EVENT_SIGNAL_EVENTE, 0x00000000008da510) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster18EVENT_SPELL_IMPACTE, 0x00000000008da518) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster19EVENT_BROADCAST_AOOE, 0x00000000008da4e8) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster19EVENT_FORCED_ACTIONE, 0x00000000008da4f0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster19EVENT_REMOVE_EFFECTE, 0x00000000008da500) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster19EVENT_UNLOCK_OBJECTE, 0x00000000008da508) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster20AddEventAbsoluteTimeEjjjjjPv, 0x0000000000355db0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster20EVENT_DESTROY_OBJECTE, 0x00000000008da50c) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster20EVENT_PLAY_ANIMATIONE, 0x00000000008da514) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster20EVENT_SPAWN_BODY_BAGE, 0x00000000008da4f4) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster21AI_UPDATE_TIME_HI_RESE, 0x00000000008da538) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster21EVENT_ENTERED_TRIGGERE, 0x00000000008da530) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster21EVENT_SUMMON_CREATUREE, 0x00000000008da4d8) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster21OnItemPropertyAppliedEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003562f0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster21OnItemPropertyRemovedEP8CNWSItemP15CNWItemPropertyP12CNWSCreaturej, 0x0000000000356310) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster22EVENT_FEEDBACK_MESSAGEE, 0x00000000008da4e0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster22EVENT_REMOVE_FROM_AREAE, 0x00000000008da528) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster22EVENT_WHIRLWIND_ATTACKE, 0x00000000008da4d0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster23EVENT_ON_MELEE_ATTACKEDE, 0x00000000008da4fc) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster25EVENT_DECREMENT_STACKSIZEE, 0x00000000008da4f8) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster25LoadReputationAdjustmentsEv, 0x0000000000358560) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster27AddEventAbsoluteTimeViaTailEjjjjjPv, 0x0000000000355ec0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster28EVENT_ABILITY_EFFECT_APPLIEDE, 0x00000000008da4dc) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster30EVENT_ITEM_ON_HIT_SPELL_IMPACTE, 0x00000000008da4ec) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster31EVENT_BROADCAST_SAFE_PROJECTILEE, 0x00000000008da4e4) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster33AdjustTargetAndWitnessReputationsEjji, 0x0000000000357db0) -NWNXLIB_FUNCTION(_ZN15CServerAIMaster9AddObjectEP10CNWSObjecti, 0x00000000003579a0) -NWNXLIB_FUNCTION(_ZN15CServerAIMasterC1Ev, 0x0000000000357bd0) -NWNXLIB_FUNCTION(_ZN15CServerAIMasterC2Ev, 0x0000000000357bd0) -NWNXLIB_FUNCTION(_ZN15CServerAIMasterD1Ev, 0x0000000000357a20) -NWNXLIB_FUNCTION(_ZN15CServerAIMasterD2Ev, 0x0000000000357a20) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine11ExecuteCodeEPiSt10shared_ptrI9DataBlockEP31CVirtualMachineDebuggingContext, 0x00000000007c9b60) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine12DeleteScriptEP21CVirtualMachineScript, 0x00000000007c8f30) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine12GetScriptLogERK10CExoString, 0x00000000007c9080) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine13RunScriptFileEi, 0x00000000007cbfd0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine13StackPopFloatEPf, 0x00000000007c9360) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine14ReadScriptFileEP10CExoStringi, 0x00000000007ce270) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine14RunScriptChunkERK10CExoStringjii, 0x00000000007cce00) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine14StackPopObjectEPj, 0x00000000007c97d0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine14StackPopStringEP10CExoString, 0x00000000007c9590) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine14StackPopVectorEP6Vector, 0x00000000007c9410) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine14StackPushFloatEf, 0x00000000007c93c0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine15SetDebugGUIFlagEi, 0x00000000007c9a80) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine15StackPopIntegerEPi, 0x00000000007c92b0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine15StackPushObjectEj, 0x00000000007c9830) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine15StackPushStringERK10CExoString, 0x00000000007c9610) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine15StackPushVectorE6Vector, 0x00000000007c94b0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine16InitializeScriptEP21CVirtualMachineScriptSt10shared_ptrI9DataBlockE, 0x00000000007c8e10) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine16StackPushIntegerEi, 0x00000000007c9310) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine17PopInstructionPtrEPi, 0x00000000007c9010) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine18GetScriptParameterERK10CExoString, 0x00000000007cb910) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine18PushInstructionPtrEi, 0x00000000007c9050) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine18RunScriptSituationEPvji, 0x00000000007cc1e0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine18SetScriptParameterERK10CExoStringS2_, 0x00000000007ce130) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine19SetScriptParametersERK13CExoArrayListI11ScriptParamE, 0x00000000007ce020) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine20SetUpScriptSituationEP21CVirtualMachineScript, 0x00000000007c9140) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine21DeleteScriptSituationEPv, 0x00000000007c99a0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine21SetCommandImplementerEP29CVirtualMachineCmdImplementer, 0x00000000007c9a90) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine22SetUpJITCompiledScriptERK10CExoStringi, 0x00000000007cc990) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine23GetRunScriptReturnValueEPiPPv, 0x00000000007c9110) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine23StackPopEngineStructureEiPPv, 0x00000000007c96a0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine24StackPopCommand_InternalEPP21CVirtualMachineScript, 0x00000000007cdd50) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine24StackPushEngineStructureEiPv, 0x00000000007c9750) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine28LoadScriptSituation_InternalEPP21CVirtualMachineScriptP7CResGFFP10CResStruct, 0x00000000007cc4a0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine28SaveScriptSituation_InternalEP21CVirtualMachineScriptP7CResGFFP10CResStruct, 0x00000000007c9880) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine29Test_RunAllScriptsInDirectoryER10CExoString, 0x00000000007ccf40) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine8DebuggerEPi, 0x00000000007c9ac0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachine9RunScriptEP10CExoStringjii, 0x00000000007ce500) -NWNXLIB_FUNCTION(_ZN15CVirtualMachineC1Ev, 0x00000000007cd9d0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachineC2Ev, 0x00000000007cd9d0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachineD1Ev, 0x00000000007cbba0) -NWNXLIB_FUNCTION(_ZN15CVirtualMachineD2Ev, 0x00000000007cbba0) -NWNXLIB_FUNCTION(_ZN15NWVMachineUtils14SerializeToGffEP11CGameObjecti, 0x0000000000443e20) -NWNXLIB_FUNCTION(_ZN15NWVMachineUtils15SerializeToJsonEP11CGameObjecti, 0x00000000004446a0) -NWNXLIB_FUNCTION(_ZN15NWVMachineUtils15SerializeToJsonERK7CResReft, 0x0000000000445040) -NWNXLIB_FUNCTION(_ZN15NWVMachineUtils15SpawnScriptAreaEP7CResGFFS1_RK10CExoStringS4_, 0x00000000004457f0) -NWNXLIB_FUNCTION(_ZN15NWVMachineUtils18DeserializeFromGffESt10shared_ptrI8DataViewEiRK15CScriptLocationjRK10CExoStringi, 0x0000000000445f90) -NWNXLIB_FUNCTION(_ZN15NWVMachineUtils19DeserializeFromJsonERK19JsonEngineStructureiRK15CScriptLocationjRK10CExoStringi, 0x0000000000447560) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternal10CheckForCDEj, 0x0000000000123860) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternal11LoadAliasesEi, 0x0000000000121a20) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternal16GetDirectoryListEP13CExoArrayListI10CExoStringES1_tii, 0x0000000000123870) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternal20GetResourceExtensionEt, 0x0000000000121930) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternal23GetResTypeFromExtensionERK10CExoString, 0x00000000001219a0) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternal25GetAugmentedDirectoryListEP13CExoArrayListI9CFileInfoE10CExoStringti, 0x0000000000123d90) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternal28CreateResourceExtensionTableEv, 0x00000000001207d0) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternal8AddAliasEi10CExoStringS0_, 0x00000000001217c0) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternal8ShutDownEv, 0x0000000000123850) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternalC1Ev, 0x0000000000121650) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternalC2Ev, 0x0000000000121650) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternalD1Ev, 0x0000000000120740) -NWNXLIB_FUNCTION(_ZN16CExoBaseInternalD2Ev, 0x0000000000120740) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal10FileOpenedEv, 0x0000000000127350) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal13GetFileHandleEv, 0x00000000001275a0) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal13SeekBeginningEv, 0x00000000001274c0) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal15SetMemoryBufferEPKvi, 0x0000000000126f90) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal17ReadAsyncCompleteEv, 0x0000000000127270) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal18ReadAsyncBytesReadEv, 0x00000000001272a0) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal3EofEv, 0x0000000000127310) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal4ReadEP10CExoStringj, 0x0000000000127060) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal4ReadEPvjj, 0x00000000001273b0) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal4SeekEii, 0x0000000000127440) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal5FlushEv, 0x0000000000127380) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal5WriteEPKc, 0x00000000001272d0) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal7GetSizeEv, 0x0000000000127030) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal7SeekEndEv, 0x0000000000127510) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal8GetIsEOSEv, 0x0000000000127560) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal9GetOffsetEv, 0x0000000000126ff0) -NWNXLIB_FUNCTION(_ZN16CExoFileInternal9ReadAsyncEPvjj, 0x0000000000127190) -NWNXLIB_FUNCTION(_ZN16CExoFileInternalC1EPKvi, 0x0000000000126f20) -NWNXLIB_FUNCTION(_ZN16CExoFileInternalC1ERK10CExoStringS2_, 0x0000000000126e20) -NWNXLIB_FUNCTION(_ZN16CExoFileInternalC1ERK10CExoStringtS2_, 0x0000000000126a30) -NWNXLIB_FUNCTION(_ZN16CExoFileInternalC2EPKvi, 0x0000000000126f20) -NWNXLIB_FUNCTION(_ZN16CExoFileInternalC2ERK10CExoStringS2_, 0x0000000000126e20) -NWNXLIB_FUNCTION(_ZN16CExoFileInternalC2ERK10CExoStringtS2_, 0x0000000000126a30) -NWNXLIB_FUNCTION(_ZN16CExoFileInternalD0Ev, 0x0000000000125f70) -NWNXLIB_FUNCTION(_ZN16CExoFileInternalD1Ev, 0x0000000000125ef0) -NWNXLIB_FUNCTION(_ZN16CExoFileInternalD2Ev, 0x0000000000125ef0) -NWNXLIB_FUNCTION(_ZNK16CExoFileInternal14IsMemoryBackedEv, 0x0000000000126fc0) -NWNXLIB_FUNCTION(_ZNK16CExoFileInternal9IsMMappedEv, 0x0000000000126fd0) -NWNXLIB_FUNCTION(_ZN16CExoRandInternal11BUFFER_SIZEE, 0x00000000008bdcce) -NWNXLIB_FUNCTION(_ZN16CExoRandInternal11SignalEventEj, 0x0000000000129d90) -NWNXLIB_FUNCTION(_ZN16CExoRandInternal11SignalEventEv, 0x0000000000129c70) -NWNXLIB_FUNCTION(_ZN16CExoRandInternal3AddEPhi, 0x0000000000129720) -NWNXLIB_FUNCTION(_ZN16CExoRandInternal4RandEv, 0x0000000000129510) -NWNXLIB_FUNCTION(_ZN16CExoRandInternal6ReSeedEjjjj, 0x00000000001295b0) -NWNXLIB_FUNCTION(_ZN16CExoRandInternal7GenSeedEv, 0x00000000001296a0) -NWNXLIB_FUNCTION(_ZN16CExoRandInternal9GetStringEt, 0x0000000000129830) -NWNXLIB_FUNCTION(_ZN16CExoRandInternalC1Ev, 0x00000000001299b0) -NWNXLIB_FUNCTION(_ZN16CExoRandInternalC2Ev, 0x00000000001299b0) -NWNXLIB_FUNCTION(_ZN16CExoRandInternalD1Ev, 0x00000000001294f0) -NWNXLIB_FUNCTION(_ZN16CExoRandInternalD2Ev, 0x00000000001294f0) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray11INVALIDLISTE, 0x000000000095eecb) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray11MAXOBJECTIDE, 0x000000000095eee4) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray11MINOBJECTIDE, 0x000000000095eee8) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray12INVALIDOBJIDE, 0x000000000095eef4) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray12MAXCHAROBJIDE, 0x000000000095eeec) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray12MINCHAROBJIDE, 0x000000000095eef0) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray13GetGameObjectEjPP11CGameObject, 0x0000000000898950) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray13LISTTYPE_MASKE, 0x000000000095eedc) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray13OUT_OF_MEMORYE, 0x000000000095eecc) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray14AddObjectAtPosEjP11CGameObject, 0x0000000000898330) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray14EXTERNALOBJECTE, 0x000000000095eec8) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray14INTERNALOBJECTE, 0x000000000095eec9) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray15CHAROBJECT_MASKE, 0x000000000095eee0) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray15NULL_GAMEOBJECTE, 0x000000000095eeca) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray17AddExternalObjectERjP11CGameObjecti, 0x0000000000898610) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray17AddInternalObjectERjP11CGameObjecti, 0x0000000000898760) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray23AddCharacterObjectAtPosEjP11CGameObject, 0x00000000008984e0) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray25MAX_LOG_GAME_OBJECT_CACHEE, 0x000000000095eed0) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray25MIN_LOG_GAME_OBJECT_CACHEE, 0x000000000095eed8) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray29DEFAULT_LOG_GAME_OBJECT_CACHEE, 0x000000000095eed4) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray5CleanEt, 0x0000000000898940) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray6BAD_IDE, 0x000000000095eecd) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray6DeleteEj, 0x0000000000898900) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray6DeleteEjPP11CGameObject, 0x0000000000898850) -NWNXLIB_FUNCTION(_ZN16CGameObjectArray7SUCCESSE, 0x000000000095eece) -NWNXLIB_FUNCTION(_ZN16CGameObjectArrayC1Ei, 0x0000000000898110) -NWNXLIB_FUNCTION(_ZN16CGameObjectArrayC2Ei, 0x0000000000898110) -NWNXLIB_FUNCTION(_ZN16CGameObjectArrayD1Ev, 0x0000000000898240) -NWNXLIB_FUNCTION(_ZN16CGameObjectArrayD2Ev, 0x0000000000898240) -NWNXLIB_FUNCTION(_ZN16CNetworkProfiler11GetLastTimeEv, 0x00000000001319c0) -NWNXLIB_FUNCTION(_ZN16CNetworkProfiler12GetStartTimeEv, 0x0000000000131960) -NWNXLIB_FUNCTION(_ZN16CNetworkProfiler12OutputReportEv, 0x0000000000131320) -NWNXLIB_FUNCTION(_ZN16CNetworkProfiler16GetFrameLastTimeEv, 0x00000000001319f0) -NWNXLIB_FUNCTION(_ZN16CNetworkProfiler17GetFrameStartTimeEv, 0x0000000000131990) -NWNXLIB_FUNCTION(_ZN16CNetworkProfiler17SetOutputFilenameEPc, 0x0000000000131250) -NWNXLIB_FUNCTION(_ZN16CNetworkProfiler19AddMessageToProfileEhhhj, 0x0000000000131a20) -NWNXLIB_FUNCTION(_ZN16CNetworkProfiler24AddMessageToFrameProfileEhj, 0x0000000000131c50) -NWNXLIB_FUNCTION(_ZN16CNetworkProfiler8SetStateEi, 0x00000000001317d0) -NWNXLIB_FUNCTION(_ZN16CNetworkProfilerC1Ev, 0x00000000001311a0) -NWNXLIB_FUNCTION(_ZN16CNetworkProfilerC2Ev, 0x00000000001311a0) -NWNXLIB_FUNCTION(_ZN16CNetworkProfilerD1Ev, 0x0000000000131140) -NWNXLIB_FUNCTION(_ZN16CNetworkProfilerD2Ev, 0x0000000000131140) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray22GetIsDefaultMonkWeaponEj, 0x000000000089d750) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray25GetDefaultWeaponFocusFeatEj, 0x000000000089d650) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray28GetDefaultWeaponOfChoiceFeatEj, 0x000000000089d730) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray29GetDefaultEpicWeaponFocusFeatEj, 0x000000000089d670) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray34GetDefaultWeaponSpecializationFeatEj, 0x000000000089d690) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray36GetDefaultWeaponImprovedCriticalFeatEj, 0x000000000089d6d0) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray38GetDefaultEpicWeaponSpecializationFeatEj, 0x000000000089d6b0) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray42GetDefaultWeaponFinesseMinimumCreatureSizeEj, 0x000000000089d770) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray43GetDefaultEpicWeaponDevastatingCriticalFeatEj, 0x000000000089d710) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray44GetDefaultEpicWeaponOverwhelmingCriticalFeatEj, 0x000000000089d6f0) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArray4LoadEv, 0x000000000089bd30) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArrayC1Ev, 0x000000000089bc30) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArrayC2Ev, 0x000000000089bc30) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArrayD1Ev, 0x000000000089bc50) -NWNXLIB_FUNCTION(_ZN16CNWBaseItemArrayD2Ev, 0x000000000089bc50) -NWNXLIB_FUNCTION(_ZNK16CNWBaseItemArray11GetBaseItemEi, 0x000000000089bcf0) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData10GetIntegerEi, 0x00000000001d6620) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData10SetIntegerEii, 0x00000000001d8220) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData11GetObjectIDEi, 0x00000000001d6660) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData11SetObjectIDEij, 0x00000000001d82a0) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData6CopyToEPS_, 0x00000000001d8810) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData8GetFloatEi, 0x00000000001d6640) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData8LoadDataEP7CResGFFP10CResStruct, 0x00000000001d83c0) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData8SaveDataEP7CResGFFP10CResStruct, 0x00000000001d66d0) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData8SetFloatEif, 0x00000000001d8260) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData9ClearDataEv, 0x00000000001d68d0) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData9GetStringEi, 0x00000000001d6680) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageData9SetStringEi10CExoString, 0x00000000001d82e0) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageDataC1Ev, 0x00000000001d6520) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageDataC2Ev, 0x00000000001d6520) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageDataD1Ev, 0x00000000001d6570) -NWNXLIB_FUNCTION(_ZN16CNWCCMessageDataD2Ev, 0x00000000001d6570) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound12BATTLE_DELAYE, 0x00000000008e6954) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound13SetMusicDelayEi, 0x0000000000474580) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound15PackIntoMessageEP11CNWSMessage, 0x0000000000475100) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound15PlayBattleMusicEi, 0x0000000000474840) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound16GetPlayersInAreaEP13CExoArrayListIjE, 0x0000000000474290) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound16PlayAmbientSoundEi, 0x0000000000474a20) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound16SetMusicDayTrackEi, 0x0000000000474670) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound18SetAmbientDayTrackEi, 0x0000000000474b00) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound18SetMusicNightTrackEi, 0x0000000000474750) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound19SetAmbientDayVolumeEi, 0x0000000000474ce0) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound19SetBattleMusicTrackEi, 0x0000000000474930) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound20SetAmbientNightTrackEi, 0x0000000000474bf0) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound21SetAmbientNightVolumeEi, 0x0000000000474de0) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound4LoadEP7CResGFFP10CResStruct, 0x0000000000474ee0) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound4SaveEP7CResGFFP10CResStruct, 0x0000000000475020) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSound9PlayMusicEi, 0x00000000004744a0) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSoundC1Ej, 0x0000000000474230) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSoundC2Ej, 0x0000000000474230) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSoundD0Ev, 0x00000000003b05f0) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSoundD1Ev, 0x00000000003b0730) -NWNXLIB_FUNCTION(_ZN16CNWSAmbientSoundD2Ev, 0x00000000003b0730) -NWNXLIB_FUNCTION(_ZN16CNWSForcedAction16LoadForcedActionEP7CResGFFP10CResStruct, 0x00000000002bcd90) -NWNXLIB_FUNCTION(_ZN16CNWSForcedAction16SaveForcedActionEP7CResGFFP10CResStruct, 0x00000000002bccc0) -NWNXLIB_FUNCTION(_ZN16CNWSForcedActionC1Ev, 0x00000000002bcc80) -NWNXLIB_FUNCTION(_ZN16CNWSForcedActionC2Ev, 0x00000000002bcc80) -NWNXLIB_FUNCTION(_ZN16CNWSForcedActionD1Ev, 0x00000000002bccb0) -NWNXLIB_FUNCTION(_ZN16CNWSForcedActionD2Ev, 0x00000000002bccb0) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal12FlushLogFileEv, 0x0000000000124e20) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal12OpenLogFilesE10CExoStringi, 0x0000000000125430) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal13CloseLogFilesEv, 0x0000000000124de0) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal14FlushErrorFileEv, 0x0000000000124e00) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal14WriteToLogFileERK10CExoString, 0x00000000001250e0) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal15CreateDirectoryE10CExoString, 0x0000000000125340) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal16WriteToErrorFileERK10CExoString, 0x0000000000124f10) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal19GetCurrentTimestampER10CExoString, 0x00000000001252c0) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal6AssertEiPKcS1_, 0x0000000000124d00) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternal7WarningEiPKcS1_, 0x0000000000124e40) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternalC1Ev, 0x0000000000124c80) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternalC2Ev, 0x0000000000124c80) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternalD1Ev, 0x0000000000124cd0) -NWNXLIB_FUNCTION(_ZN17CExoDebugInternalD2Ev, 0x0000000000124cd0) -NWNXLIB_FUNCTION(_ZN17CLastUpdateObject18InitializeQuickbarEv, 0x0000000000310660) -NWNXLIB_FUNCTION(_ZN17CLastUpdateObjectC1Ev, 0x000000000030fad0) -NWNXLIB_FUNCTION(_ZN17CLastUpdateObjectC2Ev, 0x000000000030fad0) -NWNXLIB_FUNCTION(_ZN17CLastUpdateObjectD1Ev, 0x0000000000310530) -NWNXLIB_FUNCTION(_ZN17CLastUpdateObjectD2Ev, 0x0000000000310530) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10CanLevelUpEv, 0x00000000002775b0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10ClearFeatsEv, 0x0000000000272d20) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10GetCHAStatEv, 0x00000000002784d0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10GetCONStatEv, 0x0000000000278180) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10GetDEXStatEv, 0x0000000000278040) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10GetDomain1Eh, 0x0000000000277330) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10GetDomain2Eh, 0x0000000000277380) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10GetINTStatEv, 0x0000000000278310) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10GetIsClassEh, 0x0000000000271f50) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10GetSTRStatEv, 0x0000000000277f30) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10GetWISStatEv, 0x00000000002783f0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10RemoveFeatEt, 0x0000000000275e30) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10SetCHABaseEh, 0x0000000000278540) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10SetCONBaseEhi, 0x0000000000278220) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10SetDEXBaseEh, 0x0000000000278120) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10SetDomain1Ehh, 0x0000000000277310) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10SetDomain2Ehh, 0x0000000000277360) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10SetINTBaseEh, 0x0000000000278380) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10SetSTRBaseEh, 0x0000000000277fd0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats10SetWISBaseEh, 0x0000000000278460) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats11GetFullNameEv, 0x0000000000270b10) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats11GetStatByIdEi, 0x0000000000285c70) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats11SetStatByIdEif, 0x0000000000290f60) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats12FeatAcquiredEtP13CExoArrayListItEi, 0x00000000002777c0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats12GetBonusFeatEt, 0x000000000027c0a0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats12GetClassInfoEh, 0x0000000000271f20) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats12GetSkillRankEhP10CNWSObjecti, 0x0000000000273d40) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats12SetSkillRankEhc, 0x0000000000272cf0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats12UnReadySpellEjhhh, 0x000000000028d140) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13AddExperienceEj, 0x0000000000292860) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13AddKnownSpellEhj, 0x000000000028df60) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13CanChooseFeatEthhP13CExoArrayListItE, 0x000000000028b5c0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13GetAbilityModEh, 0x0000000000277850) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13GetClassLevelEhi, 0x0000000000271fb0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13GetDamageRollEP10CNWSObjectiiiii, 0x0000000000280c30) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13GetIsPlayerDMEv, 0x000000000028dc00) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13GetKnownSpellEhhh, 0x0000000000276020) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13GetLevelStatsEh, 0x0000000000272030) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13GetPrimaryModEh, 0x00000000002778d0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13GetRaceStringEv, 0x0000000000272480) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13SaveClassInfoEP7CResGFFP10CResStruct, 0x000000000027d240) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13SetClassLevelEhh, 0x0000000000278f10) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats13SetExperienceEji, 0x0000000000292580) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats14GetAbilityInfoEhPhPcS0_S1_, 0x0000000000278580) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats14GetCanUseSkillEh, 0x0000000000275be0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats14GetCasterLevelEh, 0x000000000027bff0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats14GetClassStringEh, 0x0000000000272560) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats14GetDamageBonusEP12CNWSCreaturei, 0x000000000027f010) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats14GetWeaponFocusEP8CNWSItem, 0x0000000000276570) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats15AdjustAlignmentEhsj, 0x0000000000290240) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats15GetSpellFailureEh, 0x000000000027ec40) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats15ModifyAlignmentEss, 0x0000000000290090) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats15ReadySpellLevelEh, 0x0000000000278ca0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats15SetMovementRateEi, 0x00000000002779d0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats15SetSpellFailureEhh, 0x000000000027ec60) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats15ValidateLevelUpEP13CNWLevelStatshhh, 0x00000000002991c0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16CalcStatModifierEh, 0x00000000002725f0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetACNaturalBaseEi, 0x0000000000279bf0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetFeatTotalUsesEt, 0x000000000027e1e0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetIsDomainSpellEhhh, 0x0000000000275fa0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetLargePortraitEv, 0x00000000002723e0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetSmallPortraitEv, 0x0000000000272340) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetSpellUsesLeftEjhhh, 0x000000000028ce50) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetTotalCHABonusEv, 0x00000000002784a0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetTotalCONBonusEv, 0x0000000000278150) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetTotalDEXBonusEv, 0x0000000000278010) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetTotalINTBonusEv, 0x00000000002782e0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetTotalSTRBonusEv, 0x0000000000277f00) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetTotalWISBonusEv, 0x00000000002783c0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16GetWeaponFinesseEP8CNWSItem, 0x0000000000276500) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16LevelUpAutomaticEhih, 0x0000000000299df0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16ReadStatsFromGffEP7CResGFFP10CResStructP26CNWSCreatureAppearanceInfoiiii, 0x0000000000292c20) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats16RemoveKnownSpellEhj, 0x000000000028dcf0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats17GetEffectImmunityEhP12CNWSCreaturei, 0x000000000027c0c0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats17GetPotentialLevelEv, 0x0000000000272b00) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats17ReadSpellsFromGffEP7CResGFFP10CResStructi, 0x000000000028df80) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats17RunDataMigrationsEv, 0x000000000028da30) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18AutoMemorizeSpellsEi, 0x0000000000295940) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18ComputeFeatBonusesEP13CExoArrayListItEi, 0x00000000002858a0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18ConfirmDomainSpellEhhj, 0x0000000000275f60) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetAlignmentStringEv, 0x00000000002727c0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetAttacksPerRoundEv, 0x0000000000285c00) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetBaseAttackBonusEi, 0x0000000000285af0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetCriticalHitRollEi, 0x000000000027ecd0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetEpicWeaponFocusEP8CNWSItem, 0x00000000002765d0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetFeatSourceClassEt, 0x0000000000283ad0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetFortSavingThrowEi, 0x000000000028ad80) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetHasStilledSpellEj, 0x00000000002763d0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetSpellcastingModEh, 0x0000000000277950) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetSpellResistanceEv, 0x0000000000279610) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetTotalACSkillModEv, 0x0000000000283b70) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18GetWillSavingThrowEi, 0x000000000028bbd0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats18SetSpellResistanceEc, 0x0000000000290f40) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19FeatRequirementsMetEtP13CExoArrayListItE, 0x000000000028aeb0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetArmorClassVersusEP12CNWSCreaturei, 0x0000000000279ed0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetHasSilencedSpellEj, 0x0000000000276290) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetIsClassAvailableEh, 0x0000000000298fa0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetIsWeaponOfChoiceEj, 0x000000000027ec80) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetMeleeAttackBonusEiii, 0x0000000000285dc0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetMeleeDamageBonusEih, 0x00000000002766f0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetNumLevelsOfClassEh, 0x000000000028cd40) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetNumLevelsOfClassEhi, 0x0000000000285ac0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetSpellsPerDayLeftEhh, 0x0000000000277250) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19GetUnarmedDamageDieEv, 0x00000000002711b0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats19SetNormalBonusFlagsEtRiS0_, 0x00000000002776b0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetCreatureDamageDieEh, 0x0000000000271c30) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetCreatureHasTalentEiih, 0x000000000028d7a0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetFavoredEnemyBonusEP12CNWSCreature, 0x000000000027ba00) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetFeatRemainingUsesEt, 0x000000000027c7e0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetHighestLevelKnownEv, 0x00000000002761b0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetNumberKnownSpellsEhh, 0x0000000000276180) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetRangedAttackBonusEii, 0x0000000000286670) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetRangedDamageBonusEv, 0x0000000000276a10) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetReflexSavingThrowEi, 0x000000000028bf90) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetUnarmedDamageDiceEv, 0x0000000000270e70) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20GetUnarmedDamageRollEP10CNWSObject, 0x0000000000271d90) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats20SetFeatRemainingUsesEth, 0x0000000000292b50) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21AdjustSpellUsesPerDayEv, 0x000000000027c480) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21CheckSpellSuitabilityEiP8CNWSpelliiiiiiRhi, 0x000000000028d7d0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21GetCreatureDamageDiceEh, 0x0000000000271ad0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21GetHighestLevelOfFeatEt, 0x000000000027c750) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21GetIsInKnownSpellListEhj, 0x0000000000277df0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21GetSpellGainWithBonusEhh, 0x0000000000278790) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21GetSpellMinAbilityMetEhh, 0x0000000000278fa0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21GetSpellsOfLevelReadyEhh, 0x0000000000283c70) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21ResetSpellsPerDayLeftEhh, 0x0000000000278c80) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21SetArcaneSpellFailureEc, 0x0000000000290f20) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21SetMemorizedSpellSlotEhhjhhi, 0x0000000000279480) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats21UpdateLastStatsObjectEmP22CNWCreatureStatsUpdate, 0x000000000028e490) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22CalcLevelUpNumberFeatsEhhRhS0_, 0x000000000027c650) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22GetBaseFortSavingThrowEv, 0x000000000028aaf0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22GetBaseWillSavingThrowEv, 0x000000000028b8f0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22GetClassNegativeLevelsEh, 0x0000000000272000) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22GetExpNeededForLevelUpEv, 0x0000000000272ae0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22GetNumberOfBonusSpellsEhh, 0x000000000027be90) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22GetTotalNegativeLevelsEv, 0x0000000000283c20) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22GetUseMonkAttackTablesEi, 0x0000000000270d90) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22ResetFeatRemainingUsesEv, 0x0000000000275d60) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats22SetClassNegativeLevelsEhh, 0x0000000000278f40) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23ClearMemorizedSpellSlotEhhh, 0x0000000000275fe0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23GetAttackModifierVersusEP12CNWSCreature, 0x0000000000286f00) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23GetClassesAbilityAdjustEi, 0x0000000000272200) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23GetCreatureTalentRandomEiiRiS0_RhRjS0_S1_S1_, 0x00000000002983a0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23GetIsEpitomeOfAlignmentEv, 0x00000000002720c0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23GetMemorizedSpellInSlotEhhh, 0x0000000000276060) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23GetStatBonusesFromFeatsEP13CExoArrayListItEPii, 0x0000000000283d10) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23GetWeaponSpecializationEP8CNWSItem, 0x0000000000276630) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23ModifyNumberBonusSpellsEhhi, 0x000000000027bed0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23ResetSpellLikeAbilitiesEv, 0x0000000000277d60) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats23UpdateCombatInformationEv, 0x000000000028efa0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats24GetBaseReflexSavingThrowEv, 0x000000000028bd00) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats24GetCanUseRelatedCategoryEii, 0x000000000027c590) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats24GetCriticalHitMultiplierEi, 0x000000000027ef00) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats24GetHasLostClassAbilitiesEh, 0x0000000000272060) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats24SetHasLostClassAbilitiesEhi, 0x0000000000272090) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats24SetSpellLikeAbilityReadyEjih, 0x0000000000277cc0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats25AddSpellLikeAbilityToListEjih, 0x0000000000277c90) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats25DecrementSpellsPerDayLeftEhh, 0x0000000000277280) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats25GetWeaponImprovedCriticalEP8CNWSItem, 0x0000000000277130) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats25IncrementSpellsPerDayLeftEhh, 0x00000000002772b0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats25SetSpellResistancePenaltyEc, 0x0000000000291140) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats26DecrementFeatRemainingUsesEt, 0x0000000000275da0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats26GetCanUseSkillAfterLevelUpEtP13CNWLevelStats, 0x0000000000282900) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats26GetSimpleAlignmentGoodEvilEv, 0x00000000002721d0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats26GetSimpleAlignmentLawChaosEv, 0x00000000002721a0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats26IncrementFeatRemainingUsesEt, 0x0000000000275de0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats27GetCreatureTalentRandomFeatEiiRiS0_Rh, 0x0000000000297340) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats27GetEpicWeaponSpecializationEP8CNWSItem, 0x0000000000276690) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats27GetIsInSpellLikeAbilityListEj, 0x0000000000277da0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats27GetMemorizedSpellReadyCountEhjh, 0x0000000000279a90) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats27GetMemorizedSpellReadyCountEhjPhS0_, 0x0000000000279a50) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats27GetMemorizedSpellReadyCountEj, 0x0000000000279b00) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats28ComputeNumberKnownSpellsLeftEhh, 0x00000000002794b0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats28GetCreatureTalentRandomSkillEiiRiS0_Rh, 0x00000000002974f0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats28GetCreatureTalentRandomSpellEiiRiS0_RhS1_, 0x00000000002982a0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats28GetMemorizedSpellInSlotReadyEhhh, 0x00000000002760a0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats28GetMetamagicPrerequisitesMetEh, 0x000000000028cda0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats28GetNumberMemorizedSpellSlotsEhh, 0x0000000000276220) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats28SetMemorizedSpellInSlotReadyEhhhi, 0x00000000002760e0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats28SetNumberMemorizedSpellSlotsEhhh, 0x0000000000276260) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats30GetSpellLikeAbilityCasterLevelEj, 0x000000000027c5f0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats31FeatRequirementsMetAfterLevelUpEtP13CNWLevelStatsh, 0x0000000000282fd0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats31GetEffectiveCRForPotentialLevelEv, 0x0000000000272bb0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats31GetMemorizedSpellInSlotMetaTypeEhhh, 0x0000000000276120) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats31ResolveSpecialAttackAttackBonusEP12CNWSCreature, 0x00000000002730d0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats31ResolveSpecialAttackDamageBonusEP12CNWSCreature, 0x0000000000273500) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats31UpdateNumberMemorizedSpellSlotsEv, 0x0000000000278de0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats32GetEpicWeaponDevastatingCriticalEP8CNWSItem, 0x00000000002771f0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats33GetCreatureTalentRandomKnownSpellEiiRiS0_Rhi, 0x00000000002976f0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats33GetEpicWeaponOverwhelmingCriticalEP8CNWSItem, 0x0000000000277190) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats33GetMeetsPrestigeClassRequirementsEP8CNWClass, 0x0000000000298660) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats33GetSpellGainWithBonusAfterLevelUpEhhP13CNWLevelStatshi, 0x0000000000282aa0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats36GetCreatureTalentRandomSpellFromItemEiiRiS0_RhRjS0_, 0x0000000000296ab0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats37GetCreatureTalentRandomMemorisedSpellEiiRiS0_RhiS1_, 0x0000000000297c20) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats39GetCreatureTalentRandomSpellLikeAbilityEiiRiS0_RhS1_, 0x00000000002967d0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats6GetTagEv, 0x0000000000272a20) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats6SetTagERK10CExoString, 0x0000000000272a30) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats7AddFeatEt, 0x0000000000291b40) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats7GetFeatEt, 0x000000000027bfd0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats7GetIsDMEv, 0x000000000028dbd0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats7HasFeatEt, 0x0000000000272fa0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats7LevelUpEP13CNWLevelStatshhhi, 0x0000000000291c40) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats8GetClassEh, 0x0000000000271ef0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats8GetLevelEi, 0x0000000000270be0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats8SetClassEhh, 0x0000000000278ee0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats9GetDEXModEi, 0x0000000000272240) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats9GetHitDieEhh, 0x00000000002773b0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats9GetSchoolEh, 0x00000000002772e0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats9LevelDownEP13CNWLevelStats, 0x0000000000291160) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats9SaveStatsEP7CResGFFP10CResStruct, 0x000000000028c0c0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStats9SetSchoolEhh, 0x0000000000278f70) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStatsC1EP12CNWSCreature, 0x000000000028e960) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStatsC2EP12CNWSCreature, 0x000000000028e960) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStatsD1Ev, 0x0000000000272da0) -NWNXLIB_FUNCTION(_ZN17CNWSCreatureStatsD2Ev, 0x0000000000272da0) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManager15GetTilePathNodeEhh, 0x00000000001d5670) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManager15RegisterTileSetE7CResRef, 0x00000000001d38d0) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManager17UnregisterTileSetEP10CNWTileSet, 0x00000000001d3a10) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManager18ClearTilePathNodesEv, 0x00000000001d3af0) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManager23ComputePathNodeRotationEiPfS0_, 0x00000000001d3bf0) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManager23InitializeTilePathNodesEv, 0x00000000001d3aa0) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManager26ComputePathNodeInformationEhiRiS0_PPfS2_PPi, 0x00000000001d3ca0) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManagerC1Ev, 0x00000000001d3860) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManagerC2Ev, 0x00000000001d3860) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManagerD1Ev, 0x00000000001d3ba0) -NWNXLIB_FUNCTION(_ZN17CNWTileSetManagerD2Ev, 0x00000000001d3ba0) -NWNXLIB_FUNCTION(_ZN17CScriptSourceFile10LoadScriptERK10CExoStringPPcPj, 0x00000000007ac950) -NWNXLIB_FUNCTION(_ZN17CScriptSourceFile12UnloadScriptEv, 0x00000000007ac9f0) -NWNXLIB_FUNCTION(_ZN17CScriptSourceFileC1Ev, 0x00000000007ac920) -NWNXLIB_FUNCTION(_ZN17CScriptSourceFileC2Ev, 0x00000000007ac920) -NWNXLIB_FUNCTION(_ZN17CScriptSourceFileD0Ev, 0x00000000007ae540) -NWNXLIB_FUNCTION(_ZN17CScriptSourceFileD1Ev, 0x00000000007ae520) -NWNXLIB_FUNCTION(_ZN17CScriptSourceFileD2Ev, 0x00000000007ae520) -NWNXLIB_FUNCTION(_ZN18CCombatInformation8LoadDataEP7CResGFFP10CResStruct, 0x00000000008a37c0) -NWNXLIB_FUNCTION(_ZN18CCombatInformation8SaveDataEP7CResGFFP10CResStruct, 0x000000000089e3d0) -NWNXLIB_FUNCTION(_ZN18CCombatInformationaSERS_, 0x00000000008a4060) -NWNXLIB_FUNCTION(_ZN18CCombatInformationC1Ev, 0x000000000089e1e0) -NWNXLIB_FUNCTION(_ZN18CCombatInformationC2Ev, 0x000000000089e1e0) -NWNXLIB_FUNCTION(_ZN18CCombatInformationD1Ev, 0x000000000089e2e0) -NWNXLIB_FUNCTION(_ZN18CCombatInformationD2Ev, 0x000000000089e2e0) -NWNXLIB_FUNCTION(_ZN18CCombatInformationeqERS_, 0x000000000089ea60) -NWNXLIB_FUNCTION(_ZN18CCombatInformationneERS_, 0x000000000089eb60) -NWNXLIB_FUNCTION(_ZN18CExoTimersInternal21GetLowResolutionTimerEv, 0x000000000012d390) -NWNXLIB_FUNCTION(_ZN18CExoTimersInternal22GetHighResolutionTimerEv, 0x000000000012d3b0) -NWNXLIB_FUNCTION(_ZN18CExoTimersInternal25GetLowResolutionTimerRealEv, 0x000000000012d130) -NWNXLIB_FUNCTION(_ZN18CExoTimersInternal26GetHighResolutionTimerRealEv, 0x000000000012d140) -NWNXLIB_FUNCTION(_ZN18CExoTimersInternalC1Ev, 0x000000000012d2a0) -NWNXLIB_FUNCTION(_ZN18CExoTimersInternalC2Ev, 0x000000000012d2a0) -NWNXLIB_FUNCTION(_ZN18CExoTimersInternalD1Ev, 0x000000000012d0e0) -NWNXLIB_FUNCTION(_ZN18CExoTimersInternalD2Ev, 0x000000000012d0e0) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMesh12LoadWalkMeshE7CResRef, 0x00000000008b0420) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMesh18GetMeshBoundingBoxE6VectorS0_RS0_S1_, 0x00000000008b0200) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMesh18LoadWalkMeshStringEPPhPjS0_j, 0x00000000008af390) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMesh21DOOR_ANIM_STATE_OPEN1E, 0x0000000000960cfc) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMesh21DOOR_ANIM_STATE_OPEN2E, 0x0000000000960cf8) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMesh21IntersectLineSegmentsE6VectorS0_S0_S0_PS0_, 0x00000000008af3c0) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMesh22DOOR_ANIM_STATE_CLOSEDE, 0x0000000000960d00) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMesh27NoNonWalkPolysOnSurfaceMeshEifffffff, 0x00000000008af940) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMeshC1Ev, 0x00000000008af290) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMeshC2Ev, 0x00000000008af290) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMeshD0Ev, 0x00000000008af1c0) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMeshD1Ev, 0x00000000008af150) -NWNXLIB_FUNCTION(_ZN18CNWDoorSurfaceMeshD2Ev, 0x00000000008af150) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionList10DeleteListEv, 0x00000000003c5860) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionList13AddNodeToHeadEP18CNWSExpressionNode, 0x00000000003c5920) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionList15DeleteAlternateEP18CNWSExpressionNode, 0x00000000003c57e0) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionList7AddNodeEP18CNWSExpressionNode, 0x00000000003c58d0) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionListC1Ev, 0x00000000003c57b0) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionListC2Ev, 0x00000000003c57b0) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionListD1Ev, 0x00000000003c57d0) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionListD2Ev, 0x00000000003c57d0) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionNodeC1Ev, 0x00000000003c5770) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionNodeC2Ev, 0x00000000003c5770) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionNodeD1Ev, 0x00000000003c57a0) -NWNXLIB_FUNCTION(_ZN18CNWSExpressionNodeD2Ev, 0x00000000003c57a0) -NWNXLIB_FUNCTION(_ZN18CNWSPlayerStoreGUI10CloseStoreEP10CNWSPlayeri, 0x0000000000305f60) -NWNXLIB_FUNCTION(_ZN18CNWSPlayerStoreGUI9OpenStoreEP10CNWSPlayerjcc, 0x00000000003068c0) -NWNXLIB_FUNCTION(_ZN18CNWSPlayerStoreGUIC1Ev, 0x0000000000304b20) -NWNXLIB_FUNCTION(_ZN18CNWSPlayerStoreGUIC2Ev, 0x0000000000304b20) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable10DestroyIntER10CExoString, 0x000000000034b020) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable10MatchIndexER10CExoStringji, 0x000000000034b3b0) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable11DeleteIndexER10CExoStringj, 0x000000000034af50) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable11DestroyCswyER10CExoString, 0x000000000034b150) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable11DestroyJsonER10CExoString, 0x000000000034b160) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable11GetLocationER10CExoString, 0x000000000034b4d0) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable11SetLocationER10CExoString15CScriptLocation, 0x000000000034b9c0) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable12DestroyFloatER10CExoString, 0x000000000034b110) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable12LoadVarTableEP7CResGFFP10CResStruct, 0x000000000034c520) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable12SaveVarTableEP7CResGFFP10CResStruct, 0x000000000034bba0) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable12VARTYPE_CSWYE, 0x00000000008da32c) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable12VARTYPE_JSONE, 0x00000000008da328) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable13DestroyObjectER10CExoString, 0x000000000034b130) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable13DestroyStringER10CExoString, 0x000000000034b120) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable13VARTYPE_FLOATE, 0x00000000008da33c) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable14VARTYPE_OBJECTE, 0x00000000008da334) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable14VARTYPE_STRINGE, 0x00000000008da338) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable15DestroyLocationER10CExoString, 0x000000000034b140) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable15VARTYPE_INTEGERE, 0x00000000008da340) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable16VARTYPE_LOCATIONE, 0x00000000008da330) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable6GetIntER10CExoString, 0x000000000034b400) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable6SetIntER10CExoStringii, 0x000000000034b670) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable7GetCswyER10CExoString, 0x000000000034b540) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable7GetJsonER10CExoString, 0x000000000034c430) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable7SetCswyER10CExoString30CassowarySolverEngineStructure, 0x000000000034ba50) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable7SetJsonER10CExoString19JsonEngineStructure, 0x000000000034c370) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable8GetFloatER10CExoString, 0x000000000034b420) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable8SetFloatER10CExoStringf, 0x000000000034b8a0) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable9GetObjectER10CExoString, 0x000000000034b4a0) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable9GetStringER10CExoString, 0x000000000034b440) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable9SetObjectER10CExoStringj, 0x000000000034b970) -NWNXLIB_FUNCTION(_ZN18CNWSScriptVarTable9SetStringER10CExoStringS1_, 0x000000000034b900) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh11GetPathNodeEv, 0x0000000000201950) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh11GetWalkMeshEv, 0x0000000000201c40) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh11SetPathNodeEh, 0x00000000002022b0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh11SetWalkMeshE7CResRef, 0x0000000000202350) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh12FindTriangleEiiffi, 0x0000000000204b10) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh12IntraTileDFSEP7CNWTileP7CNWAreaP20CPathfindInformationififffffi, 0x0000000000208f30) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh12LoadWalkMeshEv, 0x00000000002023a0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh13CheckAABBNodeEiP26CNWTileSurfaceMeshAABBNodeRK6VectorRS2_, 0x0000000000200cf0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh13ComputeHeightE6Vector, 0x0000000000204ec0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh13GetExitNumberEff, 0x0000000000201840) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh13GetTotalExitsEv, 0x0000000000201ab0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh14RunSubdivisionEPiiPfiS0_S0_iS1_iS0_, 0x0000000000209480) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh15GetLOSMaterialsEv, 0x00000000001fefb0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh15GetRegionCoordsEiPfS0_hi, 0x0000000000201970) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh15m_nLOSMaterialsE, 0x0000000000cebea0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh16ClearLineOfSightEi6VectorS0_PS0_, 0x0000000000204880) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh16ClearSubdivisionEv, 0x00000000001ff2e0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh16ComputePathNodesEv, 0x0000000000201290) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh17FindClosestRegionEP7CNWTileffhi, 0x0000000000205120) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh17GetRegionEntranceEffhi, 0x00000000002019f0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh17GetVertexGeometryEiP6Vector, 0x0000000000201bf0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh17GetVertexGeometryEiPfS0_S0_, 0x0000000000201ba0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh17PlotIntraTilePathEP7CNWTileP7CNWAreaP20CPathfindInformationffffji, 0x0000000000209a70) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh18GetSurfaceMaterialE6Vector, 0x0000000000204e40) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh18LoadWalkMeshStringEPPhPjS0_j, 0x0000000000202280) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh19CheckAABBNodeOneWayEiP26CNWTileSurfaceMeshAABBNodeRK6VectorRS2_, 0x0000000000201030) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh19GetTriangleCentroidEiPfS0_S0_, 0x0000000000201b30) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh19GetTriangleVerticesEiiPiS0_S0_, 0x0000000000201b50) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh19LoadDefaultWalkMeshEv, 0x0000000000201df0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh20GetTriangleAdjacencyEiiPiS0_S0_, 0x0000000000201ae0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh20NoNonWalkPolysOnTileEfffffffi, 0x0000000000206240) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh21FindRegionViaTriangleEiiPiS0_, 0x00000000002049a0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh21IntersectLineSegmentsE6VectorS0_S0_S0_PS0_, 0x0000000000205540) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh22ClearLineOfSightOneWayEi6VectorS0_PS0_, 0x0000000000204910) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh22GetPathNodeOrientationEv, 0x0000000000201960) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh23PrintAABBTreeToPrintLogEP26CNWTileSurfaceMeshAABBNodei, 0x0000000000202030) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh24ComputeTriangleAdjacencyEv, 0x00000000002012f0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh24ConvertToTileOrientationEi, 0x00000000002022c0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh24EstimateDistanceToTargetEff, 0x00000000002017b0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh25ComputeClippedLineSegmentEP7CNWTileffffPfS2_S2_S2_, 0x00000000002043d0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh25GenerateBestIntraTileExitEP7CNWTileP7CNWAreaP20CPathfindInformationff, 0x0000000000206d30) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh25GetTopLevelVertexGeometryEiPfS0_S0_, 0x00000000002054a0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh25TestLineForWalkableOnAreaEffffffP20CPathfindInformationP7CNWTileP7CNWArea, 0x0000000000201c60) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh25TestLineForWalkableOnTileEffffPfS0_P20CPathfindInformationP7CNWTilei, 0x0000000000206b50) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh26ClippedLineSegmentWalkableEP7CNWTileffffPfS2_S2_S2_S2_S2_, 0x0000000000205990) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh30IntraTileDFSGenerateSuccessorsEiP7CNWTileP7CNWAreaffiP20CPathfindInformationPP32CPathfindInfoIntraTileSuccessors, 0x0000000000207f30) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh7GetExitEiPfS0_Pi, 0x00000000002053f0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh7PolyHitEPK6VectoriRS1_S3_S3_fPS0_, 0x00000000002009a0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMesh9SubdivideEv, 0x0000000000209830) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMeshC1Ev, 0x00000000001ff090) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMeshC2Ev, 0x00000000001ff090) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMeshD0Ev, 0x0000000000200970) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMeshD1Ev, 0x00000000001ff3a0) -NWNXLIB_FUNCTION(_ZN18CNWTileSurfaceMeshD2Ev, 0x00000000001ff3a0) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTable14GetIDFromIndexEj, 0x00000000001d3360) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTable14GetIndexFromIDEj, 0x00000000001d3370) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTable5AddIDEj, 0x00000000001d3310) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTable5TouchEj, 0x00000000001d33b0) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTable6UpdateEPhj, 0x00000000001d34a0) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTable9GetUpdateEPhPj, 0x00000000001d3460) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTableC1Ev, 0x00000000001d32a0) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTableC2Ev, 0x00000000001d32a0) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTableD1Ev, 0x00000000001d32f0) -NWNXLIB_FUNCTION(_ZN18CObjectLookupTableD2Ev, 0x00000000001d32f0) -NWNXLIB_FUNCTION(_ZN18CResGFFFieldIDHash10InitializeEv, 0x000000000014f410) -NWNXLIB_FUNCTION(_ZN18CResGFFFieldIDHash4HashEPKcj, 0x000000000014f460) -NWNXLIB_FUNCTION(_ZN18CResGFFFieldIDHash8m_nCRC32E, 0x0000000000ce9ba0) -NWNXLIB_FUNCTION(_ZN18CServerAIEventNode8LoadNodeEP7CResGFFP10CResStruct, 0x00000000003570c0) -NWNXLIB_FUNCTION(_ZN18CServerAIEventNode8SaveNodeEP7CResGFFP10CResStruct, 0x0000000000356b30) -NWNXLIB_FUNCTION(_ZN19CExoCriticalSection20EnterCriticalSectionEv, 0x00000000001248d0) -NWNXLIB_FUNCTION(_ZN19CExoCriticalSection20LeaveCriticalSectionEv, 0x00000000001248e0) -NWNXLIB_FUNCTION(_ZN19CExoCriticalSectionC1Ev, 0x0000000000124850) -NWNXLIB_FUNCTION(_ZN19CExoCriticalSectionC2Ev, 0x0000000000124850) -NWNXLIB_FUNCTION(_ZN19CExoCriticalSectionD1Ev, 0x0000000000124890) -NWNXLIB_FUNCTION(_ZN19CExoCriticalSectionD2Ev, 0x0000000000124890) -NWNXLIB_FUNCTION(_ZN19CExtendedServerInfoaSER20CNetLayerSessionInfo, 0x0000000000151f80) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfo10InitializeEv, 0x00000000001521c0) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfo13AllKeysAuthedERj, 0x00000000001523c0) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfo13StartMstTimerEm, 0x0000000000152350) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfo14GetPublicCDKeyEi, 0x00000000000f4e90) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfo14UpdateMstTimerEm, 0x0000000000152370) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfo17MAX_BUFFER_LENGTHE, 0x00000000008bf720) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfo21MASTER_SERVER_TIMEOUTE, 0x00000000008bf71c) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfo8AddCDKeyERK10CExoStringS2_, 0x000000000015e8f0) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfo8SetCDKeyEiRK10CExoStringS2_, 0x0000000000152430) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfoC1Ev, 0x000000000015e250) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfoC2Ev, 0x000000000015e250) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfoD1Ev, 0x0000000000161b70) -NWNXLIB_FUNCTION(_ZN19CNetLayerPlayerInfoD2Ev, 0x0000000000161b70) -NWNXLIB_FUNCTION(_ZNK19CNetLayerPlayerInfo14SatisfiesBuildEii, 0x000000000015c680) -NWNXLIB_FUNCTION(_ZN19CNWPlaceMeshManager11GetWalkMeshEi, 0x00000000008add40) -NWNXLIB_FUNCTION(_ZN19CNWPlaceMeshManager15ClearWalkMeshesEv, 0x00000000008add20) -NWNXLIB_FUNCTION(_ZN19CNWPlaceMeshManager20InitializeWalkMeshesEi, 0x00000000008adcb0) -NWNXLIB_FUNCTION(_ZN19CNWPlaceMeshManagerC1Ev, 0x00000000008adc70) -NWNXLIB_FUNCTION(_ZN19CNWPlaceMeshManagerC2Ev, 0x00000000008adc70) -NWNXLIB_FUNCTION(_ZN19CNWPlaceMeshManagerD1Ev, 0x00000000008adc90) -NWNXLIB_FUNCTION(_ZN19CNWPlaceMeshManagerD2Ev, 0x00000000008adc90) -NWNXLIB_FUNCTION(_ZN19CNWSSpellScriptData8LoadDataEP7CResGFFP10CResStruct, 0x000000000022a810) -NWNXLIB_FUNCTION(_ZN19CNWSSpellScriptData8SaveDataEP7CResGFFP10CResStruct, 0x000000000022a700) -NWNXLIB_FUNCTION(_ZN19CObjectTableManager12RemovePlayerEj, 0x00000000001d35a0) -NWNXLIB_FUNCTION(_ZN19CObjectTableManager14GetIDFromIndexEjj, 0x00000000001d3780) -NWNXLIB_FUNCTION(_ZN19CObjectTableManager14GetIndexFromIDEjj, 0x00000000001d37e0) -NWNXLIB_FUNCTION(_ZN19CObjectTableManager15CreateNewPlayerEj, 0x00000000001d3510) -NWNXLIB_FUNCTION(_ZN19CObjectTableManager5AddIDEjPjj, 0x00000000001d36c0) -NWNXLIB_FUNCTION(_ZN19CObjectTableManager5TouchEjj, 0x00000000001d3690) -NWNXLIB_FUNCTION(_ZN19CObjectTableManager8ClearAllEv, 0x00000000001d3600) -NWNXLIB_FUNCTION(_ZN19CObjectTableManagerC1Ev, 0x00000000001d34e0) -NWNXLIB_FUNCTION(_ZN19CObjectTableManagerC2Ev, 0x00000000001d34e0) -NWNXLIB_FUNCTION(_ZN19CObjectTableManagerD1Ev, 0x00000000001d3680) -NWNXLIB_FUNCTION(_ZN19CObjectTableManagerD2Ev, 0x00000000001d3680) -NWNXLIB_FUNCTION(_ZN19CVirtualMachineFile10UnloadFileEv, 0x00000000007cbb30) -NWNXLIB_FUNCTION(_ZN19CVirtualMachineFile7GetDataEPPcRj, 0x00000000007c8dd0) -NWNXLIB_FUNCTION(_ZN19CVirtualMachineFile8LoadFileERK10CExoString, 0x00000000007cbac0) -NWNXLIB_FUNCTION(_ZN19CVirtualMachineFileC1Ev, 0x00000000007cb9d0) -NWNXLIB_FUNCTION(_ZN19CVirtualMachineFileC2Ev, 0x00000000007cb9d0) -NWNXLIB_FUNCTION(_ZN19CVirtualMachineFileD0Ev, 0x00000000007cba90) -NWNXLIB_FUNCTION(_ZN19CVirtualMachineFileD1Ev, 0x00000000007cba00) -NWNXLIB_FUNCTION(_ZN19CVirtualMachineFileD2Ev, 0x00000000007cba00) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile10InitializeEv, 0x0000000000149800) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile10LoadHeaderEPKch, 0x000000000014a220) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile11AddRefCountEv, 0x0000000000149760) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile12ReadResourceE5RESIDPvjj, 0x000000000014ef40) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile12UnloadHeaderEv, 0x000000000014adb0) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile13OpenAsyncFileEv, 0x0000000000149bf0) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile14CloseAsyncFileEv, 0x000000000014a9e0) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile14DeleteRefCountEv, 0x000000000014aa30) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile15GetResourceSizeE5RESID, 0x00000000001497e0) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile16AddAsyncRefCountEv, 0x00000000001497a0) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile17ReadResourceAsyncE5RESIDPvjj, 0x000000000014aea0) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile19DeleteAsyncRefCountEv, 0x000000000014aa60) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile8OpenFileEPh, 0x0000000000149850) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile8OpenFileEv, 0x0000000000149990) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFile9CloseFileEv, 0x000000000014a930) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFileC1Ev, 0x000000000014c9c0) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFileC2Ev, 0x000000000014c9c0) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFileD0Ev, 0x000000000014a9b0) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFileD1Ev, 0x000000000014a960) -NWNXLIB_FUNCTION(_ZN20CExoEncapsulatedFileD2Ev, 0x000000000014a960) -NWNXLIB_FUNCTION(_ZN20CLoopingVisualEffect9GetIsBeamEv, 0x00000000002e0bb0) -NWNXLIB_FUNCTION(_ZN20CNetLayerSessionInfo5CleanEv, 0x0000000000151a80) -NWNXLIB_FUNCTION(_ZN20CNetLayerSessionInfoC1Ev, 0x0000000000151760) -NWNXLIB_FUNCTION(_ZN20CNetLayerSessionInfoC2Ev, 0x0000000000151760) -NWNXLIB_FUNCTION(_ZN20CNetLayerSessionInfoD1Ev, 0x00000000001519f0) -NWNXLIB_FUNCTION(_ZN20CNetLayerSessionInfoD2Ev, 0x00000000001519f0) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackData13SetBaseDamageEi, 0x00000000003bc050) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackData14GetTotalDamageEi, 0x00000000003bc120) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackData15ClearAttackDataEv, 0x00000000003bbc40) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackData4CopyEPS_i, 0x00000000003bbe40) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackData8LoadDataEP7CResGFFP10CResStruct, 0x00000000003bc480) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackData8SaveDataEP7CResGFFP10CResStruct, 0x00000000003bc160) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackData9AddDamageEti, 0x00000000003bc0a0) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackData9GetDamageEt, 0x00000000003bbf50) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackData9SetDamageEti, 0x00000000003bc060) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackDataC1Ev, 0x00000000003bbd30) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackDataC2Ev, 0x00000000003bbd30) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackDataD1Ev, 0x00000000003bbbd0) -NWNXLIB_FUNCTION(_ZN20CNWSCombatAttackDataD2Ev, 0x00000000003bbbd0) -NWNXLIB_FUNCTION(_ZN20CNWSObjectActionNodeC1Ev, 0x00000000002e0f60) -NWNXLIB_FUNCTION(_ZN20CNWSObjectActionNodeC2Ev, 0x00000000002e0f60) -NWNXLIB_FUNCTION(_ZN20CNWSObjectActionNodeD1Ev, 0x00000000002e0fa0) -NWNXLIB_FUNCTION(_ZN20CNWSObjectActionNodeD2Ev, 0x00000000002e0fa0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation10InitializeEv, 0x00000000007d5700) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation15GetGridStepSizeEv, 0x00000000007d6170) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation16ResetAtEndOfPathEv, 0x00000000007d5f20) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation17FlipTempEndPointsEv, 0x00000000007d6100) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation17ResetWayPointDataEv, 0x00000000007d5ca0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation18FlipStartEndPointsEv, 0x00000000007d60b0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation19AddToGridSearchPathEiiii, 0x00000000007d62d0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation19ResetGridSearchDataEv, 0x00000000007d5b10) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation20CreateGridSearchPathEv, 0x00000000007d6220) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation20GetGridPointSearchedEii, 0x00000000007d5c20) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation20SetGridPointSearchedEiib, 0x00000000007d5c60) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation21GetGridSearchPathInfoEi, 0x00000000007d63c0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation21SetGridSearchPathInfoEi17CNWGridSearchPath, 0x00000000007d63f0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation24ComputeGridStepToleranceEv, 0x00000000007d61c0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation24GetGridSearchActivePathsEv, 0x00000000007d6420) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation24ResetInterAreaSearchDataEv, 0x00000000007d5ec0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation24ResetInterTileSearchDataEv, 0x00000000007d5da0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation24ResetIntraTileSearchDataEv, 0x00000000007d5d40) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation28ResetInterAreaPathSearchDataEv, 0x00000000007d5e40) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation30GetFirstTileFValueAlternativesEiPiS0_PP32CPathfindInfoIntraTileSuccessors, 0x00000000007d5f80) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation30SetFirstTileFValueAlternativesEiiiP32CPathfindInfoIntraTileSuccessors, 0x00000000007d5fb0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation33CreateFirstTileFValueAlternativesEi, 0x00000000007d5fe0) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation33DeleteFirstTileFValueAlternativesEv, 0x00000000007d6090) -NWNXLIB_FUNCTION(_ZN20CPathfindInformation8ShutdownEv, 0x00000000007d5970) -NWNXLIB_FUNCTION(_ZN20CPathfindInformationC1Ev, 0x00000000007d5910) -NWNXLIB_FUNCTION(_ZN20CPathfindInformationC2Ev, 0x00000000007d5910) -NWNXLIB_FUNCTION(_ZN20CPathfindInformationD1Ev, 0x00000000007d5b00) -NWNXLIB_FUNCTION(_ZN20CPathfindInformationD2Ev, 0x00000000007d5b00) -NWNXLIB_FUNCTION(_ZN20CServerAIBodyBagInfo11LoadBodyBagEP7CResGFFP10CResStruct, 0x0000000000356ff0) -NWNXLIB_FUNCTION(_ZN20CServerAIBodyBagInfo11SaveBodyBagEP7CResGFFP10CResStruct, 0x0000000000356aa0) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack10ClearStackEv, 0x00000000007c8770) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack13CopyFromStackEPS_ii, 0x00000000007c8900) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack14GetBasePointerEv, 0x00000000007c8cb0) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack14SetBasePointerEi, 0x00000000007c8cc0) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack15AddToTopOfStackEi, 0x00000000007c7d80) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack15GetStackPointerEv, 0x00000000007c8cd0) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack15InitializeStackEv, 0x00000000007c88f0) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack15SetStackPointerEi, 0x00000000007c8ce0) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack23ModifyIntegerAtLocationEii, 0x00000000007c8170) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack24AssignLocationToLocationEii, 0x00000000007c7f90) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack9LoadStackEP7CResGFFP10CResStruct, 0x00000000007c83b0) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStack9SaveStackEP7CResGFFP10CResStruct, 0x00000000007c8190) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStackC1Ev, 0x00000000007c7d50) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStackC2Ev, 0x00000000007c7d50) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStackD1Ev, 0x00000000007c88e0) -NWNXLIB_FUNCTION(_ZN20CVirtualMachineStackD2Ev, 0x00000000007c88e0) -NWNXLIB_FUNCTION(_ZN21CExoAliasListInternal3AddE10CExoStringS0_, 0x0000000000126390) -NWNXLIB_FUNCTION(_ZN21CExoAliasListInternal5ClearEv, 0x00000000001265c0) -NWNXLIB_FUNCTION(_ZN21CExoAliasListInternal6DeleteE10CExoString, 0x0000000000126620) -NWNXLIB_FUNCTION(_ZN21CExoAliasListInternalC1Ev, 0x00000000001262f0) -NWNXLIB_FUNCTION(_ZN21CExoAliasListInternalC2Ev, 0x00000000001262f0) -NWNXLIB_FUNCTION(_ZN21CExoAliasListInternalD1Ev, 0x0000000000126330) -NWNXLIB_FUNCTION(_ZN21CExoAliasListInternalD2Ev, 0x0000000000126330) -NWNXLIB_FUNCTION(_ZNK21CExoAliasListInternal12GetAliasPathERK10CExoStringi, 0x0000000000126750) -NWNXLIB_FUNCTION(_ZNK21CExoAliasListInternal15ResolveFileNameERK10CExoStringt, 0x0000000000126810) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternal12RemoveStringEi, 0x0000000000129340) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternal14ClearLocStringEv, 0x0000000000128df0) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternal14GetStringCountEv, 0x0000000000129290) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternal15GetStringLengthEj, 0x00000000001292a0) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternal6AssignEPS_, 0x0000000000128e90) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternal7CompareER13CExoLocString, 0x0000000000128f70) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternal9AddStringEi10CExoString, 0x0000000000128d00) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternal9GetStringEiP10CExoString, 0x00000000001291e0) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternal9GetStringEjPiP10CExoString, 0x0000000000129120) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternalC1Ev, 0x0000000000128cc0) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternalC2Ev, 0x0000000000128cc0) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternalD1Ev, 0x0000000000128e50) -NWNXLIB_FUNCTION(_ZN21CExoLocStringInternalD2Ev, 0x0000000000128e50) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile10GetKeyListEv, 0x000000000014d0a0) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile10InitializeEv, 0x0000000000149900) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile10LoadHeaderEPKch, 0x0000000000149980) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile11AddRefCountEv, 0x0000000000149860) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile11GetResourceE5RESID, 0x00000000001498e0) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile12ReadResourceE5RESIDPvjj, 0x0000000000149e50) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile12UnloadHeaderEv, 0x0000000000149970) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile13OpenAsyncFileEv, 0x0000000000149970) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile14CloseAsyncFileEv, 0x0000000000149970) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile14DeleteRefCountEv, 0x00000000001498a0) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile15GetKeyListEntryEj, 0x000000000014d0b0) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile15GetResourceSizeE5RESID, 0x00000000001498c0) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile16AddAsyncRefCountEv, 0x0000000000149960) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile17ReadResourceAsyncE5RESIDPvjj, 0x0000000000149950) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile19DeleteAsyncRefCountEv, 0x0000000000149960) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile20GetResourceListEntryE5RESID, 0x000000000014d0e0) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile8OpenFileEPh, 0x000000000014efe0) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile8OpenFileEv, 0x0000000000149940) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile9CloseFileEv, 0x000000000014b1a0) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFile9GetHeaderEv, 0x000000000014d100) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFileC1Ev, 0x000000000014d030) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFileC2Ev, 0x000000000014d030) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFileD0Ev, 0x000000000014ab60) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFileD1Ev, 0x000000000014ab00) -NWNXLIB_FUNCTION(_ZN21CExoResourceImageFileD2Ev, 0x000000000014ab00) -NWNXLIB_FUNCTION(_ZN21CNWSCombatRoundAction8LoadDataEP7CResGFFP10CResStruct, 0x00000000003bba50) -NWNXLIB_FUNCTION(_ZN21CNWSCombatRoundAction8SaveDataEP7CResGFFP10CResStruct, 0x00000000003bb930) -NWNXLIB_FUNCTION(_ZN21CNWSCombatRoundActionC1Ev, 0x00000000003bb8d0) -NWNXLIB_FUNCTION(_ZN21CNWSCombatRoundActionC2Ev, 0x00000000003bb8d0) -NWNXLIB_FUNCTION(_ZN21CNWSCombatRoundActionD1Ev, 0x00000000003bb920) -NWNXLIB_FUNCTION(_ZN21CNWSCombatRoundActionD2Ev, 0x00000000003bb920) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler10AC_NATURALE, 0x00000000008d6d78) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11EFFECT_BEAME, 0x00000000008d6f28) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11EFFECT_DEAFE, 0x00000000008d6f54) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11EFFECT_HEALE, 0x00000000008d6f0c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11EFFECT_LINKE, 0x00000000008d6f08) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11EFFECT_SLOWE, 0x00000000008d6f9c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11MAX_EFFECTSE, 0x00000000008d6e30) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11OnApplyBeamEP10CNWSObjectP11CGameEffecti, 0x00000000002ac210) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11OnApplyDeafEP10CNWSObjectP11CGameEffecti, 0x00000000002b5830) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11OnApplyHealEP10CNWSObjectP11CGameEffecti, 0x00000000002b1680) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler11OnApplyLinkEP10CNWSObjectP11CGameEffecti, 0x00000000002ad720) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12EFFECT_CURSEE, 0x00000000008d6ef8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12EFFECT_DEATHE, 0x00000000008d6f5c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12EFFECT_HASTEE, 0x00000000008d6fa4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12EFFECT_LIGHTE, 0x00000000008d6ed4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12EFFECT_SWARME, 0x00000000008d6e60) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12EFFECT_TAUNTE, 0x00000000008d6ed8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12OnApplyCurseEP10CNWSObjectP11CGameEffecti, 0x00000000002a78d0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12OnApplyDeathEP10CNWSObjectP11CGameEffecti, 0x00000000002b2a90) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12OnApplyLightEP10CNWSObjectP11CGameEffecti, 0x00000000002a51c0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12OnApplySwarmEP10CNWSObjectP11CGameEffecti, 0x00000000002af7d0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12OnApplyTauntEP10CNWSObjectP11CGameEffecti, 0x00000000002a6c10) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12OnRemoveBeamEP10CNWSObjectP11CGameEffect, 0x00000000002b23f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler12STORE_EFFECTE, 0x00000000008d6fb0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13AC_DEFLECTIONE, 0x00000000008d6d6c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13DELETE_EFFECTE, 0x00000000008d6fac) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13EFFECT_APPEARE, 0x00000000008d6e70) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13EFFECT_DAMAGEE, 0x00000000008d6f10) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13EFFECT_DISARME, 0x00000000008d6e58) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13EFFECT_POISONE, 0x00000000008d6f1c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13EFFECT_VISIONE, 0x00000000008d6ea0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13OnApplyAppearEP10CNWSObjectP11CGameEffecti, 0x00000000002ae780) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13OnApplyDamageEP10CNWSObjectP11CGameEffecti, 0x00000000002b0260) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13OnApplyDisarmEP10CNWSObjectP11CGameEffecti, 0x00000000002ab460) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13OnApplyPoisonEP10CNWSObjectP11CGameEffecti, 0x00000000002acc20) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13OnApplyVisionEP10CNWSObjectP11CGameEffecti, 0x00000000002ad920) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13OnRemoveCurseEP10CNWSObjectP11CGameEffect, 0x00000000002b2420) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13OnRemoveLightEP10CNWSObjectP11CGameEffect, 0x00000000002b2400) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13OnRemoveSwarmEP10CNWSObjectP11CGameEffect, 0x00000000002aaf30) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler13OnRemoveTauntEP10CNWSObjectP11CGameEffect, 0x00000000002a3130) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler14EFFECT_DISEASEE, 0x00000000008d6f94) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler14EFFECT_PETRIFYE, 0x00000000008d6e4c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler14EFFECT_SILENCEE, 0x00000000008d6ef4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler14OnApplyDiseaseEP10CNWSObjectP11CGameEffecti, 0x00000000002b6580) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler14OnApplyPetrifyEP10CNWSObjectP11CGameEffecti, 0x00000000002a5060) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler14OnApplySilenceEP10CNWSObjectP11CGameEffecti, 0x00000000002a8540) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler14OnRemoveDisarmEP10CNWSObjectP11CGameEffect, 0x00000000002b23e0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler14OnRemoveVisionEP10CNWSObjectP11CGameEffect, 0x00000000002b2410) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15AC_ARMOUR_BONUSE, 0x00000000008d6d74) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15AC_SHIELD_BONUSE, 0x00000000008d6d70) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15EFFECT_DARKNESSE, 0x00000000008d6e8c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15EFFECT_ENTANGLEE, 0x00000000008d6f60) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15EFFECT_IMMUNITYE, 0x00000000008d6f50) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15EFFECT_SETSTATEE, 0x00000000008d6f88) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15EFFECT_TIMESTOPE, 0x00000000008d6eb0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15EFFECT_WOUNDINGE, 0x00000000008d6e64) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15OnApplyDarknessEP10CNWSObjectP11CGameEffecti, 0x00000000002ae3f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15OnApplySetStateEP10CNWSObjectP11CGameEffecti, 0x00000000002a8b80) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15OnApplyTimestopEP10CNWSObjectP11CGameEffecti, 0x00000000002af9f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15OnApplyWoundingEP10CNWSObjectP11CGameEffecti, 0x00000000002a47b0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15OnEffectAppliedEP10CNWSObjectP11CGameEffecti, 0x00000000002a2f70) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15OnEffectRemovedEP10CNWSObjectP11CGameEffect, 0x00000000002a2fc0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15OnRemovePetrifyEP10CNWSObjectP11CGameEffect, 0x00000000002b2480) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler15OnRemoveSilenceEP10CNWSObjectP11CGameEffect, 0x00000000002a30f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16DAMAGE_FLAG_ACIDE, 0x00000000008d6e00) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16DAMAGE_FLAG_COLDE, 0x00000000008d6dfc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16DAMAGE_FLAG_FIREE, 0x00000000008d6df0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16DAMAGE_POWER_MAXE, 0x00000000008d6d80) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16EFFECT_BLINDNESSE, 0x00000000008d6e90) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16EFFECT_BONUSFEATE, 0x00000000008d6e68) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16EFFECT_DISAPPEARE, 0x00000000008d6e74) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16EFFECT_KNOCKDOWNE, 0x00000000008d6f58) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16EFFECT_POLYMORPHE, 0x00000000008d6eb8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16EFFECT_RUNSCRIPTE, 0x00000000008d6e34) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16EFFECT_SANCTUARYE, 0x00000000008d6eb4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnApplyBlindnessEP10CNWSObjectP11CGameEffecti, 0x00000000002a81a0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnApplyBonusFeatEP10CNWSObjectP11CGameEffecti, 0x00000000002ad790) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnApplyDisappearEP10CNWSObjectP11CGameEffecti, 0x00000000002af900) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnApplyEntangledEP10CNWSObjectP11CGameEffecti, 0x00000000002b54e0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnApplyKnockdownEP10CNWSObjectP11CGameEffecti, 0x00000000002a8760) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnApplyPolymorphEP10CNWSObjectP11CGameEffecti, 0x00000000002ada90) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnApplyRunScriptEP10CNWSObjectP11CGameEffecti, 0x00000000002ac9d0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnApplySanctuaryEP10CNWSObjectP11CGameEffecti, 0x00000000002b6c70) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnRemoveDarknessEP10CNWSObjectP11CGameEffect, 0x00000000002a62a0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnRemoveSetStateEP10CNWSObjectP11CGameEffect, 0x00000000002a71f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnRemoveTimestopEP10CNWSObjectP11CGameEffect, 0x00000000002adf00) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16OnRemoveWoundingEP10CNWSObjectP11CGameEffect, 0x00000000002b2470) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler16SendFloatyEffectEjj, 0x00000000002b5050) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17ATTACK_BONUS_MISCE, 0x00000000008d6d68) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17DAMAGE_BONUS_MISCE, 0x00000000008d6d4c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17DAMAGE_FLAG_SONICE, 0x00000000008d6de4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17EFFECT_REGENERATEE, 0x00000000008d6f8c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17EFFECT_TRUESEEINGE, 0x00000000008d6e94) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17IMMUNITY_TYPE_ALLE, 0x00000000008d6d30) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17IMMUNITY_TYPE_MAXE, 0x00000000008d6cac) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17InitializeEffectsEv, 0x00000000002a3420) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnApplyACDecreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a7660) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnApplyACIncreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a6e40) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnApplyEffectIconEP10CNWSObjectP11CGameEffecti, 0x00000000002affb0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnApplyMissChanceEP10CNWSObjectP11CGameEffecti, 0x00000000002af780) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnApplyRacialTypeEP10CNWSObjectP11CGameEffecti, 0x00000000002adf50) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnApplyRegenerateEP10CNWSObjectP11CGameEffecti, 0x00000000002ac8d0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnApplySetAIStateEP10CNWSObjectP11CGameEffecti, 0x00000000002a56b0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnApplyTrueSeeingEP10CNWSObjectP11CGameEffecti, 0x00000000002ae260) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnRemoveBlindnessEP10CNWSObjectP11CGameEffect, 0x00000000002a61b0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnRemoveBonusFeatEP10CNWSObjectP11CGameEffect, 0x00000000002a65f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnRemoveEntangledEP10CNWSObjectP11CGameEffect, 0x00000000002afc00) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnRemoveKnockdownEP10CNWSObjectP11CGameEffect, 0x00000000002a9a90) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnRemovePolymorphEP10CNWSObjectP11CGameEffect, 0x00000000002adc90) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnRemoveRunScriptEP10CNWSObjectP11CGameEffect, 0x00000000002acb30) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler17OnRemoveSanctuaryEP10CNWSObjectP11CGameEffect, 0x00000000002b6ed0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18DAMAGE_FLAG_DIVINEE, 0x00000000008d6df8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18EFFECT_AC_DECREASEE, 0x00000000008d6ee8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18EFFECT_AC_INCREASEE, 0x00000000008d6eec) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18EFFECT_CONCEALMENTE, 0x00000000008d6e84) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18EFFECT_EFFECT_ICONE, 0x00000000008d6ea8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18EFFECT_MISS_CHANCEE, 0x00000000008d6e88) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18EFFECT_RACIAL_TYPEE, 0x00000000008d6ea4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18EFFECT_ULTRAVISIONE, 0x00000000008d6e98) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18IMMUNITY_TYPE_FEARE, 0x00000000008d6d20) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18IMMUNITY_TYPE_SLOWE, 0x00000000008d6d0c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18IMMUNITY_TYPE_STUNE, 0x00000000008d6d00) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18IMMUNITY_TYPE_TRAPE, 0x00000000008d6d1c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnApplyConcealmentEP10CNWSObjectP11CGameEffecti, 0x00000000002a5400) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnApplyHasteOrSlowEP10CNWSObjectP11CGameEffecti, 0x00000000002a96f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnApplyUltraVisionEP10CNWSObjectP11CGameEffecti, 0x00000000002ae100) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnRemoveACDecreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a5d00) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnRemoveACIncreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a5a70) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnRemoveEffectIconEP10CNWSObjectP11CGameEffect, 0x00000000002a6380) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnRemoveMissChanceEP10CNWSObjectP11CGameEffect, 0x00000000002b24a0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnRemoveRacialTypeEP10CNWSObjectP11CGameEffect, 0x00000000002b2490) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnRemoveSetAIStateEP10CNWSObjectP11CGameEffect, 0x00000000002a5f40) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler18OnRemoveTrueSeeingEP10CNWSObjectP11CGameEffect, 0x00000000002b2140) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19ATTACK_BONUS_ONHANDE, 0x00000000008d6d64) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19DAMAGE_BONUS_ONHANDE, 0x00000000008d6d48) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19DAMAGE_FLAG_MAGICALE, 0x00000000008d6e04) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19DAMAGE_POWER_ENERGYE, 0x00000000008d6dc0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19DAMAGE_POWER_NORMALE, 0x00000000008d6dd8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19EFFECT_INVISIBILITYE, 0x00000000008d6ef0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19EFFECT_ITEMPROPERTYE, 0x00000000008d6e48) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19EFFECT_RESURRECTIONE, 0x00000000008d6f98) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19EFFECT_SEEINVISIBLEE, 0x00000000008d6e9c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19EFFECT_SET_AI_STATEE, 0x00000000008d6f4c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19EFFECT_VISUALEFFECTE, 0x00000000008d6f30) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19IMMUNITY_TYPE_CHARME, 0x00000000008d6cf8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19IMMUNITY_TYPE_DAZEDE, 0x00000000008d6ce8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19IMMUNITY_TYPE_SLEEPE, 0x00000000008d6cfc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnApplyAreaOfEffectEP10CNWSObjectP11CGameEffecti, 0x00000000002b1bc0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnApplyDamageShieldEP10CNWSObjectP11CGameEffecti, 0x00000000002a4e00) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnApplyInvisibilityEP10CNWSObjectP11CGameEffecti, 0x00000000002b6b50) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnApplyItemPropertyEP10CNWSObjectP11CGameEffecti, 0x00000000002b24e0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnApplyResurrectionEP10CNWSObjectP11CGameEffecti, 0x00000000002b6400) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnApplySeeInvisibleEP10CNWSObjectP11CGameEffecti, 0x00000000002a48c0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnApplySlowInternalEP10CNWSObjectP11CGameEffecti, 0x00000000002a4ad0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnApplySpellFailureEP10CNWSObjectP11CGameEffecti, 0x00000000002af5c0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnApplyVisualEffectEP10CNWSObjectP11CGameEffecti, 0x00000000002b38c0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnRemoveConcealmentEP10CNWSObjectP11CGameEffect, 0x00000000002a32e0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnRemoveHasteOrSlowEP10CNWSObjectP11CGameEffect, 0x00000000002a7410) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler19OnRemoveUltraVisionEP10CNWSObjectP11CGameEffect, 0x00000000002b1ea0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20ATTACK_BONUS_OFFHANDE, 0x00000000008d6d60) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20ATTACK_BONUS_UNARMEDE, 0x00000000008d6d50) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20DAMAGE_BONUS_OFFHANDE, 0x00000000008d6d44) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20DAMAGE_BONUS_UNARMEDE, 0x00000000008d6d34) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20DAMAGE_FLAG_NEGATIVEE, 0x00000000008d6dec) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20DAMAGE_FLAG_PHYSICALE, 0x00000000008d6ddc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20DAMAGE_FLAG_PIERCINGE, 0x00000000008d6e0c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20DAMAGE_FLAG_POSITIVEE, 0x00000000008d6de8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20DAMAGE_FLAG_SLASHINGE, 0x00000000008d6e08) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20EFFECT_CUTSCENEGHOSTE, 0x00000000008d6e40) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20EFFECT_DAMAGE_SHIELDE, 0x00000000008d6ebc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20EFFECT_INVALIDEFFECTE, 0x00000000008d6fa8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20EFFECT_SLOW_INTERNALE, 0x00000000008d6f00) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20EFFECT_SPELL_FAILUREE, 0x00000000008d6e44) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20IMMUNITY_TYPE_CURSEDE, 0x00000000008d6cec) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20IMMUNITY_TYPE_POISONE, 0x00000000008d6d28) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnApplyCutsceneGhostEP10CNWSObjectP11CGameEffecti, 0x00000000002a3300) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnApplyHasteInternalEP10CNWSObjectP11CGameEffecti, 0x00000000002a4960) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnApplyNegativeLevelEP10CNWSObjectP11CGameEffecti, 0x00000000002aeaa0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnApplySkillDecreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a7d10) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnApplySkillIncreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a5340) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnApplySpellImmunityEP10CNWSObjectP11CGameEffecti, 0x00000000002a4d60) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnRemoveAreaOfEffectEP10CNWSObjectP11CGameEffect, 0x00000000002af830) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnRemoveDamageShieldEP10CNWSObjectP11CGameEffect, 0x00000000002b2460) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnRemoveInvisibilityEP10CNWSObjectP11CGameEffect, 0x00000000002b6a60) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnRemoveItemPropertyEP10CNWSObjectP11CGameEffect, 0x00000000002af160) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnRemoveSeeInvisibleEP10CNWSObjectP11CGameEffect, 0x00000000002a3210) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnRemoveSlowInternalEP10CNWSObjectP11CGameEffect, 0x00000000002a30c0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnRemoveSpellFailureEP10CNWSObjectP11CGameEffect, 0x00000000002af6f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler20OnRemoveVisualEffectEP10CNWSObjectP11CGameEffect, 0x00000000002ac1e0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21ATTACK_BONUS_CWEAPON1E, 0x00000000008d6d5c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21ATTACK_BONUS_CWEAPON2E, 0x00000000008d6d58) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21ATTACK_BONUS_CWEAPON3E, 0x00000000008d6d54) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21DAMAGE_BONUS_CWEAPON1E, 0x00000000008d6d40) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21DAMAGE_BONUS_CWEAPON2E, 0x00000000008d6d3c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21DAMAGE_BONUS_CWEAPON3E, 0x00000000008d6d38) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21DAMAGE_POWER_PLUS_ONEE, 0x00000000008d6dd4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21DAMAGE_POWER_PLUS_SIXE, 0x00000000008d6dbc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21DAMAGE_POWER_PLUS_TENE, 0x00000000008d6dac) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21DAMAGE_POWER_PLUS_TWOE, 0x00000000008d6dd0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21EFFECT_ABILITY_WISDOME, 0x00000000008d6e18) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21EFFECT_AREA_OF_EFFECTE, 0x00000000008d6f2c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21EFFECT_HASTE_INTERNALE, 0x00000000008d6f04) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21EFFECT_NEGATIVE_LEVELE, 0x00000000008d6e6c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21EFFECT_SKILL_DECREASEE, 0x00000000008d6ecc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21EFFECT_SKILL_INCREASEE, 0x00000000008d6ed0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21EFFECT_SPELL_IMMUNITYE, 0x00000000008d6ee4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21IMMUNITY_TYPE_DISEASEE, 0x00000000008d6d24) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21IMMUNITY_TYPE_SILENCEE, 0x00000000008d6d04) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnApplyAttackDecreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a7f50) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnApplyAttackIncreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a5870) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnApplyDamageDecreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a8090) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnApplyDamageIncreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a4ea0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnApplyDispelAllMagicEP10CNWSObjectP11CGameEffecti, 0x00000000002b7150) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnApplyEffectImmunityEP10CNWSObjectP11CGameEffecti, 0x00000000002a5260) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnApplySummonCreatureEP10CNWSObjectP11CGameEffecti, 0x00000000002aa940) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnApplyTurnResistanceEP10CNWSObjectP11CGameEffecti, 0x00000000002afb90) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnRemoveCutsceneGhostEP10CNWSObjectP11CGameEffect, 0x00000000002a3360) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnRemoveHasteInternalEP10CNWSObjectP11CGameEffect, 0x00000000002a3090) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnRemoveNegativeLevelEP10CNWSObjectP11CGameEffect, 0x00000000002af0e0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnRemoveSkillDecreaseEP10CNWSObjectP11CGameEffect, 0x00000000002b2450) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnRemoveSkillIncreaseEP10CNWSObjectP11CGameEffect, 0x00000000002b2440) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler21OnRemoveSpellImmunityEP10CNWSObjectP11CGameEffect, 0x00000000002b0250) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22DAMAGE_FLAG_ELECTRICALE, 0x00000000008d6df4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22DAMAGE_POWER_PLUS_FIVEE, 0x00000000008d6dc4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22DAMAGE_POWER_PLUS_FOURE, 0x00000000008d6dc8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22DAMAGE_POWER_PLUS_NINEE, 0x00000000008d6db0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22EFFECT_ABILITY_INVALIDE, 0x00000000008d6e2c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22EFFECT_ATTACK_DECREASEE, 0x00000000008d6f7c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22EFFECT_ATTACK_INCREASEE, 0x00000000008d6f80) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22EFFECT_DAMAGE_DECREASEE, 0x00000000008d6f70) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22EFFECT_DAMAGE_INCREASEE, 0x00000000008d6f74) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22EFFECT_DEFENSIVESTANCEE, 0x00000000008d6e38) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22EFFECT_DISAPPEARAPPEARE, 0x00000000008d6e78) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22EFFECT_SUMMON_CREATUREE, 0x00000000008d6f90) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22IMMUNITY_TYPE_BACKSTABE, 0x00000000008d6cb8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22IMMUNITY_TYPE_CONFUSEDE, 0x00000000008d6cf0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22IMMUNITY_TYPE_DEAFNESSE, 0x00000000008d6d10) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22IMMUNITY_TYPE_DOMINATEE, 0x00000000008d6cf4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22IMMUNITY_TYPE_ENTANGLEE, 0x00000000008d6d08) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnApplyAbilityDecreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a9fc0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnApplyAbilityIncreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a6720) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnApplyDamageReductionEP10CNWSObjectP11CGameEffecti, 0x00000000002b5280) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnApplyDefensiveStanceEP10CNWSObjectP11CGameEffecti, 0x00000000002a68c0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnApplyDisappearAppearEP10CNWSObjectP11CGameEffecti, 0x00000000002ae5e0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnApplyDispelBestMagicEP10CNWSObjectP11CGameEffecti, 0x00000000002b7590) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnRemoveAttackDecreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a3060) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnRemoveAttackIncreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a3050) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnRemoveDamageDecreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a3080) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnRemoveDamageIncreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a3070) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnRemoveEffectImmunityEP10CNWSObjectP11CGameEffect, 0x00000000002b2430) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnRemoveSummonCreatureEP10CNWSObjectP11CGameEffect, 0x00000000002aaee0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler22OnRemoveTurnResistanceEP10CNWSObjectP11CGameEffect, 0x00000000002b24b0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23DAMAGE_FLAG_BASE_DAMAGEE, 0x00000000008d6de0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23DAMAGE_FLAG_BLUDGEONINGE, 0x00000000008d6e10) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23DAMAGE_POWER_PLUS_EIGHTE, 0x00000000008d6db4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23DAMAGE_POWER_PLUS_SEVENE, 0x00000000008d6db8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23DAMAGE_POWER_PLUS_THREEE, 0x00000000008d6dcc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23EFFECT_ABILITY_CHARISMAE, 0x00000000008d6e14) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23EFFECT_ABILITY_DECREASEE, 0x00000000008d6f14) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23EFFECT_ABILITY_INCREASEE, 0x00000000008d6f18) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23EFFECT_ABILITY_STRENGTHE, 0x00000000008d6e28) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23EFFECT_CUTSCENEIMMOBILEE, 0x00000000008d6e3c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23EFFECT_DAMAGE_REDUCTIONE, 0x00000000008d6f78) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23EFFECT_DISPEL_ALL_MAGICE, 0x00000000008d6ee0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23EFFECT_MODIFYNUMATTACKSE, 0x00000000008d6efc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23EFFECT_SETWALKANIMATIONE, 0x00000000008d6ec4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23IMMUNITY_TYPE_BLINDNESSE, 0x00000000008d6d14) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23IMMUNITY_TYPE_KNOCKDOWNE, 0x00000000008d6cc0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23IMMUNITY_TYPE_PARALYSISE, 0x00000000008d6d18) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23MISS_CHANCE_TYPE_NORMALE, 0x00000000008d6c94) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23OnApplyCutsceneImmobileEP10CNWSObjectP11CGameEffecti, 0x00000000002a4840) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23OnApplyDamageResistanceEP10CNWSObjectP11CGameEffecti, 0x00000000002b5320) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23OnApplyEnemyAttackBonusEP10CNWSObjectP11CGameEffecti, 0x00000000002a5590) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23OnApplyModifyNumAttacksEP10CNWSObjectP11CGameEffecti, 0x00000000002a59d0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23OnApplySetStateInternalEP10CNWSObjectP11CGameEffecti, 0x00000000002b5ac0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23OnRemoveAbilityDecreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a5180) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23OnRemoveAbilityIncreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a5130) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler23OnRemoveDisappearAppearEP10CNWSObjectP11CGameEffect, 0x00000000002ae7f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24DAMAGE_POWER_PLUS_ELEVENE, 0x00000000008d6da8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24DAMAGE_POWER_PLUS_TWELVEE, 0x00000000008d6da4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24DAMAGE_POWER_PLUS_TWENTYE, 0x00000000008d6d84) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24EFFECT_ABILITY_DEXTERITYE, 0x00000000008d6e24) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24EFFECT_DAMAGE_RESISTANCEE, 0x00000000008d6fa0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24EFFECT_DISPEL_BEST_MAGICE, 0x00000000008d6edc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24EFFECT_SETSTATE_INTERNALE, 0x00000000008d6f84) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24OnApplyBlindnessInactiveEP10CNWSObjectP11CGameEffecti, 0x00000000002a4730) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24OnApplyBonusSpellOfLevelEP10CNWSObjectP11CGameEffecti, 0x00000000002a32f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24OnRemoveEnemyAttackBonusEP10CNWSObjectP11CGameEffect, 0x00000000002a6010) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24OnRemoveModifyNumAttacksEP10CNWSObjectP11CGameEffect, 0x00000000002a6100) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24OnRemoveSetStateInternalEP10CNWSObjectP11CGameEffect, 0x00000000002abbf0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler24VISION_EFFECT_TYPE_BLINDE, 0x00000000008d6c98) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25DAMAGE_POWER_PLUS_FIFTEENE, 0x00000000008d6d98) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25DAMAGE_POWER_PLUS_NINTEENE, 0x00000000008d6d88) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25DAMAGE_POWER_PLUS_SIXTEENE, 0x00000000008d6d94) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25EFFECT_BLINDNESS_INACTIVEE, 0x00000000008d6e50) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25EFFECT_ENEMY_ATTACK_BONUSE, 0x00000000008d6f48) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25IMMUNITY_TYPE_AC_DECREASEE, 0x00000000008d6cd4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25IMMUNITY_TYPE_DEATH_MAGICE, 0x00000000008d6cb0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25IMMUNITY_TYPE_MIND_SPELLSE, 0x00000000008d6d2c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25MISS_CHANCE_TYPE_DARKNESSE, 0x00000000008d6c90) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25OnApplyArcaneSpellFailureEP10CNWSObjectP11CGameEffecti, 0x00000000002ab960) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25OnApplyLimitMovementSpeedEP10CNWSObjectP11CGameEffecti, 0x00000000002a4f70) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25OnApplyTemporaryHitpointsEP10CNWSObjectP11CGameEffecti, 0x00000000002b53c0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler25OnRemoveBonusSpellOfLevelEP10CNWSObjectP11CGameEffect, 0x00000000002b24c0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler26DAMAGE_POWER_PLUS_EIGHTEENE, 0x00000000008d6d8c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler26DAMAGE_POWER_PLUS_FOURTEENE, 0x00000000008d6d9c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler26DAMAGE_POWER_PLUS_THIRTEENE, 0x00000000008d6da0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler26EFFECT_TEMPORARY_HITPOINTSE, 0x00000000008d6f6c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler26OnApplySavingThrowDecreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a7e30) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler26OnApplySavingThrowIncreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002a5710) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler26OnRemoveArcaneSpellFailureEP10CNWSObjectP11CGameEffect, 0x00000000002aba50) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler26OnRemoveLimitMovementSpeedEP10CNWSObjectP11CGameEffect, 0x00000000002a3170) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler26OnRemoveTemporaryHitpointsEP10CNWSObjectP11CGameEffect, 0x00000000002a9b50) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27DAMAGE_POWER_PLUS_SEVENTEENE, 0x00000000008d6d90) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27EFFECT_ABILITY_CONSTITUTIONE, 0x00000000008d6e20) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27EFFECT_ABILITY_INTELLIGENCEE, 0x00000000008d6e1c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27EFFECT_ARCANE_SPELL_FAILUREE, 0x00000000008d6f44) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27EFFECT_BONUS_SPELL_OF_LEVELE, 0x00000000008d6e7c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27EFFECT_LIMIT_MOVEMENT_SPEEDE, 0x00000000008d6ec0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27IMMUNITY_TYPE_CRITICAL_HITSE, 0x00000000008d6cb4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27OnApplySpecialWalkAnimationEP10CNWSObjectP11CGameEffecti, 0x00000000002a5970) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27OnApplySpellLevelAbsorptionEP10CNWSObjectP11CGameEffecti, 0x00000000002a54c0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27OnApplyVampiricRegenerationEP10CNWSObjectP11CGameEffecti, 0x00000000002a7100) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27OnRemoveSavingThrowDecreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a3040) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler27OnRemoveSavingThrowIncreaseEP10CNWSObjectP11CGameEffect, 0x00000000002a3000) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler28EFFECT_SAVING_THROW_DECREASEE, 0x00000000008d6f3c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler28EFFECT_SAVING_THROW_INCREASEE, 0x00000000008d6f40) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler28EFFECT_VAMPIRIC_REGENERATIONE, 0x00000000008d6e5c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler28IMMUNITY_TYPE_NEGATIVE_LEVELE, 0x00000000008d6cbc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler28IMMUNITY_TYPE_SKILL_DECREASEE, 0x00000000008d6cc4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler28OnApplyMovementSpeedDecreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002abf10) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler28OnApplyMovementSpeedIncreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002abdb0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler28OnRemoveSpecialWalkAnimationEP10CNWSObjectP11CGameEffect, 0x00000000002aff10) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler28OnRemoveSpellLevelAbsorptionEP10CNWSObjectP11CGameEffect, 0x00000000002b24d0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler29EFFECT_SPELL_LEVEL_ABSORPTIONE, 0x00000000008d6eac) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler29IMMUNITY_TYPE_ATTACK_DECREASEE, 0x00000000008d6ce0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler29IMMUNITY_TYPE_DAMAGE_DECREASEE, 0x00000000008d6cdc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler29MISS_CHANCE_TYPE_NORMAL_MELEEE, 0x00000000008d6c88) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler29OnApplyDamageImmunityDecreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002ab1e0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler29OnApplyDamageImmunityIncreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002aaf80) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler29OnRemoveMovementSpeedDecreaseEP10CNWSObjectP11CGameEffect, 0x00000000002ac1d0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler29OnRemoveMovementSpeedIncreaseEP10CNWSObjectP11CGameEffect, 0x00000000002ac070) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler29VISION_EFFECT_TYPE_DARKVISIONE, 0x00000000008d6ca0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30EFFECT_HITPOINTCHANGEWHENDYINGE, 0x00000000008d6ec8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30EFFECT_MOVEMENT_SPEED_DECREASEE, 0x00000000008d6f34) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30EFFECT_MOVEMENT_SPEED_INCREASEE, 0x00000000008d6f38) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30IMMUNITY_TYPE_ABILITY_DECREASEE, 0x00000000008d6ce4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30MISS_CHANCE_TYPE_NORMAL_RANGEDE, 0x00000000008d6c8c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30OnApplyHitPointChangeWhenDyingEP10CNWSObjectP11CGameEffecti, 0x00000000002aa360) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30OnApplySpellResistanceDecreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002ac610) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30OnApplySpellResistanceIncreaseEP10CNWSObjectP11CGameEffecti, 0x00000000002ac360) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30OnRemoveDamageImmunityDecreaseEP10CNWSObjectP11CGameEffect, 0x00000000002afdc0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30OnRemoveDamageImmunityIncreaseEP10CNWSObjectP11CGameEffect, 0x00000000002afc70) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30VISION_EFFECT_TYPE_BLINDVISIONE, 0x00000000008d6ca8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler30VISION_EFFECT_TYPE_ULTRAVISIONE, 0x00000000008d6c9c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler31EFFECT_DAMAGE_IMMUNITY_DECREASEE, 0x00000000008d6f64) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler31EFFECT_DAMAGE_IMMUNITY_INCREASEE, 0x00000000008d6f68) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler31EFFECT_TURN_RESISTANCE_DECREASEE, 0x00000000008d6e54) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler31EFFECT_TURN_RESISTANCE_INCREASEE, 0x00000000008d6e80) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler31OnRemoveHitPointChangeWhenDyingEP10CNWSObjectP11CGameEffect, 0x00000000002aa4a0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler31OnRemoveSpellResistanceDecreaseEP10CNWSObjectP11CGameEffect, 0x00000000002ac7a0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler31OnRemoveSpellResistanceIncreaseEP10CNWSObjectP11CGameEffect, 0x00000000002ac4f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler32EFFECT_SPELL_RESISTANCE_DECREASEE, 0x00000000008d6f20) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler32EFFECT_SPELL_RESISTANCE_INCREASEE, 0x00000000008d6f24) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler33VISION_EFFECT_TYPE_LOWLIGHTVISIONE, 0x00000000008d6ca4) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler35IMMUNITY_TYPE_SAVING_THROW_DECREASEE, 0x00000000008d6ccc) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler37IMMUNITY_TYPE_MOVEMENT_SPEED_DECREASEE, 0x00000000008d6cd0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler38IMMUNITY_TYPE_DAMAGE_IMMUNITY_DECREASEE, 0x00000000008d6cd8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler39IMMUNITY_TYPE_SPELL_RESISTANCE_DECREASEE, 0x00000000008d6cc8) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler8AC_DODGEE, 0x00000000008d6d7c) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandler8VFX_NONEE, 0x00000000008d6c84) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandlerD0Ev, 0x00000000002a33f0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandlerD1Ev, 0x00000000002a33a0) -NWNXLIB_FUNCTION(_ZN21CNWSEffectListHandlerD2Ev, 0x00000000002a33a0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal10InitializeEv, 0x000000000035c310) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal10LoadModuleE10CExoString5CUUIDiP10CNWSPlayeriRKN6NWSync13AdvertisementE, 0x0000000000367f70) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal10OnCDChangeEv, 0x000000000035ce50) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal11OnGainFocusEv, 0x000000000035ce70) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal11OnLostFocusEv, 0x000000000035ce80) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal12ExportPlayerEP10CNWSPlayer, 0x000000000035bfc0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal12StopServicesEv, 0x0000000000366aa0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal12UninitializeEv, 0x000000000035d530) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal12UnloadModuleEv, 0x0000000000361370) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal13GetGameObjectEj, 0x000000000035d910) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal13GetModuleNameEv, 0x000000000035a980) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal13GetPauseStateEh, 0x0000000000360d70) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal13HandleMessageEjPhji, 0x000000000035c180) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal13OnVideoChangeEv, 0x000000000035ce90) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal13SetPauseStateEhi, 0x0000000000361120) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal13StartServicesEv, 0x000000000036b7a0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal14GetActiveTimerEj, 0x0000000000360fd0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal14StartNewModuleER10CExoString, 0x000000000036c520) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal15AdmitPlayerNameE10CExoString, 0x000000000035a710) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal15GetModuleExistsERK10CExoString, 0x000000000035c420) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal15GetNextPCObjectEv, 0x0000000000363bc0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal15ReadBannedListsEv, 0x0000000000366460) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal15RestartNetLayerEv, 0x000000000035e690) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal16AddSubNetProfileEj10CExoStringS0_, 0x0000000000364420) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal16ExportAllPlayersEv, 0x000000000035c030) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal16GetFirstPCObjectEv, 0x0000000000363b40) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal16MovePlayerToAreaEPv, 0x000000000035cc90) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal16PlayerListChangeEjii, 0x0000000000369f20) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal16ShutdownNetLayerEv, 0x000000000035d0b0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal16StripColorTokensER10CExoString, 0x00000000003640b0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal16TogglePauseStateEh, 0x0000000000361350) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal17AddIPToBannedListE10CExoString, 0x0000000000366f90) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal17GetModuleLanguageEv, 0x000000000035e540) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal17GetPlayerLanguageEj, 0x000000000035e490) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal17IsOnExclusionListEj, 0x0000000000360db0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal17LoadPrimaryPlayerEP10CNWSPlayer, 0x000000000035bf70) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal17RemovePCFromWorldEP10CNWSPlayer, 0x000000000035d5b0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal17UpdateWindowTitleEv, 0x000000000035d0a0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal18AddCharListRequestEj, 0x00000000003651f0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal18AddToExclusionListEjh, 0x0000000000366350) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal18GetFactionOfObjectEjPi, 0x000000000035fbf0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal18InitializeNetLayerEv, 0x000000000035e560) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal18IsPlayerNameStickyEv, 0x0000000000363220) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal18LoadCharacterStartEhP10CNWSPlayer7CResRefPvj, 0x000000000036e870) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal18SendCharacterQueryEP10CNWSPlayer, 0x000000000035c0d0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal18StallEventSaveGameEv, 0x000000000035ca90) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal18StartShutdownTimerEmm, 0x0000000000362b00) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19AdmitNetworkAddressEj10CExoString, 0x000000000035a700) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19GetActivePauseStateEv, 0x0000000000360d90) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19GetBannedListStringEv, 0x00000000003608a0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19GetDifficultyOptionEi, 0x0000000000362ad0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19GetIsIPOnBannedListE10CExoString, 0x0000000000362ce0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19GetPlayerListStringEv, 0x000000000035fd40) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19GetPortalListStringEv, 0x0000000000360d30) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19LoadCharacterFinishEP10CNWSPlayerii, 0x000000000035b9d0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19PushMessageOverWallEPhj, 0x0000000000363c20) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19RemoveSubNetProfileEj, 0x00000000003645d0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19SendStartStallEventEj, 0x000000000035c8d0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19SetGameSpyReportingEi, 0x000000000035e550) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19UnlockBiowareModuleEP10CNWSModule, 0x000000000035aa40) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19UpdateAutoSaveTimerEv, 0x0000000000363c70) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19UpdateShutdownTimerEm, 0x0000000000362b20) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal19ValidatePlayerLoginEPv, 0x000000000035d540) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal20AddCDKeyToBannedListE10CExoString, 0x00000000003670b0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal20GetPlayerAddressDataEjPjPPhS2_S0_, 0x000000000035c900) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal20SendHeartbeatToRelayEv, 0x0000000000362080) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal20SetDDCipherForModuleE10CExoString, 0x0000000000364910) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal20SetEstimatedSaveSizeERK10CExoStringt, 0x0000000000367e10) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal20SetNetworkAddressBanEj10CExoStringi, 0x00000000003663e0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal20Test_Unit_Script_RunEv, 0x0000000000363f80) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal21ConnectionLibMainLoopEv, 0x0000000000362170) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal21DealWithLoadGameErrorEj, 0x00000000003618d0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal21GetAreaByGameObjectIDEj, 0x000000000035db90) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal21GetDoorByGameObjectIDEj, 0x000000000035e1f0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal21GetExtendedServerInfoEP19CExtendedServerInfo, 0x000000000035c920) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal21GetItemByGameObjectIDEj, 0x000000000035da10) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal21StorePlayerCharactersEv, 0x000000000036c080) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal22GetActiveExclusionListEv, 0x0000000000361ae0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal22GetIsCDKeyOnBannedListE10CExoString, 0x0000000000363180) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal22GetStoreByGameObjectIDEj, 0x000000000035d970) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal22RemoveIPFromBannedListE10CExoString, 0x0000000000366830) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal22ShutdownServerProfilesEv, 0x0000000000364890) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal22UpdateClientsForObjectEj, 0x000000000035d0d0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23AddPendingAuthorizationEj, 0x000000000035fb30) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23CopyModuleToCurrentGameER10CExoStringS1_t, 0x000000000035c320) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23GetModuleByGameObjectIDEj, 0x000000000035db10) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23InitiateModuleForPlayerEPv, 0x000000000035dc10) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23IsOnActiveExclusionListEj, 0x0000000000360f50) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23RemoveFromExclusionListEjh, 0x0000000000360e50) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23SHUTDOWN_TIMER_WARNING1E, 0x00000000008db280) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23SHUTDOWN_TIMER_WARNING2E, 0x00000000008db278) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23s_pServerExoAppInternalE, 0x0000000000cec8c0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23UpdateClientGameObjectsEi, 0x000000000035d470) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23UpdateLogHeartbeatTimerEm, 0x0000000000362c60) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal23VomitServerOptionsToLogEv, 0x000000000035edd0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal24AddSubNetProfileRecvSizeEjj, 0x00000000003643c0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal24AddSubNetProfileSendSizeEjj, 0x0000000000364360) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal24GetServerInfoFromIniFileEv, 0x000000000036ae00) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal24GetTriggerByGameObjectIDEj, 0x000000000035e0f0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal24ResolvePlayerByFirstNameERK10CExoString, 0x0000000000361b20) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal24Test_Unit_Script_CompileEv, 0x0000000000363df0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal24WriteServerInfoToIniFileEv, 0x000000000035e6a0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25AddPlayerNameToBannedListE10CExoString, 0x0000000000367020) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25ContinueMessageProcessingEv, 0x000000000035d590) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25GetClientObjectByObjectIdEj, 0x000000000035a720) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25GetClientObjectByPlayerIdEjh, 0x000000000035a800) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25GetCreatureByGameObjectIDEj, 0x000000000035da90) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25GetPlayerIDByGameObjectIDEj, 0x0000000000361d30) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25GetWaypointByGameObjectIDEj, 0x000000000035e2f0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25LOGIN_FAIL_NOTALLOWEDGOLDE, 0x00000000008db264) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25LOGIN_FAIL_NOTALLOWEDITEME, 0x00000000008db268) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal25RemoveCDKeyFromBannedListE10CExoString, 0x00000000003669d0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal26GetEncounterByGameObjectIDEj, 0x000000000035e370) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal26GetPlaceableByGameObjectIDEj, 0x000000000035e170) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal26LOGIN_FAIL_NOTALLOWEDLEVELE, 0x00000000008db258) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal26MarkUpdateClientsForObjectEj, 0x000000000035d390) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal26QuarantineInvalidCharacterEPvj, 0x000000000035b770) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal26RemovePendingAuthorizationEj, 0x000000000035fb90) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal26SHUTDOWN_TIMER_CLIENTCHARSE, 0x00000000008db290) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal26SHUTDOWN_TIMER_SERVERCHARSE, 0x00000000008db288) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal27CCLIENTGAMEOBJECTUPDATETIMEE, 0x00000000008db2a0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal27DISCONNECTSTRREF_CLIENTSIDEE, 0x00000000008db298) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal27DISCONNECTSTRREF_SERVERSIDEE, 0x00000000008db29c) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal27GetIsPlayerNameOnBannedListE10CExoString, 0x0000000000362f60) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal28GetSoundObjectByGameObjectIDEj, 0x000000000035e3f0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal28HandleGameSpyToServerMessageEiPvi, 0x000000000035fb20) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal28LOGIN_FAIL_NOTABLETOSAVECHARE, 0x00000000008db254) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal29CheckStickyPlayerNameReservedE10CExoStringS0_S0_i, 0x0000000000363240) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal29CreateServerVaultLostAndFoundEv, 0x0000000000363d30) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal29GetAreaOfEffectByGameObjectIDEj, 0x000000000035e270) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal29HandleOldServerVaultMigrationE10CExoStringS0_S0_, 0x0000000000365240) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal29LOGIN_FAIL_NOTALLOWLOCALVAULTE, 0x00000000008db274) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal29ReprocessExclusionListActionsEh, 0x0000000000361040) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal29ValidateCreateServerCharacterEP10CNWSPlayerPvj, 0x000000000036d280) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal30LOGIN_FAIL_NOTALLOWEDTOUSECHARE, 0x00000000008db26c) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal30LOGIN_FAIL_NOTALLOWSERVERVAULTE, 0x00000000008db270) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal30RemovePlayerNameFromBannedListE10CExoString, 0x0000000000366900) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal31LOGIN_FAIL_NOTALLOWEDEXPERIENCEE, 0x00000000008db260) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal32SendExitingStartNewModuleMessageEi, 0x000000000035b730) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal32UpdateClientGameObjectsForPlayerEP10CNWSPlayerim, 0x000000000035d180) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal33SendEnteringStartNewModuleMessageEv, 0x000000000035b700) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal35SendEnhancedHeartbeatToMasterServerEv, 0x0000000000361d60) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal36LOGIN_FAIL_NOTALLOWEDINVULNERABILITYE, 0x00000000008db25c) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal37GetHostedPublicInternetAddressAndPortEv, 0x00000000003648b0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal6OnExitEv, 0x000000000035ce60) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal7EndGameERK10CExoString, 0x000000000035b490) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal8LoadGameEjR10CExoStringS1_P10CNWSPlayer, 0x0000000000369b60) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal8MainLoopEv, 0x000000000036c730) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal8SaveGameEjR10CExoStringS1_P10CNWSPlayeriS1_, 0x0000000000367140) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal8ShutdownEii, 0x0000000000364e40) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal9GetModuleEv, 0x000000000035a910) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal9RunModuleEv, 0x000000000035cea0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternalC1Ev, 0x0000000000365b80) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternalC2Ev, 0x0000000000365b80) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternalD1Ev, 0x00000000003660f0) -NWNXLIB_FUNCTION(_ZN21CServerExoAppInternalD2Ev, 0x00000000003660f0) -NWNXLIB_FUNCTION(_ZN21CVirtualMachineScriptD1Ev, 0x00000000007cebb0) -NWNXLIB_FUNCTION(_ZN21CVirtualMachineScriptD2Ev, 0x00000000007cebb0) -NWNXLIB_FUNCTION(_ZN22CCombatInformationNodeaSERKS_, 0x000000000089e1a0) -NWNXLIB_FUNCTION(_ZN22CCombatInformationNodeC1Ev, 0x000000000089e0e0) -NWNXLIB_FUNCTION(_ZN22CCombatInformationNodeC2Ev, 0x000000000089e0e0) -NWNXLIB_FUNCTION(_ZN22CCombatInformationNodeeqERS_, 0x000000000089e100) -NWNXLIB_FUNCTION(_ZN22CCombatInformationNodeneERS_, 0x000000000089e150) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal10RemoveHeadEv, 0x0000000000128260) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal10RemoveTailEv, 0x00000000001282e0) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal6RemoveEP18CExoLinkedListNode, 0x00000000001281c0) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal7AddHeadEPv, 0x0000000000127e90) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal7AddTailEPv, 0x0000000000127ee0) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal7GetNextERP18CExoLinkedListNode, 0x0000000000128100) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal7GetPrevERP18CExoLinkedListNode, 0x0000000000128160) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal8AddAfterEPvP18CExoLinkedListNode, 0x0000000000127f40) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal8GetAtPosEP18CExoLinkedListNode, 0x00000000001280c0) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternal9AddBeforeEPvP18CExoLinkedListNode, 0x0000000000128000) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternalD1Ev, 0x0000000000127e50) -NWNXLIB_FUNCTION(_ZN22CExoLinkedListInternalD2Ev, 0x0000000000127e50) -NWNXLIB_FUNCTION(_ZN22CNWCreatureStatsUpdate16ClearEffectIconsEv, 0x0000000000355b60) -NWNXLIB_FUNCTION(_ZN22CNWCreatureStatsUpdate20SetCombatInformationEP18CCombatInformation, 0x0000000000355c90) -NWNXLIB_FUNCTION(_ZN22CNWCreatureStatsUpdateC1Ev, 0x00000000003559b0) -NWNXLIB_FUNCTION(_ZN22CNWCreatureStatsUpdateC2Ev, 0x00000000003559b0) -NWNXLIB_FUNCTION(_ZN22CNWCreatureStatsUpdateD1Ev, 0x0000000000355c00) -NWNXLIB_FUNCTION(_ZN22CNWCreatureStatsUpdateD2Ev, 0x0000000000355c00) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject10LoadEffectEP7CResGFFP10CResStruct, 0x000000000033fc90) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject10SaveEffectEP7CResGFFP10CResStruct, 0x00000000003402f0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject10SetCreatorEj, 0x0000000000340710) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject11GetPositionEv, 0x000000000033f6e0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject11JumpToPointEP8CNWSAreaRK6Vector, 0x0000000000341870) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject11MoveToPointERK6Vector, 0x0000000000341950) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject11SetDurationEhf, 0x000000000033f7c0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject12EventHandlerEjjPvjj, 0x0000000000340bb0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject13GetScriptNameEi, 0x0000000000341ca0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject14InAreaOfEffectE6Vector, 0x000000000033f520) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject14LoadAreaEffectEi, 0x000000000033f7f0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject14RemoveFromAreaEv, 0x0000000000340b20) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject14SetTargetObjIDEj, 0x0000000000340e50) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject14UpdateSubAreasEP6Vector, 0x0000000000340f60) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject16GetEffectSpellIdEv, 0x000000000026f470) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject16SetEffectSpellIdEj, 0x00000000002b78f0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject18RemoveFromSubAreasEi, 0x00000000003408e0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject23AsNWSAreaOfEffectObjectEv, 0x0000000000341c90) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject32LineSegmentIntersectAreaOfEffectE6VectorS0_, 0x000000000033f150) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject8AIUpdateEv, 0x00000000003415c0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject8SetShapeEhff, 0x000000000033f6b0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObject9AddToAreaEP8CNWSAreafffi, 0x00000000003419d0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObjectC1Ej, 0x000000000033efa0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObjectC2Ej, 0x000000000033efa0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObjectD0Ev, 0x0000000000340e20) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObjectD1Ev, 0x0000000000340cc0) -NWNXLIB_FUNCTION(_ZN22CNWSAreaOfEffectObjectD2Ev, 0x0000000000340cc0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerCharSheetGUI20SetCreatureDisplayedEj, 0x0000000000304b50) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerCharSheetGUI35ComputeCharacterSheetUpdateRequiredEP10CNWSPlayer, 0x0000000000308a20) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerContainerGUI11SetNextPageEP10CNWSPlayer, 0x0000000000304e80) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerContainerGUI15SetPreviousPageEP10CNWSPlayer, 0x0000000000304f10) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerContainerGUI7SetOpenEP10CNWSPlayerji, 0x0000000000304fa0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerContainerGUIC1Ev, 0x0000000000304e60) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerContainerGUIC2Ev, 0x0000000000304e60) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerInventoryGUI7SetOpenEii, 0x0000000000304ca0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerInventoryGUI8SetOwnerEj, 0x0000000000304de0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerInventoryGUI8SetPanelEP10CNWSPlayerh, 0x0000000000306080) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerInventoryGUIC1Ev, 0x0000000000304bd0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerInventoryGUIC2Ev, 0x0000000000304bd0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerInventoryGUID1Ev, 0x0000000000304c50) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerInventoryGUID2Ev, 0x0000000000304c50) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory10ClearSlotsEv, 0x000000000030f5a0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory10ClearStoreEv, 0x000000000030f4f0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory11ClearBarterEv, 0x000000000030f550) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory14ClearContainerEv, 0x000000000030f4a0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory14ItemListRemoveEP18CExoLinkedListNodeh, 0x000000000030f980) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory14ItemListSetEndERP18CExoLinkedListNodeh, 0x000000000030f800) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory15ClearRepositoryEv, 0x000000000030f450) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory15ItemListAddHeadEjhhhjj, 0x000000000030fa10) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory15ItemListGetItemEP18CExoLinkedListNodeh, 0x000000000030f5d0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory15ItemListGetNextERP18CExoLinkedListNodeh, 0x000000000030f860) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory15ItemListGetPrevERP18CExoLinkedListNodeh, 0x000000000030f8c0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory16ItemListSetStartERP18CExoLinkedListNodeh, 0x000000000030f7a0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory17ItemListGetNumberEh, 0x000000000030f920) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory21ItemListGetUpdateItemEP18CExoLinkedListNodeh, 0x000000000030f740) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventory23ItemListGetItemObjectIDEP18CExoLinkedListNodeh, 0x000000000030f6d0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventoryC1Ev, 0x0000000000311750) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventoryC2Ev, 0x0000000000311750) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventoryD1Ev, 0x00000000003118a0) -NWNXLIB_FUNCTION(_ZN22CNWSPlayerLUOInventoryD2Ev, 0x00000000003118a0) -NWNXLIB_FUNCTION(_ZN23CNWPlaceableSurfaceMesh12LoadWalkMeshE7CResRef, 0x00000000008ae160) -NWNXLIB_FUNCTION(_ZN23CNWPlaceableSurfaceMesh18LoadWalkMeshStringEPPhPjS0_j, 0x00000000008ae130) -NWNXLIB_FUNCTION(_ZN23CNWPlaceableSurfaceMeshC1Ev, 0x00000000008ae070) -NWNXLIB_FUNCTION(_ZN23CNWPlaceableSurfaceMeshC2Ev, 0x00000000008ae070) -NWNXLIB_FUNCTION(_ZN23CNWPlaceableSurfaceMeshD0Ev, 0x00000000008adfa0) -NWNXLIB_FUNCTION(_ZN23CNWPlaceableSurfaceMeshD1Ev, 0x00000000008adf30) -NWNXLIB_FUNCTION(_ZN23CNWPlaceableSurfaceMeshD2Ev, 0x00000000008adf30) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler10ApplyHasteEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7930) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler10ApplyLightEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003eb7e0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler12ApplyACBonusEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003eb130) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler13ApplyImmunityEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e8280) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler14ApplyBonusFeatEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e8130) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler15ApplyDarkVisionEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7520) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler15ApplyDecreaseACEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e9120) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler15ApplyFreeActionEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7700) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler15ApplySkillBonusEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7d30) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler15ApplyTrueSeeingEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e75d0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler16ApplyAttackBonusEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003ea960) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler16ApplyDamageBonusEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e9580) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler16ApplyHolyAvengerEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003ebfb0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler16ApplySpecialWalkEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e79c0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler17ApplyAbilityBonusEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e8560) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler17ApplyRegenerationEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7f10) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler18ApplyAttackPenaltyEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003eae30) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler18ApplyDamagePenaltyEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003eb4c0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler18ApplyDecreaseSkillEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e92c0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler18ApplyUnlimitedAmmoEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003eb9c0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler19ApplyDamageImmunityEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e88c0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler19ApplyTurnResistanceEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7c80) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler19RemoveUnlimitedAmmoEP8CNWSItemP15CNWItemPropertyP12CNWSCreaturej, 0x00000000003eb920) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler20ApplyDamageReductionEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e8b00) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler20ApplyDecreaseAbilityEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e8f10) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler20ApplyImprovedEvasionEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7660) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler21ApplyDamageResistanceEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e8c50) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler21ApplyEnhancementBonusEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e9a30) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler21OnItemPropertyAppliedEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7090) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler21OnItemPropertyRemovedEP8CNWSItemP15CNWItemPropertyP12CNWSCreaturej, 0x00000000003e7320) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler22ApplyBonusSpellOfLevelEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003ebe10) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler23ApplyArcaneSpellFailureEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7ff0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler23ApplyChangedSavingThrowEP8CNWSItemiP15CNWItemPropertyP12CNWSCreaturei, 0x00000000003ecd40) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler23ApplyEnhancementPenaltyEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003ea430) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler23ApplyReducedSavingThrowEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003ecf90) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler23ApplySpellImmunityLevelEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7e20) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler23RemoveBonusSpellOfLevelEP8CNWSItemP15CNWItemPropertyP12CNWSCreaturej, 0x00000000003ebeb0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler24ApplyDamageVulnerabilityEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e8db0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler24ApplyImprovedSavingThrowEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003eceb0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler24ApplySpellImmunitySchoolEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e7af0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler24InitializeItemPropertiesEv, 0x00000000003e6a80) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler26ApplyChangedSavingThrowVsXEP8CNWSItemiP15CNWItemPropertyP12CNWSCreaturei, 0x00000000003ed070) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler26ApplyReducedSavingThrowVsXEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003ed4d0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler26ApplySpellImmunitySpecificEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e9440) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler27ApplyImprovedSavingThrowVsXEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003ed3f0) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandler28ApplyImprovedSpellResistanceEP8CNWSItemP15CNWItemPropertyP12CNWSCreatureji, 0x00000000003e8770) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandlerD0Ev, 0x00000000003e6a50) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandlerD1Ev, 0x00000000003e6a00) -NWNXLIB_FUNCTION(_ZN23CNWSItemPropertyHandlerD2Ev, 0x00000000003e6a00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands10COMMAND_D2E, 0x00000000008e48f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands10COMMAND_D3E, 0x00000000008e48f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands10COMMAND_D4E, 0x00000000008e48f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands10COMMAND_D6E, 0x00000000008e48ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands10COMMAND_D8E, 0x00000000008e48e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11COMMAND_ABSE, 0x00000000008e4940) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11COMMAND_COSE, 0x00000000008e4964) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11COMMAND_D10E, 0x00000000008e48e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11COMMAND_D12E, 0x00000000008e48e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11COMMAND_D20E, 0x00000000008e48dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11COMMAND_LOGE, 0x00000000008e494c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11COMMAND_POWE, 0x00000000008e4948) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11COMMAND_SINE, 0x00000000008e4960) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11COMMAND_TANE, 0x00000000008e495c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands11ReportErrorER10CExoStringi, 0x0000000000432a30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12COMMAND_ACOSE, 0x00000000008e4958) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12COMMAND_ASINE, 0x00000000008e4954) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12COMMAND_ATANE, 0x00000000008e4950) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12COMMAND_D100E, 0x00000000008e48d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12COMMAND_FABSE, 0x00000000008e4968) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12COMMAND_ISPCE, 0x00000000008e4710) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12COMMAND_SQRTE, 0x00000000008e4944) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12COMMAND_WAITE, 0x00000000008e474c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12DebugGUIStopEv, 0x00000000003fb2a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands12MAX_COMMANDSE, 0x00000000008e3a44) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands13COMMAND_GETACE, 0x00000000008e48a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands13COMMAND_GETXPE, 0x00000000008e4448) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands13COMMAND_SETXPE, 0x00000000008e444c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands13DebugGUIStartEv, 0x0000000000433190) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands14COMMAND_GETAGEE, 0x00000000008e42b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands14COMMAND_GETTAGE, 0x00000000008e47d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands14COMMAND_RANDOME, 0x00000000008e4a74) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands14COMMAND_SETTAGE, 0x00000000008e3d34) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands14COMMAND_VECTORE, 0x00000000008e483c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands14DebugGUIUpdateEv, 0x00000000003f3f00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands14ExecuteCommandEii, 0x00000000003f3ec0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_BOOT_PCE, 0x00000000008e41a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_ENDGAMEE, 0x00000000008e41a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_GETAREAE, 0x00000000008e4a14) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_GETGOLDE, 0x00000000008e43ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_GETISDME, 0x00000000008e43e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_GETNAMEE, 0x00000000008e4680) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_NUIFINDE, 0x00000000008e3aa4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_SETNAMEE, 0x00000000008e3d7c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_SETTIMEE, 0x00000000008e4a44) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_SQLSTEPE, 0x00000000008e3bec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands15COMMAND_VIBRATEE, 0x00000000008e3c84) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_COPYAREAE, 0x00000000008e3d04) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_COPYITEME, 0x00000000008e4154) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_GETCOLORE, 0x00000000008e3d48) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_GETDEITYE, 0x00000000008e42d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_GETISDAYE, 0x00000000008e4420) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_JSON_INTE, 0x00000000008e3b30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_LOCATIONE, 0x00000000008e4718) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_SETCOLORE, 0x00000000008e3d44) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_SETDEITYE, 0x00000000008e3f2c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_STOPFADEE, 0x00000000008e3f90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands16COMMAND_WILLSAVEE, 0x00000000008e48bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_ACTIONSITE, 0x00000000008e476c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_FORCERESTE, 0x00000000008e3e58) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETDOMAINE, 0x00000000008e3c58) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETFACINGE, 0x00000000008e4a04) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETGENDERE, 0x00000000008e44dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETISDAWNE, 0x00000000008e4418) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETISDEADE, 0x00000000008e4844) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETISDUSKE, 0x00000000008e4414) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETISOPENE, 0x00000000008e4388) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETLOCKEDE, 0x00000000008e4560) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETMASTERE, 0x00000000008e4578) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETMODULEE, 0x00000000008e46ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETNEXTPCE, 0x00000000008e41e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETRESREFE, 0x00000000008e415c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETSKYBOXE, 0x00000000008e3e3c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_GETWEIGHTE, 0x00000000008e3f6c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_JSON_BOOLE, 0x00000000008e3b28) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_JSON_DIFFE, 0x00000000008e3ae8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_JSON_DUMPE, 0x00000000008e3b50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_JSON_NULLE, 0x00000000008e3b40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_NUICREATEE, 0x00000000008e3aa8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_OPENSTOREE, 0x00000000008e448c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_PLAYSOUNDE, 0x00000000008e49bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_SETFACINGE, 0x00000000008e4a4c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_SETLOCKEDE, 0x00000000008e4564) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_SETPCLIKEE, 0x00000000008e44a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_SETSKYBOXE, 0x00000000008e3e50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_SQLGETINTE, 0x00000000008e3be8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17COMMAND_TAGEFFECTE, 0x00000000008e3d2c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands17RunScriptCallbackER10CExoString, 0x00000000003fada0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_ACTIONLOCKE, 0x00000000008e42e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_ACTIONRESTE, 0x00000000008e442c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_ADDTOPARTYE, 0x00000000008e4184) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_COPYOBJECTE, 0x00000000008e4114) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_CREATEAREAE, 0x00000000008e3d0c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_CSWY_DEBUGE, 0x00000000008e3b94) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_CSWY_RESETE, 0x00000000008e3ba4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_DAYTONIGHTE, 0x00000000008e3ebc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_EFFECTBEAME, 0x00000000008e4738) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_EFFECTDEAFE, 0x00000000008e481c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_EFFECTHEALE, 0x00000000008e493c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_EFFECTICONE, 0x00000000008e3b78) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_EFFECTSLOWE, 0x00000000008e4638) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_FLOATTOINTE, 0x00000000008e46d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETAILEVELE, 0x00000000008e3f54) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETFIRSTPCE, 0x00000000008e41e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETHASFEATE, 0x00000000008e4600) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETHITDICEE, 0x00000000008e47dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETISENEMYE, 0x00000000008e46c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETISNIGHTE, 0x00000000008e441c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETSPELLIDE, 0x00000000008e4694) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETSUBRACEE, 0x00000000008e42cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETWEATHERE, 0x00000000008e3f24) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_GETXPSCALEE, 0x00000000008e3db0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_INTTOFLOATE, 0x00000000008e46dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_JSON_ARRAYE, 0x00000000008e3b38) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_JSON_FLOATE, 0x00000000008e3b2c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_JSON_MERGEE, 0x00000000008e3ae4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_JSON_PARSEE, 0x00000000008e3b54) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_JSON_PATCHE, 0x00000000008e3aec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_NIGHTTODAYE, 0x00000000008e3eb8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_NUIDESTROYE, 0x00000000008e3aa0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_NUIGETBINDE, 0x00000000008e3a84) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_NUISETBINDE, 0x00000000008e3a80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_POSTSTRINGE, 0x00000000008e3c60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_PRINTFLOATE, 0x00000000008e4a6c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_RANDOMNAMEE, 0x00000000008e4690) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_REFLEXSAVEE, 0x00000000008e48c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_SETAILEVELE, 0x00000000008e3f50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_SETSUBRACEE, 0x00000000008e3f30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_SETWEATHERE, 0x00000000008e4288) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_SETXPSCALEE, 0x00000000008e3dac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_SQLBINDINTE, 0x00000000008e3c00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_SQLGETJSONE, 0x00000000008e3ad0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18COMMAND_TALENTFEATE, 0x00000000008e45bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18ExecuteCommandIsDMEii, 0x000000000040a670) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18ExecuteCommandIsPCEii, 0x000000000040c430) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18ExecuteCommandJsonEii, 0x00000000004501a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18ExecuteCommandMathEii, 0x000000000042d1d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18ExecuteCommandWaitEii, 0x0000000000401840) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18GetObjectWatchViewEjPiPP10CExoStringS3_, 0x0000000000433c90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands18InitializeCommandsEv, 0x00000000003f4200) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_ADDHENCHMANE, 0x00000000008e44c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_BLACKSCREENE, 0x00000000008e3f8c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_DESTROYAREAE, 0x00000000008e3d08) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_EFFECTCURSEE, 0x00000000008e484c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_EFFECTDAZEDE, 0x00000000008e47f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_EFFECTDEATHE, 0x00000000008e4860) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_EFFECTHASTEE, 0x00000000008e463c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_EFFECTSLEEPE, 0x00000000008e480c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_EFFECTSWARME, 0x00000000008e427c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_FADETOBLACKE, 0x00000000008e3f94) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETAREASIZEE, 0x00000000008e3d80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETFOGCOLORE, 0x00000000008e3e38) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETHARDNESSE, 0x00000000008e3e04) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETHASSKILLE, 0x00000000008e45fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETHASSPELLE, 0x00000000008e4490) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETHENCHMANE, 0x00000000008e44ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETIMMORTALE, 0x00000000008e3f64) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETISFRIENDE, 0x00000000008e46c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETISIMMUNEE, 0x00000000008e462c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETLOCALINTE, 0x00000000008e49a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETLOCATIONE, 0x00000000008e4720) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETLOOTABLEE, 0x00000000008e3ee0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETNEXTAREAE, 0x00000000008e3cfc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETPLOTFLAGE, 0x00000000008e4358) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETPOSITIONE, 0x00000000008e4a08) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_GETTIMEHOURE, 0x00000000008e4a34) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_INTTOSTRINGE, 0x00000000008e4904) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_JSON_AS_INTE, 0x00000000008e3b20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_JSON_OBJECTE, 0x00000000008e3b3c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_JSON_STRINGE, 0x00000000008e3b34) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_PRINTOBJECTE, 0x00000000008e4a60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_PRINTSTRINGE, 0x00000000008e4a70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_PRINTVECTORE, 0x00000000008e4840) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_RESISTSPELLE, 0x00000000008e47d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SETAREAWINDE, 0x00000000008e3c18) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SETCALENDARE, 0x00000000008e4a48) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SETFOGCOLORE, 0x00000000008e3e44) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SETHARDNESSE, 0x00000000008e3e00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SETIMMORTALE, 0x00000000008e3f84) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SETLOCALINTE, 0x00000000008e4998) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SETLOOTABLEE, 0x00000000008e3ee4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SETPLOTFLAGE, 0x00000000008e4354) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SIGNALEVENTE, 0x00000000008e4868) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SPEAKSTRINGE, 0x00000000008e4700) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SQLBINDJSONE, 0x00000000008e3ad4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SQLGETERRORE, 0x00000000008e3c0c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_SQLGETFLOATE, 0x00000000008e3be4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_STRINGTOINTE, 0x00000000008e46d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_TALENTSKILLE, 0x00000000008e45b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19COMMAND_TALENTSPELLE, 0x00000000008e45c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19ExecuteCommandGetACEii, 0x0000000000415d70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19ExecuteCommandGetPCEii, 0x00000000004248e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19ExecuteCommandGetXPEii, 0x00000000003ff5a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands19ExecuteCommandSetXPEii, 0x0000000000421a30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_ACTIONATTACKE, 0x00000000008e49e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_ACTIONUNLOCKE, 0x00000000008e42e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_CREATEOBJECTE, 0x00000000008e46a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_CSWY_SUGGESTE, 0x00000000008e3b9c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_DELAYCOMMANDE, 0x00000000008e4a58) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_DODOORACTIONE, 0x00000000008e452c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_EFFECTAPPEARE, 0x00000000008e42ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_EFFECTDAMAGEE, 0x00000000008e4938) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_EFFECTPOISONE, 0x00000000008e468c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_EFFECTTURNEDE, 0x00000000008e4488) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_FEETTOMETERSE, 0x00000000008e470c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GET2DASTRINGE, 0x00000000008e3f5c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETASSOCIATEE, 0x00000000008e44c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETEFFECTTAGE, 0x00000000008e3d30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETFIRSTAREAE, 0x00000000008e3d00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETFOGAMOUNTE, 0x00000000008e3e30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETISNEUTRALE, 0x00000000008e46c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETISRESTINGE, 0x00000000008e4290) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETISTRAPPEDE, 0x00000000008e41d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETLASTSPELLE, 0x00000000008e469c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETLOCALCSWYE, 0x00000000008e3bb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETLOCALJSONE, 0x00000000008e3ae0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETPCSPEAKERE, 0x00000000008e46bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETPHENOTYPEE, 0x00000000008e3e4c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETSKILLRANKE, 0x00000000008e4588) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_GETSUBSTRINGE, 0x00000000008e4970) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_INSERTSTRINGE, 0x00000000008e4974) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_JSON_POINTERE, 0x00000000008e3af0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_JUMPTOOBJECTE, 0x00000000008e4470) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_NUISETLAYOUTE, 0x00000000008e3a7c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_PRINTINTEGERE, 0x00000000008e4a64) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_REMOVEEFFECTE, 0x00000000008e4918) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SETFOGAMOUNTE, 0x00000000008e3e34) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SETLISTENINGE, 0x00000000008e47b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SETLOCALCSWYE, 0x00000000008e3bac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SETLOCALJSONE, 0x00000000008e3adc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SETPCDISLIKEE, 0x00000000008e44a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SETPHENOTYPEE, 0x00000000008e3e48) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SQLBINDFLOATE, 0x00000000008e3bfc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SQLGETOBJECTE, 0x00000000008e3bd8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SQLGETSTRINGE, 0x00000000008e3be0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_SQLGETVECTORE, 0x00000000008e3bdc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_STOREGETGOLDE, 0x00000000008e3e98) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20COMMAND_STORESETGOLDE, 0x00000000008e3e94) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandAttackEii, 0x0000000000409a00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandBootPCEii, 0x000000000040e920) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandGetAgeEii, 0x0000000000403be0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandGetTagEii, 0x000000000040ce70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandGetVarEii, 0x000000000043f210) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandRandomEii, 0x00000000003fb430) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandResManEii, 0x0000000000468db0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandSetTagEii, 0x0000000000430e90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandSetVarEii, 0x000000000043e4e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandSqlGetEii, 0x000000000044c010) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandTalentEii, 0x00000000004072d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandVectorEii, 0x0000000000406f80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20GetDebuggerLabelNameEi, 0x0000000000431170) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_ACTIONEXAMINEE, 0x00000000008e3eec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_ACTIONUSEFEATE, 0x00000000008e45f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_ANGLETOVECTORE, 0x00000000008e4834) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_ASSIGNCOMMANDE, 0x00000000008e4a5c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_CAMERALOCKYAWE, 0x00000000008e3d90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_CHANGEFACTIONE, 0x00000000008e47c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_CSWY_GETVALUEE, 0x00000000008e3b98) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_DESTROYOBJECTE, 0x00000000008e46b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_EFFECTCHARMEDE, 0x00000000008e4804) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_EFFECTDISEASEE, 0x00000000008e4688) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_EFFECTPETRIFYE, 0x00000000008e4158) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_EFFECTSILENCEE, 0x00000000008e4684) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_EFFECTSTUNNEDE, 0x00000000008e47f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_EXECUTESCRIPTE, 0x00000000008e4a54) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_FADEFROMBLACKE, 0x00000000008e3f98) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_FINDSUBSTRINGE, 0x00000000008e496c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_FLOATTOSTRINGE, 0x00000000008e4a68) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_FORTITUDESAVEE, 0x00000000008e48c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETACTIONMODEE, 0x00000000008e3ef8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETDETECTMODEE, 0x00000000008e4178) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETEFFECTTYPEE, 0x00000000008e47cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETIDENTIFIEDE, 0x00000000008e4544) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETISINCOMBATE, 0x00000000008e4574) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETISPLAYERDME, 0x00000000008e3c1c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETITEMINSLOTE, 0x00000000008e4808) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETLASTKILLERE, 0x00000000008e43a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETLASTLOCKEDE, 0x00000000008e4500) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETLASTUSEDBYE, 0x00000000008e454c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETLOCALFLOATE, 0x00000000008e49a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETLOCKKEYTAGE, 0x00000000008e420c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETLOCKLOCKDCE, 0x00000000008e4200) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETMODULENAMEE, 0x00000000008e41b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETNEXTEFFECTE, 0x00000000008e491c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETOBJECTSEENE, 0x00000000008e45f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETOBJECTTYPEE, 0x00000000008e48cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETOBJECTUUIDE, 0x00000000008e3c74) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETPORTRAITIDE, 0x00000000008e3d78) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETRACIALTYPEE, 0x00000000008e48c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETRANDOMUUIDE, 0x00000000008e3c78) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETREPUTATIONE, 0x00000000008e4734) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETSTOLENFLAGE, 0x00000000008e4144) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETSTRINGLEFTE, 0x00000000008e4978) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETTIMEMINUTEE, 0x00000000008e4a30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETTIMESECONDE, 0x00000000008e4a2c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_GETTRAPKEYTAGE, 0x00000000008e421c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_ISEFFECTVALIDE, 0x00000000008e4914) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_JSON_AS_FLOATE, 0x00000000008e3b1c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_JSON_GET_TYPEE, 0x00000000008e3b4c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_MAGICALEFFECTE, 0x00000000008e48b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_NUIGETNTHBINDE, 0x00000000008e3a70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_OPENINVENTORYE, 0x00000000008e3f80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_PLAYANIMATIONE, 0x00000000008e45c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_PLAYVOICECHATE, 0x00000000008e43e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_POPUPGUIPANELE, 0x00000000008e4464) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_PRINTLOGENTRYE, 0x00000000008e41b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SETACTIONMODEE, 0x00000000008e3ef4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SETCAMERAMODEE, 0x00000000008e4294) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SETIDENTIFIEDE, 0x00000000008e4540) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SETLOCALFLOATE, 0x00000000008e4994) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SETLOCKKEYTAGE, 0x00000000008e3df8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SETLOCKLOCKDCE, 0x00000000008e3dec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SETPORTRAITIDE, 0x00000000008e3d74) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SETSTOLENFLAGE, 0x00000000008e3e5c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SETTRAPKEYTAGE, 0x00000000008e3ddc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SQLBINDOBJECTE, 0x00000000008e3bf0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SQLBINDSTRINGE, 0x00000000008e3bf8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_SQLBINDVECTORE, 0x00000000008e3bf4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_STRINGTOFLOATE, 0x00000000008e46d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_VECTORTOANGLEE, 0x00000000008e4830) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21COMMAND_YARDSTOMETERSE, 0x00000000008e4708) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21DebugGUISendMessageToEPci, 0x00000000003fb2e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandEndGameEii, 0x0000000000423e70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandGetAreaEii, 0x0000000000405210) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandGetGoldEii, 0x00000000004222c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandGetNameEii, 0x0000000000415080) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandGetStatEii, 0x0000000000403910) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandNothingEii, 0x0000000000440b20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandSetFadeEii, 0x0000000000429220) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandSetLikeEii, 0x0000000000420800) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandSetNameEii, 0x000000000042a8b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandSetTimeEii, 0x0000000000400f60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandSqlBindEii, 0x000000000044b6b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandSqlStepEii, 0x000000000044ac30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21ExecuteCommandVibrateEii, 0x000000000042b910) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands21GetTableFromArmorPartEi, 0x0000000000434fc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_ACTIONGIVEITEME, 0x00000000008e4858) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_ACTIONOPENDOORE, 0x00000000008e49c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_ACTIONTAKEITEME, 0x00000000008e4854) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_ACTIONUSESKILLE, 0x00000000008e45f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_ACTIVATEPORTALE, 0x00000000008e430c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_CSWY_CONSTRAINE, 0x00000000008e3ba0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_DELETELOCALINTE, 0x00000000008e4650) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_EFFECTCONFUSEDE, 0x00000000008e4800) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_EFFECTDARKNESSE, 0x00000000008e4348) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_EFFECTENTANGLEE, 0x00000000008e486c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_EFFECTETHEREALE, 0x00000000008e3f58) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_EFFECTIMMUNITYE, 0x00000000008e4630) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_EFFECTPARALYZEE, 0x00000000008e4824) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_EFFECTTIMESTOPE, 0x00000000008e4328) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETCALENDARDAYE, 0x00000000008e4a38) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETCAMPAIGNINTE, 0x00000000008e4124) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETCASTERLEVELE, 0x00000000008e4924) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETCOMMANDABLEE, 0x00000000008e47e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETDESCRIPTIONE, 0x00000000008e3d64) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETEFFECTFLOATE, 0x00000000008e3bc4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETEVENTSCRIPTE, 0x00000000008e3ca0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETFACTIONGOLDE, 0x00000000008e4790) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETFIRSTEFFECTE, 0x00000000008e4920) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETISINTRIGGERE, 0x00000000008e3e74) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETISLISTENINGE, 0x00000000008e47bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETITEMACVALUEE, 0x00000000008e4430) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETITEMCHARGESE, 0x00000000008e40f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETLASTDAMAGERE, 0x00000000008e450c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETLASTSPEAKERE, 0x00000000008e467c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETLOCALOBJECTE, 0x00000000008e499c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETLOCALSTRINGE, 0x00000000008e49a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETMAXHENCHMENE, 0x00000000008e3ec8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETOBJECTBYTAGE, 0x00000000008e4754) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETOBJECTHEARDE, 0x00000000008e45ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETPCIPADDRESSE, 0x00000000008e44ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETSCRIPTPARAME, 0x00000000008e3c4c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETSPELLSAVEDCE, 0x00000000008e48b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETSTEALTHMODEE, 0x00000000008e417c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETSTRINGRIGHTE, 0x00000000008e497c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETTRAPCREATORE, 0x00000000008e4220) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETTRAPFLAGGEDE, 0x00000000008e422c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETTRAPONESHOTE, 0x00000000008e4224) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_GETUSEABLEFLAGE, 0x00000000008e4148) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_HIDEEFFECTICONE, 0x00000000008e3b7c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_HOURSTOSECONDSE, 0x00000000008e488c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_INTTOHEXSTRINGE, 0x00000000008e4444) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_ITEMEFFECTTRAPE, 0x00000000008e3fdc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_JSON_ARRAY_DELE, 0x00000000008e3afc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_JSON_ARRAY_GETE, 0x00000000008e3b08) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_JSON_ARRAY_SETE, 0x00000000008e3b04) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_JSON_AS_STRINGE, 0x00000000008e3b24) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_JSON_GET_ERRORE, 0x00000000008e3b44) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_JSON_TO_OBJECTE, 0x00000000008e3af4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_JUMPTOLOCATIONE, 0x00000000008e4590) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_NUIGETUSERDATAE, 0x00000000008e3a68) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_NUIGETWINDOWIDE, 0x00000000008e3a88) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_NUISETUSERDATAE, 0x00000000008e3a64) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_OBJECT_TO_JSONE, 0x00000000008e3af8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_OBJECTTOSTRINGE, 0x00000000008e4634) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_REMOVEHENCHMANE, 0x00000000008e44bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETCAMPAIGNINTE, 0x00000000008e413c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETCOMMANDABLEE, 0x00000000008e47ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETCUSTOMTOKENE, 0x00000000008e4604) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETDESCRIPTIONE, 0x00000000008e3d60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETEVENTSCRIPTE, 0x00000000008e3c9c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETFACINGPOINTE, 0x00000000008e4838) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETITEMCHARGESE, 0x00000000008e40f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETLOCALOBJECTE, 0x00000000008e498c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETLOCALSTRINGE, 0x00000000008e4990) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETMAXHENCHMENE, 0x00000000008e3ecc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETSCRIPTPARAME, 0x00000000008e3c48) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETTLKOVERRIDEE, 0x00000000008e3b90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETTRAPONESHOTE, 0x00000000008e3de0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SETUSEABLEFLAGE, 0x00000000008e3d68) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_STARTNEWMODULEE, 0x00000000008e4280) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_STOREGETIDCOSTE, 0x00000000008e3e88) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_STOREGETMAXBUYE, 0x00000000008e3e90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_STORESETIDCOSTE, 0x00000000008e3e84) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_STORESETMAXBUYE, 0x00000000008e3e8c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_STRINGTOOBJECTE, 0x00000000008e3bd4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_SUMMONFAMILIARE, 0x00000000008e4538) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22COMMAND_TURNSTOSECONDSE, 0x00000000008e4888) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22DebugGUIGetMessageFromEPPcPi, 0x000000000042da60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandCopyItemEii, 0x0000000000425720) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandGetColorEii, 0x00000000003fccc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandGetDeityEii, 0x000000000040d120) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandGetIsDayEii, 0x0000000000400750) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandLocationEii, 0x000000000040ebd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandOpenDoorEii, 0x000000000040c290) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandRollDiceEii, 0x0000000000415770) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandSetColorEii, 0x00000000003fce50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandSetDeityEii, 0x00000000004039c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandStopFadeEii, 0x0000000000429350) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandStoreGetEii, 0x000000000042a210) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands22ExecuteCommandStoreSetEii, 0x000000000042a2f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_ACTIONCLOSEDOORE, 0x00000000008e49c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_ACTIONDOCOMMANDE, 0x00000000008e45dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_ACTIONEQUIPITEME, 0x00000000008e49f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_ADDITEMPROPERTYE, 0x00000000008e40f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_ADJUSTALIGNMENTE, 0x00000000008e4750) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_CAMERALOCKPITCHE, 0x00000000008e3d98) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_CLEARALLACTIONSE, 0x00000000008e4a50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_DELETELOCALCSWYE, 0x00000000008e3ba8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_DELETELOCALJSONE, 0x00000000008e3ad8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_EFFECTBLINDNESSE, 0x00000000008e4324) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_EFFECTDISAPPEARE, 0x00000000008e42f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_EFFECTDOMINATEDE, 0x00000000008e47f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_EFFECTKNOCKDOWNE, 0x00000000008e485c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_EFFECTPOLYMORPHE, 0x00000000008e4338) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_EFFECTRUNSCRIPTE, 0x00000000008e3b88) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_EFFECTSANCTUARYE, 0x00000000008e4334) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETABILITYSCOREE, 0x00000000008e4848) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETATTACKTARGETE, 0x00000000008e4584) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETBASEITEMTYPEE, 0x00000000008e4440) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETBLOCKINGDOORE, 0x00000000008e4534) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETCALENDARYEARE, 0x00000000008e4a40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETCAMPAIGNJSONE, 0x00000000008e3ac8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETCREATUREPARTE, 0x00000000008e3e14) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETCREATURESIZEE, 0x00000000008e42f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETCUTSCENEMODEE, 0x00000000008e3e40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETEFFECTOBJECTE, 0x00000000008e3bbc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETEFFECTSTRINGE, 0x00000000008e3bc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETEFFECTVECTORE, 0x00000000008e3bb8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETFACTIONEQUALE, 0x00000000008e47c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETFAMILIARNAMEE, 0x00000000008e42a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETFOOTSTEPTYPEE, 0x00000000008e3e24) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETGROUNDHEIGHTE, 0x00000000008e3cd8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETHASINVENTORYE, 0x00000000008e418c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETIDFROMTALENTE, 0x00000000008e44c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETINFINITEFLAGE, 0x00000000008e3d88) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETLASTATTACKERE, 0x00000000008e49e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETLASTCLOSEDBYE, 0x00000000008e4664) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETLASTDISARMEDE, 0x00000000008e4508) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETLASTOPENEDBYE, 0x00000000008e4494) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETLASTPCRESTEDE, 0x00000000008e428c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETLASTUNLOCKEDE, 0x00000000008e44fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETLEVELBYCLASSE, 0x00000000008e4518) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETLOCKLOCKABLEE, 0x00000000008e4208) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETLOCKUNLOCKDCE, 0x00000000008e4204) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETMAXHITPOINTSE, 0x00000000008e49ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETMOVEMENTRATEE, 0x00000000008e42b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETOBJECTBYUUIDE, 0x00000000008e3c6c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETPCCHATVOLUMEE, 0x00000000008e3d54) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETPCPLAYERNAMEE, 0x00000000008e44a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETSTRINGLENGTHE, 0x00000000008e4988) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETTILEEXPLOREDE, 0x00000000008e3ce8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETTRAPBASETYPEE, 0x00000000008e4228) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETTRAPDETECTDCE, 0x00000000008e4214) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETTRAPDISARMDCE, 0x00000000008e4218) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETTRAPISACTIVEE, 0x00000000008e3da0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_GETWEAPONRANGEDE, 0x00000000008e4278) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_ITEMEFFECTHASTEE, 0x00000000008e4058) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_ITEMEFFECTLIGHTE, 0x00000000008e4038) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_JSON_GET_LENGTHE, 0x00000000008e3b48) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_JSON_OBJECT_DELE, 0x00000000008e3b0c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_JSON_OBJECT_GETE, 0x00000000008e3b14) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_JSON_OBJECT_SETE, 0x00000000008e3b10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_LEVELUPHENCHMANE, 0x00000000008e3f74) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_MUSICBATTLEPLAYE, 0x00000000008e43bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_MUSICBATTLESTOPE, 0x00000000008e43b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_NUICREATERESREFE, 0x00000000008e3aac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_NUIGETEVENTTYPEE, 0x00000000008e3a94) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_NUIGETNTHWINDOWE, 0x00000000008e3a74) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_NUISETBINDWATCHE, 0x00000000008e3a78) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_REMOVEFROMPARTYE, 0x00000000008e4180) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_ROUNDSTOSECONDSE, 0x00000000008e4890) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SENDMESSAGETOPCE, 0x00000000008e449c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETCAMERAFACINGE, 0x00000000008e49c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETCAMERAHEIGHTE, 0x00000000008e3e54) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETCAMPAIGNJSONE, 0x00000000008e3acc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETCREATUREPARTE, 0x00000000008e3e10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETCUTSCENEMODEE, 0x00000000008e3fa4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETFOOTSTEPTYPEE, 0x00000000008e3e20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETINFINITEFLAGE, 0x00000000008e3d84) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETLOCKLOCKABLEE, 0x00000000008e3df4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETLOCKUNLOCKDCE, 0x00000000008e3df0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETPCCHATVOLUMEE, 0x00000000008e3d4c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETTILEEXPLOREDE, 0x00000000008e3cec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETTRAPDETECTDCE, 0x00000000008e3dd4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETTRAPDETECTEDE, 0x00000000008e41dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETTRAPDISABLEDE, 0x00000000008e41c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETTRAPDISARMDCE, 0x00000000008e3dd8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SETTRAPISACTIVEE, 0x00000000008e3d9c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SOUNDOBJECTPLAYE, 0x00000000008e4400) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_SOUNDOBJECTSTOPE, 0x00000000008e43fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_TAGITEMPROPERTYE, 0x00000000008e3d18) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_VECTORMAGNITUDEE, 0x00000000008e48d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23COMMAND_VECTORNORMALIZEE, 0x00000000008e4850) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandActionSitEii, 0x0000000000424460) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandCassowaryEii, 0x000000000037ee10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandCastSpellEii, 0x0000000000402e20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandCloseDoorEii, 0x000000000040c370) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandDeleteVarEii, 0x000000000041bf50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandEquipItemEii, 0x0000000000408d90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandForceRestEii, 0x000000000042a570) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetDomainEii, 0x00000000004251c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetEffectEii, 0x0000000000407980) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetFacingEii, 0x0000000000408260) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetIsDawnEii, 0x00000000004007f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetIsDuskEii, 0x0000000000400840) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetIsOpenEii, 0x0000000000422860) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetLockedEii, 0x00000000003ffc90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetMasterEii, 0x00000000004060d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetModuleEii, 0x00000000004051c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetResRefEii, 0x000000000040df40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetSkyBoxEii, 0x000000000042efb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandGetWeightEii, 0x0000000000429880) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandIsAIStateEii, 0x000000000040a150) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandOpenStoreEii, 0x00000000004210a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandPlaySoundEii, 0x0000000000401700) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandSetFacingEii, 0x0000000000400450) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandSetLockedEii, 0x00000000003ffd80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandSetSkyBoxEii, 0x000000000042ec30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandTagEffectEii, 0x000000000042aec0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands23ExecuteCommandVoiceChatEii, 0x00000000004223b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_ACTIONPICKUPITEME, 0x00000000008e49ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_ACTIONRANDOMWALKE, 0x00000000008e4a24) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_ADJUSTREPUTATIONE, 0x00000000008e4730) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_AMBIENTSOUNDPLAYE, 0x00000000008e43b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_AMBIENTSOUNDSTOPE, 0x00000000008e43ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_DELETELOCALFLOATE, 0x00000000008e464c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_EFFECTACDECREASEE, 0x00000000008e436c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_EFFECTACINCREASEE, 0x00000000008e48a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_EFFECTFRIGHTENEDE, 0x00000000008e47fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_EFFECTMISSCHANCEE, 0x00000000008e4300) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_EFFECTREGENERATEE, 0x00000000008e47e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_EFFECTTRUESEEINGE, 0x00000000008e4330) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_EVENTSPELLCASTATE, 0x00000000008e46a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_EVENTUSERDEFINEDE, 0x00000000008e4864) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETASSOCIATETYPEE, 0x00000000008e3ec4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETCALENDARMONTHE, 0x00000000008e4a3c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETCAMPAIGNFLOATE, 0x00000000008e4128) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETCURRENTACTIONE, 0x00000000008e424c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETDROPPABLEFLAGE, 0x00000000008e414c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETEFFECTCREATORE, 0x00000000008e4908) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETEFFECTINTEGERE, 0x00000000008e3bc8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETEFFECTSPELLIDE, 0x00000000008e45b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETEFFECTSUBTYPEE, 0x00000000008e490c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETEXITINGOBJECTE, 0x00000000008e4a0c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETFACTIONBESTACE, 0x00000000008e4770) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETFACTIONLEADERE, 0x00000000008e41ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETGOODEVILVALUEE, 0x00000000008e4880) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETHASFEATEFFECTE, 0x00000000008e41f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETISAREANATURALE, 0x00000000008e3f20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETISDMPOSSESSEDE, 0x00000000008e3f28) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETISOBJECTVALIDE, 0x00000000008e49cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETISTALENTVALIDE, 0x00000000008e44d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETITEMACTIVATEDE, 0x00000000008e4398) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETITEMACTIVATORE, 0x00000000008e4394) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETITEMPOSSESSORE, 0x00000000008e4a00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETITEMSTACKSIZEE, 0x00000000008e4100) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETLASTDISTURBEDE, 0x00000000008e4504) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETLASTPERCEIVEDE, 0x00000000008e4674) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETLAWCHAOSVALUEE, 0x00000000008e4884) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETLOCALLOCATIONE, 0x00000000008e4810) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETMETAMAGICFEATE, 0x00000000008e48d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETMUSICDAYTRACKE, 0x00000000008e41bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETNEARESTOBJECTE, 0x00000000008e46e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETPCCHATMESSAGEE, 0x00000000008e3d58) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETPCCHATSPEAKERE, 0x00000000008e3d5c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETPCLEVELLINGUPE, 0x00000000008e41fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETPCPUBLICCDKEYE, 0x00000000008e44b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETSTARTLOCATIONE, 0x00000000008e4408) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETTILESETRESREFE, 0x00000000008e3dbc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GETWAYPOINTBYTAGE, 0x00000000008e4760) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_GIVEXPTOCREATUREE, 0x00000000008e4450) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_ISINCONVERSATIONE, 0x00000000008e4380) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_ITEMEFFECTCUSTOME, 0x00000000008e3b8c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_ITEMEFFECTVISUALE, 0x00000000008e3ee8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_JSON_OBJECT_KEYSE, 0x00000000008e3b18) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_SETCAMPAIGNFLOATE, 0x00000000008e4140) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_SETDROPPABLEFLAGE, 0x00000000008e3f70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_SETISDESTROYABLEE, 0x00000000008e4568) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_SETITEMSTACKSIZEE, 0x00000000008e40fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_SETLISTENPATTERNE, 0x00000000008e47b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_SETLOCALLOCATIONE, 0x00000000008e4814) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_SETMAPPINENABLEDE, 0x00000000008e446c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_SETPCCHATMESSAGEE, 0x00000000008e3d50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_SQLRESETDATABASEE, 0x00000000008e3c10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_TEMPLATE_TO_JSONE, 0x00000000008e3ab8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_TOUCHATTACKMELEEE, 0x00000000008e482c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24COMMAND_VERSUSTRAPEFFECTE, 0x00000000008e44e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24CopyGameDefinedStructureEiPv, 0x000000000043eb10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandActionRestEii, 0x0000000000421e80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandAddToPartyEii, 0x000000000041e900) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandCopyObjectEii, 0x000000000043a0e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandEffectBeamEii, 0x0000000000418ca0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandEffectHealEii, 0x000000000040f0b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandEffectIconEii, 0x0000000000413490) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandFloatToIntEii, 0x00000000003fbb30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandGetAILevelEii, 0x0000000000403880) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandGetHasFeatEii, 0x000000000041d5d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandGetHitDiceEii, 0x00000000004181a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandGetIsNightEii, 0x00000000004007a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandGetSpellIdEii, 0x00000000003ff0c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandGetSubRaceEii, 0x000000000040d230) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandGetWeatherEii, 0x00000000003fc1f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandGetXPScaleEii, 0x00000000004009a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandIntToFloatEii, 0x0000000000407e40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandLockCameraEii, 0x000000000042a760) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandPickUpItemEii, 0x00000000004098b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandPostStringEii, 0x000000000042bad0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandPrintFloatEii, 0x00000000003fb8e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandRandomNameEii, 0x00000000004406f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandSetAILevelEii, 0x000000000041e610) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandSetDislikeEii, 0x0000000000420980) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandSetSubRaceEii, 0x0000000000403ad0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandSetSubTypeEii, 0x0000000000415b30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandSetWeatherEii, 0x0000000000423c70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandSetXPScaleEii, 0x00000000004009f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandSqlPrepareEii, 0x000000000044af50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24ExecuteCommandTestStringEii, 0x0000000000418920) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24LoadGameDefinedStructureEiPPvP7CResGFFP10CResStruct, 0x000000000043fd50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands24SaveGameDefinedStructureEiPvP7CResGFFP10CResStruct, 0x000000000043c7d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_ACTIONPUTDOWNITEME, 0x00000000008e49e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_ACTIONSPEAKSTRINGE, 0x00000000008e49d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_ACTIONUNEQUIPITEME, 0x00000000008e49f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_BEGINCONVERSATIONE, 0x00000000008e4678) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_COPYITEMANDMODIFYE, 0x00000000008e3f08) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_DECREMENTFEATUSESE, 0x00000000008e4164) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_DELETELOCALOBJECTE, 0x00000000008e4644) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_DELETELOCALSTRINGE, 0x00000000008e4648) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_DOPLACEABLEACTIONE, 0x00000000008e41e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_DOWHIRLWINDATTACKE, 0x00000000008e3f60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_EFFECTCONCEALMENTE, 0x00000000008e434c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_EFFECTCSDOMINATEDE, 0x00000000008e4104) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_EFFECTLINKEFFECTSE, 0x00000000008e4758) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_EFFECTULTRAVISIONE, 0x00000000008e4340) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_EVENTACTIVATEITEME, 0x00000000008e43d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_EVENTCONVERSATIONE, 0x00000000008e45d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETAPPEARANCETYPEE, 0x00000000008e4170) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETCAMPAIGNSTRINGE, 0x00000000008e4118) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETCAMPAIGNVECTORE, 0x00000000008e4120) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETCLICKINGOBJECTE, 0x00000000008e455c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETEFFECTDURATIONE, 0x00000000008e3d24) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETENTERINGOBJECTE, 0x00000000008e4a10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETFACTIONWORSTACE, 0x00000000008e4774) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETGAMEDIFFICULTYE, 0x00000000008e4270) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETGOLDPIECEVALUEE, 0x00000000008e4598) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETHASSPELLEFFECTE, 0x00000000008e45b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETISAREAINTERIORE, 0x00000000008e3f44) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETITEMAPPEARANCEE, 0x00000000008e3f04) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETITEMCURSEDFLAGE, 0x00000000008e3ed4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETLASTATTACKMODEE, 0x00000000008e457c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETLASTATTACKTYPEE, 0x00000000008e4580) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETLASTPLAYERDIEDE, 0x00000000008e45e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETLASTWEAPONUSEDE, 0x00000000008e4554) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETMODULEITEMLOSTE, 0x00000000008e45e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETPLAYERLANGUAGEE, 0x00000000008e3ac0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETPLAYERPLATFORME, 0x00000000008e3abc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETPORTRAITRESREFE, 0x00000000008e3d70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETSPECIALIZATIONE, 0x00000000008e3c5c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETSTRINGBYSTRREFE, 0x00000000008e46b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETTRAPDETECTABLEE, 0x00000000008e4234) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETTRAPDETECTEDBYE, 0x00000000008e4230) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETTRAPDISARMABLEE, 0x00000000008e4238) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_GETTYPEFROMTALENTE, 0x00000000008e44cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_ITEMEFFECTACBONUSE, 0x00000000008e40d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_ITEMEFFECTQUALITYE, 0x00000000008e3d3c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_JSON_ARRAY_INSERTE, 0x00000000008e3b00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_LINEOFSIGHTOBJECTE, 0x00000000008e3eb4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_LINEOFSIGHTVECTORE, 0x00000000008e3eb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_MUSICBATTLECHANGEE, 0x00000000008e43b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_NUIGETEVENTPLAYERE, 0x00000000008e3a9c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_NUIGETEVENTWINDOWE, 0x00000000008e3a98) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_PLAYSOUNDBYSTRREFE, 0x00000000008e3f34) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_SETCAMPAIGNSTRINGE, 0x00000000008e4130) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_SETCAMPAIGNVECTORE, 0x00000000008e4138) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_SETITEMCURSEDFLAGE, 0x00000000008e3ed0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_SETPORTRAITRESREFE, 0x00000000008e3d6c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_SETTRAPDETECTABLEE, 0x00000000008e3de4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_SETTRAPDISARMABLEE, 0x00000000008e3de8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_STORECAMERAFACINGE, 0x00000000008e3f7c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_TOUCHATTACKRANGEDE, 0x00000000008e4828) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_UNLOCKACHIEVEMENTE, 0x00000000008e3c80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25COMMAND_UNPOSSESSFAMILIARE, 0x00000000008e3f48) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandBlackScreenEii, 0x00000000004293f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandEffectSwarmEii, 0x0000000000413a20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetAreaSizeEii, 0x0000000000401270) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetDayTrackEii, 0x00000000003fe750) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetEmotionsEii, 0x0000000000409fb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetFogColorEii, 0x000000000042f0f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetHardnessEii, 0x00000000003fd270) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetHasSkillEii, 0x000000000041d700) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetHasSpellEii, 0x0000000000420d50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetHenchmanEii, 0x000000000041f9e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetImmortalEii, 0x00000000004048e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetIsImmuneEii, 0x000000000041d260) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetLocationEii, 0x00000000004073f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetLockInfoEii, 0x000000000040d700) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetLootableEii, 0x00000000004047c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetPlotFlagEii, 0x00000000003fc380) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetPositionEii, 0x0000000000407110) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetTimeHourEii, 0x0000000000401170) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandGetTrapInfoEii, 0x0000000000436930) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandIntToStringEii, 0x0000000000414ca0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandIsListeningEii, 0x00000000003feec0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandLineOfSightEii, 0x00000000004163f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandMoveToPointEii, 0x0000000000402b30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandMusicBattleEii, 0x00000000003fc0d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandPrintObjectEii, 0x00000000003fbba0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandPrintStringEii, 0x00000000003fb6e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandPrintVectorEii, 0x00000000003fe900) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandPutDownItemEii, 0x0000000000409950) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandResistSpellEii, 0x00000000004307b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSavingThrowEii, 0x00000000004158e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSetAreaWindEii, 0x000000000042ca40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSetCalendarEii, 0x0000000000400d40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSetFogColorEii, 0x000000000042eda0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSetHardnessEii, 0x00000000003fd350) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSetImmortalEii, 0x0000000000404850) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSetLockInfoEii, 0x00000000003fd840) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSetLootableEii, 0x000000000041e830) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSetPlotFlagEii, 0x000000000040a570) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSetTrapInfoEii, 0x00000000003fdf80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSignalEventEii, 0x0000000000401bb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSpeakStringEii, 0x000000000040a830) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSpeakStrRefEii, 0x000000000041aab0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandSqlGetErrorEii, 0x000000000044aa50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands25ExecuteCommandUnequipItemEii, 0x00000000004097d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_ACTIONCOUNTERSPELLE, 0x00000000008e419c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_ACTIONJUMPTOOBJECTE, 0x00000000008e4764) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_ACTIONMOVETOOBJECTE, 0x00000000008e4a1c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_APPLYEFFECTATPOINTE, 0x00000000008e4714) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_CAMERALOCKDISTANCEE, 0x00000000008e3d94) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_CREATEITEMONOBJECTE, 0x00000000008e49f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_CREATETRAPONOBJECTE, 0x00000000008e3dcc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_DECREMENTSPELLUSESE, 0x00000000008e4160) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_EFFECTAREAOFEFFECTE, 0x00000000008e47c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_EFFECTDAMAGESHIELDE, 0x00000000008e42d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_EFFECTINVISIBILITYE, 0x00000000008e4350) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_EFFECTRESURRECTIONE, 0x00000000008e492c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_EFFECTSPELLFAILUREE, 0x00000000008e3fac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_EFFECTVISUALEFFECTE, 0x00000000008e47a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_ENTERTARGETINGMODEE, 0x00000000008e3c34) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_EXECUTESCRIPTCHUNKE, 0x00000000008e3c7c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_FLOATINGTEXTSTRINGE, 0x00000000008e423c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_FLOATINGTEXTSTRREFE, 0x00000000008e4240) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETABILITYMODIFIERE, 0x00000000008e4548) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETBASEATTACKBONUSE, 0x00000000008e3f88) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETCHALLENGERATINGE, 0x00000000008e42bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETCLASSBYPOSITIONE, 0x00000000008e4520) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETDISTANCEBETWEENE, 0x00000000008e4818) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETENCOUNTERACTIVEE, 0x00000000008e4624) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETITEMPOSSESSEDBYE, 0x00000000008e49fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETITEMPROPERTYTAGE, 0x00000000008e3d1c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETLASTPLAYERDYINGE, 0x00000000008e440c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETLASTSPELLCASTERE, 0x00000000008e46a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETLEVELBYPOSITIONE, 0x00000000008e451c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETLIMITSKILLBONUSE, 0x00000000008e3cc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETLOCKKEYREQUIREDE, 0x00000000008e4210) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETMUSICNIGHTTRACKE, 0x00000000008e41b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETNUMSTACKEDITEMSE, 0x00000000008e4308) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETSITTINGCREATUREE, 0x00000000008e472c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETSPELLCASTERITEME, 0x00000000008e439c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETSPELLRESISTANCEE, 0x00000000008e3ec0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETSTARTINGPACKAGEE, 0x00000000008e3e7c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETSTRINGLOWERCASEE, 0x00000000008e4980) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETSTRINGUPPERCASEE, 0x00000000008e4984) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETSURFACEMATERIALE, 0x00000000008e3cdc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETTIMEMILLISECONDE, 0x00000000008e4a28) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETTRAPRECOVERABLEE, 0x00000000008e3db8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GETWILLSAVINGTHROWE, 0x00000000008e42c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_GIVEGOLDTOCREATUREE, 0x00000000008e456c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_ITEMEFFECTIMMUNITYE, 0x00000000008e4050) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_ITEMEFFECTMATERIALE, 0x00000000008e3d40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_ITEMEFFECTNODAMAGEE, 0x00000000008e4030) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_NUIGETEVENTELEMENTE, 0x00000000008e3a90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_NUIGETEVENTPAYLOADE, 0x00000000008e3a6c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_OPENTUTORIALWINDOWE, 0x00000000008e3c68) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_POPUPDEATHGUIPANELE, 0x00000000008e41cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_REMOVEITEMPROPERTYE, 0x00000000008e40ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_RESMAN_FIND_PREFIXE, 0x00000000008e3ab0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SETBASEATTACKBONUSE, 0x00000000008e3ea8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SETENCOUNTERACTIVEE, 0x00000000008e4620) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SETLIMITSKILLBONUSE, 0x00000000008e3ca8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SETLOCKKEYREQUIREDE, 0x00000000008e3dfc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SETTEXTUREOVERRIDEE, 0x00000000008e3c64) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SETTRAPRECOVERABLEE, 0x00000000008e3db4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SETWILLSAVINGTHROWE, 0x00000000008e3dc8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SQLPREPAREQUERYOBJE, 0x00000000008e3c04) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SQLPREPAREQUERYSTRE, 0x00000000008e3c08) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SUPERNATURALEFFECTE, 0x00000000008e48b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26COMMAND_SURRENDERTOENEMIESE, 0x00000000008e4304) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26CreateGameDefinedStructureEi, 0x00000000003fae50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandAmbientSoundEii, 0x00000000004226d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandCreateObjectEii, 0x0000000000435ee0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandDelayCommandEii, 0x0000000000433a60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandDoDoorActionEii, 0x0000000000409ad0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandEffectAppearEii, 0x0000000000411e20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandEffectDamageEii, 0x0000000000413630) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandEffectPoisonEii, 0x0000000000411080) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandFloatingTextEii, 0x00000000004176d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands20ExecuteCommandGet2DAEii, 0x000000000042d610) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetAlignmentEii, 0x00000000004162a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetAssociateEii, 0x000000000041fe30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetEffectTagEii, 0x000000000040cb40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetFogAmountEii, 0x000000000042f490) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetHitpointsEii, 0x00000000003fea50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetIsRestingEii, 0x00000000004042c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetIsTrappedEii, 0x00000000003fde80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetModeStateEii, 0x0000000000424ee0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetPCSpeakerEii, 0x0000000000406b70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetPhenoTypeEii, 0x0000000000404130) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetSkillRankEii, 0x000000000041d7f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetSpellCastEii, 0x0000000000405950) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandGetSubStringEii, 0x000000000040e7e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandInsertStringEii, 0x000000000040e6f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandModuleAccessEii, 0x000000000041dbd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandMoveToObjectEii, 0x0000000000404e90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandPlayerDeviceEii, 0x0000000000468890) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandPrintIntegerEii, 0x00000000003fb320) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandRemoveEffectEii, 0x0000000000402820) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandSetFogAmountEii, 0x000000000042f2a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandSetListeningEii, 0x00000000003fee00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandSetPhenoTypeEii, 0x00000000004041e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandTalentAccessEii, 0x0000000000401ad0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands26ExecuteCommandVersusEffectEii, 0x000000000040ed30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_ACTIONPLAYANIMATIONE, 0x00000000008e49d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_APPLYEFFECTONOBJECTE, 0x00000000008e4704) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_CASTSPELLATLOCATIONE, 0x00000000008e46cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_DELETELOCALLOCATIONE, 0x00000000008e4640) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_EFFECTCUTSCENEGHOSTE, 0x00000000008e3ea0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_EFFECTMODIFYATTACKSE, 0x00000000008e42e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_EFFECTNEGATIVELEVELE, 0x00000000008e433c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_EFFECTSKILLDECREASEE, 0x00000000008e4360) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_EFFECTSKILLINCREASEE, 0x00000000008e44f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_EFFECTSPELLIMMUNITYE, 0x00000000008e4820) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_EXPORTALLCHARACTERSE, 0x00000000008e41c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_EXTRAORDINARYEFFECTE, 0x00000000008e48ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETAREAFROMLOCATIONE, 0x00000000008e46f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETCAMPAIGNLOCATIONE, 0x00000000008e411c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETCREATURETAILTYPEE, 0x00000000008e3e0c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETCREATUREWINGTYPEE, 0x00000000008e3e1c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETCURRENTHITPOINTSE, 0x00000000008e49b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETDISTANCETOOBJECTE, 0x00000000008e49d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETFACTIONAVERAGEXPE, 0x00000000008e477c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETITEMPROPERTYTYPEE, 0x00000000008e40dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETLASTGUIEVENTTYPEE, 0x00000000008e3b70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETLASTHOSTILEACTORE, 0x00000000008e41c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETLASTITEMEQUIPPEDE, 0x00000000008e3f18) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETLASTSPELLHARMFULE, 0x00000000008e43d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETLASTTILEACTIONIDE, 0x00000000008e3b60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETLASTTRAPDETECTEDE, 0x00000000008e42dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETLIMITATTACKBONUSE, 0x00000000008e3cd4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETLIMITDAMAGEBONUSE, 0x00000000008e3cd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETMATCHEDSUBSTRINGE, 0x00000000008e47ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETMODULEITEMLOSTBYE, 0x00000000008e45e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETNEXTITEMPROPERTYE, 0x00000000008e40e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETNEXTOBJECTINAREAE, 0x00000000008e48fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETTOTALDAMAGEDEALTE, 0x00000000008e4510) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETTRANSITIONTARGETE, 0x00000000008e475c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_GETTURNRESISTANCEHDE, 0x00000000008e42fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_ITEMEFFECTBONUSFEATE, 0x00000000008e40a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_ITEMEFFECTCASTSPELLE, 0x00000000008e409c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_MUSICBACKGROUNDPLAYE, 0x00000000008e43d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_MUSICBACKGROUNDSTOPE, 0x00000000008e43cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_RESTORECAMERAFACINGE, 0x00000000008e3f78) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SENDMESSAGETOALLDMSE, 0x00000000008e41a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETCAMPAIGNLOCATIONE, 0x00000000008e4134) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETCREATURETAILTYPEE, 0x00000000008e3e08) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETCREATUREWINGTYPEE, 0x00000000008e3e18) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETCURRENTHITPOINTSE, 0x00000000008e3bd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETGUIPANELDISABLEDE, 0x00000000008e3b64) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETISTEMPORARYENEMYE, 0x00000000008e4458) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETLIMITATTACKBONUSE, 0x00000000008e3cbc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETLIMITDAMAGEBONUSE, 0x00000000008e3cb8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETPANELBUTTONFLASHE, 0x00000000008e4250) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SETTRANSITIONTARGETE, 0x00000000008e3cf8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SPAWNSCRIPTDEBUGGERE, 0x00000000008e416c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_SPEAKSTRINGBYSTRREFE, 0x00000000008e3fa8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27COMMAND_STORECAMPAIGNOBJECTE, 0x00000000008e410c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27DestroyGameDefinedStructureEiPv, 0x000000000043c090) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandActionExamineEii, 0x00000000004037a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandActionUseFeatEii, 0x000000000041d920) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandActionUseItemEii, 0x000000000042c640) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandAssignCommandEii, 0x0000000000433870) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandChangeFactionEii, 0x00000000004185c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandDayNightCycleEii, 0x000000000042a140) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandDestroyObjectEii, 0x00000000003fff20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandDoTouchAttackEii, 0x0000000000417bb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandEffectComplexEii, 0x0000000000410360) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandEffectDiseaseEii, 0x0000000000411190) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandEffectPetrifyEii, 0x00000000004125b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandExecuteScriptEii, 0x0000000000400030) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandFindSubStringEii, 0x000000000040eab0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandFloatToStringEii, 0x000000000040c7b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetActionModeEii, 0x0000000000400380) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetEffectTypeEii, 0x0000000000401970) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetIdentifiedEii, 0x0000000000409270) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetIsInCombatEii, 0x00000000004044c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetIsPlayerDMEii, 0x000000000042c9a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetItemInSlotEii, 0x0000000000408880) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetLastKillerEii, 0x0000000000405490) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetLastLockedEii, 0x00000000004067a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetLastUsedByEii, 0x0000000000406900) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetModuleNameEii, 0x0000000000424be0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetNightTrackEii, 0x00000000003fe7e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetObjectTypeEii, 0x00000000003feb90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetPortraitIdEii, 0x000000000042f9c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetRacialTypeEii, 0x00000000003ff370) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetRandomUUIDEii, 0x000000000042bfc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetReputationEii, 0x0000000000409ec0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetStolenFlagEii, 0x00000000003fc590) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetStringLeftEii, 0x000000000040e260) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetTimeMinuteEii, 0x00000000004011b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandGetTimeSecondEii, 0x00000000004011f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandIsEffectValidEii, 0x00000000004022a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandItemActivatedEii, 0x00000000004076d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandNuiManagementEii, 0x000000000046ae70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandOpenInventoryEii, 0x0000000000429530) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandPlayAnimationEii, 0x000000000040b300) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandPopUpGUIPanelEii, 0x00000000004214e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandPrintLogEntryEii, 0x0000000000433420) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandSetActionModeEii, 0x00000000004002b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandSetCameraModeEii, 0x0000000000423bc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandSetIdentifiedEii, 0x000000000041eca0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandSetPortraitIdEii, 0x00000000003fbf00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27ExecuteCommandSetStolenFlagEii, 0x00000000003fc630) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27GetEngineStructureWatchViewEiPvPiPP10CExoStringS4_, 0x000000000043c9c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands27GetGameDefinedStructureNameEi, 0x00000000003faf90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ACTIONINTERACTOBJECTE, 0x00000000008e4550) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ACTIONJUMPTOLOCATIONE, 0x00000000008e471c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ACTIONMOVETOLOCATIONE, 0x00000000008e4a20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ADDJOURNALQUESTENTRYE, 0x00000000008e44b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_CREATETRAPATLOCATIONE, 0x00000000008e3dd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_EFFECTATTACKDECREASEE, 0x00000000008e4378) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_EFFECTATTACKINCREASEE, 0x00000000008e489c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_EFFECTDAMAGEDECREASEE, 0x00000000008e4374) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_EFFECTDAMAGEINCREASEE, 0x00000000008e4894) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_EFFECTDISPELMAGICALLE, 0x00000000008e4344) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_EFFECTSUMMONCREATUREE, 0x00000000008e4928) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_EXPLOREAREAFORPLAYERE, 0x00000000008e4428) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETALIGNMENTGOODEVILE, 0x00000000008e4878) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETALIGNMENTLAWCHAOSE, 0x00000000008e487c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETCREATUREHASTALENTE, 0x00000000008e45ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETDAMAGEDEALTBYTYPEE, 0x00000000008e4514) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETDIALOGSOUNDLENGTHE, 0x00000000008e3f9c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETEFFECTCASTERLEVELE, 0x00000000008e3d28) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETFIRSTITEMPROPERTYE, 0x00000000008e40e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETFIRSTOBJECTINAREAE, 0x00000000008e4900) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETISAREAABOVEGROUNDE, 0x00000000008e3f1c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETISSKILLSUCCESSFULE, 0x00000000008e3fb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETISWEAPONEFFECTIVEE, 0x00000000008e43dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETLASTRESTEVENTTYPEE, 0x00000000008e4284) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETLIMITABILITYBONUSE, 0x00000000008e3cc8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETNEXTFACTIONMEMBERE, 0x00000000008e4480) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETNEXTOBJECTINSHAPEE, 0x00000000008e4870) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETREFLEXSAVINGTHROWE, 0x00000000008e42c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_GETSPELLTARGETOBJECTE, 0x00000000008e49b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ITEMEFFECTADDITIONALE, 0x00000000008e3d38) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ITEMEFFECTDARKVISIONE, 0x00000000008e4074) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ITEMEFFECTDECREASEACE, 0x00000000008e406c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ITEMEFFECTFREEACTIONE, 0x00000000008e3fc8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ITEMEFFECTHEALERSKITE, 0x00000000008e3fb8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ITEMEFFECTONHITPROPSE, 0x00000000008e402c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ITEMEFFECTSKILLBONUSE, 0x00000000008e401c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_ITEMEFFECTTRUESEEINGE, 0x00000000008e3fd8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_REPLACEOBJECTTEXTUREE, 0x00000000008e3c14) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_RESMAN_GET_ALIAS_FORE, 0x00000000008e3ab4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_SETAREATRANSITIONBMPE, 0x00000000008e4748) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_SETISTEMPORARYFRIENDE, 0x00000000008e445c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_SETLIMITABILITYBONUSE, 0x00000000008e3cb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_SETOBJECTHILITECOLORE, 0x00000000008e3c24) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_SETOBJECTMOUSECURSORE, 0x00000000008e3c20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_SETREFLEXSAVINGTHROWE, 0x00000000008e3dc4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_SOUNDOBJECTSETVOLUMEE, 0x00000000008e43f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28COMMAND_TAKEGOLDFROMCREATUREE, 0x00000000008e4384) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandActionUseSkillEii, 0x000000000041da30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandActivatePortalEii, 0x0000000000422dd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandAreaManagementEii, 0x000000000044da70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandEffectDarknessEii, 0x00000000004118c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandEffectEtherealEii, 0x0000000000412820) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandEffectImmunityEii, 0x0000000000412b90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetBattleTrackEii, 0x00000000003fe870) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetCalendarDayEii, 0x0000000000401130) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetCampaignIntEii, 0x0000000000427340) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetCasterLevelEii, 0x00000000004304f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetCommandableEii, 0x00000000003fed40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetDescriptionEii, 0x00000000004344d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetFactionGoldEii, 0x0000000000419400) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetIsInTriggerEii, 0x0000000000404970) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetItemACValueEii, 0x0000000000421c30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetItemChargesEii, 0x00000000004095c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetLastDamagerEii, 0x00000000004055d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetLastSpeakerEii, 0x00000000004053e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetMaxHenchmenEii, 0x0000000000400890) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetNearestTrapEii, 0x0000000000406c40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetObjectByTagEii, 0x0000000000419d50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetObjectValidEii, 0x00000000003fbcb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetPCIPAddressEii, 0x0000000000420620) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetScriptParamEii, 0x000000000042c4a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetSpellSaveDCEii, 0x0000000000415a50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetStrByStrRefEii, 0x0000000000431460) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetStringRightEii, 0x000000000040e130) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandGetUseableFlagEii, 0x00000000003fddc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandHideEffectIconEii, 0x0000000000415c40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandIntToHexStringEii, 0x000000000040ca90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandLocationAccessEii, 0x0000000000408100) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandObjectToStringEii, 0x000000000040c9a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetCampaignIntEii, 0x00000000004260a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetCommandableEii, 0x00000000003fec60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetCustomTokenEii, 0x0000000000419f20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetDescriptionEii, 0x000000000040e390) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetItemChargesEii, 0x0000000000428680) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetMaxHenchmenEii, 0x00000000004008e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetSavingThrowEii, 0x00000000003fd610) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetScriptParamEii, 0x000000000042c570) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetTlkOverrideEii, 0x000000000042cf10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandSetUseableFlagEii, 0x000000000042ad70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandStartNewModuleEii, 0x0000000000423dc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandStringToObjectEii, 0x000000000041c720) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28ExecuteCommandUUIDManagementEii, 0x000000000042c040) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands28GetEqualGameDefinedStructureEiPvS0_, 0x0000000000435a90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_ACTIONUSEITEMONOBJECTE, 0x00000000008e3c3c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_AMBIENTSOUNDCHANGEDAYE, 0x00000000008e43a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_EFFECTABILITYDECREASEE, 0x00000000008e437c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_EFFECTABILITYINCREASEE, 0x00000000008e4934) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_EFFECTDAMAGEREDUCTIONE, 0x00000000008e4898) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_EFFECTDISAPPEARAPPEARE, 0x00000000008e42f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_EFFECTDISPELMAGICBESTE, 0x00000000008e4310) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_EFFECTSEEINVISIBILITYE, 0x00000000008e432c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_EXPORTSINGLECHARACTERE, 0x00000000008e3f38) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETARCANESPELLFAILUREE, 0x00000000008e3ef0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETAUTOMAPAUTOEXPLOREE, 0x00000000008e3ce0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETCREATURETALENTBESTE, 0x00000000008e45a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETEFFECTDURATIONTYPEE, 0x00000000008e4910) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETENCOUNTERSPAWNSMAXE, 0x00000000008e461c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETFACINGFROMLOCATIONE, 0x00000000008e46f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETFIRSTFACTIONMEMBERE, 0x00000000008e4484) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETFIRSTOBJECTINSHAPEE, 0x00000000008e4874) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETHIDDENWHENEQUIPPEDE, 0x00000000008e3cf0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETITEMPROPERTYPARAM1E, 0x00000000008e3e68) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETLASTGUIEVENTOBJECTE, 0x00000000008e3b68) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETLASTGUIEVENTPLAYERE, 0x00000000008e3b74) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETLASTITEMEQUIPPEDBYE, 0x00000000008e3f14) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETLASTITEMUNEQUIPPEDE, 0x00000000008e3f10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETLASTPERCEPTIONSEENE, 0x00000000008e4668) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETLASTSPELLCASTCLASSE, 0x00000000008e3eac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETMODULEITEMACQUIREDE, 0x00000000008e460c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETNEARESTOBJECTBYTAGE, 0x00000000008e46e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETPICKPOCKETABLEFLAGE, 0x00000000008e3e2c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_GETPLAYERBUILDVERSIONE, 0x00000000008e3c54) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_ITEMEFFECTATTACKBONUSE, 0x00000000008e400c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_ITEMEFFECTDAMAGEBONUSE, 0x00000000008e4098) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_ITEMEFFECTHOLYAVENGERE, 0x00000000008e4054) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_ITEMEFFECTSPECIALWALKE, 0x00000000008e3fbc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_NUIGETEVENTARRAYINDEXE, 0x00000000008e3a8c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_SETAUTOMAPAUTOEXPLOREE, 0x00000000008e3ce4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_SETENCOUNTERSPAWNSMAXE, 0x00000000008e4618) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_SETHIDDENWHENEQUIPPEDE, 0x00000000008e3cf4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_SETISTEMPORARYNEUTRALE, 0x00000000008e4454) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_SETPICKPOCKETABLEFLAGE, 0x00000000008e3e28) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_SETTILEMAINLIGHTCOLORE, 0x00000000008e426c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_SUMMONANIMALCOMPANIONE, 0x00000000008e453c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29COMMAND_VERSUSALIGNMENTEFFECTE, 0x00000000008e44e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandActionDoCommandEii, 0x00000000004336e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandActionUseTalentEii, 0x000000000041e0f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandAddItemPropertyEii, 0x00000000004289d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandAdjustAlignmentEii, 0x000000000041d090) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandAssociateAccessEii, 0x000000000041ff50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandClearAllActionsEii, 0x0000000000400110) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandEffectBlindnessEii, 0x0000000000411c60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandEffectDisappearEii, 0x0000000000411d10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandEffectRunScriptEii, 0x0000000000413d60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandEffectSanctuaryEii, 0x0000000000411410) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetAbilityScoreEii, 0x000000000041c1b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetAttackTargetEii, 0x0000000000406200) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetBaseItemTypeEii, 0x0000000000408f10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetBlockingDoorEii, 0x00000000004063c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetCalendarYearEii, 0x00000000004010b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetCampaignJsonEii, 0x000000000044fcc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetCreatureSizeEii, 0x0000000000404360) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetCutsceneModeEii, 0x000000000040c4c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetFactionEqualEii, 0x00000000004184f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetFamiliarNameEii, 0x000000000040d340) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetFootstepTypeEii, 0x0000000000425be0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetGroundHeightEii, 0x000000000041aca0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetHasInventoryEii, 0x00000000003fdcb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetInfiniteFlagEii, 0x00000000003fc440) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetItemPropertyEii, 0x0000000000407b60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetLastAttackerEii, 0x0000000000405510) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetLastClosedByEii, 0x0000000000406aa0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetLastDisarmedEii, 0x00000000004066d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetLastEquippedEii, 0x0000000000405b40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetLastOpenedByEii, 0x00000000004069d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetLastPCRestedEii, 0x0000000000405be0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetLastUnlockedEii, 0x0000000000406850) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetMovementRateEii, 0x0000000000403c80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetObjectInAreaEii, 0x0000000000414d90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetPCChatVolumeEii, 0x0000000000400b60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetPCPlayerNameEii, 0x0000000000420120) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetStringLengthEii, 0x00000000003fb840) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandGetWeaponRangedEii, 0x0000000000408fa0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandLevelUpHenchmanEii, 0x0000000000429700) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandMusicBackgroundEii, 0x00000000003fbfb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandRemoveFromPartyEii, 0x0000000000424e00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSendMessageToPCEii, 0x0000000000403660) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSetCameraHeightEii, 0x000000000042a6a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSetCampaignJsonEii, 0x000000000044ee60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSetCutsceneModeEii, 0x0000000000428f70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSetFootstepTypeEii, 0x0000000000425a90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSetInfiniteFlagEii, 0x00000000003fc4e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSetListenStringEii, 0x00000000004187d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSetPCChatVolumeEii, 0x0000000000400c20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSoundObjectPlayEii, 0x0000000000422080) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSoundObjectStopEii, 0x0000000000422100) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandSummonAssociateEii, 0x000000000041ed30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandTagItemPropertyEii, 0x00000000004138e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandTimeConversionsEii, 0x0000000000407eb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandVectorMagnitudeEii, 0x000000000040bdf0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands29ExecuteCommandVectorNormalizeEii, 0x0000000000407030) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_DELETECAMPAIGNVARIABLEE, 0x00000000008e4110) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_DOSINGLEPLAYERAUTOSAVEE, 0x00000000008e4274) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_EFFECTCUTSCENEIMMOBILEE, 0x00000000008e3e78) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_EFFECTCUTSCENEPARALYZEE, 0x00000000008e4150) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_EFFECTDAMAGERESISTANCEE, 0x00000000008e4930) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_FORCEREFRESHOBJECTUUIDE, 0x00000000008e3c70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETANIMALCOMPANIONNAMEE, 0x00000000008e42a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETAREAOFEFFECTCREATORE, 0x00000000008e4654) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETENCOUNTERDIFFICULTYE, 0x00000000008e45d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETFACTIONAVERAGELEVELE, 0x00000000008e4780) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETGOINGTOBEATTACKEDBYE, 0x00000000008e4728) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETISENCOUNTERCREATUREE, 0x00000000008e4410) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETISITEMPROPERTYVALIDE, 0x00000000008e40e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETISPOSSESSEDFAMILIARE, 0x00000000008e3f4c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETITEMHASITEMPROPERTYE, 0x00000000008e443c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETITEMPROPERTYSUBTYPEE, 0x00000000008e3efc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETLASTGUIEVENTINTEGERE, 0x00000000008e3b6c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETLASTPERCEPTIONHEARDE, 0x00000000008e4670) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETLASTRUNSCRIPTEFFECTE, 0x00000000008e3b84) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETLIMITABILITYPENALTYE, 0x00000000008e3cc4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETMATCHEDSTRINGNUMBERE, 0x00000000008e4768) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETNEARESTTRAPTOOBJECTE, 0x00000000008e42d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETNEXTITEMININVENTORYE, 0x00000000008e4524) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETPLAYERPATCHREVISIONE, 0x00000000008e3c50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETSPELLTARGETLOCATIONE, 0x00000000008e46fc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETSTRREFSOUNDDURATIONE, 0x00000000008e4188) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETTILEMAINLIGHT1COLORE, 0x00000000008e4260) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_GETTILEMAINLIGHT2COLORE, 0x00000000008e425c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_ITEMEFFECTABILITYBONUSE, 0x00000000008e40d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_ITEMEFFECTREGENERATIONE, 0x00000000008e4020) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_ITEMEFFECTTHIEVESTOOLSE, 0x00000000008e4010) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_RESTOREBASEATTACKBONUSE, 0x00000000008e3ea4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_RETRIEVECAMPAIGNOBJECTE, 0x00000000008e4108) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_SETENCOUNTERDIFFICULTYE, 0x00000000008e45d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_SETLIMITABILITYPENALTYE, 0x00000000008e3cac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_SOUNDOBJECTSETPOSITIONE, 0x00000000008e43f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30COMMAND_VERSUSRACIALTYPEEFFECTE, 0x00000000008e44e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandActionRandomWalkEii, 0x0000000000401400) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandAdjustReputationEii, 0x000000000041a2b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandEffectACDecreaseEii, 0x000000000040fa40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandEffectACIncreaseEii, 0x000000000040f850) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandEffectAreaEffectEii, 0x0000000000414490) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandEffectMissChanceEii, 0x0000000000411a00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandEffectTrueSeeingEii, 0x0000000000411960) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandEventSpellCastAtEii, 0x000000000041ad50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandEventUserDefinedEii, 0x00000000004175f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetAssociateTypeEii, 0x0000000000404680) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetCalendarMonthEii, 0x00000000004010f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetCampaignFloatEii, 0x0000000000426fc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetCurrentActionEii, 0x0000000000424240) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetDroppableFlagEii, 0x00000000003fc770) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetEffectCreatorEii, 0x0000000000405330) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetEffectSpellIdEii, 0x00000000004023a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetEffectSubTypeEii, 0x0000000000401d90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetEncounterDataEii, 0x000000000041d3b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetFactionBestACEii, 0x0000000000419ac0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetFactionLeaderEii, 0x0000000000424cc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetFactionMemberEii, 0x0000000000421240) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetHasFeatEffectEii, 0x00000000004246f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetIsAreaNaturalEii, 0x00000000003fbd40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetIsDMPossessedEii, 0x00000000004045e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetIsTalentValidEii, 0x0000000000401a20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetItemPossessorEii, 0x0000000000405de0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetItemStackSizeEii, 0x0000000000409390) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetLastDisturbedEii, 0x0000000000405740) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetLastPerceivedEii, 0x0000000000406160) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetLeavingObjectEii, 0x0000000000406410) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetMatchedStringEii, 0x0000000000439300) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetMetaMagicFeatEii, 0x00000000003fb660) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetNearestObjectEii, 0x0000000000438330) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetObjectInShapeEii, 0x0000000000416710) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetPCChatMessageEii, 0x000000000040d030) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetPCChatSpeakerEii, 0x0000000000405d90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetPCLevellingUpEii, 0x0000000000405d40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetPCPublicCDKeyEii, 0x0000000000420330) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGetWaypointByTagEii, 0x0000000000419bc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandGiveXPToCreatureEii, 0x0000000000421960) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandIsInConversationEii, 0x00000000003fc280) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandSetCampaignFloatEii, 0x0000000000425d30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandSetDroppableFlagEii, 0x00000000003fc6d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandSetEncounterDataEii, 0x000000000041d4c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandSetIsDestroyableEii, 0x000000000041e440) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandSetItemStackSizeEii, 0x0000000000409420) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandSetMapPinEnabledEii, 0x00000000004213a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandSetPCChatMessageEii, 0x0000000000400aa0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands30ExecuteCommandSqlResetDatabaseEii, 0x000000000044ab80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ACTIONCASTSPELLATOBJECTE, 0x00000000008e49b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ACTIONFORCEFOLLOWOBJECTE, 0x00000000008e47d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ACTIONFORCEMOVETOOBJECTE, 0x00000000008e4478) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ACTIONPAUSECONVERSATIONE, 0x00000000008e4740) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ACTIONSTARTCONVERSATIONE, 0x00000000008e4744) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ACTIONUSEITEMATLOCATIONE, 0x00000000008e3c38) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ACTIONUSETALENTONOBJECTE, 0x00000000008e45a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_AMBIENTSOUNDCHANGENIGHTE, 0x00000000008e43a4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_CHANGETOSTANDARDFACTIONE, 0x00000000008e4404) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_CLEARPERSONALREPUTATIONE, 0x00000000008e4460) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_DESTROYCAMPAIGNDATABASEE, 0x00000000008e412c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETATTEMPTEDSPELLTARGETE, 0x00000000008e4498) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETCREATURETALENTRANDOME, 0x00000000008e45a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETDEFENSIVECASTINGMODEE, 0x00000000008e4174) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETFACTIONWEAKESTMEMBERE, 0x00000000008e47a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETFAMILIARCREATURETYPEE, 0x00000000008e42b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETFIRSTITEMININVENTORYE, 0x00000000008e4528) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETFORTITUDESAVINGTHROWE, 0x00000000008e42c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETINVENTORYDISTURBITEME, 0x00000000008e44f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETINVENTORYDISTURBTYPEE, 0x00000000008e44f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETISCREATUREDISARMABLEE, 0x00000000008e3e60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETISDOORACTIONPOSSIBLEE, 0x00000000008e4530) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETISRACIALTYPEPLAYABLEE, 0x00000000008e4594) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETITEMPROPERTYDURATIONE, 0x00000000008e3d14) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETLASTASSOCIATECOMMANDE, 0x00000000008e4570) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETLASTITEMUNEQUIPPEDBYE, 0x00000000008e3f0c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETMODULEITEMACQUIREDBYE, 0x00000000008e3f68) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETPLAYERDEVICEPROPERTYE, 0x00000000008e3ac4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETPOSITIONFROMLOCATIONE, 0x00000000008e46f8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_GETREFLEXADJUSTEDDAMAGEE, 0x00000000008e45c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ITEMEFFECTACBONUSVSRACEE, 0x00000000008e40c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ITEMEFFECTATTACKPENALTYE, 0x00000000008e3ffc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ITEMEFFECTDAMAGEPENALTYE, 0x00000000008e4084) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ITEMEFFECTDECREASESKILLE, 0x00000000008e4068) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ITEMEFFECTMONSTERDAMAGEE, 0x00000000008e3fc4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_ITEMEFFECTUNLIMITEDAMMOE, 0x00000000008e3ff8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_MUSICBACKGROUNDSETDELAYE, 0x00000000008e43c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_RECOMPUTESTATICLIGHTINGE, 0x00000000008e4264) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_REMOVEJOURNALQUESTENTRYE, 0x00000000008e44b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_REMOVESUMMONEDASSOCIATEE, 0x00000000008e4298) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_SENDMESSAGETOPCBYSTRREFE, 0x00000000008e3f40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_SETFORTITUDESAVINGTHROWE, 0x00000000008e3dc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31COMMAND_SETTILESOURCELIGHTCOLORE, 0x00000000008e4268) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandActionJumpToPointEii, 0x0000000000404bd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandActionLockActionsEii, 0x0000000000423780) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandBeginConversationEii, 0x000000000041ae90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandCopyItemAndModifyEii, 0x0000000000435160) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandDecrementFeatUsesEii, 0x0000000000424fc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandDoWhirlwindAttackEii, 0x0000000000429960) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandEffectConcealmentEii, 0x00000000004116f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandEffectLinkEffectsEii, 0x000000000041bde0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandEffectTemporaryHPEii, 0x00000000004112a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandEffectUltravisionEii, 0x00000000004123c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandEventActivateItemEii, 0x0000000000422520) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandEventConversationEii, 0x0000000000407900) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetAppearanceTypeEii, 0x00000000003fd180) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetCampaignStringEii, 0x0000000000427ec0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetCampaignVectorEii, 0x00000000004276c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetCreatureTalentEii, 0x000000000041deb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetEffectDurationEii, 0x0000000000402680) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetEnteringObjectEii, 0x0000000000406570) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetFactionWorstACEii, 0x00000000004199c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetGameDifficultyEii, 0x00000000003fb5a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetGoldPieceValueEii, 0x000000000041e2d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetHasSpellEffectEii, 0x000000000040a360) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetIsAreaInteriorEii, 0x00000000003fbe70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetIsReactionTypeEii, 0x0000000000422c80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetItemAppearanceEii, 0x0000000000409050) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetItemCursedFlagEii, 0x00000000003fca10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetLastAttackModeEii, 0x00000000003ff820) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetLastAttackTypeEii, 0x00000000003ff670) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetLastPerceptionEii, 0x00000000003ff980) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetLastWeaponUsedEii, 0x00000000004056b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetPortraitResRefEii, 0x000000000040cc20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetSpecializationEii, 0x00000000004250b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetSpellTargetLocEii, 0x0000000000407500) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandGetTileLightColorEii, 0x0000000000424090) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandPlaySoundByStrRefEii, 0x0000000000432d90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandSetCameraLocationEii, 0x000000000040c5a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandSetCampaignStringEii, 0x0000000000426b70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandSetCampaignVectorEii, 0x0000000000426410) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandSetItemCursedFlagEii, 0x00000000003fc970) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandSetPortraitResRefEii, 0x00000000004083c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandSetTileLightColorEii, 0x0000000000402450) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandStoreCameraFacingEii, 0x000000000042db00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandStringConversionsEii, 0x000000000041a9c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandUnlockAchievementEii, 0x0000000000417980) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandUnpossessFamiliarEii, 0x0000000000429f80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands31ExecuteCommandVectorConversionsEii, 0x000000000042d4a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_ACTIONMOVEAWAYFROMOBJECTE, 0x00000000008e4a18) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_ACTIONRESUMECONVERSATIONE, 0x00000000008e473c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_AMBIENTSOUNDSETDAYVOLUMEE, 0x00000000008e4198) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_EFFECTTEMPORARYHITPOINTSE, 0x00000000008e458c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETATTEMPTEDATTACKTARGETE, 0x00000000008e44d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETCURRENTLYRUNNINGEVENTE, 0x00000000008e3bcc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETDEFAULTCLICKINGOBJECTE, 0x00000000008e3d8c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETISREACTIONTYPEHOSTILEE, 0x00000000008e4318) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETISREACTIONTYPENEUTRALE, 0x00000000008e431c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETITEMPROPERTYCOSTTABLEE, 0x00000000008e3e70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETLIMITSAVINGTHROWBONUSE, 0x00000000008e3ccc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETOBJECTVISUALTRANSFORME, 0x00000000008e3c98) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETPLACEABLEILLUMINATIONE, 0x00000000008e41f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETTILESOURCELIGHT1COLORE, 0x00000000008e4258) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_GETTILESOURCELIGHT2COLORE, 0x00000000008e4254) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_ITEMEFFECTACBONUSVSALIGNE, 0x00000000008e40cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_ITEMEFFECTDAMAGEIMMUNITYE, 0x00000000008e4088) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_ITEMEFFECTLIMITUSEBYRACEE, 0x00000000008e3fec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_ITEMEFFECTONHITCASTSPELLE, 0x00000000008e3f00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_ITEMEFFECTTURNRESISTANCEE, 0x00000000008e3fd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_ITEMEFFECTWEIGHTINCREASEE, 0x00000000008e3fb4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_MUSICBACKGROUNDCHANGEDAYE, 0x00000000008e43c4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_SETLIMITSAVINGTHROWBONUSE, 0x00000000008e3cb4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_SETOBJECTVISUALTRANSFORME, 0x00000000008e3c94) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_SETPLACEABLEILLUMINATIONE, 0x00000000008e41f4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32COMMAND_TESTSTRINGAGAINSTPATTERNE, 0x00000000008e47b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandActionCounterSpellEii, 0x0000000000424d70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandActionExchangeItemEii, 0x000000000041bcd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandActionFollowObjectEii, 0x00000000004034b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandActionJumpToObjectEii, 0x0000000000404a40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandApplyEffectAtPointEii, 0x000000000041a3b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandCreateItemOnObjectEii, 0x00000000004084e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandCreateTrapOnObjectEii, 0x0000000000437db0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandDecrementSpellUsesEii, 0x0000000000425310) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandEffectDamageShieldEii, 0x0000000000412220) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandEffectInvisibilityEii, 0x00000000004115a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandEffectResurrectionEii, 0x000000000040f570) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandEffectSeeInvisibleEii, 0x0000000000411bc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandEffectSpellFailureEii, 0x00000000004126e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandEffectVisualEffectEii, 0x0000000000418a70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandExecuteScriptChunkEii, 0x000000000042bdd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetAbilityModifierEii, 0x000000000041eb60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetBaseAttackBonusEii, 0x0000000000429490) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetChallengeRatingEii, 0x0000000000407fb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetDistanceBetweenEii, 0x000000000040c150) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetEffectParameterEii, 0x000000000040da30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetItemInInventoryEii, 0x000000000041f180) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetItemPossessedByEii, 0x0000000000408a60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetItemPropertyTagEii, 0x000000000040cd20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetLimitSkillBonusEii, 0x000000000042b6f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetModuleItemStuffEii, 0x0000000000405c30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetNumStackedItemsEii, 0x0000000000409300) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetPlayerBuildInfoEii, 0x0000000000420230) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetSittingCreatureEii, 0x0000000000414a20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetSpellCasterItemEii, 0x0000000000405fc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetSpellResistanceEii, 0x0000000000418450) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetStartingPackageEii, 0x0000000000404090) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetStringLowerCaseEii, 0x000000000040de30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetStringUpperCaseEii, 0x000000000040dd20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetSurfaceMaterialEii, 0x000000000042b500) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetTimeMillisecondEii, 0x0000000000401230) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGetWillSavingThrowEii, 0x0000000000423980) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGiveGoldToCreatureEii, 0x0000000000421890) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandGuiEventManagementEii, 0x000000000042d040) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandItemPropertyEffectEii, 0x000000000042de70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandMoveAwayFromObjectEii, 0x0000000000401540) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandRemoveItemPropertyEii, 0x00000000004029a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandSetBaseAttackBonusEii, 0x0000000000403f40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandSetLimitSkillBonusEii, 0x000000000043ab00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandSetTextureOverrideEii, 0x000000000042c310) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands32ExecuteCommandSurrenderToEnemiesEii, 0x00000000004231d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ACTIONFORCEMOVETOLOCATIONE, 0x00000000008e447c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ACTIONSPEAKSTRINGBYSTRREFE, 0x00000000008e46b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ACTIONUSETALENTATLOCATIONE, 0x00000000008e459c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_EFFECTSAVINGTHROWDECREASEE, 0x00000000008e4364) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_EFFECTSAVINGTHROWINCREASEE, 0x00000000008e48a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETCUTSCENECAMERAMOVERATEE, 0x00000000008e3edc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETENCOUNTERSPAWNSCURRENTE, 0x00000000008e4614) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETFACTIONSTRONGESTMEMBERE, 0x00000000008e479c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETISREACTIONTYPEFRIENDLYE, 0x00000000008e4320) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETJOURNALQUESTEXPERIENCEE, 0x00000000008e4474) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETLASTPCTOCANCELCUTSCENEE, 0x00000000008e3fa0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETLASTPERCEPTIONVANISHEDE, 0x00000000008e4660) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETLASTTILEACTIONPOSITIONE, 0x00000000008e3b5c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETMATCHEDSUBSTRINGSCOUNTE, 0x00000000008e47a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETMODULEITEMACQUIREDFROME, 0x00000000008e4608) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETNEXTINPERSISTENTOBJECTE, 0x00000000008e4658) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_GETUSERDEFINEDEVENTNUMBERE, 0x00000000008e4698) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ITEMEFFECTACBONUSVSSALIGNE, 0x00000000008e40c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ITEMEFFECTBONUSLEVELSPELLE, 0x00000000008e40a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ITEMEFFECTDAMAGEREDUCTIONE, 0x00000000008e4080) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ITEMEFFECTDECREASEABILITYE, 0x00000000008e4070) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ITEMEFFECTIMPROVEDEVASIONE, 0x00000000008e404c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ITEMEFFECTLIMITUSEBYALIGNE, 0x00000000008e3ff4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ITEMEFFECTLIMITUSEBYCLASSE, 0x00000000008e3ff0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ITEMEFFECTMASSIVECRITICALE, 0x00000000008e3fcc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_ITEMEFFECTWEIGHTREDUCTIONE, 0x00000000008e40a8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_SETCREATUREAPPEARANCETYPEE, 0x00000000008e3e80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_SETCUTSCENECAMERAMOVERATEE, 0x00000000008e3ed8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_SETENCOUNTERSPAWNSCURRENTE, 0x00000000008e4610) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_SETMATERIALSHADERUNIFORMIE, 0x00000000008e3c90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33COMMAND_SPEAKONELINERCONVERSATIONE, 0x00000000008e43f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandApplyEffectOnObjectEii, 0x000000000041a7b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandDistanceConversionsEii, 0x0000000000407d80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandEffectCutsceneGhostEii, 0x0000000000412910) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandEffectModifyAttacksEii, 0x0000000000411f30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandEffectNegativeLevelEii, 0x0000000000418280) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandEffectSkillDecreaseEii, 0x00000000004132d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandEffectSkillIncreaseEii, 0x0000000000413110) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandEffectSpellImmunityEii, 0x0000000000412fd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandExportAllCharactersEii, 0x0000000000424b00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetAOEObjectCreatorEii, 0x0000000000405ef0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetCampaignLocationEii, 0x0000000000427a90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetClassInformationEii, 0x0000000000414ab0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetCreatureBodyPartEii, 0x000000000040ad80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetCreatureTailTypeEii, 0x00000000003fcc10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetCreatureWingTypeEii, 0x00000000003fcb60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetDistanceToObjectEii, 0x000000000040bfa0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetFactionAverageXPEii, 0x0000000000419820) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetItemPropertyInfoEii, 0x0000000000402100) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetItemPropertyTypeEii, 0x0000000000401f20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetLastHostileActorEii, 0x0000000000424960) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetLastTrapDetectedEii, 0x0000000000406040) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetLimitAttackBonusEii, 0x000000000042b5b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetLimitDamageBonusEii, 0x000000000042b5f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetObjectVisibilityEii, 0x000000000040a430) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetTotalDamageDealtEii, 0x000000000041f830) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetTransitionTargetEii, 0x0000000000419c90) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandGetTurnResistanceHDEii, 0x00000000004236e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandIsItemPropertyValidEii, 0x0000000000401e40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandRestoreCameraFacingEii, 0x000000000042dbb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSendMessageToAllDMsEii, 0x000000000040a710) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSetCampaignLocationEii, 0x00000000004267a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSetCreatureBodyPartEii, 0x000000000040b0f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSetCreatureTailTypeEii, 0x000000000040af50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSetCreatureWingTypeEii, 0x000000000040abe0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSetCurrentHitPointsEii, 0x000000000040a250) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSetLimitAttackBonusEii, 0x000000000043b3a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSetLimitDamageBonusEii, 0x000000000043af50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSetPanelButtonFlashEii, 0x0000000000424390) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSetTransitionTargetEii, 0x000000000042b260) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandSpawnScriptDebuggerEii, 0x000000000042de20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands33ExecuteCommandStoreCampaignObjectEii, 0x0000000000439450) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_ACTIONMOVEAWAYFROMLOCATIONE, 0x00000000008e44d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_AMBIENTSOUNDSETNIGHTVOLUMEE, 0x00000000008e4194) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_EFFECTSPELLLEVELABSORPTIONE, 0x00000000008e4314) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_GETBASEITEMFITSININVENTORYE, 0x00000000008e3bb4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_GETEFFECTDURATIONREMAININGE, 0x00000000008e3d20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_GETFIRSTINPERSISTENTOBJECTE, 0x00000000008e465c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_GETITEMPROPERTYPARAM1VALUEE, 0x00000000008e3e64) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_GETLASTPERCEPTIONINAUDIBLEE, 0x00000000008e466c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_GETNEARESTCREATURETOOBJECTE, 0x00000000008e49dc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_GETNEARESTOBJECTTOLOCATIONE, 0x00000000008e46e4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_GETPLAYERCONNECTIONRELAYEDE, 0x00000000008e3ca4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_INCREMENTREMAININGFEATUSESE, 0x00000000008e3f3c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_ITEMEFFECTACBONUSVSDMGTYPEE, 0x00000000008e40c8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_ITEMEFFECTBONUSSAVINGTHROWE, 0x00000000008e4040) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_ITEMEFFECTDAMAGERESISTANCEE, 0x00000000008e407c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_ITEMEFFECTENHANCEMENTBONUSE, 0x00000000008e40bc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_ITEMEFFECTLIMITUSEBYSALIGNE, 0x00000000008e3fe8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_MUSICBACKGROUNDCHANGENIGHTE, 0x00000000008e43c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34COMMAND_SETASSOCIATELISTENPATTERNSE, 0x00000000008e4558) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandActionInteractObjectEii, 0x000000000041eab0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandAddJournalQuestEntryEii, 0x000000000041c7e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandCreateTrapAtLocationEii, 0x0000000000437630) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandEffectAttackDecreaseEii, 0x00000000004101b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandEffectAttackIncreaseEii, 0x000000000040fff0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandEffectDamageDecreaseEii, 0x0000000000416090) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandEffectDamageIncreaseEii, 0x0000000000415e80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandEffectSummonCreatureEii, 0x0000000000414280) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandEffectTurnResistanceEii, 0x0000000000412460) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandExploreAreaForPlayerEii, 0x0000000000421f30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetCreatureHasTalentEii, 0x000000000041ddb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetDamageDealtByTypeEii, 0x000000000041f8f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetDialogSoundLengthEii, 0x0000000000431280) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetEffectCasterLevelEii, 0x00000000004025d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetIsAreaAboveGroundEii, 0x00000000003fbdd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetIsSkillSuccessfulEii, 0x0000000000428c20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetIsWeaponEffectiveEii, 0x0000000000422470) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetLastRestEventTypeEii, 0x0000000000400710) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetLimitAbilityBonusEii, 0x000000000042b670) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetMatchedStringsNumEii, 0x00000000003fef80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetReflexSavingThrowEii, 0x0000000000423aa0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandGetSpellTargetObjectEii, 0x0000000000405870) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandReplaceObjectTextureEii, 0x000000000042cc10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandSetAreaTransitionBMPEii, 0x0000000000419e20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandSetLimitAbilityBonusEii, 0x000000000043bc40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandSetObjectHiliteColorEii, 0x00000000003ff170) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandSetObjectMouseCursorEii, 0x00000000003ff2b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandSoundObjectSetVolumeEii, 0x0000000000422180) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandTakeGoldFromCreatureEii, 0x0000000000422950) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands34ExecuteCommandTileActionManagementEii, 0x0000000000407210) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_ACTIONCASTFAKESPELLATOBJECTE, 0x00000000008e42a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_EFFECTMOVEMENTSPEEDDECREASEE, 0x00000000008e4368) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_EFFECTMOVEMENTSPEEDINCREASEE, 0x00000000008e47e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_GETDISTANCEBETWEENLOCATIONSE, 0x00000000008e45cc) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_GETFACTIONAVERAGEREPUTATIONE, 0x00000000008e478c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_GETFACTIONMOSTDAMAGEDMEMBERE, 0x00000000008e4798) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_GETFACTIONMOSTFREQUENTCLASSE, 0x00000000008e4778) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_GETITEMPROPERTYDURATIONTYPEE, 0x00000000008e40d8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_GETLASTPLAYERTODOTILEACTIONE, 0x00000000008e3b58) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_GETLASTPLAYERTOSELECTTARGETE, 0x00000000008e3c28) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_GETLASTRESPAWNBUTTONPRESSERE, 0x00000000008e43e8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_ITEMEFFECTATTACKBONUSVSRACEE, 0x00000000008e4004) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_ITEMEFFECTBONUSSVNGTHROWVSXE, 0x00000000008e4044) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_ITEMEFFECTDAMAGEBONUSVSRACEE, 0x00000000008e4090) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_ITEMEFFECTLIMITUSEBYTILESETE, 0x00000000008e3fe4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35COMMAND_RESETMATERIALSHADERUNIFORMSE, 0x00000000008e3c88) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandEffectAbilityDecreaseEii, 0x000000000040f3d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandEffectAbilityIncreaseEii, 0x000000000040f230) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandEffectDamageReductionEii, 0x00000000004129b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandEffectDisappearAppearEii, 0x0000000000414890) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandEventScriptManagementEii, 0x000000000042faa0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandExportSingleCharacterEii, 0x0000000000424b20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandGetArcaneSpellFailureEii, 0x0000000000403e60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandGetEffectDurationTypeEii, 0x0000000000401ce0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandGetHiddenWhenEquippedEii, 0x00000000003fcab0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandGetInPersistentObjectEii, 0x000000000041b270) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandGetLastSpellCastClassEii, 0x0000000000402d80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandGetPickpocketableFlagEii, 0x00000000003fc8b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandObjectVisualTransformEii, 0x00000000004315a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandSetHiddenWhenEquippedEii, 0x000000000042f620) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands35ExecuteCommandSetPickpocketableFlagEii, 0x00000000003fc810) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_ACTIONEQUIPMOSTDAMAGINGMELEEE, 0x00000000008e4438) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_ACTIONEQUIPMOSTDAMAGINGRANGEE, 0x00000000008e4434) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_EFFECTDAMAGEIMMUNITYDECREASEE, 0x00000000008e4370) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_EFFECTDAMAGEIMMUNITYINCREASEE, 0x00000000008e4628) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_EFFECTTURNRESISTANCEDECREASEE, 0x00000000008e41d4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_EFFECTTURNRESISTANCEINCREASEE, 0x00000000008e41d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_GETFACTIONLEASTDAMAGEDMEMBERE, 0x00000000008e4794) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_GETISPLACEABLEACTIONPOSSIBLEE, 0x00000000008e41ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_GETITEMACTIVATEDTARGETOBJECTE, 0x00000000008e438c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_GETNEARESTCREATURETOLOCATIONE, 0x00000000008e46ec) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_GETSTANDARDFACTIONREPUTATIONE, 0x00000000008e4244) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_ITEMEFFECTARCANESPELLFAILUREE, 0x00000000008e3e9c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_ITEMEFFECTATTACKBONUSVSALIGNE, 0x00000000008e4008) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_ITEMEFFECTDAMAGEBONUSVSALIGNE, 0x00000000008e4094) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_ITEMEFFECTENHANCEMENTPENALTYE, 0x00000000008e40ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_ITEMEFFECTREDUCEDSAVINGTHROWE, 0x00000000008e4024) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_SETMATERIALSHADERUNIFORMVEC4E, 0x00000000008e3c8c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36COMMAND_SETSTANDARDFACTIONREPUTATIONE, 0x00000000008e4248) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandDeleteCampaignVariableEii, 0x0000000000428300) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandDoSinglePlayerAutoSaveEii, 0x0000000000423f20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandEffectDamageResistanceEii, 0x000000000040f690) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandGetAnimalCompanionNameEii, 0x000000000040d450) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandGetFactionAverageLevelEii, 0x0000000000419750) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandGetGoingToBeAttackedByEii, 0x0000000000406330) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandGetIsEncounterCreatureEii, 0x0000000000404720) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandGetIsPossessedFamiliarEii, 0x000000000041e3b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandGetItemHasItemPropertyEii, 0x0000000000421b00) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandGetLimitAbilityPenaltyEii, 0x000000000042b6b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandGetMatchedStringsCountEii, 0x00000000003ff020) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandGetStrRefSoundDurationEii, 0x0000000000431370) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandMaterialShaderUniformsEii, 0x000000000042b730) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandRestoreBaseAttackBonusEii, 0x0000000000404010) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandRetrieveCampaignObjectEii, 0x0000000000439a10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandSetLimitAbilityPenaltyEii, 0x000000000043b7f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands36ExecuteCommandSoundObjectSetPositionEii, 0x0000000000422210) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_ACTIONCASTFAKESPELLATLOCATIONE, 0x00000000008e429c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_ACTIONEQUIPMOSTEFFECTIVEARMORE, 0x00000000008e4424) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_EFFECTHITPOINTCHANGEWHENDYINGE, 0x00000000008e4468) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_EFFECTSPELLRESISTANCEDECREASEE, 0x00000000008e435c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_EFFECTSPELLRESISTANCEINCREASEE, 0x00000000008e4724) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_GETITEMPROPERTYCOSTTABLEVALUEE, 0x00000000008e3e6c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_GETKEYREQUIREDFEEDBACKMESSAGEE, 0x00000000008e3da8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_ITEMEFFECTATTACKBONUSVSSALIGNE, 0x00000000008e4000) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_ITEMEFFECTDAMAGEBONUSVSSALIGNE, 0x00000000008e408c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_ITEMEFFECTDAMAGEVULNERABILITYE, 0x00000000008e4078) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_ITEMEFFECTSPELLIMMUNITYSCHOOLE, 0x00000000008e4014) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_MUSICBACKGROUNDGETBATTLETRACKE, 0x00000000008e4190) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37COMMAND_SETKEYREQUIREDFEEDBACKMESSAGEE, 0x00000000008e3da4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandActionPauseConversationEii, 0x000000000042dc60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandActionStartConversationEii, 0x000000000041a090) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandDestroyCampaignDatabaseEii, 0x0000000000426f10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetAttemptedSpellTargetEii, 0x00000000004062e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetFactionWeakestMemberEii, 0x0000000000419000) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetFamiliarCreatureTypeEii, 0x0000000000403d20) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetFortitudeSavingThrowEii, 0x0000000000423860) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetInventoryDisturbItemEii, 0x00000000004057f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetInventoryDisturbTypeEii, 0x00000000003fb5e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetIsCreatureDisarmableEii, 0x0000000000408980) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetIsDoorActionPossibleEii, 0x000000000041ede0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetIsRacialTypePlayableEii, 0x00000000003ff450) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetItemPropertyDurationEii, 0x0000000000402740) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetLastAssociateCommandEii, 0x0000000000404550) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandGetReflexAdjustedDamageEii, 0x000000000041a530) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandRecomputeStaticLightingEii, 0x0000000000424020) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandRemoveJournalQuestEntryEii, 0x000000000041cce0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandSendMessageToPCByStrRefEii, 0x00000000004328e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands37ExecuteCommandTargetingModeManagementEii, 0x000000000042f780) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_GETANIMALCOMPANIONCREATURETYPEE, 0x00000000008e42ac) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_GETITEMACTIVATEDTARGETLOCATIONE, 0x00000000008e4390) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_GETMODULEITEMACQUIREDSTACKSIZEE, 0x00000000008e4168) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_GETTARGETINGMODESELECTEDOBJECTE, 0x00000000008e3c30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_ITEMEFFECTBONUSSPELLRESISTANCEE, 0x00000000008e4048) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_ITEMEFFECTEXTRAMELEEDAMAGETYPEE, 0x00000000008e4060) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_ITEMEFFECTEXTRARANGEDAMAGETYPEE, 0x00000000008e405c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_ITEMEFFECTIMMUNITYTOSPELLLEVELE, 0x00000000008e3fc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_ITEMEFFECTMAXRANGEDSTRENGTHMODE, 0x00000000008e4034) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_ITEMEFFECTSPELLIMUNITYSPECIFICE, 0x00000000008e4018) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38COMMAND_ITEMEFFECTVAMPIRICREGENERATIONE, 0x00000000008e3fe0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38ExecuteCommandActionResumeConversationEii, 0x000000000042dd40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38ExecuteCommandGetAttemptedAttackTargetEii, 0x0000000000406290) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38ExecuteCommandGetCurrentlyRunningEventEii, 0x00000000003fb4c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38ExecuteCommandGetLimitSavingThrowBonusEii, 0x000000000042b630) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38ExecuteCommandGetPlaceableIlluminationEii, 0x0000000000424850) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38ExecuteCommandPersonalReputationAccessEii, 0x0000000000421690) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38ExecuteCommandSetLimitSavingThrowBonusEii, 0x000000000043a6b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands38ExecuteCommandSetPlaceableIlluminationEii, 0x00000000004247c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39COMMAND_ITEMEFFECTIMPROVEDCRITICALRANGEE, 0x00000000008e403c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39COMMAND_ITEMEFFECTREDUCEDSAVINGTHROWVSXE, 0x00000000008e4028) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandEffectSavingThrowDecreaseEii, 0x000000000040fe10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandEffectSavingThrowIncreaseEii, 0x000000000040fc30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandGetCutsceneCameraMoveRateEii, 0x0000000000408060) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandGetFactionStrongestMemberEii, 0x0000000000419100) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandGetJournalQuestExperienceEii, 0x0000000000420af0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandGetUserDefinedEventNumberEii, 0x00000000003ffb80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandSetCreatureAppearanceTypeEii, 0x000000000042a3e0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandSetCutsceneCameraMoveRateEii, 0x00000000004043f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandSpeakOneLinerConversationEii, 0x000000000040aaa0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands39ExecuteCommandTileExplorationManagementEii, 0x000000000042b360) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40COMMAND_GETITEMPROPERTYDURATIONREMAININGE, 0x00000000008e3d10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40COMMAND_GETLASTRUNSCRIPTEFFECTSCRIPTTYPEE, 0x00000000008e3b80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40COMMAND_GETTARGETINGMODESELECTEDPOSITIONE, 0x00000000008e3c2c) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40COMMAND_ITEMEFFECTCONTAINERREDUCEDWEIGHTE, 0x00000000008e4064) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40COMMAND_ITEMEFFECTONMONSTERHITPROPERTIESE, 0x00000000008e3fd4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40ExecuteCommandActionMoveAwayFromLocationEii, 0x000000000041fac0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40ExecuteCommandEffectSpellLevelAbsorptionEii, 0x0000000000412060) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40ExecuteCommandGetBaseItemFitsInInventoryEii, 0x000000000042cd40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40ExecuteCommandGetEffectDurationRemainingEii, 0x000000000042afd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40ExecuteCommandGetFactionNthNearestMemberEii, 0x0000000000434fb0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40ExecuteCommandGetPlayerConnectionRelayedEii, 0x0000000000420750) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40ExecuteCommandIncrementRemainingFeatUsesEii, 0x000000000042a070) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands40ExecuteCommandSetAssociateListenPatternsEii, 0x000000000041ea30) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands41ExecuteCommandEffectMovementSpeedDecreaseEii, 0x0000000000410d10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands41ExecuteCommandEffectMovementSpeedIncreaseEii, 0x0000000000410bc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands41ExecuteCommandGetDistanceBetweenLocationsEii, 0x000000000040be80) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands41ExecuteCommandGetFactionAverageReputationEii, 0x00000000004194d0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands41ExecuteCommandGetFactionMostDamagedMemberEii, 0x0000000000419200) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands41ExecuteCommandGetFactionMostFrequentClassEii, 0x00000000004198f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands41ExecuteCommandGetItemPropertyDurationTypeEii, 0x0000000000402010) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42COMMAND_GETFACTIONAVERAGEGOODEVILALIGNMENTE, 0x00000000008e4788) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42COMMAND_GETFACTIONAVERAGELAWCHAOSALIGNMENTE, 0x00000000008e4784) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42COMMAND_GETITEMPROPERTYUSESPERDAYREMAININGE, 0x00000000008e3c44) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42COMMAND_ITEMEFFECTENHANCEMENTBONUS_VS_RACEE, 0x00000000008e40b4) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42COMMAND_SETITEMPROPERTYUSESPERDAYREMAININGE, 0x00000000008e3c40) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42ExecuteCommandActionEquipMostDamagingMeleeEii, 0x0000000000421d10) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42ExecuteCommandAutoMapExplorationManagementEii, 0x00000000003fd070) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42ExecuteCommandEffectDamageImmunityDecreaseEii, 0x0000000000412e50) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42ExecuteCommandEffectDamageImmunityIncreaseEii, 0x0000000000412cd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands42ExecuteCommandGetFactionLeastDamagedMemberEii, 0x0000000000419300) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands43COMMAND_ITEMEFFECTENHANCEMENTBONUS_VS_ALIGNE, 0x00000000008e40b8) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands43ExecuteCommandActionEquipMostDamagingRangedEii, 0x0000000000421dd0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands43ExecuteCommandActionEquipMostEffectiveArmorEii, 0x0000000000422050) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands43ExecuteCommandEffectHitPointChangeWhenDyingEii, 0x0000000000414750) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands43ExecuteCommandEffectSpellResistanceDecreaseEii, 0x0000000000410f70) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands43ExecuteCommandEffectSpellResistanceIncreaseEii, 0x0000000000410e60) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands43ExecuteCommandGetKeyRequiredFeedbackMessageEii, 0x000000000040d560) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands43ExecuteCommandSetKeyRequiredFeedbackMessageEii, 0x00000000003fd4a0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands44COMMAND_ITEMEFFECTENHANCEMENTBONUS_VS_SALIGNE, 0x00000000008e40b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands44ExecuteCommandGetAnimalCompanionCreatureTypeEii, 0x0000000000403dc0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands45ExecuteCommandStandardFactionReputationAccessEii, 0x00000000004244f0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands46ExecuteCommandGetItemPropertyDurationRemainingEii, 0x000000000042b110) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands48ExecuteCommandGetFactionAverageGoodEvilAlignmentEii, 0x00000000004195b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands48ExecuteCommandGetFactionAverageLawChaosAlignmentEii, 0x0000000000419680) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands48ExecuteCommandGetItemPropertyUsesPerDayRemainingEii, 0x0000000000409650) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommands48ExecuteCommandSetItemPropertyUsesPerDayRemainingEii, 0x00000000004287b0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommandsD0Ev, 0x00000000003f41c0) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommandsD1Ev, 0x00000000003f4150) -NWNXLIB_FUNCTION(_ZN25CNWVirtualMachineCommandsD2Ev, 0x00000000003f4150) -NWNXLIB_FUNCTION(_ZN25ObjectVisualTransformData5WriteEP10CNWSPlayerP10CNWMessageRKS_, 0x0000000000393ad0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject13AddKnownSpellEhhj, 0x0000000000310c00) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject13GetKnownSpellEhhh, 0x0000000000310d30) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject16ClearActionQueueEv, 0x00000000003115f0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject16ClearAutoMapDataEv, 0x0000000000311650) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject16ClearEffectIconsEv, 0x0000000000310a80) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject16ClearKnownSpellsEv, 0x0000000000310960) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject16GetIsDomainSpellEhhh, 0x0000000000310df0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject16ResetAutoMapDataEj, 0x0000000000311710) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject17GetMemorizedSpellEhhh, 0x0000000000310d70) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject19ClearVisibilityListEv, 0x0000000000311250) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject20ClearMemorizedSpellsEv, 0x00000000003109d0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject21GetKnownSpellUsesLeftEhh, 0x00000000003111e0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject21InitializeAutoMapDataEv, 0x00000000003116a0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject21SetKnownSpellUsesLeftEhhh, 0x0000000000311220) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject21SetMemorizedSpellSlotEhhhjih, 0x0000000000310b20) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject23ClearKnownSpellUsesLeftEv, 0x00000000003111a0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject24ClearSpellAddDeleteListsEv, 0x00000000003110c0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject24GetMemorizedSpellReadiedEhhh, 0x0000000000310db0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject24SetMemorizedSpellReadiedEhhhi, 0x0000000000310e70) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject25GetMemorizedSpellMetaTypeEhhh, 0x0000000000310e30) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObject28SetNumberMemorizedSpellSlotsEhhh, 0x0000000000310eb0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObjectC1Ev, 0x00000000003106f0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObjectC2Ev, 0x00000000003106f0) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObjectD1Ev, 0x0000000000311310) -NWNXLIB_FUNCTION(_ZN26CNWSPlayerLastUpdateObjectD2Ev, 0x0000000000311310) -NWNXLIB_FUNCTION(_ZN26CNWSStats_SpellLikeAbilityC1Ev, 0x0000000000270af0) -NWNXLIB_FUNCTION(_ZN26CNWSStats_SpellLikeAbilityC2Ev, 0x0000000000270af0) -NWNXLIB_FUNCTION(_ZN26CNWTileSurfaceMeshAABBNodeD1Ev, 0x000000000020a240) -NWNXLIB_FUNCTION(_ZN26CNWTileSurfaceMeshAABBNodeD2Ev, 0x000000000020a240) -NWNXLIB_FUNCTION(_ZN26CScriptCompilerIdListEntry20ExpandParameterSpaceEv, 0x00000000007a95c0) -NWNXLIB_FUNCTION(_ZN26CScriptCompilerIdListEntryC1Ev, 0x00000000007a9380) -NWNXLIB_FUNCTION(_ZN26CScriptCompilerIdListEntryC2Ev, 0x00000000007a9380) -NWNXLIB_FUNCTION(_ZN26CScriptCompilerIdListEntryD1Ev, 0x00000000007a9480) -NWNXLIB_FUNCTION(_ZN26CScriptCompilerIdListEntryD2Ev, 0x00000000007a9480) -NWNXLIB_FUNCTION(_ZN26CVirtualMachineDebugLoader10GetDataPtrEv, 0x00000000007ceff0) -NWNXLIB_FUNCTION(_ZN26CVirtualMachineDebugLoader15DemandDebugInfoEP10CExoString, 0x00000000007d48a0) -NWNXLIB_FUNCTION(_ZN26CVirtualMachineDebugLoader16ReleaseDebugInfoEv, 0x00000000007d4a50) -NWNXLIB_FUNCTION(_ZN26CVirtualMachineDebugLoader7GetSizeEv, 0x00000000007cf010) -NWNXLIB_FUNCTION(_ZN26CVirtualMachineDebugLoaderD0Ev, 0x00000000007ae670) -NWNXLIB_FUNCTION(_ZN26CVirtualMachineDebugLoaderD1Ev, 0x00000000007ae650) -NWNXLIB_FUNCTION(_ZN26CVirtualMachineDebugLoaderD2Ev, 0x00000000007ae650) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo13AddKnownSpellEhj, 0x000000000028ddb0) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo13GetKnownSpellEhh, 0x0000000000270210) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo16GetIsDomainSpellEhh, 0x0000000000270270) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo16RemoveKnownSpellEhj, 0x000000000028dcc0) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo18ConfirmDomainSpellEhj, 0x00000000002704c0) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo19GetSpellsPerDayLeftEh, 0x00000000002703c0) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo19SetSpellsPerDayLeftEhh, 0x00000000002703e0) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo20GetNumberBonusSpellsEh, 0x0000000000270a70) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo20GetNumberKnownSpellsEh, 0x0000000000270a30) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo21ResetSpellsPerDayLeftEhh, 0x0000000000270480) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo21SetMemorizedSpellSlotEhhjih, 0x0000000000270030) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo22GetMaxSpellsPerDayLeftEh, 0x0000000000270400) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo22SetMaxSpellsPerDayLeftEhh, 0x0000000000270420) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo23ClearMemorizedSpellSlotEhh, 0x0000000000270060) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo23GetMemorizedSpellInSlotEhh, 0x0000000000270240) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo23ModifyNumberBonusSpellsEhi, 0x0000000000270a90) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo25ClearMemorizedKnownSpellsEj, 0x0000000000270090) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo25DecrementSpellsPerDayLeftEh, 0x0000000000270440) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo25IncrementSpellsPerDayLeftEh, 0x0000000000270460) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo27GetMemorizedSpellReadyCountEjh, 0x0000000000270370) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo27GetMemorizedSpellReadyCountEjPhS0_h, 0x0000000000270580) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo28GetMemorizedSpellInSlotReadyEhh, 0x0000000000270310) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo28GetNumberMemorizedSpellSlotsEh, 0x0000000000270a50) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo28SetMemorizedSpellInSlotReadyEhhi, 0x0000000000270340) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo28SetNumberMemorizedSpellSlotsEhhi, 0x00000000002702e0) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo30GetMemorizedSpellInSlotDetailsEhh, 0x00000000002702a0) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfo31GetMemorizedSpellInSlotMetaTypeEhh, 0x0000000000270390) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfoC1Ev, 0x000000000026fe90) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfoC2Ev, 0x000000000026fe90) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfoD1Ev, 0x000000000026ff50) -NWNXLIB_FUNCTION(_ZN27CNWSCreatureStats_ClassInfoD2Ev, 0x000000000026ff50) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance13LoadDebugInfoEP26CVirtualMachineDebugLoader, 0x00000000007cfd30) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance13SpawnDebuggerEv, 0x00000000007d4a70) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance14LoadScriptLineEPhjjPji, 0x00000000007cfc10) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance16DebuggerMainLoopEv, 0x00000000007d5050) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance16GenerateTypeNameEP10CExoString, 0x00000000007d1860) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance16GenerateTypeSizeEP10CExoString, 0x00000000007d1790) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance16ShutDownDebuggerEv, 0x00000000007cf9c0) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance17LoadDebugInfoLineEPhjjPj, 0x00000000007cfcb0) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance18DebuggerSingleStepEi, 0x00000000007d4bd0) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance18FindWatchViewEntryEP10CExoStringS1_i, 0x00000000007d2d80) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance19ReadStringFromInputEPiP10CExoString, 0x00000000007cfa80) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance20GetNextDebugVariableEiii, 0x00000000007d1d60) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance20ReadIntegerFromInputEPiS0_, 0x00000000007cfa20) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance20SendWatchWindowEntryEP10CExoStringS1_S1_S1_i, 0x00000000007d2e50) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance21GenerateCallStackViewEiii, 0x00000000007d1fd0) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance21SendLabelsAndKeywordsEv, 0x00000000007d3f20) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance22ParseAndExecuteMessageEPi, 0x00000000007d4d50) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance23FindEmptyWatchViewEntryEv, 0x00000000007d2630) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance26ToggleWatchWindowExpansionE10CExoString, 0x00000000007cfb70) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance28SendCodeWindowUpdateCommandsE10CExoStringi, 0x00000000007d4230) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance29SendWatchWindowUpdateCommandsEi, 0x00000000007d3850) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance30DebuggerDisplayCurrentLocationEii, 0x00000000007d4650) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance30GenerateCallStackParameterViewEiP10CExoStringS1_, 0x00000000007d1ed0) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance33SendCallStackWindowUpdateCommandsEv, 0x00000000007d2370) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance34GenerateTypeValueFromStackLocationEiP10CExoString, 0x00000000007d1a20) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance37GenerateStackSizeAtInstructionPointerEii, 0x00000000007d1b70) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance40GenerateFunctionIDFromInstructionPointerEi, 0x00000000007d1690) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance40GenerateLineNumberFromInstructionPointerEii, 0x00000000007d16e0) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstance41GenerateDebugVariableLocationForParameterEii, 0x00000000007d1e30) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstanceC1Ev, 0x00000000007cf030) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstanceC2Ev, 0x00000000007cf030) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstanceD1Ev, 0x00000000007cf2b0) -NWNXLIB_FUNCTION(_ZN31CVirtualMachineDebuggerInstanceD2Ev, 0x00000000007cf2b0) -NWNXLIB_FUNCTION(_ZN32CNWTileSurfaceMeshHashTableEntry15HASH_TABLE_MASKE, 0x00000000008d1a50) -NWNXLIB_FUNCTION(_ZN32CNWTileSurfaceMeshHashTableEntry15HASH_TABLE_SIZEE, 0x00000000008d1a54) -NWNXLIB_FUNCTION(_ZN32CNWTileSurfaceMeshHashTableEntry5FetchEi, 0x00000000001fef50) -NWNXLIB_FUNCTION(_ZN32CNWTileSurfaceMeshHashTableEntry5StoreEif, 0x00000000001fef80) -NWNXLIB_FUNCTION(_ZN32CNWTileSurfaceMeshHashTableEntryC1Ev, 0x00000000001fef30) -NWNXLIB_FUNCTION(_ZN32CNWTileSurfaceMeshHashTableEntryC2Ev, 0x00000000001fef30) -NWNXLIB_FUNCTION(_ZN32CPathfindInfoIntraTileSuccessorsC1Ev, 0x00000000007d56e0) -NWNXLIB_FUNCTION(_ZN32CPathfindInfoIntraTileSuccessorsC2Ev, 0x00000000007d56e0) -NWNXLIB_FUNCTION(_ZN4C2DA11GetINTEntryEiiPi, 0x00000000001476c0) -NWNXLIB_FUNCTION(_ZN4C2DA11GetINTEntryEiRK10CExoStringPi, 0x00000000001477e0) -NWNXLIB_FUNCTION(_ZN4C2DA11GetINTEntryERK10CExoStringiPi, 0x0000000000148380) -NWNXLIB_FUNCTION(_ZN4C2DA11GetINTEntryERK10CExoStringS2_Pi, 0x0000000000148240) -NWNXLIB_FUNCTION(_ZN4C2DA11GetRowIndexERK10CExoString, 0x0000000000147cb0) -NWNXLIB_FUNCTION(_ZN4C2DA11Load2DArrayEv, 0x0000000000148810) -NWNXLIB_FUNCTION(_ZN4C2DA11SetINTEntryE10CExoStringii, 0x0000000000148560) -NWNXLIB_FUNCTION(_ZN4C2DA11SetINTEntryE10CExoStringS0_i, 0x00000000001484a0) -NWNXLIB_FUNCTION(_ZN4C2DA11SetINTEntryEi10CExoStringi, 0x00000000001479c0) -NWNXLIB_FUNCTION(_ZN4C2DA11SetINTEntryEiii, 0x0000000000147910) -NWNXLIB_FUNCTION(_ZN4C2DA12GetNextTokenEPPcPjS0_jS2_, 0x0000000000147ba0) -NWNXLIB_FUNCTION(_ZN4C2DA12SkipNewLinesEPPcPj, 0x0000000000148700) -NWNXLIB_FUNCTION(_ZN4C2DA13GetFLOATEntryEiiPf, 0x0000000000147400) -NWNXLIB_FUNCTION(_ZN4C2DA13GetFLOATEntryEiRK10CExoStringPf, 0x0000000000147490) -NWNXLIB_FUNCTION(_ZN4C2DA13GetFLOATEntryERK10CExoStringiPf, 0x0000000000148030) -NWNXLIB_FUNCTION(_ZN4C2DA13GetFLOATEntryERK10CExoStringS2_Pf, 0x0000000000147f70) -NWNXLIB_FUNCTION(_ZN4C2DA13SetBlankEntryE10CExoStringi, 0x00000000001486a0) -NWNXLIB_FUNCTION(_ZN4C2DA13SetBlankEntryE10CExoStringS0_, 0x0000000000148620) -NWNXLIB_FUNCTION(_ZN4C2DA13SetBlankEntryEi10CExoString, 0x0000000000147ae0) -NWNXLIB_FUNCTION(_ZN4C2DA13SetBlankEntryEii, 0x0000000000147a80) -NWNXLIB_FUNCTION(_ZN4C2DA13SetFLOATEntryE10CExoStringif, 0x0000000000148180) -NWNXLIB_FUNCTION(_ZN4C2DA13SetFLOATEntryE10CExoStringS0_f, 0x00000000001480b0) -NWNXLIB_FUNCTION(_ZN4C2DA13SetFLOATEntryEi10CExoStringf, 0x0000000000147600) -NWNXLIB_FUNCTION(_ZN4C2DA13SetFLOATEntryEiif, 0x0000000000147540) -NWNXLIB_FUNCTION(_ZN4C2DA13Unload2DArrayEv, 0x00000000001491c0) -NWNXLIB_FUNCTION(_ZN4C2DA14GetColumnIndexERK10CExoString, 0x0000000000147110) -NWNXLIB_FUNCTION(_ZN4C2DA17GetNextLineLengthEPcj, 0x0000000000147b50) -NWNXLIB_FUNCTION(_ZN4C2DA18GetCExoStringEntryEiiP10CExoString, 0x00000000001471c0) -NWNXLIB_FUNCTION(_ZN4C2DA18GetCExoStringEntryEiRK10CExoStringPS0_, 0x0000000000147280) -NWNXLIB_FUNCTION(_ZN4C2DA18GetCExoStringEntryERK10CExoStringiPS0_, 0x0000000000147de0) -NWNXLIB_FUNCTION(_ZN4C2DA18GetCExoStringEntryERK10CExoStringS2_PS0_, 0x0000000000147d20) -NWNXLIB_FUNCTION(_ZN4C2DA18SetCExoStringEntryE10CExoStringiS0_, 0x0000000000147f00) -NWNXLIB_FUNCTION(_ZN4C2DA18SetCExoStringEntryE10CExoStringS0_S0_, 0x0000000000147e90) -NWNXLIB_FUNCTION(_ZN4C2DA18SetCExoStringEntryEi10CExoStringS0_, 0x0000000000147390) -NWNXLIB_FUNCTION(_ZN4C2DA18SetCExoStringEntryEii10CExoString, 0x0000000000147340) -NWNXLIB_FUNCTION(_ZN4C2DAC1E7CResRefi, 0x0000000000149270) -NWNXLIB_FUNCTION(_ZN4C2DAC1Ev, 0x00000000001491e0) -NWNXLIB_FUNCTION(_ZN4C2DAC2E7CResRefi, 0x0000000000149270) -NWNXLIB_FUNCTION(_ZN4C2DAC2Ev, 0x00000000001491e0) -NWNXLIB_FUNCTION(_ZN4C2DAD0Ev, 0x00000000001470e0) -NWNXLIB_FUNCTION(_ZN4C2DAD1Ev, 0x00000000001470a0) -NWNXLIB_FUNCTION(_ZN4C2DAD2Ev, 0x00000000001470a0) -NWNXLIB_FUNCTION(_ZN4CRes10GetDemandsEv, 0x000000000013dba0) -NWNXLIB_FUNCTION(_ZN4CRes11GetRequestsEv, 0x000000000013dbb0) -NWNXLIB_FUNCTION(_ZN4CRes13CancelRequestEv, 0x000000000013de40) -NWNXLIB_FUNCTION(_ZN4CRes15OnResourceFreedEv, 0x0000000000143b10) -NWNXLIB_FUNCTION(_ZN4CRes18OnResourceServicedEv, 0x0000000000143b20) -NWNXLIB_FUNCTION(_ZN4CRes20GetFixedResourceSizeEv, 0x0000000000143af0) -NWNXLIB_FUNCTION(_ZN4CRes26GetFixedResourceDataOffsetEv, 0x0000000000143b00) -NWNXLIB_FUNCTION(_ZN4CRes4DumpEi, 0x000000000013dea0) -NWNXLIB_FUNCTION(_ZN4CRes5GetIDEv, 0x000000000013dbc0) -NWNXLIB_FUNCTION(_ZN4CRes5SetIDE5RESID, 0x000000000013dec0) -NWNXLIB_FUNCTION(_ZN4CRes6DemandEv, 0x0000000000141e90) -NWNXLIB_FUNCTION(_ZN4CRes7GetDataEv, 0x000000000013db90) -NWNXLIB_FUNCTION(_ZN4CRes7GetSizeEv, 0x000000000013dbd0) -NWNXLIB_FUNCTION(_ZN4CRes7ReadRawEiPc, 0x000000000013fc40) -NWNXLIB_FUNCTION(_ZN4CRes7ReleaseEv, 0x000000000013f140) -NWNXLIB_FUNCTION(_ZN4CRes7RequestEv, 0x0000000000141ed0) -NWNXLIB_FUNCTION(_ZN4CResC1E5RESID, 0x000000000013db40) -NWNXLIB_FUNCTION(_ZN4CResC1Ev, 0x000000000013dae0) -NWNXLIB_FUNCTION(_ZN4CResC2E5RESID, 0x000000000013db40) -NWNXLIB_FUNCTION(_ZN4CResC2Ev, 0x000000000013dae0) -NWNXLIB_FUNCTION(_ZN4CResD0Ev, 0x000000000013e870) -NWNXLIB_FUNCTION(_ZN4CResD1Ev, 0x000000000013e7f0) -NWNXLIB_FUNCTION(_ZN4CResD2Ev, 0x000000000013e7f0) -NWNXLIB_FUNCTION(_ZN4Task12CExoBaseTask12AttemptQueueEv, 0x00000000004e2070) -NWNXLIB_FUNCTION(_ZN4Task12CExoBaseTask12AttemptStartEv, 0x00000000004e2090) -NWNXLIB_FUNCTION(_ZN4Task12CExoBaseTask13AttemptFinishEv, 0x00000000004e20b0) -NWNXLIB_FUNCTION(_ZN4Task12CExoBaseTaskC1ERK10CExoString, 0x00000000004e1f90) -NWNXLIB_FUNCTION(_ZN4Task12CExoBaseTaskC2ERK10CExoString, 0x00000000004e1f90) -NWNXLIB_FUNCTION(_ZN4Task12CExoBaseTaskD0Ev, 0x00000000004e1ff0) -NWNXLIB_FUNCTION(_ZN4Task12CExoBaseTaskD1Ev, 0x00000000004e1fd0) -NWNXLIB_FUNCTION(_ZN4Task12CExoBaseTaskD2Ev, 0x00000000004e1fd0) -NWNXLIB_FUNCTION(_ZN4Task13CExoTaskGroup4PumpEv, 0x00000000004e56c0) -NWNXLIB_FUNCTION(_ZN4Task13CExoTaskGroup9QueueTaskESt8weak_ptrINS_12CExoBaseTaskEE, 0x00000000004e5c70) -NWNXLIB_FUNCTION(_ZN4Task13CExoTaskGroupC1ERK10CExoStringmh, 0x00000000004e5410) -NWNXLIB_FUNCTION(_ZN4Task13CExoTaskGroupC2ERK10CExoStringmh, 0x00000000004e5410) -NWNXLIB_FUNCTION(_ZN4Task13CExoTaskGroupD1Ev, 0x00000000004e5590) -NWNXLIB_FUNCTION(_ZN4Task13CExoTaskGroupD2Ev, 0x00000000004e5590) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThread10SignalWorkEv, 0x00000000004e4c60) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThread10ThreadFuncEPS0_, 0x00000000004e4ef0) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThread12BlockForWorkEv, 0x00000000004e4cd0) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThread17s_mutex_wait_usecE, 0x0000000000ccd218) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThread19SetMutexMaxWaitTimeEj, 0x00000000004e4cc0) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThread5StartEv, 0x00000000004e4b50) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThread7HasWorkEv, 0x00000000004e4c70) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThread9LinkGroupEPNS_13CExoTaskGroupE, 0x00000000004e5000) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThreadC1ERK10CExoStringm, 0x00000000004e4a70) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThreadC2ERK10CExoStringm, 0x00000000004e4a70) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThreadD1Ev, 0x00000000004e4ae0) -NWNXLIB_FUNCTION(_ZN4Task14CExoTaskThreadD2Ev, 0x00000000004e4ae0) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManager10PumpGroupsEm, 0x00000000004e3a80) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManager15PumpGroupsTimedEmNSt6chrono8durationIlSt5ratioILl1ELl1000EEEE, 0x00000000004e3a90) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManager5StartEv, 0x00000000004e3a40) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManager8AddGroupERK10CExoStringmh, 0x00000000004e3a60) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManager9AddThreadERK10CExoStringm, 0x00000000004e3a70) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManager9QueueTaskESt8weak_ptrINS_12CExoBaseTaskEEm, 0x00000000004e3aa0) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManagerC1Ev, 0x00000000004e2a90) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManagerC2Ev, 0x00000000004e2a90) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManagerD1Ev, 0x00000000004e3350) -NWNXLIB_FUNCTION(_ZN4Task15CExoTaskManagerD2Ev, 0x00000000004e3350) -NWNXLIB_FUNCTION(_ZN4Task15FreeTaskManagerEv, 0x00000000004e2350) -NWNXLIB_FUNCTION(_ZN4Task15InitTaskManagerEj, 0x00000000004e31d0) -NWNXLIB_FUNCTION(_ZN4Task17g_pExoTaskManagerE, 0x0000000000cecd00) -NWNXLIB_FUNCTION(_ZN4Task20CExoTaskManager_impl10PumpGroupsEm, 0x00000000004e3c40) -NWNXLIB_FUNCTION(_ZN4Task20CExoTaskManager_impl15PumpGroupsTimedEmNSt6chrono8durationIlSt5ratioILl1ELl1000EEEE, 0x00000000004e3cb0) -NWNXLIB_FUNCTION(_ZN4Task20CExoTaskManager_impl5StartEv, 0x00000000004e3be0) -NWNXLIB_FUNCTION(_ZN4Task20CExoTaskManager_impl8AddGroupERK10CExoStringmh, 0x00000000004e3e70) -NWNXLIB_FUNCTION(_ZN4Task20CExoTaskManager_impl9AddThreadERK10CExoStringm, 0x00000000004e3fd0) -NWNXLIB_FUNCTION(_ZN4Task20CExoTaskManager_impl9QueueTaskESt8weak_ptrINS_12CExoBaseTaskEEm, 0x00000000004e3d30) -NWNXLIB_FUNCTION(_ZN4Task20CExoTaskManager_implC1Ev, 0x00000000004e3b90) -NWNXLIB_FUNCTION(_ZN4Task20CExoTaskManager_implC2Ev, 0x00000000004e3b90) -NWNXLIB_FUNCTION(_ZN4Task5QueueISt10shared_ptrINS_12CExoBaseTaskEEEEvT_m, 0x00000000001b97d0) -NWNXLIB_FUNCTION(_ZN4Task5QueueISt10shared_ptrINS_8CExoTaskISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIN6NWSync7CNWSync28ResRefBatchInsertEntryResultESaISD_EEEEEEEEvT_, 0x00000000001b98c0) -NWNXLIB_FUNCTION(_ZN4Task6CreateISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIN6NWSync7CNWSync28ResRefBatchInsertEntryResultESaISB_EEEEESt10shared_ptrINS_8CExoTaskIT_EEESt8functionIFSH_vEE, 0x00000000001b9620) -NWNXLIB_FUNCTION(_ZN4Task8CExoTaskISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIN6NWSync7CNWSync28ResRefBatchInsertEntryResultESaISB_EEEE13CollectResultEv, 0x00000000001c1010) -NWNXLIB_FUNCTION(_ZN4Task8CExoTaskISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIN6NWSync7CNWSync28ResRefBatchInsertEntryResultESaISB_EEEE3RunEv, 0x00000000001c1130) -NWNXLIB_FUNCTION(_ZN4Task8CExoTaskISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIN6NWSync7CNWSync28ResRefBatchInsertEntryResultESaISB_EEEED0Ev, 0x00000000001b8f00) -NWNXLIB_FUNCTION(_ZN4Task8CExoTaskISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIN6NWSync7CNWSync28ResRefBatchInsertEntryResultESaISB_EEEED1Ev, 0x00000000001b8eb0) -NWNXLIB_FUNCTION(_ZN4Task8CExoTaskISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIN6NWSync7CNWSync28ResRefBatchInsertEntryResultESaISB_EEEED2Ev, 0x00000000001b8eb0) -NWNXLIB_FUNCTION(_ZNK4Task12CExoBaseTask10IsFinishedEv, 0x00000000004e2060) -NWNXLIB_FUNCTION(_ZNK4Task12CExoBaseTask7GetNameEv, 0x00000000004e2030) -NWNXLIB_FUNCTION(_ZNK4Task12CExoBaseTask7WaitForEv, 0x00000000004e20f0) -NWNXLIB_FUNCTION(_ZNK4Task12CExoBaseTask8FinishedEv, 0x00000000004e20d0) -NWNXLIB_FUNCTION(_ZNK4Task12CExoBaseTask8IsQueuedEv, 0x00000000004e2040) -NWNXLIB_FUNCTION(_ZNK4Task12CExoBaseTask9IsStartedEv, 0x00000000004e2050) -NWNXLIB_FUNCTION(_ZNK4Task13CExoTaskGroup11GetPriorityEv, 0x00000000004e56a0) -NWNXLIB_FUNCTION(_ZNK4Task13CExoTaskGroup12GetWorkItemsEv, 0x00000000004e56b0) -NWNXLIB_FUNCTION(_ZNK4Task13CExoTaskGroup7GetNameEv, 0x00000000004e5680) -NWNXLIB_FUNCTION(_ZNK4Task13CExoTaskGroup8GetFlagsEv, 0x00000000004e5690) -NWNXLIB_FUNCTION(_ZNK4Task14CExoTaskThread7GetNameEv, 0x00000000004e4c40) -NWNXLIB_FUNCTION(_ZNK4Task14CExoTaskThread8GetFlagsEv, 0x00000000004e4c50) -NWNXLIB_FUNCTION(_ZNK4Task15CExoTaskManager7StartedEv, 0x00000000004e3a50) -NWNXLIB_FUNCTION(_ZNK4Task20CExoTaskManager_impl7StartedEv, 0x00000000004e3c30) -NWNXLIB_FUNCTION(_ZN5Plane9TransformERK6VectorRK10Quaternion, 0x00000000007a4360) -NWNXLIB_FUNCTION(_ZN6Vector9NormalizeEv, 0x00000000007a1ba0) -NWNXLIB_FUNCTION(_ZN6VectordVEf, 0x00000000007a2250) -NWNXLIB_FUNCTION(_ZN6VectormIERKS_, 0x00000000007a21e0) -NWNXLIB_FUNCTION(_ZN6VectormLEf, 0x00000000007a2220) -NWNXLIB_FUNCTION(_ZN6VectorpLERKS_, 0x00000000007a21a0) -NWNXLIB_FUNCTION(_ZN7CERFKey4ReadEv, 0x0000000000799860) -NWNXLIB_FUNCTION(_ZN7CERFKey5ResetEv, 0x00000000007997e0) -NWNXLIB_FUNCTION(_ZN7CERFKey5WriteER8CExoFile, 0x0000000000799870) -NWNXLIB_FUNCTION(_ZN7CERFKey7SetNameER10CExoString, 0x0000000000799810) -NWNXLIB_FUNCTION(_ZN7CERFKeyC1Ev, 0x0000000000799520) -NWNXLIB_FUNCTION(_ZN7CERFKeyC2Ev, 0x0000000000799520) -NWNXLIB_FUNCTION(_ZN7CERFKeyD1Ev, 0x00000000007997d0) -NWNXLIB_FUNCTION(_ZN7CERFKeyD2Ev, 0x00000000007997d0) -NWNXLIB_FUNCTION(_ZN7CERFRes4ReadEv, 0x0000000000799970) -NWNXLIB_FUNCTION(_ZN7CERFRes5ResetEv, 0x0000000000799930) -NWNXLIB_FUNCTION(_ZN7CERFRes5WriteER8CExoFilej, 0x0000000000799980) -NWNXLIB_FUNCTION(_ZN7CERFResC1Ev, 0x00000000007998e0) -NWNXLIB_FUNCTION(_ZN7CERFResC2Ev, 0x00000000007998e0) -NWNXLIB_FUNCTION(_ZN7CERFResD1Ev, 0x0000000000799900) -NWNXLIB_FUNCTION(_ZN7CERFResD2Ev, 0x0000000000799900) -NWNXLIB_FUNCTION(_ZN7CExoIni10GetFloatOrERKiRK10CExoStringS4_f, 0x0000000000127760) -NWNXLIB_FUNCTION(_ZN7CExoIni12ReadIniEntryER10CExoStringRKiRKS0_S5_, 0x00000000001276a0) -NWNXLIB_FUNCTION(_ZN7CExoIni13WriteIniEntryERK10CExoStringRKiS2_S2_i, 0x0000000000127810) -NWNXLIB_FUNCTION(_ZN7CExoIni8GetIntOrERKiRK10CExoStringS4_i, 0x00000000001276b0) -NWNXLIB_FUNCTION(_ZN7CExoIniC1E10CExoString, 0x00000000001275c0) -NWNXLIB_FUNCTION(_ZN7CExoIniC2E10CExoString, 0x00000000001275c0) -NWNXLIB_FUNCTION(_ZN7CExoIniD1Ev, 0x0000000000127660) -NWNXLIB_FUNCTION(_ZN7CExoIniD2Ev, 0x0000000000127660) -NWNXLIB_FUNCTION(_ZN7CNWArea10GetIsNightEv, 0x000000000020d8e0) -NWNXLIB_FUNCTION(_ZN7CNWArea10SetIsNightEi, 0x000000000020b390) -NWNXLIB_FUNCTION(_ZN7CNWArea13SetCustomWindE6Vectorfff, 0x000000000020d8f0) -NWNXLIB_FUNCTION(_ZN7CNWArea14NoNonWalkPolysEfffffffj, 0x000000000020d6a0) -NWNXLIB_FUNCTION(_ZN7CNWArea15AddStaticObjectEjRK6VectorS2_iPS0_iPi, 0x000000000020be10) -NWNXLIB_FUNCTION(_ZN7CNWArea16MAX_TILE_EPSILONE, 0x00000000008d1ba0) -NWNXLIB_FUNCTION(_ZN7CNWArea16MIN_TILE_EPSILONE, 0x00000000008d1b9c) -NWNXLIB_FUNCTION(_ZN7CNWArea17NoCreaturesOnLineEffffP20CPathfindInformationiiPji, 0x000000000020a150) -NWNXLIB_FUNCTION(_ZN7CNWArea18RemoveStaticObjectEi, 0x000000000020d6e0) -NWNXLIB_FUNCTION(_ZN7CNWArea19ReplaceStaticObjectEijRK6VectorS2_iPS0_iPi, 0x000000000020b6d0) -NWNXLIB_FUNCTION(_ZN7CNWArea19SPLINE_COSINE_LIMITE, 0x00000000008d1b94) -NWNXLIB_FUNCTION(_ZN7CNWArea20AddStaticBoundingBoxEjRK6VectorS2_, 0x000000000020d930) -NWNXLIB_FUNCTION(_ZN7CNWArea20GetIsIDInExcludeListEjP13CExoArrayListIP11CGameObjectE, 0x000000000020dbe0) -NWNXLIB_FUNCTION(_ZN7CNWArea21GrowStaticObjectArrayEv, 0x000000000020b980) -NWNXLIB_FUNCTION(_ZN7CNWArea21IntersectLineSegmentsEffffffffPfS0_, 0x000000000020c2b0) -NWNXLIB_FUNCTION(_ZN7CNWArea21NoNonWalkPolysInDoorsEfffffffjRjiP13CExoArrayListIP11CGameObjectEi, 0x000000000020c5b0) -NWNXLIB_FUNCTION(_ZN7CNWArea22HandleTransparentDoorsEfffffffjRjiP13CExoArrayListIP11CGameObjectEi, 0x000000000020dbd0) -NWNXLIB_FUNCTION(_ZN7CNWArea22NoNonWalkPolysDetailedEfffffffjRjiP13CExoArrayListIP11CGameObjectEi, 0x000000000020c9e0) -NWNXLIB_FUNCTION(_ZN7CNWArea23InitializeStaticObjectsEv, 0x000000000020c230) -NWNXLIB_FUNCTION(_ZN7CNWArea23RemoveStaticBoundingBoxEj, 0x000000000020db10) -NWNXLIB_FUNCTION(_ZN7CNWArea24GrowStaticObjectVerticesEi, 0x000000000020bd00) -NWNXLIB_FUNCTION(_ZN7CNWArea25GrowStaticObjectTrianglesEi, 0x000000000020bc40) -NWNXLIB_FUNCTION(_ZN7CNWArea25MAX_INTER_TILE_SUCCESSORSE, 0x00000000008d1ba8) -NWNXLIB_FUNCTION(_ZN7CNWArea26GetStaticObjectBoundingBoxEiR6VectorS1_, 0x000000000020b940) -NWNXLIB_FUNCTION(_ZN7CNWArea6GetFogEPiP6Vector, 0x000000000020d8b0) -NWNXLIB_FUNCTION(_ZN7CNWArea6SetFogEi6Vector, 0x000000000020b360) -NWNXLIB_FUNCTION(_ZN7CNWArea7EPSILONE, 0x00000000008d1b98) -NWNXLIB_FUNCTION(_ZN7CNWArea7SetWindEh, 0x000000000020b3b0) -NWNXLIB_FUNCTION(_ZN7CNWArea9TILE_SIZEE, 0x00000000008d1ba4) -NWNXLIB_FUNCTION(_ZN7CNWAreaC1Ev, 0x000000000020b4b0) -NWNXLIB_FUNCTION(_ZN7CNWAreaC2Ev, 0x000000000020b4b0) -NWNXLIB_FUNCTION(_ZN7CNWAreaD0Ev, 0x000000000020b6a0) -NWNXLIB_FUNCTION(_ZN7CNWAreaD1Ev, 0x000000000020b5e0) -NWNXLIB_FUNCTION(_ZN7CNWAreaD2Ev, 0x000000000020b5e0) -NWNXLIB_FUNCTION(_ZN7CNWFeat11GetNameTextEv, 0x00000000008b2730) -NWNXLIB_FUNCTION(_ZN7CNWFeat18GetDescriptionTextEv, 0x00000000008b2680) -NWNXLIB_FUNCTION(_ZN7CNWFeatC1Ev, 0x00000000008b25e0) -NWNXLIB_FUNCTION(_ZN7CNWFeatC2Ev, 0x00000000008b25e0) -NWNXLIB_FUNCTION(_ZN7CNWFeatD1Ev, 0x00000000008b2670) -NWNXLIB_FUNCTION(_ZN7CNWFeatD2Ev, 0x00000000008b2670) -NWNXLIB_FUNCTION(_ZN7CNWItem29GetLayeredTextureColorPerPartEhh, 0x000000000089d850) -NWNXLIB_FUNCTION(_ZN7CNWItem29SetLayeredTextureColorPerPartEhhh, 0x000000000089d7d0) -NWNXLIB_FUNCTION(_ZN7CNWItemC1Ev, 0x000000000089d790) -NWNXLIB_FUNCTION(_ZN7CNWItemC2Ev, 0x000000000089d790) -NWNXLIB_FUNCTION(_ZN7CNWItemD0Ev, 0x000000000089b7c0) -NWNXLIB_FUNCTION(_ZN7CNWItemD1Ev, 0x000000000089b780) -NWNXLIB_FUNCTION(_ZN7CNWItemD2Ev, 0x000000000089b780) -NWNXLIB_FUNCTION(_ZN7CNWRace10CRACE_OOZEE, 0x000000000095fc14) -NWNXLIB_FUNCTION(_ZN7CNWRace11CRACE_BEASTE, 0x000000000095fc34) -NWNXLIB_FUNCTION(_ZN7CNWRace11CRACE_DWARFE, 0x000000000095fc46) -NWNXLIB_FUNCTION(_ZN7CNWRace11CRACE_GIANTE, 0x000000000095fc22) -NWNXLIB_FUNCTION(_ZN7CNWRace11CRACE_GNOMEE, 0x000000000095fc42) -NWNXLIB_FUNCTION(_ZN7CNWRace11CRACE_HUMANE, 0x000000000095fc3a) -NWNXLIB_FUNCTION(_ZN7CNWRace11GetNameTextEv, 0x000000000089daa0) -NWNXLIB_FUNCTION(_ZN7CNWRace12CRACE_ANIMALE, 0x000000000095fc36) -NWNXLIB_FUNCTION(_ZN7CNWRace12CRACE_DRAGONE, 0x000000000095fc30) -NWNXLIB_FUNCTION(_ZN7CNWRace12CRACE_UNDEADE, 0x000000000095fc1a) -NWNXLIB_FUNCTION(_ZN7CNWRace12CRACE_VERMINE, 0x000000000095fc18) -NWNXLIB_FUNCTION(_ZN7CNWRace13CRACE_HALFELFE, 0x000000000095fc40) -NWNXLIB_FUNCTION(_ZN7CNWRace13CRACE_HALFORCE, 0x000000000095fc3c) -NWNXLIB_FUNCTION(_ZN7CNWRace14CRACE_HALFLINGE, 0x000000000095fc3e) -NWNXLIB_FUNCTION(_ZN7CNWRace14CRACE_OUTSIDERE, 0x000000000095fc1e) -NWNXLIB_FUNCTION(_ZN7CNWRace14LoadFeatsTableE10CExoString, 0x000000000089dd60) -NWNXLIB_FUNCTION(_ZN7CNWRace15CRACE_CONSTRUCTE, 0x000000000095fc32) -NWNXLIB_FUNCTION(_ZN7CNWRace15CRACE_ELEMENTALE, 0x000000000095fc26) -NWNXLIB_FUNCTION(_ZN7CNWRace16CRACE_ABERRATIONE, 0x000000000095fc38) -NWNXLIB_FUNCTION(_ZN7CNWRace16GetAbilityAdjustEh, 0x000000000089e060) -NWNXLIB_FUNCTION(_ZN7CNWRace17GetConverNameTextEv, 0x000000000089db50) -NWNXLIB_FUNCTION(_ZN7CNWRace17GetNamePluralTextEv, 0x000000000089dcb0) -NWNXLIB_FUNCTION(_ZN7CNWRace18CRACE_HUMANOID_ORCE, 0x000000000095fc2a) -NWNXLIB_FUNCTION(_ZN7CNWRace18CRACE_INVALID_RACEE, 0x000000000095fc16) -NWNXLIB_FUNCTION(_ZN7CNWRace18CRACE_SHAPECHANGERE, 0x000000000095fc1c) -NWNXLIB_FUNCTION(_ZN7CNWRace18GetDescriptionTextEv, 0x000000000089d940) -NWNXLIB_FUNCTION(_ZN7CNWRace19CRACE_MAGICAL_BEASTE, 0x000000000095fc20) -NWNXLIB_FUNCTION(_ZN7CNWRace22GetConverNameLowerTextEv, 0x000000000089dc00) -NWNXLIB_FUNCTION(_ZN7CNWRace23GetDefaultBiographyTextEv, 0x000000000089d9f0) -NWNXLIB_FUNCTION(_ZN7CNWRace23IsFirstLevelGrantedFeatEt, 0x000000000089e010) -NWNXLIB_FUNCTION(_ZN7CNWRace24CRACE_HUMANOID_GOBLINOIDE, 0x000000000095fc2e) -NWNXLIB_FUNCTION(_ZN7CNWRace24CRACE_HUMANOID_MONSTROUSE, 0x000000000095fc2c) -NWNXLIB_FUNCTION(_ZN7CNWRace24CRACE_HUMANOID_REPTILIANE, 0x000000000095fc28) -NWNXLIB_FUNCTION(_ZN7CNWRace9CRACE_ELFE, 0x000000000095fc44) -NWNXLIB_FUNCTION(_ZN7CNWRace9CRACE_FEYE, 0x000000000095fc24) -NWNXLIB_FUNCTION(_ZN7CNWRaceC1Ev, 0x000000000089d890) -NWNXLIB_FUNCTION(_ZN7CNWRaceC2Ev, 0x000000000089d890) -NWNXLIB_FUNCTION(_ZN7CNWRaceD1Ev, 0x000000000089d900) -NWNXLIB_FUNCTION(_ZN7CNWRaceD2Ev, 0x000000000089d900) -NWNXLIB_FUNCTION(_ZN7CNWTile10TILE_WIDTHE, 0x00000000008d1b60) -NWNXLIB_FUNCTION(_ZN7CNWTile11GetAnimLoopEPhS0_S0_, 0x000000000020a970) -NWNXLIB_FUNCTION(_ZN7CNWTile11GetLocationEPiS0_, 0x000000000020a650) -NWNXLIB_FUNCTION(_ZN7CNWTile11SetAnimLoopEhhh, 0x000000000020a9c0) -NWNXLIB_FUNCTION(_ZN7CNWTile11SetPositionEiiif, 0x000000000020a8c0) -NWNXLIB_FUNCTION(_ZN7CNWTile11TILE_LENGTHE, 0x00000000008d1b5c) -NWNXLIB_FUNCTION(_ZN7CNWTile14GOAL_TILE_EXITE, 0x00000000008d1b48) -NWNXLIB_FUNCTION(_ZN7CNWTile14MAX_TILE_EXITSE, 0x00000000008d1b4c) -NWNXLIB_FUNCTION(_ZN7CNWTile14SetOrientationEi, 0x000000000020a920) -NWNXLIB_FUNCTION(_ZN7CNWTile14TRIADJ_NO_EDGEE, 0x00000000008d1b50) -NWNXLIB_FUNCTION(_ZN7CNWTile14TRIADJ_UNKNOWNE, 0x00000000008d1b58) -NWNXLIB_FUNCTION(_ZN7CNWTile15TRIADJ_TILE_ENDE, 0x00000000008d1b54) -NWNXLIB_FUNCTION(_ZN7CNWTile17GetMainLightColorEPhS0_, 0x000000000020a930) -NWNXLIB_FUNCTION(_ZN7CNWTile17SetMainLightColorEhh, 0x000000000020a990) -NWNXLIB_FUNCTION(_ZN7CNWTile17SetReplaceTextureEh, 0x000000000020a9b0) -NWNXLIB_FUNCTION(_ZN7CNWTile17UNKNOWN_TILE_EXITE, 0x00000000008d1b44) -NWNXLIB_FUNCTION(_ZN7CNWTile19GetSourceLightColorEPhS0_, 0x000000000020a950) -NWNXLIB_FUNCTION(_ZN7CNWTile19SetSourceLightColorEhh, 0x000000000020a9a0) -NWNXLIB_FUNCTION(_ZN7CNWTile21RotateCanonicalToRealEffPfS0_, 0x000000000020a7d0) -NWNXLIB_FUNCTION(_ZN7CNWTile21RotateRealToCanonicalEffPfS0_, 0x000000000020a840) -NWNXLIB_FUNCTION(_ZN7CNWTile23TIMEUNIT_NODE_EXPANSIONE, 0x00000000008d1b40) -NWNXLIB_FUNCTION(_ZN7CNWTile25RotateCanonicalToRealTileEffPfS0_, 0x000000000020a670) -NWNXLIB_FUNCTION(_ZN7CNWTile25RotateRealToCanonicalTileEffPfS0_, 0x000000000020a720) -NWNXLIB_FUNCTION(_ZN7CNWTile28INTRATILE_ESTIMATE_INCREMENTE, 0x00000000008d1b38) -NWNXLIB_FUNCTION(_ZN7CNWTile29INTRATILE_ESTIMATE_MULTIPLIERE, 0x00000000008d1b34) -NWNXLIB_FUNCTION(_ZN7CNWTile36TIMEUNIT_NODE_ALTERNATIVE_GENERATIONE, 0x00000000008d1b3c) -NWNXLIB_FUNCTION(_ZN7CNWTile5SetIDEi, 0x000000000020a8b0) -NWNXLIB_FUNCTION(_ZN7CNWTileC1Ev, 0x000000000020a610) -NWNXLIB_FUNCTION(_ZN7CNWTileC2Ev, 0x000000000020a610) -NWNXLIB_FUNCTION(_ZN7CNWTileD0Ev, 0x000000000020a600) -NWNXLIB_FUNCTION(_ZN7CNWTileD1Ev, 0x000000000020a5f0) -NWNXLIB_FUNCTION(_ZN7CNWTileD2Ev, 0x000000000020a5f0) -NWNXLIB_FUNCTION(_ZN7CRes2DA10Get2DASizeEv, 0x000000000014f650) -NWNXLIB_FUNCTION(_ZN7CRes2DA13Get2DADataPtrEv, 0x000000000014f640) -NWNXLIB_FUNCTION(_ZN7CRes2DA15Get2DAHeaderPtrEv, 0x000000000014f630) -NWNXLIB_FUNCTION(_ZN7CRes2DA15OnResourceFreedEv, 0x000000000014f4c0) -NWNXLIB_FUNCTION(_ZN7CRes2DA18OnResourceServicedEv, 0x000000000014f540) -NWNXLIB_FUNCTION(_ZN7CRes2DA8IsLoadedEv, 0x000000000014f660) -NWNXLIB_FUNCTION(_ZN7CRes2DAC1Ev, 0x000000000014f5f0) -NWNXLIB_FUNCTION(_ZN7CRes2DAC2Ev, 0x000000000014f5f0) -NWNXLIB_FUNCTION(_ZN7CRes2DAD0Ev, 0x000000000014f510) -NWNXLIB_FUNCTION(_ZN7CRes2DAD1Ev, 0x000000000014f4f0) -NWNXLIB_FUNCTION(_ZN7CRes2DAD2Ev, 0x000000000014f4f0) -NWNXLIB_FUNCTION(_ZN7CResARED0Ev, 0x00000000003b0620) -NWNXLIB_FUNCTION(_ZN7CResARED1Ev, 0x00000000003b0600) -NWNXLIB_FUNCTION(_ZN7CResARED2Ev, 0x00000000003b0600) -NWNXLIB_FUNCTION(_ZN7CResDWK10GetDWKSizeEv, 0x00000000008b28d0) -NWNXLIB_FUNCTION(_ZN7CResDWK13GetDWKDataPtrEv, 0x00000000008b28c0) -NWNXLIB_FUNCTION(_ZN7CResDWK15OnResourceFreedEv, 0x00000000008b27e0) -NWNXLIB_FUNCTION(_ZN7CResDWK18OnResourceServicedEv, 0x00000000008b2800) -NWNXLIB_FUNCTION(_ZN7CResDWK8IsLoadedEv, 0x00000000008b28e0) -NWNXLIB_FUNCTION(_ZN7CResDWKC1Ev, 0x00000000008b2880) -NWNXLIB_FUNCTION(_ZN7CResDWKC2Ev, 0x00000000008b2880) -NWNXLIB_FUNCTION(_ZN7CResDWKD0Ev, 0x00000000008b2850) -NWNXLIB_FUNCTION(_ZN7CResDWKD1Ev, 0x00000000008b2830) -NWNXLIB_FUNCTION(_ZN7CResDWKD2Ev, 0x00000000008b2830) -NWNXLIB_FUNCTION(_ZN7CResGFF12AddDataFieldEjjj, 0x000000000079b9e0) -NWNXLIB_FUNCTION(_ZN7CResGFF12GetDataFieldEP12CResGFFFieldRj, 0x000000000079b160) -NWNXLIB_FUNCTION(_ZN7CResGFF12GetFieldSizeEP10CResStructPcj, 0x000000000079c1d0) -NWNXLIB_FUNCTION(_ZN7CResGFF12GetFieldTypeEP10CResStructPcj, 0x000000000079c140) -NWNXLIB_FUNCTION(_ZN7CResGFF12GetListCountEP8CResList, 0x000000000079c370) -NWNXLIB_FUNCTION(_ZN7CResGFF12GetTotalSizeEv, 0x000000000079e360) -NWNXLIB_FUNCTION(_ZN7CResGFF12ReadFieldINTEP10CResStructPcRii, 0x000000000079c810) -NWNXLIB_FUNCTION(_ZN7CResGFF12WriteGFFDataER8CExoFileRj, 0x000000000079e340) -NWNXLIB_FUNCTION(_ZN7CResGFF12WriteGFFFileEPc, 0x000000000079e860) -NWNXLIB_FUNCTION(_ZN7CResGFF12WriteGFFFileERK10CExoStringt, 0x00000000007a01c0) -NWNXLIB_FUNCTION(_ZN7CResGFF13CreateGFFFileEP10CResStructRK10CExoStringS4_, 0x000000000079e1a0) -NWNXLIB_FUNCTION(_ZN7CResGFF13FinalizeSetupEv, 0x000000000079af80) -NWNXLIB_FUNCTION(_ZN7CResGFF13GetFieldCountEP10CResStruct, 0x000000000079c100) -NWNXLIB_FUNCTION(_ZN7CResGFF13GetFieldCountEP13CResGFFStruct, 0x000000000079c0e0) -NWNXLIB_FUNCTION(_ZN7CResGFF13GetFieldLabelEP10CResStructj, 0x000000000079c180) -NWNXLIB_FUNCTION(_ZN7CResGFF13IsDataInPlaceEj, 0x000000000079b3b0) -NWNXLIB_FUNCTION(_ZN7CResGFF13PrepareHeaderEv, 0x000000000079ae30) -NWNXLIB_FUNCTION(_ZN7CResGFF13ReadFieldBYTEEP10CResStructPcRih, 0x000000000079c540) -NWNXLIB_FUNCTION(_ZN7CResGFF13ReadFieldCHAREP10CResStructPcRic, 0x000000000079c5d0) -NWNXLIB_FUNCTION(_ZN7CResGFF13ReadFieldVOIDEP10CResStructPvjPcRiS2_, 0x000000000079ced0) -NWNXLIB_FUNCTION(_ZN7CResGFF13ReadFieldWORDEP10CResStructPcRit, 0x000000000079c660) -NWNXLIB_FUNCTION(_ZN7CResGFF13WriteFieldINTEP10CResStructiPc, 0x000000000079d690) -NWNXLIB_FUNCTION(_ZN7CResGFF14AddListElementEP10CResStructP8CResListj, 0x000000000079d090) -NWNXLIB_FUNCTION(_ZN7CResGFF14GetElementTypeEP10CResStruct, 0x000000000079c0a0) -NWNXLIB_FUNCTION(_ZN7CResGFF14GetGFFFileInfoEP10CExoStringS1_, 0x000000000079c040) -NWNXLIB_FUNCTION(_ZN7CResGFF14GetListElementEP10CResStructP8CResListj, 0x000000000079c3f0) -NWNXLIB_FUNCTION(_ZN7CResGFF14ReadFieldDWORDEP10CResStructPcRij, 0x000000000079c780) -NWNXLIB_FUNCTION(_ZN7CResGFF14ReadFieldFLOATEP10CResStructPcRif, 0x000000000079c8a0) -NWNXLIB_FUNCTION(_ZN7CResGFF14ReadFieldINT64EP10CResStructPcRil, 0x000000000079c9e0) -NWNXLIB_FUNCTION(_ZN7CResGFF14ReadFieldSHORTEP10CResStructPcRis, 0x000000000079c6f0) -NWNXLIB_FUNCTION(_ZN7CResGFF14WriteFieldBYTEEP10CResStructhPc, 0x000000000079d280) -NWNXLIB_FUNCTION(_ZN7CResGFF14WriteFieldCHAREP10CResStructcPc, 0x000000000079d350) -NWNXLIB_FUNCTION(_ZN7CResGFF14WriteFieldVOIDEP10CResStructPKvjPc, 0x000000000079e0d0) -NWNXLIB_FUNCTION(_ZN7CResGFF14WriteFieldWORDEP10CResStructtPc, 0x000000000079d420) -NWNXLIB_FUNCTION(_ZN7CResGFF15FIELD_STARTSIZEE, 0x000000000094d7d0) -NWNXLIB_FUNCTION(_ZN7CResGFF15GetDataFromFileEPc, 0x000000000079bf40) -NWNXLIB_FUNCTION(_ZN7CResGFF15GetFieldByLabelEP10CResStructPc, 0x000000000079b220) -NWNXLIB_FUNCTION(_ZN7CResGFF15LABEL_STARTSIZEE, 0x000000000094d7cc) -NWNXLIB_FUNCTION(_ZN7CResGFF15OnResourceFreedEv, 0x000000000079a6e0) -NWNXLIB_FUNCTION(_ZN7CResGFF15ReadFieldDOUBLEEP10CResStructPcRid, 0x000000000079ca90) -NWNXLIB_FUNCTION(_ZN7CResGFF15ReleaseResourceEv, 0x000000000079abe0) -NWNXLIB_FUNCTION(_ZN7CResGFF15WriteFieldDWORDEP10CResStructjPc, 0x000000000079d5c0) -NWNXLIB_FUNCTION(_ZN7CResGFF15WriteFieldFLOATEP10CResStructfPc, 0x000000000079da00) -NWNXLIB_FUNCTION(_ZN7CResGFF15WriteFieldINT64EP10CResStructlPc, 0x000000000079d8b0) -NWNXLIB_FUNCTION(_ZN7CResGFF15WriteFieldSHORTEP10CResStructsPc, 0x000000000079d4f0) -NWNXLIB_FUNCTION(_ZN7CResGFF16GetFieldStringIDEP10CResStructj, 0x000000000079c190) -NWNXLIB_FUNCTION(_ZN7CResGFF16ReadFieldCResRefEP10CResStructPcRiRK7CResRef, 0x000000000079cb40) -NWNXLIB_FUNCTION(_ZN7CResGFF16ReadFieldDWORD64EP10CResStructPcRim, 0x000000000079c930) -NWNXLIB_FUNCTION(_ZN7CResGFF16STRUCT_STARTSIZEE, 0x000000000094d7d4) -NWNXLIB_FUNCTION(_ZN7CResGFF16ValidateAndSetupEv, 0x000000000079ea10) -NWNXLIB_FUNCTION(_ZN7CResGFF16WriteFieldDOUBLEEP10CResStructdPc, 0x000000000079dad0) -NWNXLIB_FUNCTION(_ZN7CResGFF17AddDataLayoutListEjjj, 0x000000000079be20) -NWNXLIB_FUNCTION(_ZN7CResGFF17AddStructToStructEP10CResStructS1_Pcj, 0x000000000079d1c0) -NWNXLIB_FUNCTION(_ZN7CResGFF17GetDataLayoutListEP12CResGFFFieldRj, 0x000000000079b1e0) -NWNXLIB_FUNCTION(_ZN7CResGFF17GetTopLevelStructEP10CResStruct, 0x000000000079c520) -NWNXLIB_FUNCTION(_ZN7CResGFF17WriteFieldCResRefEP10CResStructRK7CResRefPc, 0x000000000079dc20) -NWNXLIB_FUNCTION(_ZN7CResGFF17WriteFieldDWORD64EP10CResStructmPc, 0x000000000079d760) -NWNXLIB_FUNCTION(_ZN7CResGFF17WriteGFFToPointerEPPvRi, 0x000000000079e670) -NWNXLIB_FUNCTION(_ZN7CResGFF18AddDataLayoutFieldEjjj, 0x000000000079baf0) -NWNXLIB_FUNCTION(_ZN7CResGFF18GetDataFromPointerEPvib, 0x000000000079c020) -NWNXLIB_FUNCTION(_ZN7CResGFF18GetDataLayoutFieldEP12CResGFFFieldRj, 0x000000000079b1a0) -NWNXLIB_FUNCTION(_ZN7CResGFF18OnResourceServicedEv, 0x00000000007a0040) -NWNXLIB_FUNCTION(_ZN7CResGFF19DATAFIELD_STARTSIZEE, 0x000000000094d7c8) -NWNXLIB_FUNCTION(_ZN7CResGFF19GetStructFromStructEP10CResStructS1_Pc, 0x000000000079c4a0) -NWNXLIB_FUNCTION(_ZN7CResGFF19ReadFieldCExoStringEP10CResStructPcRiRK10CExoString, 0x000000000079cc10) -NWNXLIB_FUNCTION(_ZN7CResGFF20InitializeForWritingEv, 0x000000000079b3e0) -NWNXLIB_FUNCTION(_ZN7CResGFF20WriteFieldCExoStringEP10CResStructRK10CExoStringPc, 0x000000000079dd80) -NWNXLIB_FUNCTION(_ZN7CResGFF22ReadFieldCExoLocStringEP10CResStructPcRiRK13CExoLocString, 0x000000000079cce0) -NWNXLIB_FUNCTION(_ZN7CResGFF23WriteFieldCExoLocStringEP10CResStruct13CExoLocStringPc, 0x000000000079dea0) -NWNXLIB_FUNCTION(_ZN7CResGFF24DATALAYOUTLIST_STARTSIZEE, 0x000000000094d7c0) -NWNXLIB_FUNCTION(_ZN7CResGFF25DATALAYOUTFIELD_STARTSIZEE, 0x000000000094d7c4) -NWNXLIB_FUNCTION(_ZN7CResGFF4PackEhj, 0x000000000079e3a0) -NWNXLIB_FUNCTION(_ZN7CResGFF7AddListEP8CResListP10CResStructPc, 0x000000000079cfa0) -NWNXLIB_FUNCTION(_ZN7CResGFF7GetListEP8CResListP10CResStructPc, 0x000000000079c2c0) -NWNXLIB_FUNCTION(_ZN7CResGFF7VERSIONE, 0x0000000000cd5ca8) -NWNXLIB_FUNCTION(_ZN7CResGFF8AddFieldEP10CResStructPcj, 0x000000000079bc10) -NWNXLIB_FUNCTION(_ZN7CResGFF8AddLabelEPc, 0x000000000079b880) -NWNXLIB_FUNCTION(_ZN7CResGFF8GetFieldEP10CResStructj, 0x000000000079b090) -NWNXLIB_FUNCTION(_ZN7CResGFF8GetLabelEP10CResStructj, 0x000000000079b120) -NWNXLIB_FUNCTION(_ZN7CResGFF9AddStructEj, 0x000000000079b790) -NWNXLIB_FUNCTION(_ZN7CResGFF9GetStructEP10CResStruct, 0x000000000079b050) -NWNXLIB_FUNCTION(_ZN7CResGFFC1EtPcRK7CResRef, 0x000000000079aa40) -NWNXLIB_FUNCTION(_ZN7CResGFFC1Ev, 0x000000000079a920) -NWNXLIB_FUNCTION(_ZN7CResGFFC2EtPcRK7CResRef, 0x000000000079aa40) -NWNXLIB_FUNCTION(_ZN7CResGFFC2Ev, 0x000000000079a920) -NWNXLIB_FUNCTION(_ZN7CResGFFD0Ev, 0x000000000079ae00) -NWNXLIB_FUNCTION(_ZN7CResGFFD1Ev, 0x000000000079acd0) -NWNXLIB_FUNCTION(_ZN7CResGFFD2Ev, 0x000000000079acd0) -NWNXLIB_FUNCTION(_ZN7CResIFOD0Ev, 0x00000000002dec40) -NWNXLIB_FUNCTION(_ZN7CResIFOD1Ev, 0x00000000002dec20) -NWNXLIB_FUNCTION(_ZN7CResIFOD2Ev, 0x00000000002dec20) -NWNXLIB_FUNCTION(_ZN7CResLTR15OnResourceFreedEv, 0x00000000007a85e0) -NWNXLIB_FUNCTION(_ZN7CResLTR18OnResourceServicedEv, 0x00000000007a8940) -NWNXLIB_FUNCTION(_ZN7CResLTRC1Ev, 0x00000000007a9270) -NWNXLIB_FUNCTION(_ZN7CResLTRC2Ev, 0x00000000007a9270) -NWNXLIB_FUNCTION(_ZN7CResLTRD0Ev, 0x00000000007a85b0) -NWNXLIB_FUNCTION(_ZN7CResLTRD1Ev, 0x00000000007a8590) -NWNXLIB_FUNCTION(_ZN7CResLTRD2Ev, 0x00000000007a8590) -NWNXLIB_FUNCTION(_ZN7CResNCS10GetNCSSizeEv, 0x00000000007d53c0) -NWNXLIB_FUNCTION(_ZN7CResNCS13GetNCSDataPtrEv, 0x00000000007d53b0) -NWNXLIB_FUNCTION(_ZN7CResNCS15OnResourceFreedEv, 0x00000000007d52d0) -NWNXLIB_FUNCTION(_ZN7CResNCS18OnResourceServicedEv, 0x00000000007d52f0) -NWNXLIB_FUNCTION(_ZN7CResNCS8IsLoadedEv, 0x00000000007d53d0) -NWNXLIB_FUNCTION(_ZN7CResNCSC1Ev, 0x00000000007d5370) -NWNXLIB_FUNCTION(_ZN7CResNCSC2Ev, 0x00000000007d5370) -NWNXLIB_FUNCTION(_ZN7CResNCSD0Ev, 0x00000000007d5340) -NWNXLIB_FUNCTION(_ZN7CResNCSD1Ev, 0x00000000007d5320) -NWNXLIB_FUNCTION(_ZN7CResNCSD2Ev, 0x00000000007d5320) -NWNXLIB_FUNCTION(_ZN7CResNDB10GetNDBSizeEv, 0x00000000007d54d0) -NWNXLIB_FUNCTION(_ZN7CResNDB13GetNDBDataPtrEv, 0x00000000007d54c0) -NWNXLIB_FUNCTION(_ZN7CResNDB15OnResourceFreedEv, 0x00000000007d53e0) -NWNXLIB_FUNCTION(_ZN7CResNDB18OnResourceServicedEv, 0x00000000007d5400) -NWNXLIB_FUNCTION(_ZN7CResNDB8IsLoadedEv, 0x00000000007d54e0) -NWNXLIB_FUNCTION(_ZN7CResNDBC1Ev, 0x00000000007d5480) -NWNXLIB_FUNCTION(_ZN7CResNDBC2Ev, 0x00000000007d5480) -NWNXLIB_FUNCTION(_ZN7CResNDBD0Ev, 0x00000000007d5450) -NWNXLIB_FUNCTION(_ZN7CResNDBD1Ev, 0x00000000007d5430) -NWNXLIB_FUNCTION(_ZN7CResNDBD2Ev, 0x00000000007d5430) -NWNXLIB_FUNCTION(_ZN7CResNSS10GetNSSSizeEv, 0x00000000007d55e0) -NWNXLIB_FUNCTION(_ZN7CResNSS13GetNSSDataPtrEv, 0x00000000007d55d0) -NWNXLIB_FUNCTION(_ZN7CResNSS15OnResourceFreedEv, 0x00000000007d54f0) -NWNXLIB_FUNCTION(_ZN7CResNSS18OnResourceServicedEv, 0x00000000007d5510) -NWNXLIB_FUNCTION(_ZN7CResNSS8IsLoadedEv, 0x00000000007d55f0) -NWNXLIB_FUNCTION(_ZN7CResNSSC1Ev, 0x00000000007d5590) -NWNXLIB_FUNCTION(_ZN7CResNSSC2Ev, 0x00000000007d5590) -NWNXLIB_FUNCTION(_ZN7CResNSSD0Ev, 0x00000000007d5560) -NWNXLIB_FUNCTION(_ZN7CResNSSD1Ev, 0x00000000007d5540) -NWNXLIB_FUNCTION(_ZN7CResNSSD2Ev, 0x00000000007d5540) -NWNXLIB_FUNCTION(_ZN7CResPWK10GetPWKSizeEv, 0x00000000008b29e0) -NWNXLIB_FUNCTION(_ZN7CResPWK13GetPWKDataPtrEv, 0x00000000008b29d0) -NWNXLIB_FUNCTION(_ZN7CResPWK15OnResourceFreedEv, 0x00000000008b28f0) -NWNXLIB_FUNCTION(_ZN7CResPWK18OnResourceServicedEv, 0x00000000008b2910) -NWNXLIB_FUNCTION(_ZN7CResPWK8IsLoadedEv, 0x00000000008b29f0) -NWNXLIB_FUNCTION(_ZN7CResPWKC1Ev, 0x00000000008b2990) -NWNXLIB_FUNCTION(_ZN7CResPWKC2Ev, 0x00000000008b2990) -NWNXLIB_FUNCTION(_ZN7CResPWKD0Ev, 0x00000000008b2960) -NWNXLIB_FUNCTION(_ZN7CResPWKD1Ev, 0x00000000008b2940) -NWNXLIB_FUNCTION(_ZN7CResPWKD2Ev, 0x00000000008b2940) -NWNXLIB_FUNCTION(_ZN7CResRef13RETURN_BUFFERE, 0x0000000000ce96d0) -NWNXLIB_FUNCTION(_ZN7CResRefaSEPKc, 0x000000000013d940) -NWNXLIB_FUNCTION(_ZN7CResRefaSEPKh, 0x000000000013d700) -NWNXLIB_FUNCTION(_ZN7CResRefaSERK10CExoString, 0x000000000013d7c0) -NWNXLIB_FUNCTION(_ZN7CResRefaSERKS_, 0x000000000013d6e0) -NWNXLIB_FUNCTION(_ZN7CResRefC1EPKc, 0x000000000013d9c0) -NWNXLIB_FUNCTION(_ZN7CResRefC1EPKh, 0x000000000013d780) -NWNXLIB_FUNCTION(_ZN7CResRefC1EPKhh, 0x000000000013d8b0) -NWNXLIB_FUNCTION(_ZN7CResRefC1ERK10CExoString, 0x000000000013d870) -NWNXLIB_FUNCTION(_ZN7CResRefC1Ev, 0x000000000013d480) -NWNXLIB_FUNCTION(_ZN7CResRefC2EPKc, 0x000000000013d9c0) -NWNXLIB_FUNCTION(_ZN7CResRefC2EPKh, 0x000000000013d780) -NWNXLIB_FUNCTION(_ZN7CResRefC2EPKhh, 0x000000000013d8b0) -NWNXLIB_FUNCTION(_ZN7CResRefC2ERK10CExoString, 0x000000000013d870) -NWNXLIB_FUNCTION(_ZN7CResRefC2Ev, 0x000000000013d480) -NWNXLIB_FUNCTION(_ZN7CResRefntEv, 0x000000000013d6d0) -NWNXLIB_FUNCTION(_ZN7CResRefpLERK10CExoString, 0x000000000013da00) -NWNXLIB_FUNCTION(_ZNK7CResRef12CopyToStringEPc, 0x000000000013d4f0) -NWNXLIB_FUNCTION(_ZNK7CResRef12CopyToStringER10CExoString, 0x000000000013d4a0) -NWNXLIB_FUNCTION(_ZNK7CResRef12GetResRefStrEv, 0x000000000013d520) -NWNXLIB_FUNCTION(_ZNK7CResRef7IsValidEv, 0x000000000013d540) -NWNXLIB_FUNCTION(_ZNK7CResRef9GetLengthEv, 0x000000000013d550) -NWNXLIB_FUNCTION(_ZNK7CResRef9GetResRefEPh, 0x000000000013dad0) -NWNXLIB_FUNCTION(_ZNK7CResRef9GetResRefEv, 0x000000000013d510) -NWNXLIB_FUNCTION(_ZNK7CResRefeqEPKc, 0x000000000013d5c0) -NWNXLIB_FUNCTION(_ZNK7CResRefeqERK10CExoString, 0x000000000013d670) -NWNXLIB_FUNCTION(_ZNK7CResRefeqERKS_, 0x000000000013d5a0) -NWNXLIB_FUNCTION(_ZNK7CResRefneEPKc, 0x000000000013d650) -NWNXLIB_FUNCTION(_ZNK7CResRefneERK10CExoString, 0x000000000013d6a0) -NWNXLIB_FUNCTION(_ZNK7CResRefneERKS_, 0x000000000013d580) -NWNXLIB_FUNCTION(_ZN7CResSET10GetSETSizeEv, 0x00000000001fe210) -NWNXLIB_FUNCTION(_ZN7CResSET11CopySETDataEPh, 0x00000000001fe1d0) -NWNXLIB_FUNCTION(_ZN7CResSET11GetNextLineEjPj, 0x00000000001fe340) -NWNXLIB_FUNCTION(_ZN7CResSET13GetSETDataPtrEv, 0x00000000001fe200) -NWNXLIB_FUNCTION(_ZN7CResSET14SkipWhiteSpaceEPc, 0x00000000001fec20) -NWNXLIB_FUNCTION(_ZN7CResSET15OnResourceFreedEv, 0x00000000001fdfd0) -NWNXLIB_FUNCTION(_ZN7CResSET18CreateSectionTableEv, 0x00000000001fe3a0) -NWNXLIB_FUNCTION(_ZN7CResSET18OnResourceServicedEv, 0x00000000001fead0) -NWNXLIB_FUNCTION(_ZN7CResSET20GetSectionEntryValueEPcS0_S0_, 0x00000000001fe230) -NWNXLIB_FUNCTION(_ZN7CResSET8IsLoadedEv, 0x00000000001fe220) -NWNXLIB_FUNCTION(_ZN7CResSETC1Ev, 0x00000000001fe180) -NWNXLIB_FUNCTION(_ZN7CResSETC2Ev, 0x00000000001fe180) -NWNXLIB_FUNCTION(_ZN7CResSETD0Ev, 0x00000000001fe140) -NWNXLIB_FUNCTION(_ZN7CResSETD1Ev, 0x00000000001fe110) -NWNXLIB_FUNCTION(_ZN7CResSETD2Ev, 0x00000000001fe110) -NWNXLIB_FUNCTION(_ZN7CResTGA10GetTGASizeEv, 0x00000000007a0b90) -NWNXLIB_FUNCTION(_ZN7CResTGA11CopyTGADataEPh, 0x00000000007a0b00) -NWNXLIB_FUNCTION(_ZN7CResTGA12GetTGAAttribEPjS0_Ph, 0x00000000007a0b30) -NWNXLIB_FUNCTION(_ZN7CResTGA12IsCompressedEv, 0x00000000007a0bb0) -NWNXLIB_FUNCTION(_ZN7CResTGA13GetTGADataPtrEv, 0x00000000007a0b70) -NWNXLIB_FUNCTION(_ZN7CResTGA13IsColorMappedEv, 0x00000000007a0ba0) -NWNXLIB_FUNCTION(_ZN7CResTGA15GetTGAHeaderPtrEv, 0x00000000007a0b80) -NWNXLIB_FUNCTION(_ZN7CResTGA15OnResourceFreedEv, 0x00000000007a0a40) -NWNXLIB_FUNCTION(_ZN7CResTGA17GetTGAColorMapPtrEv, 0x00000000007a0b60) -NWNXLIB_FUNCTION(_ZN7CResTGA18OnResourceServicedEv, 0x00000000007a0f50) -NWNXLIB_FUNCTION(_ZN7CResTGA18ReadUnmappedRLETGAEv, 0x00000000007a0cb0) -NWNXLIB_FUNCTION(_ZN7CResTGA21ReadColorMappedRLETGAEv, 0x00000000007a0bd0) -NWNXLIB_FUNCTION(_ZN7CResTGA5WriteER10CExoString, 0x00000000007a11a0) -NWNXLIB_FUNCTION(_ZN7CResTGA8IsLoadedEv, 0x00000000007a0bc0) -NWNXLIB_FUNCTION(_ZN7CResTGAC1Ev, 0x00000000007a0aa0) -NWNXLIB_FUNCTION(_ZN7CResTGAC2Ev, 0x00000000007a0aa0) -NWNXLIB_FUNCTION(_ZN7CResTGAD0Ev, 0x00000000007a0a10) -NWNXLIB_FUNCTION(_ZN7CResTGAD1Ev, 0x00000000007a09f0) -NWNXLIB_FUNCTION(_ZN7CResTGAD2Ev, 0x00000000007a09f0) -NWNXLIB_FUNCTION(_ZN7CResTLKC1Ev, 0x0000000000146eb0) -NWNXLIB_FUNCTION(_ZN7CResTLKC2Ev, 0x0000000000146eb0) -NWNXLIB_FUNCTION(_ZN7CResTLKD0Ev, 0x0000000000146e80) -NWNXLIB_FUNCTION(_ZN7CResTLKD1Ev, 0x0000000000146e60) -NWNXLIB_FUNCTION(_ZN7CResTLKD2Ev, 0x0000000000146e60) -NWNXLIB_FUNCTION(_ZN7CResWOK10GetWOKSizeEv, 0x000000000020b340) -NWNXLIB_FUNCTION(_ZN7CResWOK13GetWOKDataPtrEv, 0x000000000020b330) -NWNXLIB_FUNCTION(_ZN7CResWOK15OnResourceFreedEv, 0x000000000020b250) -NWNXLIB_FUNCTION(_ZN7CResWOK18OnResourceServicedEv, 0x000000000020b270) -NWNXLIB_FUNCTION(_ZN7CResWOK8IsLoadedEv, 0x000000000020b350) -NWNXLIB_FUNCTION(_ZN7CResWOKC1Ev, 0x000000000020b2f0) -NWNXLIB_FUNCTION(_ZN7CResWOKC2Ev, 0x000000000020b2f0) -NWNXLIB_FUNCTION(_ZN7CResWOKD0Ev, 0x000000000020b2c0) -NWNXLIB_FUNCTION(_ZN7CResWOKD1Ev, 0x000000000020b2a0) -NWNXLIB_FUNCTION(_ZN7CResWOKD2Ev, 0x000000000020b2a0) -NWNXLIB_FUNCTION(_ZN7STR_RESC1Ev, 0x0000000000440c70) -NWNXLIB_FUNCTION(_ZN7STR_RESC2Ev, 0x0000000000440c70) -NWNXLIB_FUNCTION(_ZN7Vector49NormalizeEv, 0x00000000007a28d0) -NWNXLIB_FUNCTION(_ZN8CERFFile10SetVersionEPc, 0x0000000000798820) -NWNXLIB_FUNCTION(_ZN8CERFFile11AddResourceEPctP4CRes, 0x00000000007996f0) -NWNXLIB_FUNCTION(_ZN8CERFFile11AddResourceER10CExoString, 0x0000000000798830) -NWNXLIB_FUNCTION(_ZN8CERFFile11WriteHeaderEv, 0x0000000000798a80) -NWNXLIB_FUNCTION(_ZN8CERFFile13SetNumEntriesEj, 0x0000000000799550) -NWNXLIB_FUNCTION(_ZN8CERFFile13WriteResourceEPctP4CResi, 0x0000000000799a10) -NWNXLIB_FUNCTION(_ZN8CERFFile13WriteResourceEPKctSt10shared_ptrI8DataViewE, 0x0000000000799c80) -NWNXLIB_FUNCTION(_ZN8CERFFile14RemoveResourceEP7CERFRes, 0x00000000007989a0) -NWNXLIB_FUNCTION(_ZN8CERFFile14RemoveResourceER10CExoStringt, 0x0000000000798840) -NWNXLIB_FUNCTION(_ZN8CERFFile16WriteStringTableEv, 0x000000000079a070) -NWNXLIB_FUNCTION(_ZN8CERFFile18RecalculateOffsetsEv, 0x0000000000798b90) -NWNXLIB_FUNCTION(_ZN8CERFFile21ReadModuleDescriptionERK10CExoStringtPjPS0_, 0x0000000000798c60) -NWNXLIB_FUNCTION(_ZN8CERFFile4ReadEv, 0x00000000007989b0) -NWNXLIB_FUNCTION(_ZN8CERFFile5ResetEv, 0x0000000000798700) -NWNXLIB_FUNCTION(_ZN8CERFFile5WriteER10CExoString, 0x000000000079a340) -NWNXLIB_FUNCTION(_ZN8CERFFile6CreateER10CExoString, 0x00000000007989c0) -NWNXLIB_FUNCTION(_ZN8CERFFile6FinishEv, 0x0000000000798b10) -NWNXLIB_FUNCTION(_ZN8CERFFile9AddStringEP10CERFString, 0x0000000000799f40) -NWNXLIB_FUNCTION(_ZN8CERFFileC1Ev, 0x000000000079a200) -NWNXLIB_FUNCTION(_ZN8CERFFileC2Ev, 0x000000000079a200) -NWNXLIB_FUNCTION(_ZN8CERFFileD1Ev, 0x000000000079a2f0) -NWNXLIB_FUNCTION(_ZN8CERFFileD2Ev, 0x000000000079a2f0) -NWNXLIB_FUNCTION(_ZN8CExoBase10CheckForCDEj, 0x00000000000f8260) -NWNXLIB_FUNCTION(_ZN8CExoBase11LoadAliasesEi, 0x00000000000f8240) -NWNXLIB_FUNCTION(_ZN8CExoBase16GetDirectoryListEP13CExoArrayListI10CExoStringES1_tiii, 0x00000000000f8070) -NWNXLIB_FUNCTION(_ZN8CExoBase19GetInstallDirectoryEv, 0x00000000000f8060) -NWNXLIB_FUNCTION(_ZN8CExoBase20GetResourceExtensionEt, 0x00000000000f8210) -NWNXLIB_FUNCTION(_ZN8CExoBase23GetResTypeFromExtensionERK10CExoString, 0x00000000000f8230) -NWNXLIB_FUNCTION(_ZN8CExoBase25GetAugmentedDirectoryListEP13CExoArrayListI9CFileInfoE10CExoStringti, 0x00000000000f8170) -NWNXLIB_FUNCTION(_ZN8CExoBase27GetDirectoryAndWorkshopListEP13CExoArrayListI10CExoStringES1_tii, 0x00000000000f8270) -NWNXLIB_FUNCTION(_ZN8CExoBase8ShutDownEv, 0x00000000000f8250) -NWNXLIB_FUNCTION(_ZN8CExoBaseC1E10CExoString, 0x00000000000f7cf0) -NWNXLIB_FUNCTION(_ZN8CExoBaseC2E10CExoString, 0x00000000000f7cf0) -NWNXLIB_FUNCTION(_ZN8CExoBaseD1Ev, 0x00000000000f7f20) -NWNXLIB_FUNCTION(_ZN8CExoBaseD2Ev, 0x00000000000f7f20) -NWNXLIB_FUNCTION(_ZN8CExoFile10FileOpenedEv, 0x0000000000125c60) -NWNXLIB_FUNCTION(_ZN8CExoFile13GetFileHandleEv, 0x0000000000125dd0) -NWNXLIB_FUNCTION(_ZN8CExoFile13SeekBeginningEv, 0x0000000000125da0) -NWNXLIB_FUNCTION(_ZN8CExoFile15SetMemoryBufferEPKvi, 0x0000000000125c30) -NWNXLIB_FUNCTION(_ZN8CExoFile17ReadAsyncCompleteEv, 0x0000000000125cd0) -NWNXLIB_FUNCTION(_ZN8CExoFile18ReadAsyncBytesReadEv, 0x0000000000125ce0) -NWNXLIB_FUNCTION(_ZN8CExoFile24ReadStringLineFromBufferEPPhPjS0_j, 0x0000000000125de0) -NWNXLIB_FUNCTION(_ZN8CExoFile3EofEv, 0x0000000000125c50) -NWNXLIB_FUNCTION(_ZN8CExoFile4ReadEPvjj, 0x0000000000125ca0) -NWNXLIB_FUNCTION(_ZN8CExoFile4ReadER10CExoStringj, 0x0000000000125cb0) -NWNXLIB_FUNCTION(_ZN8CExoFile4SeekEii, 0x0000000000125d90) -NWNXLIB_FUNCTION(_ZN8CExoFile5FlushEv, 0x0000000000125c70) -NWNXLIB_FUNCTION(_ZN8CExoFile5WriteEPKc, 0x0000000000125d30) -NWNXLIB_FUNCTION(_ZN8CExoFile5WriteEPKvjj, 0x0000000000125cf0) -NWNXLIB_FUNCTION(_ZN8CExoFile5WriteERK10CExoString, 0x0000000000125d40) -NWNXLIB_FUNCTION(_ZN8CExoFile7GetSizeEv, 0x0000000000125c90) -NWNXLIB_FUNCTION(_ZN8CExoFile7SeekEndEv, 0x0000000000125db0) -NWNXLIB_FUNCTION(_ZN8CExoFile8GetIsEOSEv, 0x0000000000125dc0) -NWNXLIB_FUNCTION(_ZN8CExoFile9GetOffsetEv, 0x0000000000125c80) -NWNXLIB_FUNCTION(_ZN8CExoFile9ReadAsyncEPvjj, 0x0000000000125cc0) -NWNXLIB_FUNCTION(_ZN8CExoFileC1EPKvi, 0x0000000000125bd0) -NWNXLIB_FUNCTION(_ZN8CExoFileC1ERK10CExoStringS2_, 0x0000000000125b00) -NWNXLIB_FUNCTION(_ZN8CExoFileC1ERK10CExoStringtS2_, 0x0000000000125b60) -NWNXLIB_FUNCTION(_ZN8CExoFileC2EPKvi, 0x0000000000125bd0) -NWNXLIB_FUNCTION(_ZN8CExoFileC2ERK10CExoStringS2_, 0x0000000000125b00) -NWNXLIB_FUNCTION(_ZN8CExoFileC2ERK10CExoStringtS2_, 0x0000000000125b60) -NWNXLIB_FUNCTION(_ZN8CExoFileD0Ev, 0x00000000001258b0) -NWNXLIB_FUNCTION(_ZN8CExoFileD1Ev, 0x0000000000125880) -NWNXLIB_FUNCTION(_ZN8CExoFileD2Ev, 0x0000000000125880) -NWNXLIB_FUNCTION(_ZNK8CExoFile14IsMemoryBackedEv, 0x0000000000125c40) -NWNXLIB_FUNCTION(_ZNK8CExoFile9IsMMappedEv, 0x0000000000125e80) -NWNXLIB_FUNCTION(_ZN8CExoRand11SignalEventEj, 0x00000000001294e0) -NWNXLIB_FUNCTION(_ZN8CExoRand11SignalEventEv, 0x00000000001294d0) -NWNXLIB_FUNCTION(_ZN8CExoRand4RandEv, 0x0000000000129470) -NWNXLIB_FUNCTION(_ZN8CExoRand9GetStringEt, 0x0000000000129480) -NWNXLIB_FUNCTION(_ZN8CExoRandC1Ev, 0x00000000001293f0) -NWNXLIB_FUNCTION(_ZN8CExoRandC2Ev, 0x00000000001293f0) -NWNXLIB_FUNCTION(_ZN8CExoRandD1Ev, 0x0000000000129430) -NWNXLIB_FUNCTION(_ZN8CExoRandD2Ev, 0x0000000000129430) -NWNXLIB_FUNCTION(_ZN8CNWClass10CCLASS_FEYE, 0x000000000095f0e8) -NWNXLIB_FUNCTION(_ZN8CNWClass10CCLASS_MAXE, 0x000000000095f0ce) -NWNXLIB_FUNCTION(_ZN8CNWClass11CCLASS_BARDE, 0x000000000095f0f8) -NWNXLIB_FUNCTION(_ZN8CNWClass11CCLASS_MONKE, 0x000000000095f0f4) -NWNXLIB_FUNCTION(_ZN8CNWClass11CCLASS_OOZEE, 0x000000000095f0d1) -NWNXLIB_FUNCTION(_ZN8CNWClass11GetNameTextEv, 0x000000000089b120) -NWNXLIB_FUNCTION(_ZN8CNWClass11IsBonusFeatEt, 0x000000000089b3c0) -NWNXLIB_FUNCTION(_ZN8CNWClass12CCLASS_BEASTE, 0x000000000095f0e4) -NWNXLIB_FUNCTION(_ZN8CNWClass12CCLASS_DRUIDE, 0x000000000095f0f6) -NWNXLIB_FUNCTION(_ZN8CNWClass12CCLASS_GIANTE, 0x000000000095f0e3) -NWNXLIB_FUNCTION(_ZN8CNWClass12CCLASS_ROGUEE, 0x000000000095f0f1) -NWNXLIB_FUNCTION(_ZN8CNWClass12GetClassFeatEt, 0x000000000089b330) -NWNXLIB_FUNCTION(_ZN8CNWClass12GetSpellGainEhh, 0x0000000000899340) -NWNXLIB_FUNCTION(_ZN8CNWClass12IsNormalFeatEt, 0x000000000089b420) -NWNXLIB_FUNCTION(_ZN8CNWClass13CCLASS_ANIMALE, 0x000000000095f0ed) -NWNXLIB_FUNCTION(_ZN8CNWClass13CCLASS_CLERICE, 0x000000000095f0f7) -NWNXLIB_FUNCTION(_ZN8CNWClass13CCLASS_DRAGONE, 0x000000000095f0e7) -NWNXLIB_FUNCTION(_ZN8CNWClass13CCLASS_HARPERE, 0x000000000095f0dc) -NWNXLIB_FUNCTION(_ZN8CNWClass13CCLASS_KENSEIE, 0x000000000095f0d6) -NWNXLIB_FUNCTION(_ZN8CNWClass13CCLASS_RANGERE, 0x000000000095f0f2) -NWNXLIB_FUNCTION(_ZN8CNWClass13CCLASS_UNDEADE, 0x000000000095f0e6) -NWNXLIB_FUNCTION(_ZN8CNWClass13CCLASS_VERMINE, 0x000000000095f0df) -NWNXLIB_FUNCTION(_ZN8CNWClass13CCLASS_WIZARDE, 0x000000000095f0ef) -NWNXLIB_FUNCTION(_ZN8CNWClass13GetBonusFeatsEh, 0x0000000000899290) -NWNXLIB_FUNCTION(_ZN8CNWClass13IsFeatUseableEt, 0x000000000089b580) -NWNXLIB_FUNCTION(_ZN8CNWClass13IsGrantedFeatEtRh, 0x000000000089b4a0) -NWNXLIB_FUNCTION(_ZN8CNWClass14CCLASS_FIGHTERE, 0x000000000095f0f5) -NWNXLIB_FUNCTION(_ZN8CNWClass14CCLASS_PALADINE, 0x000000000095f0f3) -NWNXLIB_FUNCTION(_ZN8CNWClass14CCLASS_SHIFTERE, 0x000000000095f0d4) -NWNXLIB_FUNCTION(_ZN8CNWClass14GetAttackBonusEh, 0x0000000000899270) -NWNXLIB_FUNCTION(_ZN8CNWClass14IsSkillUseableEt, 0x000000000089afd0) -NWNXLIB_FUNCTION(_ZN8CNWClass14LoadFeatsTableE10CExoStringP8CNWRules, 0x0000000000899750) -NWNXLIB_FUNCTION(_ZN8CNWClass15CCLASS_ASSASSINE, 0x000000000095f0da) -NWNXLIB_FUNCTION(_ZN8CNWClass15CCLASS_COMMONERE, 0x000000000095f0e5) -NWNXLIB_FUNCTION(_ZN8CNWClass15CCLASS_HUMANOIDE, 0x000000000095f0eb) -NWNXLIB_FUNCTION(_ZN8CNWClass15CCLASS_OUTSIDERE, 0x000000000095f0e1) -NWNXLIB_FUNCTION(_ZN8CNWClass15CCLASS_SORCERERE, 0x000000000095f0f0) -NWNXLIB_FUNCTION(_ZN8CNWClass15GetLevelGrantedEt, 0x000000000089b510) -NWNXLIB_FUNCTION(_ZN8CNWClass15GetRefSaveBonusEh, 0x00000000008992e0) -NWNXLIB_FUNCTION(_ZN8CNWClass15LoadSkillsTableE10CExoString, 0x0000000000899ef0) -NWNXLIB_FUNCTION(_ZN8CNWClass16CCLASS_BARBARIANE, 0x000000000095f0f9) -NWNXLIB_FUNCTION(_ZN8CNWClass16CCLASS_CONSTRUCTE, 0x000000000095f0ec) -NWNXLIB_FUNCTION(_ZN8CNWClass16CCLASS_ELEMENTALE, 0x000000000095f0e9) -NWNXLIB_FUNCTION(_ZN8CNWClass16CCLASS_MONSTROUSE, 0x000000000095f0ea) -NWNXLIB_FUNCTION(_ZN8CNWClass16GetFortSaveBonusEh, 0x00000000008992c0) -NWNXLIB_FUNCTION(_ZN8CNWClass16GetNameLowerTextEv, 0x000000000089b1d0) -NWNXLIB_FUNCTION(_ZN8CNWClass16GetWillSaveBonusEh, 0x0000000000899310) -NWNXLIB_FUNCTION(_ZN8CNWClass17CCLASS_ABERRATIONE, 0x000000000095f0ee) -NWNXLIB_FUNCTION(_ZN8CNWClass17CCLASS_BLACKGUARDE, 0x000000000095f0d9) -NWNXLIB_FUNCTION(_ZN8CNWClass17CCLASS_MAGICBEASTE, 0x000000000095f0e2) -NWNXLIB_FUNCTION(_ZN8CNWClass17CCLASS_PALEMASTERE, 0x000000000095f0d5) -NWNXLIB_FUNCTION(_ZN8CNWClass17GetNamePluralTextEv, 0x000000000089b280) -NWNXLIB_FUNCTION(_ZN8CNWClass17IsSkillClassSkillEt, 0x000000000089af50) -NWNXLIB_FUNCTION(_ZN8CNWClass17LoadStatGainTableE10CExoString, 0x000000000089aaa0) -NWNXLIB_FUNCTION(_ZN8CNWClass18CCLASS_EXPANSION_1E, 0x000000000095f0de) -NWNXLIB_FUNCTION(_ZN8CNWClass18CCLASS_EXPANSION_2E, 0x000000000095f0d8) -NWNXLIB_FUNCTION(_ZN8CNWClass18GetDescriptionTextEv, 0x000000000089b070) -NWNXLIB_FUNCTION(_ZN8CNWClass18LoadSpellGainTableE10CExoString, 0x000000000089a410) -NWNXLIB_FUNCTION(_ZN8CNWClass19CCLASS_ARCANEARCHERE, 0x000000000095f0db) -NWNXLIB_FUNCTION(_ZN8CNWClass19CCLASS_SHADOWDANCERE, 0x000000000095f0dd) -NWNXLIB_FUNCTION(_ZN8CNWClass19CCLASS_SHAPECHANGERE, 0x000000000095f0e0) -NWNXLIB_FUNCTION(_ZN8CNWClass19GetLevelFeatGrantedEt, 0x000000000089b360) -NWNXLIB_FUNCTION(_ZN8CNWClass19LoadBonusFeatsTableE10CExoString, 0x000000000089a1e0) -NWNXLIB_FUNCTION(_ZN8CNWClass19LoadSpellKnownTableE10CExoString, 0x000000000089a740) -NWNXLIB_FUNCTION(_ZN8CNWClass20CCLASS_SHOU_DISCIPLEE, 0x000000000095f0cf) -NWNXLIB_FUNCTION(_ZN8CNWClass20LoadAttackBonusTableE10CExoString, 0x00000000008994c0) -NWNXLIB_FUNCTION(_ZN8CNWClass20LoadSavingThrowTableE10CExoString, 0x0000000000899c40) -NWNXLIB_FUNCTION(_ZN8CNWClass21CCLASS_DIVINECHAMPIONE, 0x000000000095f0d7) -NWNXLIB_FUNCTION(_ZN8CNWClass21CCLASS_DRAGONDISCIPLEE, 0x000000000095f0d2) -NWNXLIB_FUNCTION(_ZN8CNWClass21CCLASS_EYE_OF_GRUUMSHE, 0x000000000095f0d0) -NWNXLIB_FUNCTION(_ZN8CNWClass21GetIsAlignmentAllowedEhh, 0x000000000089b610) -NWNXLIB_FUNCTION(_ZN8CNWClass22CCLASS_DWARVENDEFENDERE, 0x000000000095f0d3) -NWNXLIB_FUNCTION(_ZN8CNWClass22GetAbilityGainForLevelEii, 0x000000000089aec0) -NWNXLIB_FUNCTION(_ZN8CNWClass22GetSpellsKnownPerLevelEhhhth, 0x0000000000899380) -NWNXLIB_FUNCTION(_ZN8CNWClass24GetNaturalACGainForLevelEi, 0x000000000089af10) -NWNXLIB_FUNCTION(_ZN8CNWClass28GetAbilityGainForSingleLevelEii, 0x000000000089aea0) -NWNXLIB_FUNCTION(_ZN8CNWClassC1Ev, 0x0000000000898ee0) -NWNXLIB_FUNCTION(_ZN8CNWClassC2Ev, 0x0000000000898ee0) -NWNXLIB_FUNCTION(_ZN8CNWClassD1Ev, 0x0000000000899160) -NWNXLIB_FUNCTION(_ZN8CNWClassD2Ev, 0x0000000000899160) -NWNXLIB_FUNCTION(_ZN8CNWRules12LoadFeatInfoEv, 0x000000000089ed20) -NWNXLIB_FUNCTION(_ZN8CNWRules12LoadRaceInfoEv, 0x00000000008a0270) -NWNXLIB_FUNCTION(_ZN8CNWRules13IsArcaneClassEh, 0x00000000008a1e90) -NWNXLIB_FUNCTION(_ZN8CNWRules13IsFeatUseableEht, 0x000000000089ece0) -NWNXLIB_FUNCTION(_ZN8CNWRules13LoadClassInfoEv, 0x00000000008a2310) -NWNXLIB_FUNCTION(_ZN8CNWRules13LoadSkillInfoEv, 0x00000000008a0fb0) -NWNXLIB_FUNCTION(_ZN8CNWRules14LoadDomainInfoEv, 0x00000000008a1590) -NWNXLIB_FUNCTION(_ZN8CNWRules15CompareFeatNameEPKvS1_, 0x000000000089fe10) -NWNXLIB_FUNCTION(_ZN8CNWRules15LoadRulesetInfoEv, 0x00000000008a5010) -NWNXLIB_FUNCTION(_ZN8CNWRules17GetMasterFeatIconEc, 0x00000000008a01b0) -NWNXLIB_FUNCTION(_ZN8CNWRules18GetRulesetIntEntryERK10CExoStringi, 0x00000000008a4cb0) -NWNXLIB_FUNCTION(_ZN8CNWRules18LoadDifficultyInfoEv, 0x00000000008a1af0) -NWNXLIB_FUNCTION(_ZN8CNWRules19GetDifficultyOptionEii, 0x00000000008a1ad0) -NWNXLIB_FUNCTION(_ZN8CNWRules20GetRulesetFloatEntryERK10CExoStringf, 0x00000000008a4b30) -NWNXLIB_FUNCTION(_ZN8CNWRules21GetFeatExpansionLevelEt, 0x00000000008a1d20) -NWNXLIB_FUNCTION(_ZN8CNWRules21GetMasterFeatNameTextEc, 0x000000000089fd40) -NWNXLIB_FUNCTION(_ZN8CNWRules21GetMetaMagicLevelCostEh, 0x00000000008a4e30) -NWNXLIB_FUNCTION(_ZN8CNWRules21GetRulesetStringEntryERK10CExoStringS0_, 0x00000000008a4970) -NWNXLIB_FUNCTION(_ZN8CNWRules22GetClassExpansionLevelEh, 0x00000000008a1e10) -NWNXLIB_FUNCTION(_ZN8CNWRules22GetSkillExpansionLevelEt, 0x00000000008a1d70) -NWNXLIB_FUNCTION(_ZN8CNWRules22GetSpellExpansionLevelEj, 0x00000000008a1da0) -NWNXLIB_FUNCTION(_ZN8CNWRules23GetDamageIndexFromFlagsEj, 0x00000000008a1d00) -NWNXLIB_FUNCTION(_ZN8CNWRules23GetWeightedDamageAmountEiiiii, 0x00000000008a1bf0) -NWNXLIB_FUNCTION(_ZN8CNWRules23InitLegacyClassDefaultsEh, 0x00000000008a1ec0) -NWNXLIB_FUNCTION(_ZN8CNWRules25GetFamiliarExpansionLevelEhi, 0x00000000008a1e50) -NWNXLIB_FUNCTION(_ZN8CNWRules28GetMasterFeatDescriptionTextEc, 0x00000000008a00e0) -NWNXLIB_FUNCTION(_ZN8CNWRules7GetFeatEt, 0x00000000008a1a50) -NWNXLIB_FUNCTION(_ZN8CNWRules8RollDiceEhh, 0x00000000008a1a00) -NWNXLIB_FUNCTION(_ZN8CNWRules9GetDomainEt, 0x00000000008a1a90) -NWNXLIB_FUNCTION(_ZN8CNWRules9ReloadAllEv, 0x00000000008a5870) -NWNXLIB_FUNCTION(_ZN8CNWRules9SortFeatsEv, 0x00000000008a0240) -NWNXLIB_FUNCTION(_ZN8CNWRules9UnloadAllEv, 0x00000000008a4630) -NWNXLIB_FUNCTION(_ZN8CNWRulesC1Ev, 0x00000000008a54c0) -NWNXLIB_FUNCTION(_ZN8CNWRulesC2Ev, 0x00000000008a54c0) -NWNXLIB_FUNCTION(_ZN8CNWRulesD0Ev, 0x00000000008a4600) -NWNXLIB_FUNCTION(_ZN8CNWRulesD1Ev, 0x00000000008a42b0) -NWNXLIB_FUNCTION(_ZN8CNWRulesD2Ev, 0x00000000008a42b0) -NWNXLIB_FUNCTION(_ZN8CNWSArea10InSubAreasE6VectorP13CExoArrayListIjE, 0x00000000003ba100) -NWNXLIB_FUNCTION(_ZN8CNWSArea10LoadSoundsEP7CResGFFP10CResStructii, 0x00000000003a7090) -NWNXLIB_FUNCTION(_ZN8CNWSArea10LoadStoresEP7CResGFFP10CResStructii, 0x00000000003a7200) -NWNXLIB_FUNCTION(_ZN8CNWSArea10SaveSoundsEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a87c0) -NWNXLIB_FUNCTION(_ZN8CNWSArea10SaveStoresEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a8a80) -NWNXLIB_FUNCTION(_ZN8CNWSArea10UnloadAreaEv, 0x00000000003a8f10) -NWNXLIB_FUNCTION(_ZN8CNWSArea11ApplyEffectEP11CGameEffect6VectorS2_, 0x00000000003ad020) -NWNXLIB_FUNCTION(_ZN8CNWSArea11ExploreAreaEP12CNWSCreatureiii, 0x00000000003b2c00) -NWNXLIB_FUNCTION(_ZN8CNWSArea11LoadPlayersEP7CResGFFP10CResStruct, 0x00000000003a6a20) -NWNXLIB_FUNCTION(_ZN8CNWSArea11MAX_X_TILESE, 0x00000000008e10f4) -NWNXLIB_FUNCTION(_ZN8CNWSArea11MAX_Y_TILESE, 0x00000000008e10f0) -NWNXLIB_FUNCTION(_ZN8CNWSArea12EventHandlerEjjPvjj, 0x00000000003aad30) -NWNXLIB_FUNCTION(_ZN8CNWSArea12InterTileDFSEiiiii, 0x00000000003b4170) -NWNXLIB_FUNCTION(_ZN8CNWSArea12LoadTriggersEP7CResGFFP10CResStructii, 0x00000000003abc90) -NWNXLIB_FUNCTION(_ZN8CNWSArea12PlotGridPathEP20CPathfindInformationmb, 0x00000000003b9590) -NWNXLIB_FUNCTION(_ZN8CNWSArea12SaveTriggersEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a83a0) -NWNXLIB_FUNCTION(_ZN8CNWSArea13ComputeHeightE6Vector, 0x00000000003b0d90) -NWNXLIB_FUNCTION(_ZN8CNWSArea13GetPVPSettingEv, 0x00000000003aa060) -NWNXLIB_FUNCTION(_ZN8CNWSArea13LoadCreaturesEP7CResGFFP10CResStructii, 0x00000000003a6660) -NWNXLIB_FUNCTION(_ZN8CNWSArea13LoadWaypointsEP7CResGFFP10CResStructii, 0x00000000003a6e90) -NWNXLIB_FUNCTION(_ZN8CNWSArea13PlotSoundPathEP20CPathfindInformation, 0x00000000003b9d40) -NWNXLIB_FUNCTION(_ZN8CNWSArea13SaveCreaturesEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a7e70) -NWNXLIB_FUNCTION(_ZN8CNWSArea13SaveWaypointsEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a8660) -NWNXLIB_FUNCTION(_ZN8CNWSArea14BudgeCreaturesERK6VectorS2_S2_ji, 0x00000000003aa600) -NWNXLIB_FUNCTION(_ZN8CNWSArea14GetDoorCrossedE6VectorS0_, 0x00000000003aa250) -NWNXLIB_FUNCTION(_ZN8CNWSArea14GoalMoveDeniedEiii, 0x00000000003b2e90) -NWNXLIB_FUNCTION(_ZN8CNWSArea14GridSearchPathEi, 0x00000000003b8f00) -NWNXLIB_FUNCTION(_ZN8CNWSArea14LoadAreaHeaderEP10CResStruct, 0x00000000003a5610) -NWNXLIB_FUNCTION(_ZN8CNWSArea14LoadEncountersEP7CResGFFP10CResStructii, 0x00000000003a6ce0) -NWNXLIB_FUNCTION(_ZN8CNWSArea14LoadPlaceablesEP7CResGFFP10CResStructii, 0x00000000003abeb0) -NWNXLIB_FUNCTION(_ZN8CNWSArea14LoadPropertiesEP7CResGFFP10CResStruct, 0x00000000003a7510) -NWNXLIB_FUNCTION(_ZN8CNWSArea14RunEventScriptEiP10CExoString, 0x00000000003aa920) -NWNXLIB_FUNCTION(_ZN8CNWSArea14SaveEncountersEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a8500) -NWNXLIB_FUNCTION(_ZN8CNWSArea14SavePlaceablesEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a8920) -NWNXLIB_FUNCTION(_ZN8CNWSArea14SavePropertiesEP7CResGFFP10CResStruct, 0x00000000003a8d40) -NWNXLIB_FUNCTION(_ZN8CNWSArea14TestDirectLineEffffffi, 0x00000000003b5210) -NWNXLIB_FUNCTION(_ZN8CNWSArea15AddObjectToAreaEji, 0x00000000003ab660) -NWNXLIB_FUNCTION(_ZN8CNWSArea15LoadAreaEffectsEP7CResGFFP10CResStructii, 0x00000000003ac290) -NWNXLIB_FUNCTION(_ZN8CNWSArea15LoadTileSetInfoEP10CResStruct, 0x00000000003a6070) -NWNXLIB_FUNCTION(_ZN8CNWSArea15NWAreaAsNWSAreaEv, 0x00000000003b05e0) -NWNXLIB_FUNCTION(_ZN8CNWSArea15SaveAreaEffectsEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a8be0) -NWNXLIB_FUNCTION(_ZN8CNWSArea15SmoothSelectionEiPfPiPS0_, 0x00000000003b6a10) -NWNXLIB_FUNCTION(_ZN8CNWSArea16ClearLineOfSightE6VectorS0_PS0_Pjjji, 0x00000000003ad6d0) -NWNXLIB_FUNCTION(_ZN8CNWSArea16PlayVisualEffectEP11CGameEffect6Vector, 0x00000000003a9180) -NWNXLIB_FUNCTION(_ZN8CNWSArea16PositionWalkableE6Vector, 0x00000000003aa1a0) -NWNXLIB_FUNCTION(_ZN8CNWSArea16TestLineWalkableEffff, 0x00000000003b4fb0) -NWNXLIB_FUNCTION(_ZN8CNWSArea17ComputeAwayVectorE6VectorS0_fP20CPathfindInformation, 0x00000000003b57b0) -NWNXLIB_FUNCTION(_ZN8CNWSArea17ComputeBestCornerEffffffffPfS0_S0_S0_, 0x00000000003b5d60) -NWNXLIB_FUNCTION(_ZN8CNWSArea17NoCreaturesOnLineEffffP20CPathfindInformationiiPji, 0x00000000003b4530) -NWNXLIB_FUNCTION(_ZN8CNWSArea17SetCurrentWeatherEhi, 0x00000000003aa3e0) -NWNXLIB_FUNCTION(_ZN8CNWSArea17SmoothSelectNodesEiPfPiPS0_ii, 0x00000000003b6520) -NWNXLIB_FUNCTION(_ZN8CNWSArea18GetSurfaceMaterialE6Vector, 0x00000000003aa0e0) -NWNXLIB_FUNCTION(_ZN8CNWSArea18SmoothPointsOnPathEv, 0x00000000003b6ad0) -NWNXLIB_FUNCTION(_ZN8CNWSArea19ComputePathDistanceEiPf, 0x00000000003b0ec0) -NWNXLIB_FUNCTION(_ZN8CNWSArea19ComputeSafeLocationE6VectorfP20CPathfindInformationiPS0_, 0x00000000003b7db0) -NWNXLIB_FUNCTION(_ZN8CNWSArea19GetNextObjectInAreaERj, 0x00000000003a5180) -NWNXLIB_FUNCTION(_ZN8CNWSArea19PackAreaIntoMessageEiiiP10CNWSPlayer, 0x00000000003ae010) -NWNXLIB_FUNCTION(_ZN8CNWSArea19RemoveInterTileExitEiiii, 0x00000000003b4e30) -NWNXLIB_FUNCTION(_ZN8CNWSArea20GetFirstObjectInAreaERj, 0x00000000003a5150) -NWNXLIB_FUNCTION(_ZN8CNWSArea20GetIsIDInExcludeListEjP13CExoArrayListIP11CGameObjectE, 0x00000000003a4c50) -NWNXLIB_FUNCTION(_ZN8CNWSArea20RemoveObjectFromAreaEj, 0x00000000003aac20) -NWNXLIB_FUNCTION(_ZN8CNWSArea20SmoothCornerOptimizeEiPfPiPS0_, 0x00000000003b60d0) -NWNXLIB_FUNCTION(_ZN8CNWSArea20UpdatePlayerAutomapsEv, 0x00000000003b2d90) -NWNXLIB_FUNCTION(_ZN8CNWSArea21CountVisibleToPlayersE6Vectori, 0x00000000003b1420) -NWNXLIB_FUNCTION(_ZN8CNWSArea21GenerateInterTilePathEPiiii, 0x00000000003b4350) -NWNXLIB_FUNCTION(_ZN8CNWSArea21InterTileDFSSoundPathEPhiiii, 0x00000000003b2200) -NWNXLIB_FUNCTION(_ZN8CNWSArea21TestSafeLocationPointE6VectorP20CPathfindInformationb, 0x00000000003b0f70) -NWNXLIB_FUNCTION(_ZN8CNWSArea22DecrementPlayersInAreaEv, 0x00000000003a55f0) -NWNXLIB_FUNCTION(_ZN8CNWSArea22HandleTransparentDoorsEfffffffjRjiP13CExoArrayListIP11CGameObjectEi, 0x00000000003ad4e0) -NWNXLIB_FUNCTION(_ZN8CNWSArea22IncrementPlayersInAreaEv, 0x00000000003a54a0) -NWNXLIB_FUNCTION(_ZN8CNWSArea23DecreaseAILevelPriorityEv, 0x00000000003a54e0) -NWNXLIB_FUNCTION(_ZN8CNWSArea23GetFirstObjectIndiceByXEPif, 0x00000000003a4c90) -NWNXLIB_FUNCTION(_ZN8CNWSArea23IncreaseAILevelPriorityEv, 0x00000000003a52a0) -NWNXLIB_FUNCTION(_ZN8CNWSArea23IntersectingLineSegmentE6VectorS0_P13CExoArrayListIjE, 0x00000000003b9f20) -NWNXLIB_FUNCTION(_ZN8CNWSArea23InterTileDFSExploreAreaEPhiiiff, 0x00000000003b18b0) -NWNXLIB_FUNCTION(_ZN8CNWSArea25ComputeNonVisibleLocationE6VectorP20CPathfindInformationiPS0_f, 0x00000000003b8350) -NWNXLIB_FUNCTION(_ZN8CNWSArea25GridSearchPathInDirectionEiiiiibP17CNWSAreaGridPoint, 0x00000000003b8a60) -NWNXLIB_FUNCTION(_ZN8CNWSArea26EvaluateOverlappingTargetsEP20CPathfindInformation6Vectorjfffi, 0x00000000003b4500) -NWNXLIB_FUNCTION(_ZN8CNWSArea26MAX_OBJECT_BARTER_DISTANCEE, 0x00000000008e10dc) -NWNXLIB_FUNCTION(_ZN8CNWSArea27CountAreaTransitionTriggersEPjiS0_, 0x00000000003b1620) -NWNXLIB_FUNCTION(_ZN8CNWSArea27MAX_OBJECT_VISIBLE_DISTANCEE, 0x00000000008e10ec) -NWNXLIB_FUNCTION(_ZN8CNWSArea28MAX_OBJECT_CHATTALK_DISTANCEE, 0x00000000008e10e8) -NWNXLIB_FUNCTION(_ZN8CNWSArea28UpdatePositionInObjectsArrayEP11CGameObject, 0x00000000003a4da0) -NWNXLIB_FUNCTION(_ZN8CNWSArea29NoNoneWalkPolysInStaticObjectEjfffffffji, 0x00000000003b9e50) -NWNXLIB_FUNCTION(_ZN8CNWSArea30ComputeSafeLocationInDirectionE6VectorS0_ffP20CPathfindInformationiPS0_, 0x00000000003b7860) -NWNXLIB_FUNCTION(_ZN8CNWSArea30InterTileDFSGenerateSuccessorsEiiii, 0x00000000003b2fd0) -NWNXLIB_FUNCTION(_ZN8CNWSArea31MAX_OBJECT_CHATWHISPER_DISTANCEE, 0x00000000008e10e4) -NWNXLIB_FUNCTION(_ZN8CNWSArea32MAX_OBJECT_CONVERSATION_DISTANCEE, 0x00000000008e10e0) -NWNXLIB_FUNCTION(_ZN8CNWSArea7GetTileE6Vector, 0x00000000003a51c0) -NWNXLIB_FUNCTION(_ZN8CNWSArea7LoadGITEii, 0x00000000003b02c0) -NWNXLIB_FUNCTION(_ZN8CNWSArea7LoadGITEP7CResGFFP10CResStructii, 0x00000000003ac5d0) -NWNXLIB_FUNCTION(_ZN8CNWSArea7SaveGITEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003ac790) -NWNXLIB_FUNCTION(_ZN8CNWSArea7SaveGITEP8CERFFileR10CExoStringR13CExoArrayListIjE, 0x00000000003aceb0) -NWNXLIB_FUNCTION(_ZN8CNWSArea8AIUpdateEv, 0x00000000003aa9c0) -NWNXLIB_FUNCTION(_ZN8CNWSArea8LoadAreaEiiP7CResGFFP10CResStruct, 0x00000000003b03f0) -NWNXLIB_FUNCTION(_ZN8CNWSArea8PlotPathEP20CPathfindInformationm, 0x00000000003b6c70) -NWNXLIB_FUNCTION(_ZN8CNWSArea8SaveAreaEP7CResGFFP10CResStruct, 0x00000000003a77a0) -NWNXLIB_FUNCTION(_ZN8CNWSArea8SaveAreaEP8CERFFileR10CExoString, 0x00000000003b0180) -NWNXLIB_FUNCTION(_ZN8CNWSArea9AsNWSAreaEv, 0x00000000003b05c0) -NWNXLIB_FUNCTION(_ZN8CNWSArea9LoadDoorsEP7CResGFFP10CResStructii, 0x00000000003ab8e0) -NWNXLIB_FUNCTION(_ZN8CNWSArea9LoadItemsEP7CResGFFP10CResStructii, 0x00000000003a6a30) -NWNXLIB_FUNCTION(_ZN8CNWSArea9SaveDoorsEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a8240) -NWNXLIB_FUNCTION(_ZN8CNWSArea9SaveItemsEP7CResGFFP10CResStructR13CExoArrayListIjEi, 0x00000000003a80f0) -NWNXLIB_FUNCTION(_ZN8CNWSAreaC1E7CResRefij, 0x00000000003afa00) -NWNXLIB_FUNCTION(_ZN8CNWSAreaC2E7CResRefij, 0x00000000003afa00) -NWNXLIB_FUNCTION(_ZN8CNWSAreaD0Ev, 0x00000000003b0130) -NWNXLIB_FUNCTION(_ZN8CNWSAreaD1Ev, 0x00000000003aff60) -NWNXLIB_FUNCTION(_ZN8CNWSAreaD2Ev, 0x00000000003aff60) -NWNXLIB_FUNCTION(_ZN8CNWSDoor11PostProcessEv, 0x000000000029f1c0) -NWNXLIB_FUNCTION(_ZN8CNWSDoor12EventHandlerEjjPvjj, 0x000000000029fc40) -NWNXLIB_FUNCTION(_ZN8CNWSDoor12GetFirstNameEv, 0x00000000002a0ce0) -NWNXLIB_FUNCTION(_ZN8CNWSDoor12GetOpenStateEv, 0x000000000029f200) -NWNXLIB_FUNCTION(_ZN8CNWSDoor12SetOpenStateEh, 0x000000000029d7f0) -NWNXLIB_FUNCTION(_ZN8CNWSDoor13GetScriptNameEi, 0x00000000002a0cf0) -NWNXLIB_FUNCTION(_ZN8CNWSDoor14GetActionPointEih, 0x000000000029d1a0) -NWNXLIB_FUNCTION(_ZN8CNWSDoor14RemoveFromAreaEv, 0x000000000029f220) -NWNXLIB_FUNCTION(_ZN8CNWSDoor15GetDialogResrefEv, 0x00000000002a0cc0) -NWNXLIB_FUNCTION(_ZN8CNWSDoor20NoNonWalkPolysInDoorEfffffff, 0x000000000029d010) -NWNXLIB_FUNCTION(_ZN8CNWSDoor21GetNearestActionPointERK6Vectori, 0x000000000029d2d0) -NWNXLIB_FUNCTION(_ZN8CNWSDoor8AIUpdateEv, 0x000000000029bf30) -NWNXLIB_FUNCTION(_ZN8CNWSDoor8DoDamageEi, 0x000000000029be80) -NWNXLIB_FUNCTION(_ZN8CNWSDoor8LoadDoorEP7CResGFFP10CResStruct, 0x000000000029d970) -NWNXLIB_FUNCTION(_ZN8CNWSDoor8SaveDoorEP7CResGFFP10CResStruct, 0x000000000029c3d0) -NWNXLIB_FUNCTION(_ZN8CNWSDoor9AddToAreaEP8CNWSAreafffi, 0x000000000029f760) -NWNXLIB_FUNCTION(_ZN8CNWSDoor9AsNWSDoorEv, 0x00000000002a0cb0) -NWNXLIB_FUNCTION(_ZN8CNWSDoorC1Ej, 0x000000000029c0b0) -NWNXLIB_FUNCTION(_ZN8CNWSDoorC2Ej, 0x000000000029c0b0) -NWNXLIB_FUNCTION(_ZN8CNWSDoorD0Ev, 0x000000000029f730) -NWNXLIB_FUNCTION(_ZN8CNWSDoorD1Ev, 0x000000000029f5c0) -NWNXLIB_FUNCTION(_ZN8CNWSDoorD2Ev, 0x000000000029f5c0) -NWNXLIB_FUNCTION(_ZN8CNWSItem11AcquireItemEPPS_jhhi, 0x00000000002c4450) -NWNXLIB_FUNCTION(_ZN8CNWSItem11CompareItemEPS_, 0x00000000002beeb0) -NWNXLIB_FUNCTION(_ZN8CNWSItem12EventHandlerEjjPvjj, 0x00000000002c2170) -NWNXLIB_FUNCTION(_ZN8CNWSItem12GetFirstNameEv, 0x00000000002c6240) -NWNXLIB_FUNCTION(_ZN8CNWSItem12SetPossessorEjiii, 0x00000000002bd570) -NWNXLIB_FUNCTION(_ZN8CNWSItem13ComputeWeightEv, 0x00000000002bdf30) -NWNXLIB_FUNCTION(_ZN8CNWSItem13OpenInventoryEj, 0x00000000002c0410) -NWNXLIB_FUNCTION(_ZN8CNWSItem13SetIdentifiedEi, 0x00000000002c2030) -NWNXLIB_FUNCTION(_ZN8CNWSItem13SetNumChargesEii, 0x00000000002be8f0) -NWNXLIB_FUNCTION(_ZN8CNWSItem14ActivePropertyEt, 0x00000000002bea00) -NWNXLIB_FUNCTION(_ZN8CNWSItem14CloseInventoryEji, 0x00000000002c0220) -NWNXLIB_FUNCTION(_ZN8CNWSItem14GetDamageFlagsEv, 0x00000000002c1d60) -NWNXLIB_FUNCTION(_ZN8CNWSItem14InitRepositoryEj, 0x00000000002bf2b0) -NWNXLIB_FUNCTION(_ZN8CNWSItem14RemoveFromAreaEv, 0x00000000002be550) -NWNXLIB_FUNCTION(_ZN8CNWSItem15LoadDataFromGffEP7CResGFFP10CResStructii, 0x00000000002c4d80) -NWNXLIB_FUNCTION(_ZN8CNWSItem16GetMinEquipLevelEv, 0x00000000002c1f30) -NWNXLIB_FUNCTION(_ZN8CNWSItem16LoadFromTemplateE7CResRefP10CExoString, 0x00000000002c4720) -NWNXLIB_FUNCTION(_ZN8CNWSItem17AddActivePropertyE15CNWItemProperty, 0x00000000002c2e60) -NWNXLIB_FUNCTION(_ZN8CNWSItem17ComputeArmorClassEv, 0x00000000002bed00) -NWNXLIB_FUNCTION(_ZN8CNWSItem17GetActivePropertyEi, 0x00000000002bead0) -NWNXLIB_FUNCTION(_ZN8CNWSItem17GetPropertyByTypeEPP15CNWItemPropertytt, 0x00000000002beb30) -NWNXLIB_FUNCTION(_ZN8CNWSItem18AddPassivePropertyE15CNWItemProperty, 0x00000000002c2f40) -NWNXLIB_FUNCTION(_ZN8CNWSItem18CalculateBaseCostsEv, 0x00000000002c0930) -NWNXLIB_FUNCTION(_ZN8CNWSItem18GetPassivePropertyEi, 0x00000000002beb00) -NWNXLIB_FUNCTION(_ZN8CNWSItem18SaveContainerItemsEP7CResGFFP10CResStructi, 0x00000000002c1b40) -NWNXLIB_FUNCTION(_ZN8CNWSItem18SaveItemPropertiesEP7CResGFFP10CResStruct, 0x00000000002be1c0) -NWNXLIB_FUNCTION(_ZN8CNWSItem18UpdateVisualEffectEv, 0x00000000002c2590) -NWNXLIB_FUNCTION(_ZN8CNWSItem19ApplyItemPropertiesEP12CNWSCreatureji, 0x00000000002bebe0) -NWNXLIB_FUNCTION(_ZN8CNWSItem20CalculatePassiveCostEP15CNWItemProperty, 0x00000000002c06a0) -NWNXLIB_FUNCTION(_ZN8CNWSItem20RemoveActivePropertyEi, 0x00000000002c2c20) -NWNXLIB_FUNCTION(_ZN8CNWSItem20RemoveItemPropertiesEP12CNWSCreaturej, 0x00000000002bec70) -NWNXLIB_FUNCTION(_ZN8CNWSItem21RemovePassivePropertyEi, 0x00000000002c2c50) -NWNXLIB_FUNCTION(_ZN8CNWSItem22CloseItemForAllPlayersEv, 0x00000000002c2060) -NWNXLIB_FUNCTION(_ZN8CNWSItem23GetPropertyByTypeExistsEtt, 0x00000000002bea30) -NWNXLIB_FUNCTION(_ZN8CNWSItem25ReadContainerItemsFromGffEP7CResGFFP10CResStructi, 0x00000000002c4b70) -NWNXLIB_FUNCTION(_ZN8CNWSItem25RestoreUsedActivePropertyEP15CNWItemPropertyi, 0x00000000002be9d0) -NWNXLIB_FUNCTION(_ZN8CNWSItem26UpdateUsedActivePropertiesEi, 0x00000000002be650) -NWNXLIB_FUNCTION(_ZN8CNWSItem27RestoreUsedActivePropertiesEi, 0x00000000002be960) -NWNXLIB_FUNCTION(_ZN8CNWSItem29GetUsedActivePropertyUsesLeftEh, 0x00000000002be930) -NWNXLIB_FUNCTION(_ZN8CNWSItem7GetCostEiiii, 0x00000000002c0de0) -NWNXLIB_FUNCTION(_ZN8CNWSItem8AIUpdateEv, 0x00000000002bd290) -NWNXLIB_FUNCTION(_ZN8CNWSItem8CopyItemEPS_i, 0x00000000002c3020) -NWNXLIB_FUNCTION(_ZN8CNWSItem8LoadItemEP7CResGFFP10CResStructii, 0x00000000002c4940) -NWNXLIB_FUNCTION(_ZN8CNWSItem8SaveItemEP7CResGFFP10CResStructi, 0x00000000002c0f10) -NWNXLIB_FUNCTION(_ZN8CNWSItem9AddToAreaEP8CNWSAreafffi, 0x00000000002be5b0) -NWNXLIB_FUNCTION(_ZN8CNWSItem9AsNWSItemEv, 0x00000000002c6220) -NWNXLIB_FUNCTION(_ZN8CNWSItem9GetWeightEv, 0x00000000002c1b60) -NWNXLIB_FUNCTION(_ZN8CNWSItem9MergeItemEPS_, 0x00000000002bf0f0) -NWNXLIB_FUNCTION(_ZN8CNWSItem9SplitItemEi, 0x00000000002c35a0) -NWNXLIB_FUNCTION(_ZN8CNWSItemC1Ej, 0x00000000002c2990) -NWNXLIB_FUNCTION(_ZN8CNWSItemC2Ej, 0x00000000002c2990) -NWNXLIB_FUNCTION(_ZN8CNWSItemD0Ev, 0x00000000002c2e20) -NWNXLIB_FUNCTION(_ZN8CNWSItemD1Ev, 0x00000000002c2c80) -NWNXLIB_FUNCTION(_ZN8CNWSItemD2Ev, 0x00000000002c2c80) -NWNXLIB_FUNCTION(_ZN8CNWSkill11GetNameTextEv, 0x00000000008a61e0) -NWNXLIB_FUNCTION(_ZN8CNWSkill18GetDescriptionTextEv, 0x00000000008a6130) -NWNXLIB_FUNCTION(_ZN8CNWSkillC1Ev, 0x00000000008a60e0) -NWNXLIB_FUNCTION(_ZN8CNWSkillC2Ev, 0x00000000008a60e0) -NWNXLIB_FUNCTION(_ZN8CNWSkillD1Ev, 0x00000000008a6120) -NWNXLIB_FUNCTION(_ZN8CNWSkillD2Ev, 0x00000000008a6120) -NWNXLIB_FUNCTION(_ZN8CNWSpell13GetSpellLevelEh, 0x00000000008a6680) -NWNXLIB_FUNCTION(_ZN8CNWSpell16GetSpellNameTextEv, 0x00000000008a6a20) -NWNXLIB_FUNCTION(_ZN8CNWSpell17GetSubRadialSpellEh, 0x00000000008a6970) -NWNXLIB_FUNCTION(_ZN8CNWSpell17SetSubRadialSpellEhj, 0x00000000008a69a0) -NWNXLIB_FUNCTION(_ZN8CNWSpell22SetSubRadialSpellCountEh, 0x00000000008a69c0) -NWNXLIB_FUNCTION(_ZN8CNWSpell26GetSpellHasVerbalComponentEv, 0x00000000008a6870) -NWNXLIB_FUNCTION(_ZN8CNWSpell27GetSpellHasSomaticComponentEv, 0x00000000008a68f0) -NWNXLIB_FUNCTION(_ZN8CNWSpellC1Ev, 0x00000000008a6290) -NWNXLIB_FUNCTION(_ZN8CNWSpellC2Ev, 0x00000000008a6290) -NWNXLIB_FUNCTION(_ZN8CNWSpellD1Ev, 0x00000000008a6630) -NWNXLIB_FUNCTION(_ZN8CNWSpellD2Ev, 0x00000000008a6630) -NWNXLIB_FUNCTION(_ZN8CNWSTile10AddTriggerEj, 0x00000000003f1de0) -NWNXLIB_FUNCTION(_ZN8CNWSTile11GetTileDataEv, 0x00000000003f2870) -NWNXLIB_FUNCTION(_ZN8CNWSTile11GetWalkMeshEv, 0x00000000003f2c30) -NWNXLIB_FUNCTION(_ZN8CNWSTile11SetTileDataEP11CNWTileData, 0x00000000003f32e0) -NWNXLIB_FUNCTION(_ZN8CNWSTile12LoadWalkMeshEv, 0x00000000003f2c10) -NWNXLIB_FUNCTION(_ZN8CNWSTile13ComputeHeightE6Vector, 0x00000000003f2530) -NWNXLIB_FUNCTION(_ZN8CNWSTile13GetExitNumberEff, 0x00000000003f2700) -NWNXLIB_FUNCTION(_ZN8CNWSTile13GetTotalExitsEv, 0x00000000003f2880) -NWNXLIB_FUNCTION(_ZN8CNWSTile15GetRegionCoordsEiPfS0_, 0x00000000003f2770) -NWNXLIB_FUNCTION(_ZN8CNWSTile16ClearLineOfSightEi6VectorS0_PS0_, 0x00000000003f1eb0) -NWNXLIB_FUNCTION(_ZN8CNWSTile17FindClosestRegionEff, 0x00000000003f25f0) -NWNXLIB_FUNCTION(_ZN8CNWSTile17GetRegionEntranceEff, 0x00000000003f2800) -NWNXLIB_FUNCTION(_ZN8CNWSTile17PlotIntraTilePathEP7CNWAreaP20CPathfindInformationffffj, 0x00000000003f2e70) -NWNXLIB_FUNCTION(_ZN8CNWSTile17SetMainLightColorEhh, 0x00000000003f1cb0) -NWNXLIB_FUNCTION(_ZN8CNWSTile18GetSurfaceMaterialE6Vector, 0x00000000003f2c80) -NWNXLIB_FUNCTION(_ZN8CNWSTile19SetSourceLightColorEhh, 0x00000000003f1ce0) -NWNXLIB_FUNCTION(_ZN8CNWSTile20NoNonWalkPolysOnTileEfffffffi, 0x00000000003f2d20) -NWNXLIB_FUNCTION(_ZN8CNWSTile21IntersectLineSegmentsEffffffffPfS0_, 0x00000000003f2a70) -NWNXLIB_FUNCTION(_ZN8CNWSTile25ComputeClippedLineSegmentE6VectorS0_PS0_S1_, 0x00000000003f21f0) -NWNXLIB_FUNCTION(_ZN8CNWSTile26ClippedLineSegmentWalkableEffffPfS0_S0_S0_S0_S0_, 0x00000000003f20a0) -NWNXLIB_FUNCTION(_ZN8CNWSTile7GetExitEiPfS0_Pi, 0x00000000003f2670) -NWNXLIB_FUNCTION(_ZN8CNWSTile9InTriggerE6VectorP13CExoArrayListIjE, 0x00000000003f28b0) -NWNXLIB_FUNCTION(_ZN8CNWSTileC1Ev, 0x00000000003f1d80) -NWNXLIB_FUNCTION(_ZN8CNWSTileC2Ev, 0x00000000003f1d80) -NWNXLIB_FUNCTION(_ZN8CNWSTileD0Ev, 0x00000000003f1d50) -NWNXLIB_FUNCTION(_ZN8CNWSTileD1Ev, 0x00000000003f1d10) -NWNXLIB_FUNCTION(_ZN8CNWSTileD2Ev, 0x00000000003f1d10) -NWNXLIB_FUNCTION(_ZN8CNWSUUID10MakeRandomEv, 0x00000000003493a0) -NWNXLIB_FUNCTION(_ZN8CNWSUUID11LoadFromGffEP7CResGFFP10CResStruct, 0x000000000034a220) -NWNXLIB_FUNCTION(_ZN8CNWSUUID12AssignRandomEv, 0x0000000000349d90) -NWNXLIB_FUNCTION(_ZN8CNWSUUID12CanCarryUUIDEi, 0x00000000003492f0) -NWNXLIB_FUNCTION(_ZN8CNWSUUID12CanCarryUUIDEv, 0x0000000000349380) -NWNXLIB_FUNCTION(_ZN8CNWSUUID17GetOrAssignRandomEv, 0x000000000034a030) -NWNXLIB_FUNCTION(_ZN8CNWSUUID20LookupObjectIdByUUIDERK10CExoString, 0x00000000003494b0) -NWNXLIB_FUNCTION(_ZN8CNWSUUID9SaveToGffEP7CResGFFP10CResStruct, 0x0000000000349440) -NWNXLIB_FUNCTION(_ZN8CNWSUUID9TryAssignERK10CExoString, 0x0000000000349840) -NWNXLIB_FUNCTION(_ZN8CNWSUUIDC1EP11CGameObject, 0x00000000003492d0) -NWNXLIB_FUNCTION(_ZN8CNWSUUIDC2EP11CGameObject, 0x00000000003492d0) -NWNXLIB_FUNCTION(_ZN8CNWSUUIDD0Ev, 0x0000000000349810) -NWNXLIB_FUNCTION(_ZN8CNWSUUIDD1Ev, 0x00000000003496e0) -NWNXLIB_FUNCTION(_ZN8CNWSUUIDD2Ev, 0x00000000003496e0) -NWNXLIB_FUNCTION(_ZN8CTlkFile10ReadHeaderEv, 0x00000000001441f0) -NWNXLIB_FUNCTION(_ZN8CTlkFile13TLK_FILE_TYPEE, 0x00000000008bf034) -NWNXLIB_FUNCTION(_ZN8CTlkFile16TLK_FILE_VERSIONE, 0x0000000000ccd098) -NWNXLIB_FUNCTION(_ZN8CTlkFileC1E10CExoString, 0x00000000001440a0) -NWNXLIB_FUNCTION(_ZN8CTlkFileC1EPKvi, 0x0000000000144180) -NWNXLIB_FUNCTION(_ZN8CTlkFileC2E10CExoString, 0x00000000001440a0) -NWNXLIB_FUNCTION(_ZN8CTlkFileC2EPKvi, 0x0000000000144180) -NWNXLIB_FUNCTION(_ZN8CTlkFileD0Ev, 0x0000000000146630) -NWNXLIB_FUNCTION(_ZN8CTlkFileD1Ev, 0x0000000000146600) -NWNXLIB_FUNCTION(_ZN8CTlkFileD2Ev, 0x0000000000146600) -NWNXLIB_FUNCTION(_ZN9CExoDebug12FlushLogFileEv, 0x0000000000124ad0) -NWNXLIB_FUNCTION(_ZN9CExoDebug12OpenLogFilesE10CExoStringi, 0x0000000000124b30) -NWNXLIB_FUNCTION(_ZN9CExoDebug13CloseLogFilesEv, 0x0000000000124aa0) -NWNXLIB_FUNCTION(_ZN9CExoDebug14FlushErrorFileEv, 0x0000000000124ac0) -NWNXLIB_FUNCTION(_ZN9CExoDebug14WriteToLogFileERK10CExoString, 0x0000000000124bd0) -NWNXLIB_FUNCTION(_ZN9CExoDebug16SetRotateLogFileEi, 0x0000000000124c10) -NWNXLIB_FUNCTION(_ZN9CExoDebug16WriteToErrorFileERK10CExoString, 0x0000000000124bc0) -NWNXLIB_FUNCTION(_ZN9CExoDebug19GetCurrentTimestampER10CExoString, 0x0000000000124bf0) -NWNXLIB_FUNCTION(_ZN9CExoDebug21GetMaxAllocatedMemoryEv, 0x0000000000124b00) -NWNXLIB_FUNCTION(_ZN9CExoDebug25GetCurrentAllocatedMemoryEv, 0x0000000000124af0) -NWNXLIB_FUNCTION(_ZN9CExoDebug25GetTotalMemoryAllocationsEv, 0x0000000000124b10) -NWNXLIB_FUNCTION(_ZN9CExoDebug27GetCurrentMemoryAllocationsEv, 0x0000000000124b20) -NWNXLIB_FUNCTION(_ZN9CExoDebug6AssertEiPKcS1_, 0x0000000000124a60) -NWNXLIB_FUNCTION(_ZN9CExoDebug7WarningEiPKcS1_, 0x0000000000124bb0) -NWNXLIB_FUNCTION(_ZN9CExoDebugC1Ev, 0x00000000001249a0) -NWNXLIB_FUNCTION(_ZN9CExoDebugC2Ev, 0x00000000001249a0) -NWNXLIB_FUNCTION(_ZN9CExoDebugD1Ev, 0x0000000000124a10) -NWNXLIB_FUNCTION(_ZN9CExoDebugD2Ev, 0x0000000000124a10) -NWNXLIB_FUNCTION(_ZN9CNetLayer10InitializeEP11CBaseExoApp, 0x000000000014f700) -NWNXLIB_FUNCTION(_ZN9CNetLayer11EndProtocolEj, 0x000000000014f780) -NWNXLIB_FUNCTION(_ZN9CNetLayer11MAX_PLAYERSE, 0x00000000008bf350) -NWNXLIB_FUNCTION(_ZN9CNetLayer12PROTOCOL_UDPE, 0x0000000000ce9fa8) -NWNXLIB_FUNCTION(_ZN9CNetLayer12StoreMessageEPhj, 0x000000000014fd30) -NWNXLIB_FUNCTION(_ZN9CNetLayer13EndServerModeEv, 0x000000000014faa0) -NWNXLIB_FUNCTION(_ZN9CNetLayer13GetPlayerInfoEj, 0x000000000014ff60) -NWNXLIB_FUNCTION(_ZN9CNetLayer13StartProtocolEjjjj, 0x000000000014f770) -NWNXLIB_FUNCTION(_ZN9CNetLayer14GetSessionInfoEj, 0x000000000014fe80) -NWNXLIB_FUNCTION(_ZN9CNetLayer14GetSessionNameEv, 0x000000000014fda0) -NWNXLIB_FUNCTION(_ZN9CNetLayer14MessageArrivedEjjji, 0x000000000014f740) -NWNXLIB_FUNCTION(_ZN9CNetLayer14SetSessionNameE10CExoString, 0x000000000014fdf0) -NWNXLIB_FUNCTION(_ZN9CNetLayer15DEFAULT_PLAYERSE, 0x00000000008bf34c) -NWNXLIB_FUNCTION(_ZN9CNetLayer15INSTANCE_CLIENTE, 0x0000000000ce9fa4) -NWNXLIB_FUNCTION(_ZN9CNetLayer15INSTANCE_SERVERE, 0x0000000000ce9fa0) -NWNXLIB_FUNCTION(_ZN9CNetLayer15PLAYERID_SERVERE, 0x00000000008bf340) -NWNXLIB_FUNCTION(_ZN9CNetLayer15StartServerModeE10CExoStringj, 0x000000000014f7a0) -NWNXLIB_FUNCTION(_ZN9CNetLayer16DisconnectPlayerEjjiRK10CExoString, 0x000000000014fbf0) -NWNXLIB_FUNCTION(_ZN9CNetLayer16GetIPBySessionIdEjP10CExoString, 0x0000000000150340) -NWNXLIB_FUNCTION(_ZN9CNetLayer16GetPlayerAddressEji, 0x000000000014ff90) -NWNXLIB_FUNCTION(_ZN9CNetLayer16GetSendUDPSocketEv, 0x0000000000150100) -NWNXLIB_FUNCTION(_ZN9CNetLayer16SEND_FLUSH_CACHEE, 0x00000000008bf360) -NWNXLIB_FUNCTION(_ZN9CNetLayer16UpdateStatusLoopEj, 0x000000000014fed0) -NWNXLIB_FUNCTION(_ZN9CNetLayer17GetPlayerPasswordEv, 0x000000000014f830) -NWNXLIB_FUNCTION(_ZN9CNetLayer17GetUDPRecievePortEv, 0x000000000014fe60) -NWNXLIB_FUNCTION(_ZN9CNetLayer17SEND_LOW_PRIORITYE, 0x00000000008bf35c) -NWNXLIB_FUNCTION(_ZN9CNetLayer17SetPlayerPasswordE10CExoString, 0x000000000014f880) -NWNXLIB_FUNCTION(_ZN9CNetLayer17SetServerLanguageEi, 0x000000000014f790) -NWNXLIB_FUNCTION(_ZN9CNetLayer18APPLICATION_CLIENTE, 0x00000000008bf330) -NWNXLIB_FUNCTION(_ZN9CNetLayer18APPLICATION_SERVERE, 0x00000000008bf32c) -NWNXLIB_FUNCTION(_ZN9CNetLayer18CONNECT_ERR_BANNEDE, 0x00000000008bf321) -NWNXLIB_FUNCTION(_ZN9CNetLayer18CONNECTTYPE_PLAYERE, 0x00000000008bf317) -NWNXLIB_FUNCTION(_ZN9CNetLayer18GetAnyWindowBehindEv, 0x0000000000150220) -NWNXLIB_FUNCTION(_ZN9CNetLayer18GetClientConnectedEv, 0x000000000014fee0) -NWNXLIB_FUNCTION(_ZN9CNetLayer18GetConnectionErrorEv, 0x000000000014fbb0) -NWNXLIB_FUNCTION(_ZN9CNetLayer18GetLocalPrivilegesEj, 0x000000000014ff50) -NWNXLIB_FUNCTION(_ZN9CNetLayer18GetPortBySessionIdEj, 0x000000000014fe70) -NWNXLIB_FUNCTION(_ZN9CNetLayer18GetServerConnectedEv, 0x000000000014ff10) -NWNXLIB_FUNCTION(_ZN9CNetLayer18PERMISSION_UNKNOWNE, 0x00000000008bf300) -NWNXLIB_FUNCTION(_ZN9CNetLayer18PLAYERID_INVALIDIDE, 0x00000000008bf344) -NWNXLIB_FUNCTION(_ZN9CNetLayer19CONNECT_ERR_UNKNOWNE, 0x00000000008bf32a) -NWNXLIB_FUNCTION(_ZN9CNetLayer19EndConnectToSessionEv, 0x000000000014fba0) -NWNXLIB_FUNCTION(_ZN9CNetLayer19GetDisconnectReasonEv, 0x000000000014fc30) -NWNXLIB_FUNCTION(_ZN9CNetLayer19GetDisconnectStrrefEv, 0x000000000014fc10) -NWNXLIB_FUNCTION(_ZN9CNetLayer19GetPasswordRequiredEv, 0x000000000014f820) -NWNXLIB_FUNCTION(_ZN9CNetLayer19SendMessageToPlayerEjPhjj, 0x000000000014f750) -NWNXLIB_FUNCTION(_ZN9CNetLayer19SetDisconnectReasonERK10CExoString, 0x000000000014fc60) -NWNXLIB_FUNCTION(_ZN9CNetLayer19SetDisconnectStrrefEj, 0x000000000014fc20) -NWNXLIB_FUNCTION(_ZN9CNetLayer20EndEnumerateSessionsEv, 0x000000000014fb70) -NWNXLIB_FUNCTION(_ZN9CNetLayer20GetExpansionPackReqdEv, 0x00000000001501e0) -NWNXLIB_FUNCTION(_ZN9CNetLayer20GetPlayerAddressDataEjPjPPhS2_S0_, 0x000000000014fd20) -NWNXLIB_FUNCTION(_ZN9CNetLayer20GetSessionMaxPlayersEv, 0x000000000014fd80) -NWNXLIB_FUNCTION(_ZN9CNetLayer20PLAYERID_ALL_CLIENTSE, 0x00000000008bf348) -NWNXLIB_FUNCTION(_ZN9CNetLayer20PLAYERID_ALL_PLAYERSE, 0x00000000008bf33c) -NWNXLIB_FUNCTION(_ZN9CNetLayer20RequestServerDetailsEj, 0x000000000014fcf0) -NWNXLIB_FUNCTION(_ZN9CNetLayer20SEND_COMPRESSED_DATAE, 0x00000000008bf364) -NWNXLIB_FUNCTION(_ZN9CNetLayer20SendMessageToAddressEjPhj, 0x000000000014f760) -NWNXLIB_FUNCTION(_ZN9CNetLayer20ServerSatisfiesBuildEii, 0x0000000000150010) -NWNXLIB_FUNCTION(_ZN9CNetLayer20SetExpansionPackReqdEt, 0x00000000001501c0) -NWNXLIB_FUNCTION(_ZN9CNetLayer20SetMstServerPasswordE10CExoString, 0x0000000000150140) -NWNXLIB_FUNCTION(_ZN9CNetLayer20SetSessionMaxPlayersEj, 0x000000000014fd90) -NWNXLIB_FUNCTION(_ZN9CNetLayer21DisconnectFromSessionEv, 0x000000000014fbc0) -NWNXLIB_FUNCTION(_ZN9CNetLayer21EndAddressTranslationERK10CExoString, 0x000000000014fec0) -NWNXLIB_FUNCTION(_ZN9CNetLayer21GetGameMasterPasswordEv, 0x000000000014f900) -NWNXLIB_FUNCTION(_ZN9CNetLayer21GetLocalAdapterStringEjj, 0x000000000014fc90) -NWNXLIB_FUNCTION(_ZN9CNetLayer21GetSessionInfoChangedEj, 0x000000000014fd50) -NWNXLIB_FUNCTION(_ZN9CNetLayer21ProcessReceivedFramesEi, 0x000000000014f720) -NWNXLIB_FUNCTION(_ZN9CNetLayer21SEND_SINGLE_RECIPIENTE, 0x00000000008bf354) -NWNXLIB_FUNCTION(_ZN9CNetLayer21SetGameMasterPasswordE10CExoString, 0x000000000014f950) -NWNXLIB_FUNCTION(_ZN9CNetLayer21SetSessionInfoChangedEji, 0x000000000014fd40) -NWNXLIB_FUNCTION(_ZN9CNetLayer21StartConnectToSessionEjRK10CExoStringiS2_jjS2_S2_S2_, 0x000000000014fb90) -NWNXLIB_FUNCTION(_ZN9CNetLayer22CONNECTTYPE_GAMEMASTERE, 0x00000000008bf316) -NWNXLIB_FUNCTION(_ZN9CNetLayer22DropConnectionToServerEv, 0x000000000014fbd0) -NWNXLIB_FUNCTION(_ZN9CNetLayer22GetNumberLocalAdaptersEj, 0x000000000014fc80) -NWNXLIB_FUNCTION(_ZN9CNetLayer22GetServerAdminPasswordEv, 0x000000000014f9d0) -NWNXLIB_FUNCTION(_ZN9CNetLayer22GetSessionSectionStartEj, 0x000000000014fb20) -NWNXLIB_FUNCTION(_ZN9CNetLayer22IsConnectedToLocalhostEv, 0x000000000014fbe0) -NWNXLIB_FUNCTION(_ZN9CNetLayer22OpenStandardConnectionEi10CExoStringi, 0x0000000000150240) -NWNXLIB_FUNCTION(_ZN9CNetLayer22PlayerIdToConnectionIdEjPj, 0x0000000000150200) -NWNXLIB_FUNCTION(_ZN9CNetLayer22SetServerAdminPasswordE10CExoString, 0x000000000014fa20) -NWNXLIB_FUNCTION(_ZN9CNetLayer22StartEnumerateSessionsEjiPhti, 0x000000000014fad0) -NWNXLIB_FUNCTION(_ZN9CNetLayer22StartEnumerateSessionsEPjiPhti, 0x000000000014fab0) -NWNXLIB_FUNCTION(_ZN9CNetLayer23ClearSessionInfoChangedEj, 0x000000000014fd70) -NWNXLIB_FUNCTION(_ZN9CNetLayer23CloseStandardConnectionEi, 0x0000000000150320) -NWNXLIB_FUNCTION(_ZN9CNetLayer23CONNECT_ERR_SERVER_FULLE, 0x00000000008bf326) -NWNXLIB_FUNCTION(_ZN9CNetLayer23CONNECTTYPE_SERVERADMINE, 0x00000000008bf315) -NWNXLIB_FUNCTION(_ZN9CNetLayer23DEFAULT_UDP_SERVER_PORTE, 0x00000000008bf30c) -NWNXLIB_FUNCTION(_ZN9CNetLayer23GetPlayerAddressRelayedEj, 0x000000000014ffe0) -NWNXLIB_FUNCTION(_ZN9CNetLayer23GetServerNetworkAddressEv, 0x0000000000150080) -NWNXLIB_FUNCTION(_ZN9CNetLayer23SetGameMasterPermissionEi, 0x0000000000150020) -NWNXLIB_FUNCTION(_ZN9CNetLayer23SetUpPlayBackConnectionEv, 0x000000000014fe90) -NWNXLIB_FUNCTION(_ZN9CNetLayer23StartAddressTranslationERK10CExoString, 0x000000000014fea0) -NWNXLIB_FUNCTION(_ZN9CNetLayer24CleanUpEnumerateSpecificEv, 0x000000000014fb80) -NWNXLIB_FUNCTION(_ZN9CNetLayer24GetAnySessionsEnumeratedEv, 0x000000000014ff20) -NWNXLIB_FUNCTION(_ZN9CNetLayer24PLAYERID_ALL_GAMEMASTERSE, 0x00000000008bf338) -NWNXLIB_FUNCTION(_ZN9CNetLayer24SetConnectionsDisallowedEi, 0x0000000000150360) -NWNXLIB_FUNCTION(_ZN9CNetLayer25CONNECT_ERR_CD_KEY_IN_USEE, 0x00000000008bf322) -NWNXLIB_FUNCTION(_ZN9CNetLayer25CONNECT_ERR_REPLY_TIMEOUTE, 0x00000000008bf324) -NWNXLIB_FUNCTION(_ZN9CNetLayer25PLAYERID_ALL_SERVERADMINSE, 0x00000000008bf334) -NWNXLIB_FUNCTION(_ZN9CNetLayer25RequestExtendedServerInfoEjii, 0x000000000014fce0) -NWNXLIB_FUNCTION(_ZN9CNetLayer26CONNECTTYPE_FAILEDPASSWORDE, 0x00000000008bf314) -NWNXLIB_FUNCTION(_ZN9CNetLayer26TranslateAddressFromStringEPcPjPhS2_S1_, 0x0000000000150040) -NWNXLIB_FUNCTION(_ZN9CNetLayer27ADDRESS_TRANSLATION_PENDINGE, 0x00000000008bf310) -NWNXLIB_FUNCTION(_ZN9CNetLayer27EndEnumerateSessionsSectionEj, 0x000000000014fb50) -NWNXLIB_FUNCTION(_ZN9CNetLayer27GetAddressTranslationResultERK10CExoStringR13CExoArrayListIjE, 0x000000000014feb0) -NWNXLIB_FUNCTION(_ZN9CNetLayer27GetRouterPortMapDescriptionEv, 0x0000000000150990) -NWNXLIB_FUNCTION(_ZN9CNetLayer27SEND_COMPRESSED_BY_NETLAYERE, 0x00000000008bf358) -NWNXLIB_FUNCTION(_ZN9CNetLayer29GetConnectionsMustBeValidatedEv, 0x0000000000150380) -NWNXLIB_FUNCTION(_ZN9CNetLayer29GetEnumerateSpecificOverRelayEv, 0x0000000000150930) -NWNXLIB_FUNCTION(_ZN9CNetLayer29SetConnectionsMustBeValidatedEi, 0x00000000001503a0) -NWNXLIB_FUNCTION(_ZN9CNetLayer29SetEnumerateSpecificOverRelayEiPKc, 0x0000000000150940) -NWNXLIB_FUNCTION(_ZN9CNetLayer29StartEnumerateSessionsSectionEjjP10CExoString, 0x000000000014fb30) -NWNXLIB_FUNCTION(_ZN9CNetLayer30CONNECT_ERR_CDKEY_UNAUTHORIZEDE, 0x00000000008bf31f) -NWNXLIB_FUNCTION(_ZN9CNetLayer30CONNECT_ERR_PASSWORD_INCORRECTE, 0x00000000008bf328) -NWNXLIB_FUNCTION(_ZN9CNetLayer30CONNECT_ERR_PLAYER_NAME_IN_USEE, 0x00000000008bf325) -NWNXLIB_FUNCTION(_ZN9CNetLayer31CONNECT_ERR_PLAYER_NAME_REFUSEDE, 0x00000000008bf323) -NWNXLIB_FUNCTION(_ZN9CNetLayer31SendMessageToStandardConnectionEiPci, 0x0000000000150300) -NWNXLIB_FUNCTION(_ZN9CNetLayer31UDP_SERVER_PORT_ENUMERATION_ENDE, 0x00000000008bf304) -NWNXLIB_FUNCTION(_ZN9CNetLayer32CONNECT_ERR_EXPANSION_PACK_WRONGE, 0x00000000008bf320) -NWNXLIB_FUNCTION(_ZN9CNetLayer32GetMessageFromStandardConnectionEPiPPcS0_, 0x00000000001502e0) -NWNXLIB_FUNCTION(_ZN9CNetLayer33CONNECT_ERR_DM_CONNECTION_REFUSEDE, 0x00000000008bf31e) -NWNXLIB_FUNCTION(_ZN9CNetLayer33ShutDownClientInterfaceWithReasonEjRK10CExoString, 0x0000000000150120) -NWNXLIB_FUNCTION(_ZN9CNetLayer33UDP_SERVER_PORT_ENUMERATION_STARTE, 0x00000000008bf308) -NWNXLIB_FUNCTION(_ZN9CNetLayer34CONNECT_ERR_MASTERSERVER_CD_IN_USEE, 0x00000000008bf31b) -NWNXLIB_FUNCTION(_ZN9CNetLayer34CONNECT_ERR_SERVER_NOT_MULTIPLAYERE, 0x00000000008bf327) -NWNXLIB_FUNCTION(_ZN9CNetLayer34CONNECT_ERR_SERVER_VERSIONMISMATCHE, 0x00000000008bf329) -NWNXLIB_FUNCTION(_ZN9CNetLayer34ENUMERATE_SESSIONS_SECTION_BUDDIESE, 0x00000000008bf2f4) -NWNXLIB_FUNCTION(_ZN9CNetLayer34ENUMERATE_SESSIONS_SECTION_HISTORYE, 0x00000000008bf2fc) -NWNXLIB_FUNCTION(_ZN9CNetLayer35CONNECT_ERR_CRYPTO_HANDSHAKE_FAILEDE, 0x00000000008bf318) -NWNXLIB_FUNCTION(_ZN9CNetLayer35ENUMERATE_SESSIONS_SECTION_INTERNETE, 0x00000000008bf2f0) -NWNXLIB_FUNCTION(_ZN9CNetLayer36CONNECT_ERR_ADMIN_CONNECTION_REFUSEDE, 0x00000000008bf31d) -NWNXLIB_FUNCTION(_ZN9CNetLayer36CONNECT_ERR_LANGUAGE_VERSIONMISMATCHE, 0x00000000008bf31c) -NWNXLIB_FUNCTION(_ZN9CNetLayer36ENUMERATE_SESSIONS_SECTION_FAVORITESE, 0x00000000008bf2f8) -NWNXLIB_FUNCTION(_ZN9CNetLayer37SetCurrentMasterServerInternetAddressEjj, 0x00000000001500e0) -NWNXLIB_FUNCTION(_ZN9CNetLayer39CONNECT_ERR_DEFAULT_PLAYER_NAME_MISSINGE, 0x00000000008bf319) -NWNXLIB_FUNCTION(_ZN9CNetLayer52CONNECT_ERR_LOGIN_DENIED_MASTERSERVER_NOT_RESPONDINGE, 0x00000000008bf31a) -NWNXLIB_FUNCTION(_ZN9CNetLayer7EndPingEj, 0x000000000014fd10) -NWNXLIB_FUNCTION(_ZN9CNetLayer8ShutDownEv, 0x000000000014f730) -NWNXLIB_FUNCTION(_ZN9CNetLayer9GetExoAppEv, 0x000000000014f710) -NWNXLIB_FUNCTION(_ZN9CNetLayer9GetExoNetEv, 0x0000000000150060) -NWNXLIB_FUNCTION(_ZN9CNetLayer9StartPingEj, 0x000000000014fd00) -NWNXLIB_FUNCTION(_ZN9CNetLayerC1Ev, 0x000000000014f670) -NWNXLIB_FUNCTION(_ZN9CNetLayerC2Ev, 0x000000000014f670) -NWNXLIB_FUNCTION(_ZN9CNetLayerD1Ev, 0x000000000014f6b0) -NWNXLIB_FUNCTION(_ZN9CNetLayerD2Ev, 0x000000000014f6b0) -NWNXLIB_FUNCTION(_ZNK9CNetLayer22GetGameMasterPermisionEv, 0x000000000014fff0) -NWNXLIB_FUNCTION(_ZN9CNWDomain11GetNameTextEv, 0x00000000008b2530) -NWNXLIB_FUNCTION(_ZN9CNWDomain18GetDescriptionTextEv, 0x00000000008b2480) -NWNXLIB_FUNCTION(_ZN9CNWDomainC1Ev, 0x00000000008b2420) -NWNXLIB_FUNCTION(_ZN9CNWDomainC2Ev, 0x00000000008b2420) -NWNXLIB_FUNCTION(_ZN9CNWDomainD1Ev, 0x00000000008b2470) -NWNXLIB_FUNCTION(_ZN9CNWDomainD2Ev, 0x00000000008b2470) -NWNXLIB_FUNCTION(_ZN9CNWSRulesC1Ev, 0x00000000003ed600) -NWNXLIB_FUNCTION(_ZN9CNWSRulesC2Ev, 0x00000000003ed600) -NWNXLIB_FUNCTION(_ZN9CNWSRulesD0Ev, 0x00000000003ed5d0) -NWNXLIB_FUNCTION(_ZN9CNWSRulesD1Ev, 0x00000000003ed5b0) -NWNXLIB_FUNCTION(_ZN9CNWSRulesD2Ev, 0x00000000003ed5b0) -NWNXLIB_FUNCTION(_ZN9CNWSStore10AsNWSStoreEv, 0x0000000000344620) -NWNXLIB_FUNCTION(_ZN9CNWSStore10RemoveItemEP8CNWSItem, 0x00000000003429b0) -NWNXLIB_FUNCTION(_ZN9CNWSStore11AcquireItemEP8CNWSItemihh, 0x00000000003433d0) -NWNXLIB_FUNCTION(_ZN9CNWSStore11AddCustomerEP10CNWSPlayercc, 0x0000000000342bb0) -NWNXLIB_FUNCTION(_ZN9CNWSStore11GetCustomerEj, 0x0000000000342e00) -NWNXLIB_FUNCTION(_ZN9CNWSStore12EventHandlerEjjPvjj, 0x00000000003425c0) -NWNXLIB_FUNCTION(_ZN9CNWSStore13GetScriptNameEi, 0x0000000000344630) -NWNXLIB_FUNCTION(_ZN9CNWSStore14RemoveCustomerEP10CNWSPlayer, 0x0000000000342d20) -NWNXLIB_FUNCTION(_ZN9CNWSStore14RemoveFromAreaEv, 0x00000000003424e0) -NWNXLIB_FUNCTION(_ZN9CNWSStore16LoadFromTemplateE7CResRefP10CExoString, 0x0000000000344490) -NWNXLIB_FUNCTION(_ZN9CNWSStore18AddItemToInventoryEPP8CNWSItemhhh, 0x00000000003430d0) -NWNXLIB_FUNCTION(_ZN9CNWSStore18GetCustomerBuyRateEji, 0x0000000000342eb0) -NWNXLIB_FUNCTION(_ZN9CNWSStore18GetItemInInventoryEj, 0x0000000000342fe0) -NWNXLIB_FUNCTION(_ZN9CNWSStore18GetItemInInventoryEP10CExoString, 0x0000000000343060) -NWNXLIB_FUNCTION(_ZN9CNWSStore19GetCustomerSellRateEj, 0x0000000000342e50) -NWNXLIB_FUNCTION(_ZN9CNWSStore19INVENTORY_MAX_LISTSE, 0x00000000008d969c) -NWNXLIB_FUNCTION(_ZN9CNWSStore19INVENTORY_MISC_LISTE, 0x00000000008d96a8) -NWNXLIB_FUNCTION(_ZN9CNWSStore20GetAppropriateListIdEj, 0x0000000000342a00) -NWNXLIB_FUNCTION(_ZN9CNWSStore20INVENTORY_RINGS_LISTE, 0x00000000008d96a0) -NWNXLIB_FUNCTION(_ZN9CNWSStore21CalculateItemBuyPriceEP8CNWSItemj, 0x0000000000342f30) -NWNXLIB_FUNCTION(_ZN9CNWSStore21INVENTORY_ARMOUR_LISTE, 0x00000000008d96b0) -NWNXLIB_FUNCTION(_ZN9CNWSStore22CalculateItemSellPriceEP8CNWSItemj, 0x00000000003428e0) -NWNXLIB_FUNCTION(_ZN9CNWSStore22GetIsRestrictedBuyItemEi, 0x0000000000342b20) -NWNXLIB_FUNCTION(_ZN9CNWSStore22INVENTORY_POTIONS_LISTE, 0x00000000008d96a4) -NWNXLIB_FUNCTION(_ZN9CNWSStore22INVENTORY_WEAPONS_LISTE, 0x00000000008d96ac) -NWNXLIB_FUNCTION(_ZN9CNWSStore23RemoveItemFromInventoryEP8CNWSItemh, 0x0000000000342a30) -NWNXLIB_FUNCTION(_ZN9CNWSStore8AIUpdateEv, 0x0000000000341cd0) -NWNXLIB_FUNCTION(_ZN9CNWSStore8SellItemEP8CNWSItemP12CNWSCreaturehh, 0x0000000000343590) -NWNXLIB_FUNCTION(_ZN9CNWSStore9AddToAreaEP8CNWSAreafffi, 0x0000000000342520) -NWNXLIB_FUNCTION(_ZN9CNWSStore9LoadStoreEP7CResGFFP10CResStructiP10CExoString, 0x0000000000343830) -NWNXLIB_FUNCTION(_ZN9CNWSStore9SaveStoreEP7CResGFFP10CResStructi, 0x0000000000341f30) -NWNXLIB_FUNCTION(_ZN9CNWSStoreC1Ej, 0x0000000000341d10) -NWNXLIB_FUNCTION(_ZN9CNWSStoreC2Ej, 0x0000000000341d10) -NWNXLIB_FUNCTION(_ZN9CNWSStoreD0Ev, 0x00000000003428b0) -NWNXLIB_FUNCTION(_ZN9CNWSStoreD1Ev, 0x0000000000342690) -NWNXLIB_FUNCTION(_ZN9CNWSStoreD2Ev, 0x0000000000342690) -NWNXLIB_FUNCTION(_ZN9CTlkTable11GENDER_MALEE, 0x00000000008bf01d) -NWNXLIB_FUNCTION(_ZN9CTlkTable11SetOverrideEjRK10CExoString, 0x0000000000145ce0) -NWNXLIB_FUNCTION(_ZN9CTlkTable11SND_PRESENTE, 0x00000000008bf026) -NWNXLIB_FUNCTION(_ZN9CTlkTable12TEXT_PRESENTE, 0x00000000008bf028) -NWNXLIB_FUNCTION(_ZN9CTlkTable13FetchInternalEjR7STR_RESi, 0x0000000000145610) -NWNXLIB_FUNCTION(_ZN9CTlkTable13GENDER_FEMALEE, 0x00000000008bf01c) -NWNXLIB_FUNCTION(_ZN9CTlkTable13GetTokenValueERK14CTlkTableTokenR10CExoString, 0x0000000000146480) -NWNXLIB_FUNCTION(_ZN9CTlkTable13RemapFontNameEPc, 0x0000000000144390) -NWNXLIB_FUNCTION(_ZN9CTlkTable14ClearOverridesEv, 0x0000000000145600) -NWNXLIB_FUNCTION(_ZN9CTlkTable14SetCustomTokenEiRK10CExoString, 0x0000000000144510) -NWNXLIB_FUNCTION(_ZN9CTlkTable14STRING_ID_MASKE, 0x00000000008bf030) -NWNXLIB_FUNCTION(_ZN9CTlkTable15GetSimpleStringEj, 0x0000000000145c40) -NWNXLIB_FUNCTION(_ZN9CTlkTable17ClearCustomTokensEv, 0x00000000001447a0) -NWNXLIB_FUNCTION(_ZN9CTlkTable17ExoIsDBCSLeadByteEh, 0x0000000000144380) -NWNXLIB_FUNCTION(_ZN9CTlkTable17OpenFileAlternateERK10CExoString, 0x0000000000145460) -NWNXLIB_FUNCTION(_ZN9CTlkTable17SNDLENGTH_PRESENTE, 0x00000000008bf024) -NWNXLIB_FUNCTION(_ZN9CTlkTable18CloseFileAlternateEv, 0x0000000000144370) -NWNXLIB_FUNCTION(_ZN9CTlkTable18GetLanguageVersionEv, 0x0000000000144e90) -NWNXLIB_FUNCTION(_ZN9CTlkTable18s_szDialogFontNameE, 0x0000000000ce96f8) -NWNXLIB_FUNCTION(_ZN9CTlkTable20FILESARRAY_GROW_SIZEE, 0x00000000008bf02a) -NWNXLIB_FUNCTION(_ZN9CTlkTable20s_szFontName_DefaultE, 0x0000000000ccd088) -NWNXLIB_FUNCTION(_ZN9CTlkTable21INIT_FILESARRAY_SLOTSE, 0x00000000008bf02b) -NWNXLIB_FUNCTION(_ZN9CTlkTable21SetUseLargeDialogFontEi, 0x0000000000144eb0) -NWNXLIB_FUNCTION(_ZN9CTlkTable24CUSTOMTOKEN_RESERVED_ENDE, 0x00000000008bf020) -NWNXLIB_FUNCTION(_ZN9CTlkTable24STRING_ID_MASK_ALTERNATEE, 0x00000000008bf02c) -NWNXLIB_FUNCTION(_ZN9CTlkTable25s_szFontName_Dialog_LargeE, 0x0000000000ccd080) -NWNXLIB_FUNCTION(_ZN9CTlkTable27s_szFontName_Dialog_DefaultE, 0x0000000000ccd090) -NWNXLIB_FUNCTION(_ZN9CTlkTable6ReloadEv, 0x00000000001463d0) -NWNXLIB_FUNCTION(_ZN9CTlkTable8OpenFileE10CExoString, 0x0000000000145f00) -NWNXLIB_FUNCTION(_ZN9CTlkTable8OpenFileERK10CExoStringPP8CTlkFile, 0x00000000001450d0) -NWNXLIB_FUNCTION(_ZN9CTlkTable8ParseStrER10CExoString, 0x0000000000144820) -NWNXLIB_FUNCTION(_ZN9CTlkTable9CloseFileEPP8CTlkFile, 0x0000000000144310) -NWNXLIB_FUNCTION(_ZN9CTlkTableC1Ev, 0x0000000000144240) -NWNXLIB_FUNCTION(_ZN9CTlkTableC2Ev, 0x0000000000144240) -NWNXLIB_FUNCTION(_ZN9CTlkTableD0Ev, 0x00000000001455d0) -NWNXLIB_FUNCTION(_ZN9CTlkTableD1Ev, 0x0000000000145490) -NWNXLIB_FUNCTION(_ZN9CTlkTableD2Ev, 0x0000000000145490) -NWNXLIB_FUNCTION(_ZNK29CAurObjectVisualTransformDataeqERKS_, 0x000000000033e4a0) -NWNXLIB_FUNCTION(_ZNK6Matrix13getquaternionEv, 0x00000000007a32f0) -NWNXLIB_FUNCTION(_ZN9LerpFloat7ReadGFFEP7CResGFFP10CResStructPcRif, 0x00000000008b1b80) -NWNXLIB_FUNCTION(_ZN9LerpFloat7RefreshEv, 0x00000000008b1750) -NWNXLIB_FUNCTION(_ZN9LerpFloat8WriteGFFEP7CResGFFP10CResStructPc, 0x00000000008b1a80) -NWNXLIB_FUNCTION(_ZNK9LerpFloat6LerpedEv, 0x00000000008b1860) -NWNXLIB_FUNCTION(_ZNK9LerpFloat8ProgressEv, 0x00000000008b1550) -NWNXLIB_FUNCTION(_ZN9DataBlock15AllocateAtLeastEm, 0x00000000001fc1a0) -NWNXLIB_FUNCTION(_ZN9DataBlock6AppendEPKvmm, 0x00000000001fc3d0) -NWNXLIB_FUNCTION(_ZN9DataBlock7CompactEv, 0x00000000001fc570) -NWNXLIB_FUNCTION(_ZN9DataBlock7PrependEPKvmm, 0x00000000001fc350) -NWNXLIB_FUNCTION(_ZN9DataBlock8MarkUsedEm, 0x00000000001fc180) -NWNXLIB_FUNCTION(_ZN8DataView8EmptyRefEv, 0x00000000001fbcc0) -NWNXLIB_FUNCTION(_ZN8DataViewD1Ev, 0x0000000000139db0) -NWNXLIB_FUNCTION(_ZN8DataViewD2Ev, 0x0000000000139db0) -NWNXLIB_FUNCTION(_ZNK8DataView4ViewEmm, 0x00000000001fbe60) -NWNXLIB_FUNCTION(_ZNK8DataView8MakeCopyEv, 0x00000000001fc450) -NWNXLIB_FUNCTION(NWNXEntryPoint, 0x00000000000f5e80) +NWNXLIB_FUNCTION(_ZN21CServerExoAppInternal8SaveGameEjR10CExoStringS1_P10CNWSPlayeriS1_) +NWNXLIB_FUNCTION(_ZN16CGameObjectArrayC1Ei) +NWNXLIB_FUNCTION(_ZN10CNWSPlayerD0Ev) +NWNXLIB_FUNCTION(_ZN10CNWSPlayerD1Ev) +NWNXLIB_FUNCTION(_ZN10CNWSModule15LoadModuleStartE10CExoStringiiRKN6NWSync13AdvertisementE) diff --git a/NWNXLib/API/Globals.hpp b/NWNXLib/API/Globals.hpp index 56357562799..838790b2b97 100644 --- a/NWNXLib/API/Globals.hpp +++ b/NWNXLib/API/Globals.hpp @@ -2,56 +2,45 @@ #include - -struct CExoBase; -struct CExoResMan; -struct CVirtualMachine; -struct CScriptCompiler; -struct CAppManager; -struct CTlkTable; -struct CNWRules; -struct CExoString; +extern CExoString g_sBuildNumber; +extern CExoString g_sBuildRevision; +extern class CExoBase *g_pExoBase; +extern class CExoResMan *g_pExoResMan; +extern class CVirtualMachine *g_pVirtualMachine; +extern class CScriptCompiler *g_pScriptCompiler; +extern class CAppManager *g_pAppManager; +extern class CTlkTable *g_pTlkTable; +extern class CNWRules *g_pRules; namespace Task { -struct CExoTaskManager; +extern class CExoTaskManager *g_pExoTaskManager; } +extern int32_t g_bEnableCombatDebugging; +extern int32_t g_bEnableSavingThrowDebugging; +extern int32_t g_bEnableMovementSpeedDebugging; +extern int32_t g_bEnableHitDieDebugging; +extern int32_t g_bExitProgram; namespace NWNXLib::API::Globals { -struct NWNXExportedGlobals -{ - CExoString *psBuildNumber; - CExoString *psBuildRevision; - CExoBase **ppExoBase; - CExoResMan **ppExoResMan; - CVirtualMachine **ppVirtualMachine; - CScriptCompiler **ppScriptCompiler; - CAppManager **ppAppManager; - CTlkTable **ppTlkTable; - CNWRules **ppRules; - Task::CExoTaskManager **ppExoTaskManager; - int32_t *pbEnableCombatDebugging; - int32_t *pbEnableSavingThrowDebugging; - int32_t *pbEnableMovementSpeedDebugging; - int32_t *pbEnableHitDieDebugging; - int32_t *pbExitProgram; -}; -extern NWNXExportedGlobals ExportedGlobals; - -inline CExoString* BuildNumber() { return ExportedGlobals.psBuildNumber; } -inline CExoString* BuildRevision() { return ExportedGlobals.psBuildRevision; } -inline CExoBase* ExoBase() { return *ExportedGlobals.ppExoBase; } -inline CExoResMan* ExoResMan() { return *ExportedGlobals.ppExoResMan; } -inline CVirtualMachine* VirtualMachine() { return *ExportedGlobals.ppVirtualMachine; } -inline CScriptCompiler* ScriptCompiler() { return *ExportedGlobals.ppScriptCompiler; } -inline CAppManager* AppManager() { return *ExportedGlobals.ppAppManager; } -inline CTlkTable* TlkTable() { return *ExportedGlobals.ppTlkTable; } -inline CNWRules* Rules() { return *ExportedGlobals.ppRules; } -inline Task::CExoTaskManager* TaskManager() { return *ExportedGlobals.ppExoTaskManager; } - -inline int32_t* EnableCombatDebugging() { return ExportedGlobals.pbEnableCombatDebugging; } -inline int32_t* EnableSavingThrowDebugging() { return ExportedGlobals.pbEnableSavingThrowDebugging; } -inline int32_t* EnableMovementSpeedDebugging() { return ExportedGlobals.pbEnableMovementSpeedDebugging; } -inline int32_t* EnableHitDieDebugging() { return ExportedGlobals.pbEnableHitDieDebugging; } -inline int32_t* ExitProgram() { return ExportedGlobals.pbExitProgram; } +inline CExoString* BuildNumber() { return &g_sBuildNumber; } +inline CExoString* BuildRevision() { return &g_sBuildRevision; } +inline CExoBase* ExoBase() { return g_pExoBase; } +inline CExoResMan* ExoResMan() { return g_pExoResMan; } +inline CVirtualMachine* VirtualMachine() { return g_pVirtualMachine; } +inline CScriptCompiler* ScriptCompiler() { return g_pScriptCompiler; } +inline CAppManager* AppManager() { return g_pAppManager; } +inline CTlkTable* TlkTable() { return g_pTlkTable; } +inline CNWRules* Rules() { return g_pRules; } +inline Task::CExoTaskManager* TaskManager() { return Task::g_pExoTaskManager; } + +inline int32_t* EnableCombatDebugging() { return &g_bEnableCombatDebugging; } +inline int32_t* EnableSavingThrowDebugging() { return &g_bEnableSavingThrowDebugging; } +inline int32_t* EnableMovementSpeedDebugging() { return &g_bEnableMovementSpeedDebugging; } +inline int32_t* EnableHitDieDebugging() { return &g_bEnableHitDieDebugging; } +#ifdef WIN32 +inline int32_t* ExitProgram() { return NULL; } +#else +inline int32_t* ExitProgram() { return &g_bExitProgram; } +#endif } diff --git a/NWNXLib/API/nwn_api.hpp b/NWNXLib/API/nwn_api.hpp index f76d23876ea..5489d08ef2d 100644 --- a/NWNXLib/API/nwn_api.hpp +++ b/NWNXLib/API/nwn_api.hpp @@ -96,7 +96,49 @@ struct DataBlock : DataView void Compact(); }; -struct CUUID { uint64_t ab = 0, cd = 0; }; +// sole.h +struct CUUID { + CUUID() : ab(0), cd(0) {} + + uint64_t ab; + uint64_t cd; + + bool empty() const { return ab == 0 && cd == 0; } + operator bool() const { return !empty(); } + + void clear() { ab = 0; cd = 0; } + + inline bool operator==( const CUUID &other ) const { + return ab == other.ab && cd == other.cd; + } + inline bool operator!=( const CUUID &other ) const { + return !operator==(other); + } + inline bool operator<( const CUUID &other ) const { + if( ab < other.ab ) return true; + if( ab > other.ab ) return false; + if( cd < other.cd ) return true; + return false; + } + + std::string pretty() const; + std::string base62() const; + std::string str() const; + + template + inline friend ostream &operator<<( ostream &os, const CUUID &self ) { + return os << self.str(), os; + } + + // Generators + static CUUID uuid0(); // UUID v0, pro: unique; cons: MAC revealed, pid revealed, predictable. + static CUUID uuid1(); // UUID v1, pro: unique; cons: MAC revealed, predictable. + static CUUID uuid4(); // UUID v4, pros: anonymous, fast; con: uuids "can clash" + + // Rebuilders + static CUUID rebuild( uint64_t ab, uint64_t cd ); + static CUUID rebuild( const std::string &uustr ); +}; using json = nlohmann::json; namespace Nui::JSON { @@ -133,6 +175,13 @@ namespace NWSQLite { using Database = void*; } +template +struct SharedPtrEngineStructure +{ + std::shared_ptr m_shared; + virtual ~SharedPtrEngineStructure() {} +}; + #define NWN_CLASS_EXTENSION_CGameObject \ using CleanupFunc = std::function; \ void nwnxSet(const std::string& key, int value, bool persist = false, const char *pn = PLUGIN_NAME); \ diff --git a/NWNXLib/Encoding.cpp b/NWNXLib/Encoding.cpp index 889aaab52d3..8e75240ef3a 100644 --- a/NWNXLib/Encoding.cpp +++ b/NWNXLib/Encoding.cpp @@ -264,6 +264,10 @@ std::vector FromBase64(const std::string &in) int val = 0, valb = -8; for (char c : in) { + // Ignoring whitespace is conveniently in-spec: Sometimes, + // base64 is broken up in 78-column chunks. + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + continue; if (Table[(uint8_t)c] == -1) break; val = (val<<6) + Table[(uint8_t)c]; diff --git a/NWNXLib/Hooks.cpp b/NWNXLib/Hooks.cpp index d809e621a6a..9356c768c41 100644 --- a/NWNXLib/Hooks.cpp +++ b/NWNXLib/Hooks.cpp @@ -12,7 +12,7 @@ using namespace NWNXLib; namespace NWNXLib::Hooks { -FunctionHook::FunctionHook(uintptr_t originalFunction, void* newFunction, int32_t order) +FunctionHook::FunctionHook(void* originalFunction, void* newFunction, int32_t order) : m_originalFunction(originalFunction), m_newFunction(newFunction), m_order(order) { auto &v = s_hooks[originalFunction]; @@ -64,9 +64,4 @@ FunctionHook::~FunctionHook() funchook_destroy((funchook_t*)m_funchook); } -Hook HookFunction(uintptr_t address, void* funcPtr, int32_t order) -{ - return std::make_unique(Platform::GetRelocatedAddress(address), funcPtr, order); -} - }; diff --git a/NWNXLib/Log.hpp b/NWNXLib/Log.hpp index d16ba7a5de6..db5fb08484c 100644 --- a/NWNXLib/Log.hpp +++ b/NWNXLib/Log.hpp @@ -83,6 +83,17 @@ void Trace(Channel::Enum channel, const char* plugin, const char* file, int line static constexpr const char * SEVERITY_NAMES[] = { "", "", "F", "E", "W", "N", "I", "D" }; + std::ostringstream formatted_message; + tfm::format(formatted_message, format, std::forward(args)...); + + MessageBus::Broadcast("NWNX_CORE_LOG_MESSAGE", { + std::to_string((int) channel), + plugin, + file, + std::to_string(line), + formatted_message.str() + }); + // Get filename without the full path. const char* filename = file; const char* filenameTemp = filename; @@ -112,7 +123,8 @@ void Trace(Channel::Enum channel, const char* plugin, const char* file, int line { tfm::format(stream, "[%s:%d] ", filename, line); } - tfm::format(stream, format, std::forward(args)...); + + stream << formatted_message.str(); InternalTrace(channel, allowedChannel, stream.str().c_str()); } diff --git a/NWNXLib/POS.cpp b/NWNXLib/POS.cpp index 04e251c67fd..e53597c0758 100644 --- a/NWNXLib/POS.cpp +++ b/NWNXLib/POS.cpp @@ -1,6 +1,7 @@ #include "nwnx.hpp" #include "API/CGameObject.hpp" #include "API/CNWSObject.hpp" +#include "API/CGameObjectArray.hpp" #include "API/CNWSArea.hpp" #include "API/CNWSPlayer.hpp" #include "API/CNWSUUID.hpp" @@ -11,6 +12,9 @@ #include #include +extern "C" void _ZN10CNWSObjectD1Ev(CNWSObject*); +extern "C" void _ZN8CNWSAreaD1Ev(CNWSArea*); + using namespace NWNXLib; namespace NWNXLib::POS { @@ -381,30 +385,30 @@ void RemoveRegex(CGameObject *pGameObject, const std::string& prefix, const std: void InitializeHooks() { - static Hooks::Hook s_ObjectDtorHook = Hooks::HookFunction(API::Functions::_ZN10CNWSObjectD1Ev, - (void*)+[](CNWSObject* pThis) + static Hooks::Hook s_ObjectDtorHook = Hooks::HookFunction(&_ZN10CNWSObjectD1Ev, + +[](CNWSObject* pThis) { s_ObjectDtorHook->CallOriginal(pThis); DestroyObjectStorage(static_cast(pThis)); }, Hooks::Order::VeryEarly); - static Hooks::Hook s_AreaDtorHook = Hooks::HookFunction(API::Functions::_ZN8CNWSAreaD1Ev, - (void*)+[](CNWSArea* pThis) + static Hooks::Hook s_AreaDtorHook = Hooks::HookFunction(&_ZN8CNWSAreaD1Ev, + +[](CNWSArea* pThis) { s_AreaDtorHook->CallOriginal(pThis); DestroyObjectStorage(static_cast(pThis)); }, Hooks::Order::VeryEarly); - static Hooks::Hook s_EatTURDHook = Hooks::HookFunction(API::Functions::_ZN10CNWSPlayer7EatTURDEP14CNWSPlayerTURD, - (void*)+[](CNWSPlayer* pThis, CNWSPlayerTURD* pTURD) + static Hooks::Hook s_EatTURDHook = Hooks::HookFunction(&CNWSPlayer::EatTURD, + +[](CNWSPlayer* pThis, CNWSPlayerTURD* pTURD) { auto pObjThis = Utils::GetGameObject(pThis->m_oidNWSObject); GetObjectStorage(pObjThis)->CloneFrom(GetObjectStorage(pTURD)); s_EatTURDHook->CallOriginal(pThis, pTURD); }, Hooks::Order::VeryEarly); - static Hooks::Hook s_DropTURDHook = Hooks::HookFunction(API::Functions::_ZN10CNWSPlayer8DropTURDEv, - (void*)+[](CNWSPlayer* pThis) + static Hooks::Hook s_DropTURDHook = Hooks::HookFunction(&CNWSPlayer::DropTURD, + +[](CNWSPlayer* pThis) { s_DropTURDHook->CallOriginal(pThis); @@ -424,15 +428,15 @@ void InitializeHooks() } }, Hooks::Order::VeryEarly); - static Hooks::Hook s_UUIDSaveToGffHook = Hooks::HookFunction(API::Functions::_ZN8CNWSUUID9SaveToGffEP7CResGFFP10CResStruct, - (void*)+[](CNWSUUID* pThis, CResGFF* pRes, CResStruct* pStruct) + static Hooks::Hook s_UUIDSaveToGffHook = Hooks::HookFunction(&CNWSUUID::SaveToGff, + +[](CNWSUUID* pThis, CResGFF* pRes, CResStruct* pStruct) { pRes->WriteFieldCExoString(pStruct, GetObjectStorage(pThis->m_parent)->Serialize(), GffFieldName); s_UUIDSaveToGffHook->CallOriginal(pThis, pRes, pStruct); }, Hooks::Order::VeryEarly); - static Hooks::Hook s_UUIDLoadFromGffHook = Hooks::HookFunction(API::Functions::_ZN8CNWSUUID11LoadFromGffEP7CResGFFP10CResStruct, - (void*)+[](CNWSUUID* pThis, CResGFF* pRes, CResStruct* pStruct) -> bool + static Hooks::Hook s_UUIDLoadFromGffHook = Hooks::HookFunction(&CNWSUUID::LoadFromGff, + +[](CNWSUUID* pThis, CResGFF* pRes, CResStruct* pStruct) -> bool { int32_t success; auto str = pRes->ReadFieldCExoString(pStruct, GffFieldName, success); diff --git a/NWNXLib/Platform/ASLR.cpp b/NWNXLib/Platform/ASLR.cpp deleted file mode 100644 index 7ccd8bde110..00000000000 --- a/NWNXLib/Platform/ASLR.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "nwnx.hpp" - -#include -#include -#include - - - -namespace NWNXLib::API::Globals { - NWNXExportedGlobals ExportedGlobals; -} - -extern void (*NWNX_API_START)(); -extern void (*NWNX_API_END)(); - -namespace NWNXLib::Platform { - -static void ProtectAddress(uintptr_t address, uint32_t length, int flags) -{ - const uintptr_t pageSize = static_cast(getpagesize()); - const uintptr_t currentPage = address & ~(pageSize - 1); - const size_t lengthWithPadding = length + (address - currentPage); - - mprotect(reinterpret_cast(currentPage), lengthWithPadding, flags); -} - -static uintptr_t s_baseAddress; - -void CalculateBaseAddress() -{ - void *handle = dlopen(nullptr, RTLD_LAZY); - ASSERT(handle); - const uintptr_t whatWeThinkItIs = API::Functions::NWNXEntryPoint; - const uintptr_t whatItActuallyIs = (uintptr_t)dlsym(handle, "NWNXEntryPoint"); - s_baseAddress = whatItActuallyIs - whatWeThinkItIs; - - using NWNXLib::API::Globals::NWNXExportedGlobals; - NWNXLib::API::Globals::ExportedGlobals = reinterpret_cast(whatItActuallyIs)(); - - std::printf("=========================================\n"); - std::printf(" Base address is: 0x%016lx\n", (uint64_t)s_baseAddress); - std::printf(" g_pExoBase is: 0x%016lx\n", (uint64_t)NWNXLib::API::Globals::ExportedGlobals.ppExoBase); - - - uint8_t *p = (uint8_t*)&NWNX_API_START; - uint8_t *end = (uint8_t*)&NWNX_API_END; - uint32_t count = 0; - ProtectAddress((uintptr_t)p, end - p, PROT_READ | PROT_WRITE | PROT_EXEC); - while (p != end) - { - if (*(uintptr_t*)p == 0x0000abcd12345678) - { - *(uintptr_t*)p = s_baseAddress; - count++; - } - p++; - } - std::printf(" Corrected %d ASLR addresses\n", count); - std::printf("=========================================\n"); - dlclose(handle); -} - -uintptr_t GetRelocatedAddress(const uintptr_t address) -{ - return s_baseAddress + address; -} - - -} diff --git a/NWNXLib/Platform/CMakeLists.txt b/NWNXLib/Platform/CMakeLists.txt index a054d8fd42d..0076c5daec9 100644 --- a/NWNXLib/Platform/CMakeLists.txt +++ b/NWNXLib/Platform/CMakeLists.txt @@ -1,3 +1,2 @@ nwnxlib_add( - "ASLR.cpp" "Debug.cpp") diff --git a/NWNXLib/Platform/Debug.cpp b/NWNXLib/Platform/Debug.cpp index ee45656a3c3..6d280af5a75 100644 --- a/NWNXLib/Platform/Debug.cpp +++ b/NWNXLib/Platform/Debug.cpp @@ -42,15 +42,8 @@ std::string GetStackTrace(uint8_t levels) std::strncat(buffer, "\n Backtrace:\n", sizeof(buffer)-1); for (int i = 0; i < numCapturedFrames; ++i) { - uintptr_t addr, addr2; - char path[64]; char backtraceBuffer[2048]; std::snprintf(backtraceBuffer, sizeof(backtraceBuffer), " %s\n", resolvedFrames[i]); - if (std::sscanf(backtraceBuffer, " %63[^(](+%lx) [%lx]", path, &addr, &addr2) == 3) - { - std::snprintf(backtraceBuffer, sizeof(backtraceBuffer), - " %s(%s) [0x%lx]\n", path, ResolveAddress(addr).c_str(), addr2); - } std::strncat(buffer, backtraceBuffer, sizeof(buffer)-1); } free(resolvedFrames); @@ -58,61 +51,4 @@ std::string GetStackTrace(uint8_t levels) return std::string(buffer); } -static std::map s_FunctionMap; -static void InitFunctionMap() -{ - if (!s_FunctionMap.empty()) return; - -#undef NWNXLIB_FUNCTION -#define NWNXLIB_FUNCTION_NO_VERSION_CHECK -#define NWNXLIB_FUNCTION(name, address) s_FunctionMap[address] = #name; -#include "API/FunctionsLinux.hpp" -#undef NWNXLIB_FUNCTION -} - -std::string ResolveAddress(uintptr_t address) -{ - InitFunctionMap(); - - if (address > GetRelocatedAddress(0)) - address -= GetRelocatedAddress(0); - - auto it = s_FunctionMap.upper_bound(address); - if (it != s_FunctionMap.begin()) - { - --it; - char offset[64]; - std::snprintf(offset, sizeof(offset), "+0x%lx", address - it->first); - return it->second + offset; - } - return ""; -} - -uintptr_t GetFunctionAddress(const std::string& mangledname) -{ - InitFunctionMap(); - for (const auto& it: s_FunctionMap) - { - if (it.second == mangledname) - return it.first; - } - return 0; -} - -bool AmICalledBy(uintptr_t address, uintptr_t returnAddress) -{ - InitFunctionMap(); - - if (returnAddress > GetRelocatedAddress(0)) - returnAddress -= GetRelocatedAddress(0); - - auto it = s_FunctionMap.upper_bound(returnAddress); - if (it != s_FunctionMap.begin()) - { - --it; - return it->first == address; - } - return false; -} - } diff --git a/NWNXLib/ScriptVariant.hpp b/NWNXLib/ScriptVariant.hpp index 43f13096b3e..dc278341ad6 100644 --- a/NWNXLib/ScriptVariant.hpp +++ b/NWNXLib/ScriptVariant.hpp @@ -1,6 +1,5 @@ #pragma once -#include "nwnx.hpp" #include "API/API/CGameEffect.hpp" #include "API/API/JsonEngineStructure.hpp" @@ -77,7 +76,7 @@ struct ScriptVariant auto e = Get(); return e ? std::string("EffectID:") + std::to_string(e->m_nID) : std::string("nullptr effect"); } - else if (Holds()) { return std::string("JSON: ") + Get().m_json.dump(); } + else if (Holds()) { return std::string("JSON: ") + Get().m_shared->m_json.dump(); } return "(unknown argument type)"; } diff --git a/NWNXLib/Utils.cpp b/NWNXLib/Utils.cpp index f746b1af6f8..86c7f4b6038 100644 --- a/NWNXLib/Utils.cpp +++ b/NWNXLib/Utils.cpp @@ -526,5 +526,22 @@ CNWSPlayer* PopPlayer(ArgumentStack& args, bool throwOnFail) return pPlayer; } +int32_t NWScriptObjectTypeToEngineObjectType(int32_t nwscriptObjectType) +{ + switch (nwscriptObjectType) + { + case 1: return Constants::ObjectType::Creature; + case 2: return Constants::ObjectType::Item; + case 4: return Constants::ObjectType::Trigger; + case 8: return Constants::ObjectType::Door; + case 16: return Constants::ObjectType::AreaOfEffect; + case 32: return Constants::ObjectType::Waypoint; + case 64: return Constants::ObjectType::Placeable; + case 128: return Constants::ObjectType::Store; + case 256: return Constants::ObjectType::Encounter; + default: return 0; + } +} + } diff --git a/NWNXLib/nwnx.hpp b/NWNXLib/nwnx.hpp index 66142892fa1..c2e466279bc 100644 --- a/NWNXLib/nwnx.hpp +++ b/NWNXLib/nwnx.hpp @@ -82,7 +82,7 @@ namespace Hooks class FunctionHook final { public: - FunctionHook(uintptr_t originalFunction, void* newFunction, int32_t order = Order::Default); + FunctionHook(void* originalFunction, void* newFunction, int32_t order = Order::Default); ~FunctionHook(); void *GetOriginal() { return m_trampoline; } @@ -93,17 +93,22 @@ namespace Hooks } private: - uintptr_t m_originalFunction; + void* m_originalFunction; void* m_newFunction; int32_t m_order; void* m_funchook; void* m_trampoline; - static inline std::unordered_map> s_hooks; + static inline std::unordered_map> s_hooks; }; using Hook = std::unique_ptr; - [[nodiscard]] Hook HookFunction(uintptr_t address, void* funcPtr, int32_t order = Order::Default); + + template + [[nodiscard]] Hook HookFunction(T1 original, T2 replacement, int32_t order = Order::Default) + { + return std::make_unique((void*)original, (void *)replacement, order); + } } namespace MessageBus @@ -120,15 +125,6 @@ namespace Platform { bool IsDebuggerPresent(); std::string GetStackTrace(uint8_t levels); - - std::string ResolveAddress(uintptr_t address); - uintptr_t GetFunctionAddress(const std::string& mangledname); - - void CalculateBaseAddress(); - uintptr_t GetRelocatedAddress(const uintptr_t address); - uintptr_t GetRelocatedGlobalAddress(const uintptr_t address); - - bool AmICalledBy(uintptr_t address, uintptr_t returnAddress = (uintptr_t)__builtin_return_address(0)); } namespace Commands @@ -269,6 +265,8 @@ namespace Utils CNWSWaypoint* PopWaypoint(ArgumentStack& args, bool throwOnFail=false); CNWSTrigger* PopTrigger(ArgumentStack& args, bool throwOnFail=false); CNWSDoor* PopDoor(ArgumentStack& args, bool throwOnFail=false); + + int32_t NWScriptObjectTypeToEngineObjectType(int32_t nwscriptObjectType); } namespace POS diff --git a/Plugins/Administration/Administration.cpp b/Plugins/Administration/Administration.cpp index 341b42bb82b..7cc53b4a465 100644 --- a/Plugins/Administration/Administration.cpp +++ b/Plugins/Administration/Administration.cpp @@ -383,6 +383,10 @@ NWNX_EXPORT Events::ArgumentStack GetPlayOption(Events::ArgumentStack&& args) retVal = Globals::AppManager()->m_pServerExoApp->GetServerInfo()->m_PlayOptions.bPlayerPartyControl; break; + case 28: // NWNX_ADMINISTRATION_OPTION_SHOW_PLAYER_JOIN_MESSAGES + retVal = Globals::AppManager()->m_pServerExoApp->GetServerInfo()->m_PlayOptions.bShowPlayerJoinMessages; + break; + default: LOG_NOTICE("Calling NWNX_Administration_GetPlayOption with invalid option: %d", option); break; @@ -514,6 +518,10 @@ NWNX_EXPORT Events::ArgumentStack SetPlayOption(Events::ArgumentStack&& args) Globals::AppManager()->m_pServerExoApp->GetServerInfo()->m_PlayOptions.bPlayerPartyControl = !!value; break; + case 28: // NWNX_ADMINISTRATION_OPTION_SHOW_PLAYER_JOIN_MESSAGES + Globals::AppManager()->m_pServerExoApp->GetServerInfo()->m_PlayOptions.bShowPlayerJoinMessages = !!value; + break; + default: LOG_NOTICE("Calling NWNX_Administration_SetPlayOption with invalid option: %d", option); break; diff --git a/Plugins/Administration/NWScript/nwnx_admin.nss b/Plugins/Administration/NWScript/nwnx_admin.nss index ca119d260e2..7cd016e5773 100644 --- a/Plugins/Administration/NWScript/nwnx_admin.nss +++ b/Plugins/Administration/NWScript/nwnx_admin.nss @@ -38,6 +38,7 @@ const int NWNX_ADMINISTRATION_OPTION_RESTORE_SPELLS_USES = 24; // TRUE/FA const int NWNX_ADMINISTRATION_OPTION_RESET_ENCOUNTER_SPAWN_POOL = 25; // TRUE/FALSE const int NWNX_ADMINISTRATION_OPTION_HIDE_HITPOINTS_GAINED = 26; // TRUE/FALSE const int NWNX_ADMINISTRATION_OPTION_PLAYER_PARTY_CONTROL = 27; // TRUE/FALSE +const int NWNX_ADMINISTRATION_OPTION_SHOW_PLAYER_JOIN_MESSAGES = 28; // TRUE/FALSE /// @} /// @name Administration Debug Types diff --git a/Plugins/Appearance/Appearance.cpp b/Plugins/Appearance/Appearance.cpp index 977b724e71c..009e93a4469 100644 --- a/Plugins/Appearance/Appearance.cpp +++ b/Plugins/Appearance/Appearance.cpp @@ -38,7 +38,7 @@ struct AppearanceOverrideData uint8_t hairColor = 0; uint8_t skinColor = 0; uint8_t phenoType = 0; - uint8_t headType = 0; + uint16_t headType = 0; uint16_t soundSet = 0; uint32_t tailType = 0; uint32_t wingType = 0; @@ -70,8 +70,8 @@ static void SetIntValue(int32_t type, int32_t value, std::bitset #include @@ -1360,3 +1361,108 @@ NWNX_EXPORT ArgumentStack GetAreaWind(ArgumentStack&& args) return {}; } + +NWNX_EXPORT ArgumentStack SetDefaultObjectUiDiscoveryMask(ArgumentStack&& args) +{ + static std::unordered_map s_globalMask; + + static auto SetObjectMask = [](CNWSArea *pArea, CNWSObject *pObject) + { + if (auto value = pArea->nwnxGet("AREA_DISCOVERY_MASK_" + std::to_string(pObject->m_nObjectType))) + { + pObject->m_nUiDiscoveryMask = *value; + } + else + { + auto globalMask = s_globalMask.find(pObject->m_nObjectType); + if (globalMask != s_globalMask.end()) + { + pObject->m_nUiDiscoveryMask = globalMask->second; + } + } + }; + + static Hooks::Hook pAddObjectToAreaHook = Hooks::HookFunction(&CNWSArea::AddObjectToArea, + +[](CNWSArea *pThis, ObjectID id, BOOL bRunScripts) -> BOOL + { + auto retVal = pAddObjectToAreaHook->CallOriginal(pThis, id, bRunScripts); + + if (auto *pObject = Utils::AsNWSObject(Utils::GetGameObject(id))) + { + SetObjectMask(pThis, pObject); + } + + return retVal; + }, Hooks::Order::Early); + + const auto oidArea = args.extract(); + const auto objectTypes = args.extract(); + const auto discoveryMask = args.extract(); + const auto forceUpdate = !!args.extract(); + + if (oidArea == Constants::OBJECT_INVALID) + { + auto UpdateGlobalDiscoveryMask = [&](int32_t nwscriptObjectType) + { + if ((objectTypes & nwscriptObjectType)) + { + if (discoveryMask == -1) + s_globalMask.erase(Utils::NWScriptObjectTypeToEngineObjectType(nwscriptObjectType)); + else + s_globalMask[Utils::NWScriptObjectTypeToEngineObjectType(nwscriptObjectType)] = discoveryMask; + } + }; + + UpdateGlobalDiscoveryMask(1); // Creature + UpdateGlobalDiscoveryMask(2); // Item + UpdateGlobalDiscoveryMask(8); // Door + UpdateGlobalDiscoveryMask(64); // Placeable + + if (forceUpdate) + { + auto* pGameObjectArray = Globals::AppManager()->m_pServerExoApp->GetObjectArray(); + + for(int oid = pGameObjectArray->m_nNextObjectArrayID[0] - 1; oid >= 0; oid--) + { + if (auto *pObject = Utils::AsNWSObject(Utils::GetGameObject(oid))) + { + if (auto *pArea = pObject->GetArea()) + { + SetObjectMask(pArea, pObject); + } + } + } + } + } + else if (auto *pArea = Utils::AsNWSArea(Utils::GetGameObject(oidArea))) + { + auto UpdateAreaDiscoveryMask = [&](int32_t nwscriptObjectType) + { + if ((objectTypes & nwscriptObjectType)) + { + if (discoveryMask == -1) + pArea->nwnxRemove("AREA_DISCOVERY_MASK_" + std::to_string(Utils::NWScriptObjectTypeToEngineObjectType(nwscriptObjectType))); + else + pArea->nwnxSet("AREA_DISCOVERY_MASK_" + std::to_string(Utils::NWScriptObjectTypeToEngineObjectType(nwscriptObjectType)), discoveryMask); + } + }; + + UpdateAreaDiscoveryMask(1); // Creature + UpdateAreaDiscoveryMask(2); // Item + UpdateAreaDiscoveryMask(8); // Door + UpdateAreaDiscoveryMask(64); // Placeable + + if (forceUpdate) + { + for (int i = 0; i < pArea->m_aGameObjects.num; i++) + { + if (auto *pObject = Utils::AsNWSObject(Utils::GetGameObject(pArea->m_aGameObjects[i]))) + { + SetObjectMask(pArea, pObject); + } + } + } + } + + return {}; +} diff --git a/Plugins/Area/NWScript/nwnx_area.nss b/Plugins/Area/NWScript/nwnx_area.nss index cbbfe593ad4..cfb90add6bc 100644 --- a/Plugins/Area/NWScript/nwnx_area.nss +++ b/Plugins/Area/NWScript/nwnx_area.nss @@ -342,6 +342,13 @@ void NWNX_Area_SetAreaFlags(object oArea, int nFlags); /// @param oArea The area. struct NWNX_Area_AreaWind NWNX_Area_GetAreaWind(object oArea); +/// @brief Set the default discoverability mask for objects in an area. +/// @param oArea The area or OBJECT_INVALID to set a global mask for all areas. Per area masks will override the global mask. +/// @param nObjectTypes A mask of OBJECT_TYPE_* constants or OBJECT_TYPE_ALL for all suitable object types. Currently only works on Creatures, Doors (Hilite only), Items and Useable Placeables. +/// @param nMask A mask of OBJECT_UI_DISCOVERY_* +/// @param bForceUpdate If TRUE, will update the discovery mask of ALL objects in the area or module(if oArea == OBJECT_INVALID), according to the current mask. Use with care. +void NWNX_Area_SetDefaultObjectUiDiscoveryMask(object oArea, int nObjectTypes, int nMask, int bForceUpdate = FALSE); + /// @} int NWNX_Area_GetNumberOfPlayersInArea(object area) @@ -868,3 +875,14 @@ struct NWNX_Area_AreaWind NWNX_Area_GetAreaWind(object oArea) return data; } + +void NWNX_Area_SetDefaultObjectUiDiscoveryMask(object oArea, int nObjectTypes, int nMask, int bForceUpdate = FALSE) +{ + string sFunc = "SetDefaultObjectUiDiscoveryMask"; + + NWNX_PushArgumentInt(bForceUpdate); + NWNX_PushArgumentInt(nMask); + NWNX_PushArgumentInt(nObjectTypes); + NWNX_PushArgumentObject(oArea); + NWNX_CallFunction(NWNX_Area, sFunc); +} diff --git a/Plugins/Chat/Chat.cpp b/Plugins/Chat/Chat.cpp index 0230b35b10e..f03dfec8dad 100644 --- a/Plugins/Chat/Chat.cpp +++ b/Plugins/Chat/Chat.cpp @@ -29,8 +29,8 @@ static std::unordered_map s_HearingDistances{{Constants::ChatCha {Constants::ChatChannel::PlayerWhisper, 3.0f}}; static Hooks::Hook s_SendServerToPlayerChatMessageHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage29SendServerToPlayerChatMessageEhj10CExoStringjRKS0_, - (void *) +[](CNWSMessage *thisPtr, uint8_t nChatMessageType, OBJECT_ID oidSpeaker, CExoString sSpeakerMessage, uint32_t nTellPlayerId, + &CNWSMessage::SendServerToPlayerChatMessage, + +[](CNWSMessage *thisPtr, uint8_t nChatMessageType, OBJECT_ID oidSpeaker, CExoString sSpeakerMessage, uint32_t nTellPlayerId, const CExoString &sTellName) { int32_t retVal = false; diff --git a/Plugins/Creature/Creature.cpp b/Plugins/Creature/Creature.cpp index 96b5ec5a559..909cc757bf6 100644 --- a/Plugins/Creature/Creature.cpp +++ b/Plugins/Creature/Creature.cpp @@ -33,6 +33,7 @@ #include "API/CNWSpell.hpp" #include "API/CNWSPlayer.hpp" #include "API/CVirtualMachine.hpp" +#include "API/CNWVirtualMachineCommands.hpp" #include "API/Constants.hpp" #include "API/Globals.hpp" #include "API/Functions.hpp" @@ -516,104 +517,6 @@ NWNX_EXPORT ArgumentStack GetPrePolymorphAbilityScore(ArgumentStack&& args) return -1; } -NWNX_EXPORT ArgumentStack GetMemorisedSpell(ArgumentStack&& args) -{ - int32_t id, ready, meta, domain; - id = ready = meta = domain = -1; - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto classId = args.extract(); - ASSERT_OR_THROW(classId >= Constants::ClassType::MIN); - ASSERT_OR_THROW(classId <= Constants::ClassType::MAX); - const auto level = args.extract(); - ASSERT_OR_THROW(level >= 0); - ASSERT_OR_THROW(level < 10); - const auto index = args.extract(); - ASSERT_OR_THROW(index >= 0); - ASSERT_OR_THROW(index <= 255); - - for (int32_t i = 0; i < 3; i++) - { - auto& classInfo = pCreature->m_pStats->m_ClassInfo[i]; - if (classInfo.m_nClass == classId) - { - if (auto *pSpell = classInfo.GetMemorizedSpellInSlotDetails(static_cast(level), - static_cast(index))) - { - id = static_cast(pSpell->m_nSpellId); - ready = pSpell->m_bReadied; - meta = pSpell->m_nMetaType; - domain = pSpell->m_bDomainSpell; - } - break; - } - } - } - return {id, ready, meta, domain}; -} - -NWNX_EXPORT ArgumentStack GetMemorisedSpellCountByLevel(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto classId = args.extract(); - ASSERT_OR_THROW(classId >= Constants::ClassType::MIN); - ASSERT_OR_THROW(classId <= Constants::ClassType::MAX); - const auto level = args.extract(); - ASSERT_OR_THROW(level >= 0); - ASSERT_OR_THROW(level < 10); - - for (int32_t i = 0; i < 3; i++) - { - auto& classInfo = pCreature->m_pStats->m_ClassInfo[i]; - if (classInfo.m_nClass == classId) - return classInfo.GetNumberMemorizedSpellSlots(static_cast(level)); - } - } - return 0; -} - -NWNX_EXPORT ArgumentStack SetMemorisedSpell(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto classId = args.extract(); - ASSERT_OR_THROW(classId >= Constants::ClassType::MIN); - ASSERT_OR_THROW(classId <= Constants::ClassType::MAX); - const auto level = args.extract(); - ASSERT_OR_THROW(level >= 0); - ASSERT_OR_THROW(level < 10); - const auto index = args.extract(); - ASSERT_OR_THROW(index >= 0); - ASSERT_OR_THROW(index <= 255); - - const auto domain = args.extract(); - const auto meta = args.extract(); - const auto ready = args.extract(); - const auto id = args.extract(); - ASSERT_OR_THROW(id >= 0); - - for (int32_t i = 0; i < 3; i++) - { - auto& classInfo = pCreature->m_pStats->m_ClassInfo[i]; - if (classInfo.m_nClass == classId) - { - classInfo.SetMemorizedSpellSlot(static_cast(level), - static_cast(index), - static_cast(id), - domain, - static_cast(meta)); - - classInfo.SetMemorizedSpellInSlotReady(static_cast(level), - static_cast(index), - ready); - return {}; - } - } - } - return {}; -} - NWNX_EXPORT ArgumentStack GetRemainingSpellSlots(ArgumentStack&& args) { if (auto *pCreature = Utils::PopCreature(args)) @@ -683,51 +586,6 @@ NWNX_EXPORT ArgumentStack GetMaxSpellSlots(ArgumentStack&& args) return -1; } -NWNX_EXPORT ArgumentStack GetKnownSpell(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto classId = args.extract(); - ASSERT_OR_THROW(classId >= Constants::ClassType::MIN); - ASSERT_OR_THROW(classId <= Constants::ClassType::MAX); - const auto level = args.extract(); - ASSERT_OR_THROW(level >= 0); - ASSERT_OR_THROW(level < 10); - const auto index = args.extract(); - ASSERT_OR_THROW(index >= 0); - ASSERT_OR_THROW(index <= 255); - - for (int32_t i = 0; i < 3; i++) - { - auto& classInfo = pCreature->m_pStats->m_ClassInfo[i]; - if (classInfo.m_nClass == classId) - return (int32_t)classInfo.GetKnownSpell(level, index); - } - } - return -1; -} - -NWNX_EXPORT ArgumentStack GetKnownSpellCount(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto classId = args.extract(); - ASSERT_OR_THROW(classId >= Constants::ClassType::MIN); - ASSERT_OR_THROW(classId <= Constants::ClassType::MAX); - const auto level = args.extract(); - ASSERT_OR_THROW(level >= 0); - ASSERT_OR_THROW(level < 10); - - for (int32_t i = 0; i < 3; i++) - { - auto& classInfo = pCreature->m_pStats->m_ClassInfo[i]; - if (classInfo.m_nClass == classId) - return classInfo.GetNumberKnownSpells(static_cast(level)); - } - } - return -1; -} - NWNX_EXPORT ArgumentStack RemoveKnownSpell(ArgumentStack&& args) { if (auto *pCreature = Utils::PopCreature(args)) @@ -780,56 +638,6 @@ NWNX_EXPORT ArgumentStack AddKnownSpell(ArgumentStack&& args) return {}; } -NWNX_EXPORT ArgumentStack ClearMemorisedKnownSpells(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto classId = args.extract(); - ASSERT_OR_THROW(classId >= Constants::ClassType::MIN); - ASSERT_OR_THROW(classId <= Constants::ClassType::MAX); - const auto id = args.extract(); - ASSERT_OR_THROW(id >= 0); - - for (int32_t i = 0; i < 3; i++) - { - auto& classInfo = pCreature->m_pStats->m_ClassInfo[i]; - if (classInfo.m_nClass == classId) - { - classInfo.ClearMemorizedKnownSpells(static_cast(id)); - break; - } - } - } - return {}; -} - -NWNX_EXPORT ArgumentStack ClearMemorisedSpell(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto classId = args.extract(); - ASSERT_OR_THROW(classId >= Constants::ClassType::MIN); - ASSERT_OR_THROW(classId <= Constants::ClassType::MAX); - const auto level = args.extract(); - ASSERT_OR_THROW(level >= 0); - ASSERT_OR_THROW(level < 10); - const auto index = args.extract(); - ASSERT_OR_THROW(index >= 0); - ASSERT_OR_THROW(index <= 255); - - for (int32_t i = 0; i < 3; i++) - { - auto& classInfo = pCreature->m_pStats->m_ClassInfo[i]; - if (classInfo.m_nClass == classId) - { - classInfo.ClearMemorizedSpellSlot(level, index); - break; - } - } - } - return {}; -} - NWNX_EXPORT ArgumentStack GetMaxHitPointsByLevel(ArgumentStack&& args) { if (auto *pCreature = Utils::PopCreature(args)) @@ -917,16 +725,16 @@ NWNX_EXPORT ArgumentStack GetMovementRateFactorCap(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetMovementRateFactorCap(ArgumentStack&& args) { static Hooks::Hook pGetMovementRateFactor_hook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature21GetMovementRateFactorEv, - (void*)+[](CNWSCreature *pThis) -> float + Hooks::HookFunction(&CNWSCreature::GetMovementRateFactor, + +[](CNWSCreature *pThis) -> float { auto pRate = pThis->nwnxGet("MOVEMENT_RATE_FACTOR"); return pRate.value_or(pGetMovementRateFactor_hook->CallOriginal(pThis)); }, Hooks::Order::Late); static Hooks::Hook pSetMovementRateFactor_hook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature21SetMovementRateFactorEf, - (void*)+[](CNWSCreature *pThis, float fRate) -> void + Hooks::HookFunction(&CNWSCreature::SetMovementRateFactor, + +[](CNWSCreature *pThis, float fRate) -> void { // Always set the default so it goes back to normal if cap is reset pSetMovementRateFactor_hook->CallOriginal(pThis, fRate); @@ -1038,26 +846,6 @@ NWNX_EXPORT ArgumentStack SetSpecialization(ArgumentStack&& args) return {}; } -NWNX_EXPORT ArgumentStack GetSoundset(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - return pCreature->m_nSoundSet; - - return -1; -} - -NWNX_EXPORT ArgumentStack SetSoundset(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto soundset = args.extract(); - ASSERT_OR_THROW(soundset >= 0); - - pCreature->m_nSoundSet = static_cast(soundset); - } - return {}; -} - NWNX_EXPORT ArgumentStack SetSkillRank(ArgumentStack&& args) { if (auto *pCreature = Utils::PopCreature(args)) @@ -1193,20 +981,6 @@ NWNX_EXPORT ArgumentStack GetAttacksPerRound(ArgumentStack&& args) return -1; } -NWNX_EXPORT ArgumentStack SetGender(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto gender = args.extract(); - ASSERT_OR_THROW(gender >= 0); - ASSERT_OR_THROW(gender <= 255); - - pCreature->m_pStats->m_nGender = gender; - pCreature->m_cAppearance.m_nGender = gender; - } - return {}; -} - NWNX_EXPORT ArgumentStack RestoreFeats(ArgumentStack&& args) { if (auto *pCreature = Utils::PopCreature(args)) @@ -1223,27 +997,6 @@ NWNX_EXPORT ArgumentStack RestoreSpecialAbilities(ArgumentStack&& args) return {}; } -NWNX_EXPORT ArgumentStack RestoreSpells(ArgumentStack&& args) -{ - if (auto *pCreature = Utils::PopCreature(args)) - { - const auto level = args.extract(); - ASSERT_OR_THROW(level >= -1); - ASSERT_OR_THROW(level <= 9); - - if (level >= 0 && level <= 9) - { - pCreature->m_pStats->ReadySpellLevel(level); - } - else - { - for (int i = 0; i <= 9; i++) - pCreature->m_pStats->ReadySpellLevel(i); - } - } - return {}; -} - NWNX_EXPORT ArgumentStack RestoreItems(ArgumentStack&& args) { if (auto *pCreature = Utils::PopCreature(args)) @@ -1368,8 +1121,8 @@ NWNX_EXPORT ArgumentStack GetMovementType(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetWalkRateCap(ArgumentStack&& args) { static Hooks::Hook pGetWalkRate_hook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature11GetWalkRateEv, - (void*)+[](CNWSCreature *pThis) -> float + Hooks::HookFunction(&CNWSCreature::GetWalkRate, + +[](CNWSCreature *pThis) -> float { float fWalkRate = pGetWalkRate_hook->CallOriginal(pThis); @@ -1471,8 +1224,8 @@ NWNX_EXPORT ArgumentStack LevelUp(ArgumentStack&& args) { static bool bSkipLevelUpValidation = false; - static Hooks::Hook pCanLevelUp_hook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats10CanLevelUpEv, - (void*)+[](CNWSCreatureStats *pThis) -> int32_t + static Hooks::Hook pCanLevelUp_hook = Hooks::HookFunction(&CNWSCreatureStats::CanLevelUp, + +[](CNWSCreatureStats *pThis) -> int32_t { if (bSkipLevelUpValidation && !pThis->m_bIsPC) { @@ -1482,8 +1235,8 @@ NWNX_EXPORT ArgumentStack LevelUp(ArgumentStack&& args) }, Hooks::Order::Late); static Hooks::Hook pValidateLevelUp_hook = - Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats15ValidateLevelUpEP13CNWLevelStatshhh, - (void*)+[](CNWSCreatureStats *pThis, CNWLevelStats *pLevelStats, uint8_t nDomain1, uint8_t nDomain2, uint8_t nSchool) -> uint32_t + Hooks::HookFunction(&CNWSCreatureStats::ValidateLevelUp, + +[](CNWSCreatureStats *pThis, CNWLevelStats *pLevelStats, uint8_t nDomain1, uint8_t nDomain2, uint8_t nSchool) -> uint32_t { if (bSkipLevelUpValidation) { @@ -1957,12 +1710,12 @@ static uint8_t CNWSCreatureStats__GetClassLevel(CNWSCreatureStats* pThis, uint8_ } static void InitCasterLevelHooks() { - s_GetClassLevelHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats13GetClassLevelEhi, - (void*)&CNWSCreatureStats__GetClassLevel, Hooks::Order::Earliest); + s_GetClassLevelHook = Hooks::HookFunction(&CNWSCreatureStats::GetClassLevel, + &CNWSCreatureStats__GetClassLevel, Hooks::Order::Earliest); static Hooks::Hook s_ExecuteCommandGetCasterLevelHook = - Hooks::HookFunction(Functions::_ZN25CNWVirtualMachineCommands28ExecuteCommandGetCasterLevelEii, - (void*)+[](CNWVirtualMachineCommands *pThis, int32_t nCommandId, int32_t nParameters) + Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandGetCasterLevel, + +[](CNWVirtualMachineCommands *pThis, int32_t nCommandId, int32_t nParameters) { s_bAdjustCasterLevel = true; auto retVal = s_ExecuteCommandGetCasterLevelHook->CallOriginal(pThis, nCommandId, nParameters); @@ -1970,8 +1723,8 @@ static void InitCasterLevelHooks() return retVal; }, Hooks::Order::Early); static Hooks::Hook s_ExecuteCommandResistSpellHook = - Hooks::HookFunction(Functions::_ZN25CNWVirtualMachineCommands25ExecuteCommandResistSpellEii, - (void*)+[](CNWVirtualMachineCommands *pThis, int32_t nCommandId, int32_t nParameters) + Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandResistSpell, + +[](CNWVirtualMachineCommands *pThis, int32_t nCommandId, int32_t nParameters) { s_bAdjustCasterLevel = true; auto retVal = s_ExecuteCommandResistSpellHook->CallOriginal(pThis, nCommandId, nParameters); @@ -1979,8 +1732,8 @@ static void InitCasterLevelHooks() return retVal; }, Hooks::Order::Early); static Hooks::Hook s_SetCreatorHook = - Hooks::HookFunction(Functions::_ZN11CGameEffect10SetCreatorEj, - (void*)+[](CGameEffect *pThis, ObjectID oidCreator) + Hooks::HookFunction(&CGameEffect::SetCreator, + +[](CGameEffect *pThis, ObjectID oidCreator) { s_bAdjustCasterLevel = true; s_SetCreatorHook->CallOriginal(pThis, oidCreator); @@ -2080,8 +1833,8 @@ NWNX_EXPORT ArgumentStack JumpToLimbo(ArgumentStack&& args) static void InitCriticalMultiplierHook() { static Hooks::Hook pGetCriticalHitMultiplier_hook = - Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats24GetCriticalHitMultiplierEi, - (void*)+[](CNWSCreatureStats *pThis, int32_t bOffHand = false) -> int32_t + Hooks::HookFunction(&CNWSCreatureStats::GetCriticalHitMultiplier, + +[](CNWSCreatureStats *pThis, int32_t bOffHand = false) -> int32_t { int32_t retVal; if (!bOffHand) //mainhand @@ -2257,8 +2010,8 @@ NWNX_EXPORT ArgumentStack GetCriticalMultiplierOverride(ArgumentStack&& args) static void InitCriticalRangeHook() { static NWNXLib::Hooks::Hook pGetCriticalHitRoll_hook = - Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats18GetCriticalHitRollEi, - (void*)+[](CNWSCreatureStats *pThis, int32_t bOffHand = false) -> int32_t + Hooks::HookFunction(&CNWSCreatureStats::GetCriticalHitRoll, + +[](CNWSCreatureStats *pThis, int32_t bOffHand = false) -> int32_t { int32_t retVal; if (!bOffHand) //mainhand @@ -2475,8 +2228,8 @@ NWNX_EXPORT ArgumentStack SetEffectIconFlashing(ArgumentStack&& args) NWNX_EXPORT ArgumentStack OverrideDamageLevel(ArgumentStack&& args) { - static Hooks::Hook pGetDamageLevelHook = Hooks::HookFunction(Functions::_ZN10CNWSObject14GetDamageLevelEv, - (void*)+[](CNWSObject *pThis) -> uint8_t + static Hooks::Hook pGetDamageLevelHook = Hooks::HookFunction(&CNWSObject::GetDamageLevel, + +[](CNWSObject *pThis) -> uint8_t { auto damageLevel = pThis->nwnxGet("CREATURE_DAMAGE_LEVEL_OVERRIDE"); return damageLevel.value_or(pGetDamageLevelHook->CallOriginal(pThis)); @@ -2744,8 +2497,8 @@ static void DoResolveAttackHook(CNWSCreature* pThis, CNWSObject* pTarget) static void InitResolveAttackRollHook() { - static auto s_ResolveAttackRoll = Hooks::HookFunction(Functions::_ZN12CNWSCreature17ResolveAttackRollEP10CNWSObject, - (void*)+[](CNWSCreature *pThis, CNWSObject *pTarget) -> void + static auto s_ResolveAttackRoll = Hooks::HookFunction(&CNWSCreature::ResolveAttackRoll, + +[](CNWSCreature *pThis, CNWSObject *pTarget) -> void { auto pTargetCreature = Utils::AsNWSCreature(pTarget); int32_t bRoundPaused = false; @@ -3021,8 +2774,8 @@ NWNX_EXPORT ArgumentStack GetShieldCheckPenalty(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetBypassEffectImmunity(ArgumentStack&& args) { static Hooks::Hook pGetEffectImmunity_hook = - Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats17GetEffectImmunityEhP12CNWSCreaturei, - (void*)+[](CNWSCreatureStats *pThis, uint8_t nType, CNWSCreature * pVersus, int32_t bConsiderFeats) -> int32_t + Hooks::HookFunction(&CNWSCreatureStats::GetEffectImmunity, + +[](CNWSCreatureStats *pThis, uint8_t nType, CNWSCreature * pVersus, int32_t bConsiderFeats) -> int32_t { int32_t BypassCounter = 0; @@ -3212,8 +2965,8 @@ NWNX_EXPORT ArgumentStack RunUnequip(ArgumentStack&& args) NWNX_EXPORT ArgumentStack OverrideRangedProjectileVFX(ArgumentStack&& args) { static Hooks::Hook s_BroadcastSafeProjectileHook = - Hooks::HookFunction(Functions::_ZN10CNWSObject23BroadcastSafeProjectileEjj6VectorS0_jhjhh, - (void*)+[](CNWSObject *pThis, ObjectID oidOriginator, ObjectID oidTarget, Vector vOriginator, Vector vTarget, uint32_t nDelta, + Hooks::HookFunction(&CNWSObject::BroadcastSafeProjectile, + +[](CNWSObject *pThis, ObjectID oidOriginator, ObjectID oidTarget, Vector vOriginator, Vector vTarget, uint32_t nDelta, uint8_t nProjectileType, uint32_t nSpellID, uint8_t nAttackResult, uint8_t nProjectilePathType) -> void { if (nProjectileType <= 5) @@ -3249,8 +3002,8 @@ NWNX_EXPORT ArgumentStack OverrideRangedProjectileVFX(ArgumentStack&& args) } static void InitInitiativeRollHook() { - static Hooks::Hook pResolveInitiative_hook = Hooks::HookFunction(Functions::_ZN12CNWSCreature17ResolveInitiativeEv, - (void *) +[](CNWSCreature *pCreature) -> void + static Hooks::Hook pResolveInitiative_hook = Hooks::HookFunction(&CNWSCreature::ResolveInitiative, + +[](CNWSCreature *pCreature) -> void { auto initMod = pCreature->nwnxGet("INITIATIVE_MOD").value_or(0); if (!initMod) @@ -3391,44 +3144,6 @@ NWNX_EXPORT ArgumentStack AddCastSpellActions(ArgumentStack&& args) return false; } -NWNX_EXPORT ArgumentStack GetSpellUsesLeft(ArgumentStack&& args) -{ - if (auto* pCreature = Utils::PopCreature(args)) - { - auto spellId = args.extract(); - ASSERT_OR_THROW(spellId >= 0); - auto multiClass = args.extract(); - ASSERT_OR_THROW(multiClass >= 0); - ASSERT_OR_THROW(multiClass < 3); - auto domainLevel = args.extract(); - ASSERT_OR_THROW(domainLevel >= 0); - auto metaMagic = args.extract(); - ASSERT_OR_THROW(metaMagic >= 0); - - return pCreature->m_pStats->GetSpellUsesLeft(spellId, multiClass, domainLevel, metaMagic); - } - - return 0; -} - -NWNX_EXPORT ArgumentStack GetMemorizedSpellReadyCount(ArgumentStack&& args) -{ - if (auto* pCreature = Utils::PopCreature(args)) - { - auto spellId = args.extract(); - ASSERT_OR_THROW(spellId >= 0); - auto multiClass = args.extract(); - ASSERT_OR_THROW(multiClass >= 0); - ASSERT_OR_THROW(multiClass < 3); - auto metaMagic = args.extract(); - ASSERT_OR_THROW(metaMagic >= 0); - - return pCreature->m_pStats->GetMemorizedSpellReadyCount(multiClass, spellId, metaMagic); - } - - return 0; -} - NWNX_EXPORT ArgumentStack GetIsFlanking(ArgumentStack&& args) { if (auto *pCreature = Utils::PopCreature(args)) diff --git a/Plugins/Creature/NWScript/nwnx_creature.nss b/Plugins/Creature/NWScript/nwnx_creature.nss index 8360bce2ddf..a4400a3b17e 100644 --- a/Plugins/Creature/NWScript/nwnx_creature.nss +++ b/Plugins/Creature/NWScript/nwnx_creature.nss @@ -34,32 +34,6 @@ const int NWNX_CREATURE_MOVEMENT_TYPE_SIDESTEP = 3; const int NWNX_CREATURE_MOVEMENT_TYPE_WALK_BACKWARDS = 4; /// @} -/// @name Cleric Domains -/// @anchor cleric_domains -/// -/// The clerical domains. -/// @{ -const int NWNX_CREATURE_CLERIC_DOMAIN_AIR = 0; -const int NWNX_CREATURE_CLERIC_DOMAIN_ANIMAL = 1; -const int NWNX_CREATURE_CLERIC_DOMAIN_DEATH = 3; -const int NWNX_CREATURE_CLERIC_DOMAIN_DESTRUCTION = 4; -const int NWNX_CREATURE_CLERIC_DOMAIN_EARTH = 5; -const int NWNX_CREATURE_CLERIC_DOMAIN_EVIL = 6; -const int NWNX_CREATURE_CLERIC_DOMAIN_FIRE = 7; -const int NWNX_CREATURE_CLERIC_DOMAIN_GOOD = 8; -const int NWNX_CREATURE_CLERIC_DOMAIN_HEALING = 9; -const int NWNX_CREATURE_CLERIC_DOMAIN_KNOWLEDGE = 10; -const int NWNX_CREATURE_CLERIC_DOMAIN_MAGIC = 13; -const int NWNX_CREATURE_CLERIC_DOMAIN_PLANT = 14; -const int NWNX_CREATURE_CLERIC_DOMAIN_PROTECTION = 15; -const int NWNX_CREATURE_CLERIC_DOMAIN_STRENGTH = 16; -const int NWNX_CREATURE_CLERIC_DOMAIN_SUN = 17; -const int NWNX_CREATURE_CLERIC_DOMAIN_TRAVEL = 18; -const int NWNX_CREATURE_CLERIC_DOMAIN_TRICKERY = 19; -const int NWNX_CREATURE_CLERIC_DOMAIN_WAR = 20; -const int NWNX_CREATURE_CLERIC_DOMAIN_WATER = 21; -/// @} - /// @name Bonus Types /// @anchor bonus_types /// @@ -96,16 +70,6 @@ struct NWNX_Creature_SpecialAbility int level; ///< The level of the ability }; -/// @struct NWNX_Creature_MemorisedSpell -/// @brief A memorised spell structure. -struct NWNX_Creature_MemorisedSpell -{ - int id; ///< Spell ID - int ready; ///< Whether the spell can be cast - int meta; ///< Metamagic type, if any - int domain; ///< Clerical domain, if any -}; - /// @brief Gives the creature a feat. /// @param creature The creature object. /// @param feat The feat id. @@ -246,29 +210,6 @@ void NWNX_Creature_ModifyRawAbilityScore(object creature, int ability, int modif /// @return The raw ability score. int NWNX_Creature_GetPrePolymorphAbilityScore(object creature, int ability); -/// @brief Gets the count of memorised spells for a creature's class at a level. -/// @param creature The creature object. -/// @param class The class id from classes.2da. (Not class index 0-2) -/// @param level The spell level. -/// @return The memorised spell count. -int NWNX_Creature_GetMemorisedSpellCountByLevel(object creature, int class, int level); - -/// @brief Gets the memorised spell at a class level's index. -/// @param creature The creature object. -/// @param class The class id from classes.2da. (Not class index 0-2) -/// @param level The spell level. -/// @param index The index. Index bounds: 0 <= index < NWNX_Creature_GetMemorisedSpellCountByLevel(). -/// @return An NWNX_Creature_MemorisedSpell() struct. -struct NWNX_Creature_MemorisedSpell NWNX_Creature_GetMemorisedSpell(object creature, int class, int level, int index); - -/// @brief Sets the memorised spell at a class level's index. -/// @param creature The creature object. -/// @param class The class id from classes.2da. (Not class index 0-2) -/// @param level The spell level. -/// @param index The index. Index bounds: 0 <= index < NWNX_Creature_GetMemorisedSpellCountByLevel(). -/// @param spell An NWNX_Creature_MemorisedSpell() struct. -void NWNX_Creature_SetMemorisedSpell(object creature, int class, int level, int index, struct NWNX_Creature_MemorisedSpell spell); - /// @brief Gets the remaining spell slots (innate casting) at a class level's index. /// @param creature The creature object. /// @param class The class id from classes.2da. (Not class index 0-2) @@ -290,21 +231,6 @@ void NWNX_Creature_SetRemainingSpellSlots(object creature, int class, int level, /// @return The maximum spell slot count. int NWNX_Creature_GetMaxSpellSlots(object creature, int class, int level); -/// @brief Gets the known spell count (innate casting) at a class level. -/// @param creature The creature object. -/// @param class The class id from classes.2da. (Not class index 0-2) -/// @param level The spell level. -/// @return The known spell count. -int NWNX_Creature_GetKnownSpellCount(object creature, int class, int level); - -/// @brief Gets the known spell at a class level's index. -/// @param creature The creature object. -/// @param class The class id from classes.2da. (Not class index 0-2) -/// @param level The spell level. -/// @param index The index. Index bounds: 0 <= index < NWNX_Creature_GetKnownSpellCount(). -/// @return The spell id. -int NWNX_Creature_GetKnownSpell(object creature, int class, int level, int index); - /// @brief Add a spell to a creature's spellbook for class. /// @param creature The creature object. /// @param class The class id from classes.2da. (Not class index 0-2) @@ -319,19 +245,6 @@ void NWNX_Creature_AddKnownSpell(object creature, int class, int level, int spel /// @param spellId The spell to remove. void NWNX_Creature_RemoveKnownSpell(object creature, int class, int level, int spellId); -/// @brief Clear a specific spell from the creature's spellbook for class -/// @param creature The creature object. -/// @param class The class id from classes.2da. (Not class index 0-2) -/// @param spellId The spell to clear. -void NWNX_Creature_ClearMemorisedKnownSpells(object creature, int class, int spellId); - -/// @brief Clear the memorised spell of the creature for the class, level and index. -/// @param creature The creature object. -/// @param class The class id from classes.2da. (Not class index 0-2) -/// @param level The spell level. -/// @param index The index. Index bounds: 0 <= index < NWNX_Creature_GetMemorisedSpellCountByLevel(). -void NWNX_Creature_ClearMemorisedSpell(object creature, int class, int level, int index); - /// @brief Gets the maximum hit points for creature for level. /// @param creature The creature object. /// @param level The level. @@ -395,16 +308,6 @@ void NWNX_Creature_SetAlignmentGoodEvil(object creature, int value); /// @param value The value to set. void NWNX_Creature_SetAlignmentLawChaos(object creature, int value); -/// @brief Get the soundset index for creature. -/// @param creature The creature object. -/// @return The soundset used by the creature. -int NWNX_Creature_GetSoundset(object creature); - -/// @brief Set the soundset index for creature. -/// @param creature The creature object. -/// @param soundset The soundset index. -void NWNX_Creature_SetSoundset(object creature, int soundset); - /// @brief Set the base ranks in a skill for creature /// @param creature The creature object. /// @param skill The skill id. @@ -461,11 +364,6 @@ void NWNX_Creature_SetBaseAttackBonus(object creature, int bab); /// @return The attacks per round. int NWNX_Creature_GetAttacksPerRound(object creature, int bBaseAPR = FALSE); -/// @brief Sets the creature gender. -/// @param creature The creature object. -/// @param gender The GENDER_ constant. -void NWNX_Creature_SetGender(object creature, int gender); - /// @brief Restore all creature feat uses. /// @param creature The creature object. void NWNX_Creature_RestoreFeats(object creature); @@ -474,11 +372,6 @@ void NWNX_Creature_RestoreFeats(object creature); /// @param creature The creature object. void NWNX_Creature_RestoreSpecialAbilities(object creature); -/// @brief Restore all creature spells per day for given level. -/// @param creature The creature object. -/// @param level The level to restore. If -1, all spells are restored. -void NWNX_Creature_RestoreSpells(object creature, int level = -1); - /// @brief Restore uses for all items carried by the creature. /// @param creature The creature object. void NWNX_Creature_RestoreItems(object creature); @@ -660,13 +553,6 @@ int NWNX_Creature_GetDisarmable(object creature); /// @param disarmable Set to TRUE if the creature can be disarmed. void NWNX_Creature_SetDisarmable(object creature, int disarmable); -/// @brief Gets one of creature's domains. -/// @param creature The creature object. -/// @param class The class id from classes.2da. (Not class index 0-2) -/// @param index The first or second domain. -/// @deprecated Use GetDomain(). This will be removed in future NWNX releases. -int NWNX_Creature_GetDomain(object creature, int class, int index); - /// @brief Sets one of creature's domains. /// @param creature The creature object. /// @param class The class id from classes.2da. (Not class index 0-2) @@ -674,12 +560,6 @@ int NWNX_Creature_GetDomain(object creature, int class, int index); /// @param domain The domain constant to set. void NWNX_Creature_SetDomain(object creature, int class, int index, int domain); -/// @brief Gets the creature's specialist school. -/// @param creature The creature object. -/// @param class The class id from classes.2da. (Not class index 0-2) -/// @deprecated Use GetSpecialization(). This will be removed in future NWNX releases. -int NWNX_Creature_GetSpecialization(object creature, int class); - /// @brief Sets creature's specialist school. /// @param creature The creature object. /// @param class The class id from classes.2da. (Not class index 0-2) @@ -1046,25 +926,6 @@ object NWNX_Creature_GetBodyBag(object oCreature); /// @return TRUE if the action was successfully added to oCreature's action queue. int NWNX_Creature_AddCastSpellActions(object oCreature, object oTarget, vector vTargetLocation, int nSpellID, int nMultiClass, int nMetaMagic = METAMAGIC_NONE, int nDomainLevel = 0, int nProjectilePathType = PROJECTILE_PATH_TYPE_DEFAULT, int bInstant = FALSE, int bClearActions = FALSE, int bAddToFront = FALSE); -/// @brief Get the number of uses left of a spell. -/// @note This function is for caster classes that don't need to memorize spells. -/// @param oCreature The creature. -/// @param nSpellID The spell ID. -/// @param nMultiClass The position of the class to check, 0-2 -/// @param nDomainLevel The domain level if checking a domain spell. -/// @param nMetaMagic A METAMAGIC_* constant. -/// @return The number of spell uses left or 0 on error. -int NWNX_Creature_GetSpellUsesLeft(object oCreature, int nSpellID, int nMultiClass, int nDomainLevel = 0, int nMetaMagic = METAMAGIC_NONE); - -/// @brief Get the number of memorized ready spells by spellid. -/// @note This function is for caster classes that need to memorize spells. -/// @param oCreature The creature. -/// @param nSpellID The spell ID. -/// @param nMultiClass The position of the class to check, 0-2 -/// @param nMetaMagic A METAMAGIC_* constant. -/// @return The number of spell uses left or 0 on error. -int NWNX_Creature_GetMemorizedSpellReadyCount(object oCreature, int nSpellID, int nMultiClass, int nMetaMagic = METAMAGIC_NONE); - /// @brief Get whether oCreature is flanking oTargetCreature. /// @param oCreature The creature object. /// @param oTargetCreature The target creature object. @@ -1327,54 +1188,6 @@ int NWNX_Creature_GetPrePolymorphAbilityScore(object creature, int ability) return NWNX_GetReturnValueInt(); } -struct NWNX_Creature_MemorisedSpell NWNX_Creature_GetMemorisedSpell(object creature, int class, int level, int index) -{ - string sFunc = "GetMemorisedSpell"; - struct NWNX_Creature_MemorisedSpell spell; - - NWNX_PushArgumentInt(index); - NWNX_PushArgumentInt(level); - NWNX_PushArgumentInt(class); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); - - spell.domain = NWNX_GetReturnValueInt(); - spell.meta = NWNX_GetReturnValueInt(); - spell.ready = NWNX_GetReturnValueInt(); - spell.id = NWNX_GetReturnValueInt(); - return spell; -} - -int NWNX_Creature_GetMemorisedSpellCountByLevel(object creature, int class, int level) -{ - string sFunc = "GetMemorisedSpellCountByLevel"; - - NWNX_PushArgumentInt(level); - NWNX_PushArgumentInt(class); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); - return NWNX_GetReturnValueInt(); -} - -void NWNX_Creature_SetMemorisedSpell(object creature, int class, int level, int index, struct NWNX_Creature_MemorisedSpell spell) -{ - string sFunc = "SetMemorisedSpell"; - - NWNX_PushArgumentInt(spell.id); - NWNX_PushArgumentInt(spell.ready); - NWNX_PushArgumentInt(spell.meta); - NWNX_PushArgumentInt(spell.domain); - - NWNX_PushArgumentInt(index); - NWNX_PushArgumentInt(level); - NWNX_PushArgumentInt(class); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); -} - int NWNX_Creature_GetRemainingSpellSlots(object creature, int class, int level) { string sFunc = "GetRemainingSpellSlots"; @@ -1399,31 +1212,6 @@ void NWNX_Creature_SetRemainingSpellSlots(object creature, int class, int level, NWNX_CallFunction(NWNX_Creature, sFunc); } -int NWNX_Creature_GetKnownSpell(object creature, int class, int level, int index) -{ - string sFunc = "GetKnownSpell"; - - NWNX_PushArgumentInt(index); - NWNX_PushArgumentInt(level); - NWNX_PushArgumentInt(class); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); - return NWNX_GetReturnValueInt(); -} - -int NWNX_Creature_GetKnownSpellCount(object creature, int class, int level) -{ - string sFunc = "GetKnownSpellCount"; - - NWNX_PushArgumentInt(level); - NWNX_PushArgumentInt(class); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); - return NWNX_GetReturnValueInt(); -} - void NWNX_Creature_RemoveKnownSpell(object creature, int class, int level, int spellId) { string sFunc = "RemoveKnownSpell"; @@ -1448,29 +1236,6 @@ void NWNX_Creature_AddKnownSpell(object creature, int class, int level, int spel NWNX_CallFunction(NWNX_Creature, sFunc); } -void NWNX_Creature_ClearMemorisedKnownSpells(object creature, int class, int spellId) -{ - string sFunc = "ClearMemorisedKnownSpells"; - - NWNX_PushArgumentInt(spellId); - NWNX_PushArgumentInt(class); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); -} - -void NWNX_Creature_ClearMemorisedSpell(object creature, int class, int level, int index) -{ - string sFunc = "ClearMemorisedSpell"; - - NWNX_PushArgumentInt(index); - NWNX_PushArgumentInt(level); - NWNX_PushArgumentInt(class); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); -} - int NWNX_Creature_GetMaxSpellSlots(object creature, int class, int level) { string sFunc = "GetMaxSpellSlots"; @@ -1574,26 +1339,6 @@ void NWNX_Creature_SetAlignmentLawChaos(object creature, int value) NWNX_CallFunction(NWNX_Creature, sFunc); } -int NWNX_Creature_GetSoundset(object creature) -{ - string sFunc = "GetSoundset"; - - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); - return NWNX_GetReturnValueInt(); -} - -void NWNX_Creature_SetSoundset(object creature, int soundset) -{ - string sFunc = "SetSoundset"; - - NWNX_PushArgumentInt(soundset); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); -} - void NWNX_Creature_SetSkillRank(object creature, int skill, int rank) { string sFunc = "SetSkillRank"; @@ -1668,15 +1413,6 @@ int NWNX_Creature_GetAttacksPerRound(object creature, int bBaseAPR = FALSE) return NWNX_GetReturnValueInt(); } -void NWNX_Creature_SetGender(object creature, int gender) -{ - string sFunc = "SetGender"; - NWNX_PushArgumentInt(gender); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); -} - void NWNX_Creature_RestoreFeats(object creature) { string sFunc = "RestoreFeats"; @@ -1693,15 +1429,6 @@ void NWNX_Creature_RestoreSpecialAbilities(object creature) NWNX_CallFunction(NWNX_Creature, sFunc); } -void NWNX_Creature_RestoreSpells(object creature, int level = -1) -{ - string sFunc = "RestoreSpells"; - NWNX_PushArgumentInt(level); - NWNX_PushArgumentObject(creature); - - NWNX_CallFunction(NWNX_Creature, sFunc); -} - void NWNX_Creature_RestoreItems(object creature) { string sFunc = "RestoreItems"; @@ -2037,13 +1764,6 @@ void NWNX_Creature_SetDisarmable(object creature, int disarmable) NWNX_CallFunction(NWNX_Creature, sFunc); } -int NWNX_Creature_GetDomain(object creature, int class, int index) -{ - WriteTimestampedLogEntry("NWNX_Creature: GetDomain() is deprecated. Please use the basegame's GetDomain() instead"); - - return GetDomain(creature, index, class); -} - void NWNX_Creature_SetDomain(object creature, int class, int index, int domain) { string sFunc = "SetDomain"; @@ -2056,13 +1776,6 @@ void NWNX_Creature_SetDomain(object creature, int class, int index, int domain) NWNX_CallFunction(NWNX_Creature, sFunc); } -int NWNX_Creature_GetSpecialization(object creature, int class) -{ - WriteTimestampedLogEntry("NWNX_Creature: GetSpecialization() is deprecated. Please use the basegame's GetSpecialization() instead"); - - return GetSpecialization(creature, class); -} - void NWNX_Creature_SetSpecialization(object creature, int class, int school) { string sFunc = "SetSpecialization"; @@ -2689,33 +2402,6 @@ int NWNX_Creature_AddCastSpellActions(object oCreature, object oTarget, vector v return NWNX_GetReturnValueInt(); } -int NWNX_Creature_GetSpellUsesLeft(object oCreature, int nSpellID, int nMultiClass, int nDomainLevel = 0, int nMetaMagic = METAMAGIC_NONE) -{ - string sFunc = "GetSpellUsesLeft"; - - NWNX_PushArgumentInt(nMetaMagic); - NWNX_PushArgumentInt(nDomainLevel); - NWNX_PushArgumentInt(nMultiClass); - NWNX_PushArgumentInt(nSpellID); - NWNX_PushArgumentObject(oCreature); - - NWNX_CallFunction(NWNX_Creature, sFunc); - return NWNX_GetReturnValueInt(); -} - -int NWNX_Creature_GetMemorizedSpellReadyCount(object oCreature, int nSpellID, int nMultiClass, int nMetaMagic = METAMAGIC_NONE) -{ - string sFunc = "GetMemorizedSpellReadyCount"; - - NWNX_PushArgumentInt(nMetaMagic); - NWNX_PushArgumentInt(nMultiClass); - NWNX_PushArgumentInt(nSpellID); - NWNX_PushArgumentObject(oCreature); - - NWNX_CallFunction(NWNX_Creature, sFunc); - return NWNX_GetReturnValueInt(); -} - int NWNX_Creature_GetIsFlanking(object oCreature, object oTargetCreature) { string sFunc = "GetIsFlanking"; diff --git a/Plugins/Creature/NWScript/nwnx_creature_t.nss b/Plugins/Creature/NWScript/nwnx_creature_t.nss index dbf5e05ccfc..1b3b8b548a7 100644 --- a/Plugins/Creature/NWScript/nwnx_creature_t.nss +++ b/Plugins/Creature/NWScript/nwnx_creature_t.nss @@ -145,10 +145,6 @@ void main() NWNX_Tests_Report("NWNX_Creature", "GetAttacksPerRound - base", NWNX_Creature_GetAttacksPerRound(oCreature, TRUE) == 2); NWNX_Tests_Report("NWNX_Creature", "GetAttacksPerRound - override", NWNX_Creature_GetAttacksPerRound(oCreature, FALSE) == 2); - int nGender = GetGender(oCreature); - NWNX_Creature_SetGender(oCreature, !nGender); - NWNX_Tests_Report("NWNX_Creature", "SetGender", GetGender(oCreature) != nGender); - int nSize = GetCreatureSize(oCreature); NWNX_Creature_SetSize(oCreature, nSize + 1); NWNX_Tests_Report("NWNX_Creature", "SetSize", GetCreatureSize(oCreature) != nSize); @@ -221,19 +217,19 @@ void main() } //Test specialization functions on a class that has specialization - int nSchool = NWNX_Creature_GetSpecialization(oCreature, CLASS_TYPE_WIZARD); + int nSchool = GetSpecialization(oCreature, CLASS_TYPE_WIZARD); NWNX_Creature_SetSpecialization(oCreature, CLASS_TYPE_WIZARD, (nSchool+1)%5); - NWNX_Tests_Report("NWNX_Creature", "{S,G}etSpecialization", NWNX_Creature_GetSpecialization(oCreature, CLASS_TYPE_WIZARD) == (nSchool+1)%5); + NWNX_Tests_Report("NWNX_Creature", "{S,G}etSpecialization", GetSpecialization(oCreature, CLASS_TYPE_WIZARD) == (nSchool+1)%5); //Test domain functions on a class that doesn't have domains - int nDomain = NWNX_Creature_GetDomain(oCreature, CLASS_TYPE_WIZARD, 1); - NWNX_Tests_Report("NWNX_Creature", "GetDomain", NWNX_Creature_GetDomain(oCreature, CLASS_TYPE_WIZARD, 1) == 0); + int nDomain = GetDomain(oCreature, 1, CLASS_TYPE_WIZARD); + NWNX_Tests_Report("NWNX_Creature", "GetDomain", GetDomain(oCreature, 1, CLASS_TYPE_WIZARD) == 0); NWNX_Creature_SetDomain(oCreature, CLASS_TYPE_WIZARD, 1, (nDomain+1)%5); - NWNX_Tests_Report("NWNX_Creature", "{S,G}etDomain", NWNX_Creature_GetDomain(oCreature, CLASS_TYPE_WIZARD, 1) == (nDomain+1)%5); - int nDomain2 = NWNX_Creature_GetDomain(oCreature, CLASS_TYPE_WIZARD, 2); - NWNX_Tests_Report("NWNX_Creature", "GetDomain", NWNX_Creature_GetDomain(oCreature, CLASS_TYPE_WIZARD, 2) == 0); + NWNX_Tests_Report("NWNX_Creature", "{S,G}etDomain", GetDomain(oCreature, 1, CLASS_TYPE_WIZARD) == (nDomain+1)%5); + int nDomain2 = GetDomain(oCreature, 2, CLASS_TYPE_WIZARD); + NWNX_Tests_Report("NWNX_Creature", "GetDomain", GetDomain(oCreature, 2, CLASS_TYPE_WIZARD) == 0); NWNX_Creature_SetDomain(oCreature, CLASS_TYPE_WIZARD, 2, (nDomain2+1)%5); - NWNX_Tests_Report("NWNX_Creature", "{S,G}etDomain", NWNX_Creature_GetDomain(oCreature, CLASS_TYPE_WIZARD, 2) == (nDomain2+1)%5); + NWNX_Tests_Report("NWNX_Creature", "{S,G}etDomain", GetDomain(oCreature, 2, CLASS_TYPE_WIZARD) == (nDomain2+1)%5); //Get/Set Last Item Caster level NWNX_Creature_SetLastItemCasterLevel(oCreature, 5); @@ -248,18 +244,18 @@ void main() } //Test specialization functions on a class that doesn't have specialization - nSchool = NWNX_Creature_GetSpecialization(oCreature2, CLASS_TYPE_CLERIC); - NWNX_Tests_Report("NWNX_Creature", "GetSpecialization", NWNX_Creature_GetSpecialization(oCreature2, CLASS_TYPE_CLERIC) == 0); + nSchool = GetSpecialization(oCreature2, CLASS_TYPE_CLERIC); + NWNX_Tests_Report("NWNX_Creature", "GetSpecialization", GetSpecialization(oCreature2, CLASS_TYPE_CLERIC) == 0); NWNX_Creature_SetSpecialization(oCreature2, CLASS_TYPE_CLERIC, (nSchool+1)%5); - NWNX_Tests_Report("NWNX_Creature", "{S,G}etSpecialization", NWNX_Creature_GetSpecialization(oCreature2, CLASS_TYPE_CLERIC) == (nSchool+1)%5); + NWNX_Tests_Report("NWNX_Creature", "{S,G}etSpecialization", GetSpecialization(oCreature2, CLASS_TYPE_CLERIC) == (nSchool+1)%5); //Test domain functions on a class that has domains - nDomain = NWNX_Creature_GetDomain(oCreature2, CLASS_TYPE_CLERIC, 1); + nDomain = GetDomain(oCreature2, 1, CLASS_TYPE_CLERIC); NWNX_Creature_SetDomain(oCreature2, CLASS_TYPE_CLERIC, 1, (nDomain+1)%5); - NWNX_Tests_Report("NWNX_Creature", "{S,G}etDomain", NWNX_Creature_GetDomain(oCreature2, CLASS_TYPE_CLERIC, 1) == (nDomain+1)%5); - nDomain2 = NWNX_Creature_GetDomain(oCreature2, CLASS_TYPE_CLERIC, 2); + NWNX_Tests_Report("NWNX_Creature", "{S,G}etDomain", GetDomain(oCreature2, 1, CLASS_TYPE_CLERIC) == (nDomain+1)%5); + nDomain2 = GetDomain(oCreature2, 2, CLASS_TYPE_CLERIC); NWNX_Creature_SetDomain(oCreature2, CLASS_TYPE_CLERIC, 2, (nDomain2+1)%5); - NWNX_Tests_Report("NWNX_Creature", "{S,G}etDomain", NWNX_Creature_GetDomain(oCreature2, CLASS_TYPE_CLERIC, 2) == (nDomain2+1)%5); + NWNX_Tests_Report("NWNX_Creature", "{S,G}etDomain", GetDomain(oCreature2, 1, CLASS_TYPE_CLERIC) == (nDomain2+1)%5); //Test Armor class versus function, elf mage vs bandit NWNX_Tests_Report("NWNX_Creature", "Without a Versus GetArmorClassVersus", NWNX_Creature_GetArmorClassVersus(oCreature, OBJECT_INVALID) > 0); diff --git a/Plugins/Damage/Damage.cpp b/Plugins/Damage/Damage.cpp index ea6d1655361..843418d6eb6 100644 --- a/Plugins/Damage/Damage.cpp +++ b/Plugins/Damage/Damage.cpp @@ -1,13 +1,26 @@ -#include "Damage.hpp" -#include "API/Functions.hpp" +#include "nwnx.hpp" + +#include "API/Globals.hpp" #include "API/Constants.hpp" #include "API/CGameEffect.hpp" #include "API/CNWSObject.hpp" -#include "API/Globals.hpp" #include "API/CAppManager.hpp" #include "API/CServerExoApp.hpp" #include "API/CNWSCreature.hpp" #include "API/CNWSCombatRound.hpp" +#include "API/CNWSEffectListHandler.hpp" +#include "API/CNWSInventory.hpp" +#include "API/CNWSItem.hpp" +#include "API/CNWRules.hpp" +#include "API/CNWBaseItemArray.hpp" +#include "API/CNWBaseItem.hpp" +#include "API/CNWSCreatureStats.hpp" +#include "API/CNWSSpellScriptData.hpp" +#include "API/CServerAIMaster.hpp" +#include "API/CNWSpellArray.hpp" +#include "API/CNWSPlaceable.hpp" +#include "API/CNWVisibilityNode.hpp" +#include "API/C2DA.hpp" #include #include @@ -15,270 +28,1510 @@ using namespace NWNXLib; using namespace NWNXLib::API; -static Damage::Damage* g_plugin; +constexpr int32_t MAX_DAMAGE_TYPES = 32; + +constexpr int32_t CRIT_MODE_DONT = 0; +constexpr int32_t CRIT_MODE_ROLL = 1; +constexpr int32_t CRIT_MODE_CRIT = 2; + +constexpr int32_t SNEAK_MODE_DONT = 0; +constexpr int32_t SNEAK_MODE_CHECK = 1; +constexpr int32_t SNEAK_MODE_DO = 2; + +struct DamageData +{ + uint32_t oidDamager; + int32_t vDamage[MAX_DAMAGE_TYPES]; +}; + +struct AttackData +{ + uint32_t oidTarget; + int16_t vDamage[MAX_DAMAGE_TYPES]; + uint8_t nAttackNumber; + uint8_t nAttackResult; + uint8_t nWeaponAttackType; + uint8_t nSneakAttack; + uint8_t bRanged; + int32_t bKillingBlow; + uint16_t nAttackType; + uint8_t nToHitRoll; + int32_t nToHitModifier; +}; + +static std::unordered_map s_EventScriptMap; +static DamageData s_DamageData; +static AttackData s_AttackData; + +static std::string GetEventScript(CNWSObject*, const std::string&); +static void HandleSignalDamage(CNWSCreature*, CNWSObject*, int32_t); + +static Hooks::Hook s_OnApplyDamageHook = Hooks::HookFunction(&CNWSEffectListHandler::OnApplyDamage, + +[](CNWSEffectListHandler *pThis, CNWSObject *pObject, CGameEffect *pEffect, BOOL bLoadingGame) -> BOOL + { + std::string sScript = GetEventScript(pObject, "DAMAGE"); + + if (!sScript.empty()) + { + if (Utils::AsNWSCreature(pObject) || Utils::AsNWSPlaceable(pObject)) + { + s_DamageData.oidDamager = pEffect->m_oidCreator; + std::memcpy(s_DamageData.vDamage, pEffect->m_nParamInteger, MAX_DAMAGE_TYPES * sizeof(int32_t)); + Utils::ExecuteScript(sScript, pObject->m_idSelf); + std::memcpy(pEffect->m_nParamInteger, s_DamageData.vDamage, MAX_DAMAGE_TYPES * sizeof(int32_t)); + } + } + + return s_OnApplyDamageHook->CallOriginal(pThis, pObject, pEffect, bLoadingGame); + }, Hooks::Order::Late); + +static Hooks::Hook s_SignalMeleeDamageHook = Hooks::HookFunction(&CNWSCreature::SignalMeleeDamage, + +[](CNWSCreature *pThis, CNWSObject *pTarget, int32_t nAttacks) -> void + { + HandleSignalDamage(pThis, pTarget, nAttacks); + s_SignalMeleeDamageHook->CallOriginal(pThis, pTarget, nAttacks); + }, Hooks::Order::Late); + +static Hooks::Hook s_SignalRangedDamageHook = Hooks::HookFunction(&CNWSCreature::SignalRangedDamage, + +[](CNWSCreature *pThis, CNWSObject *pTarget, int32_t nAttacks) -> void + { + HandleSignalDamage(pThis, pTarget, nAttacks); + s_SignalRangedDamageHook->CallOriginal(pThis, pTarget, nAttacks); + }, Hooks::Order::Late); + +static std::string GetEventScript(CNWSObject *pObject, const std::string& sEventType) +{ + if (auto posScript = pObject->nwnxGet(sEventType + "_EVENT_SCRIPT")) + return *posScript; + else + return s_EventScriptMap[sEventType]; +} + +static void OnCombatAttack(CNWSCreature *pThis, CNWSObject *pTarget, const std::string& sScript, uint8_t nAttackNumber) +{ + CNWSCombatAttackData *pCombatAttackData = pThis->m_pcCombatRound->GetAttack(nAttackNumber); + + s_AttackData.oidTarget = pTarget->m_idSelf; + s_AttackData.nAttackNumber = nAttackNumber + 1; // 1-based for backwards compatibility + s_AttackData.nAttackResult = pCombatAttackData->m_nAttackResult; + s_AttackData.nWeaponAttackType = pCombatAttackData->m_nWeaponAttackType; + s_AttackData.nSneakAttack = pCombatAttackData->m_bSneakAttack + (pCombatAttackData->m_bDeathAttack << 1); + s_AttackData.bKillingBlow = pCombatAttackData->m_bKillingBlow; + s_AttackData.nAttackType = pCombatAttackData->m_nAttackType; + s_AttackData.nToHitRoll = pCombatAttackData->m_nToHitRoll; + s_AttackData.nToHitModifier = pCombatAttackData->m_nToHitMod; + + std::memcpy(s_AttackData.vDamage, pCombatAttackData->m_nDamage, MAX_DAMAGE_TYPES * sizeof(int16_t)); + Utils::ExecuteScript(sScript, pThis->m_idSelf); + std::memcpy(pCombatAttackData->m_nDamage, s_AttackData.vDamage, MAX_DAMAGE_TYPES * sizeof(int16_t)); -NWNX_PLUGIN_ENTRY Plugin* PluginLoad(Services::ProxyServiceList* services) + pCombatAttackData->m_nAttackResult = s_AttackData.nAttackResult; +} + +static void HandleSignalDamage(CNWSCreature *pThis, CNWSObject *pTarget, int32_t nAttacks) { - g_plugin = new Damage::Damage(services); - return g_plugin; + std::string sScript = GetEventScript(pThis, "ATTACK"); + if (!sScript.empty()) + { + // m_nCurrentAttack points to the attack *after* this flurry + uint8_t nAttackNumberOffset = pThis->m_pcCombatRound->m_nCurrentAttack - nAttacks; + // trigger script once per attack in the flurry + for (int32_t i = 0; i < nAttacks; i++) + OnCombatAttack(pThis, pTarget, sScript, nAttackNumberOffset + i); + } } -namespace Damage { +NWNX_EXPORT ArgumentStack SetEventScript(ArgumentStack&& args) +{ + const auto sEvent = Events::ExtractArgument(args); + const auto sScript = Events::ExtractArgument(args); + const auto oidTarget = Events::ExtractArgument(args); + + if (oidTarget == Constants::OBJECT_INVALID) + { + s_EventScriptMap[sEvent] = sScript; + LOG_INFO("Set Global %s Event Script to %s", sEvent, sScript); + } + else + { + if (auto pTarget = Utils::GetGameObject(oidTarget)) + { + if (!sScript.empty()) + { + pTarget->nwnxSet(sEvent + "_EVENT_SCRIPT", sScript, true); + LOG_INFO("Set object %s %s Event Script to %s", Utils::ObjectIDToString(oidTarget), sEvent, sScript); + } + else + { + pTarget->nwnxRemove(sEvent + "_EVENT_SCRIPT"); + LOG_INFO("Clearing %s Event Script for object %s", sEvent, Utils::ObjectIDToString(oidTarget)); + } + } + } + + return {}; +} -Damage::Damage(Services::ProxyServiceList* services) - : Plugin(services) +NWNX_EXPORT ArgumentStack GetDamageEventData(ArgumentStack&&) { + ArgumentStack stack; -#define REGISTER(func) \ - Events::RegisterEvent(PLUGIN_NAME, #func, \ - [this](ArgumentStack&& args){ return func(std::move(args)); }) + for (int k = (MAX_DAMAGE_TYPES - 1); k >= 0; k--) + { + Events::InsertArgument(stack, s_DamageData.vDamage[k]); + } + Events::InsertArgument(stack, s_DamageData.oidDamager); - REGISTER(SetEventScript); - REGISTER(GetDamageEventData); - REGISTER(SetDamageEventData); - REGISTER(GetAttackEventData); - REGISTER(SetAttackEventData); - REGISTER(DealDamage); + return stack; +} -#undef REGISTER +NWNX_EXPORT ArgumentStack SetDamageEventData(ArgumentStack&& args) +{ + for (int &k : s_DamageData.vDamage) + { + k = args.extract(); + } - m_OnApplyDamageHook = Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler13OnApplyDamageEP10CNWSObjectP11CGameEffecti, (void*)&OnApplyDamage, Hooks::Order::Late); - m_SignalMeleeDamageHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature17SignalMeleeDamageEP10CNWSObjecti, (void*)&SignalMeleeDamageHook, Hooks::Order::Late); - m_SignalRangedDamageHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature18SignalRangedDamageEP10CNWSObjecti, (void*)&SignalRangedDamageHook, Hooks::Order::Late); + return {}; +} - m_EventScripts["DAMAGE"] = ""; - m_EventScripts["ATTACK"] = ""; +NWNX_EXPORT ArgumentStack GetAttackEventData(ArgumentStack&&) +{ + ArgumentStack stack; + + Events::InsertArgument(stack, s_AttackData.nToHitModifier); + Events::InsertArgument(stack, s_AttackData.nToHitRoll); + Events::InsertArgument(stack, s_AttackData.nAttackType); + Events::InsertArgument(stack, s_AttackData.bKillingBlow); + Events::InsertArgument(stack, s_AttackData.nSneakAttack); + Events::InsertArgument(stack, s_AttackData.nWeaponAttackType); + Events::InsertArgument(stack, s_AttackData.nAttackResult); + Events::InsertArgument(stack, s_AttackData.nAttackNumber); + for (int k = (MAX_DAMAGE_TYPES - 1); k >= 0; k--) + { + Events::InsertArgument(stack, s_AttackData.vDamage[k]); + } + Events::InsertArgument(stack, s_AttackData.oidTarget); + + return stack; } -Damage::~Damage() +NWNX_EXPORT ArgumentStack SetAttackEventData(ArgumentStack&& args) { + for (short & k : s_AttackData.vDamage) + { + k = (int16_t)args.extract(); + } + s_AttackData.nAttackResult = args.extract(); + + return {}; } -ArgumentStack Damage::SetEventScript(ArgumentStack&& args) +NWNX_EXPORT ArgumentStack DealDamage(ArgumentStack&& args) { - const auto event = Events::ExtractArgument(args); - const auto script = Events::ExtractArgument(args); - auto oidOwner = Events::ExtractArgument(args); + int vDamage[MAX_DAMAGE_TYPES]; + std::bitset positive; + + const auto oidSource = Events::ExtractArgument(args); + const auto oidTarget = Events::ExtractArgument(args); + + for (int k = 0; k < MAX_DAMAGE_TYPES; k++) + { + vDamage[k] = args.extract(); + // need to distinguish between no damage dealt, and damage reduced to 0 + positive[k] = vDamage[k] > 0; + } + const auto damagePower = args.extract(); + const auto rangedDamage = args.extract(); - if (oidOwner == Constants::OBJECT_INVALID) + if (auto *pTarget = Utils::AsNWSObject(Utils::GetGameObject(oidTarget))) { - m_EventScripts[event] = script; - LOG_INFO("Set Global %s Event Script to %s", event, script); + auto *pSource = Utils::AsNWSCreature(Utils::GetGameObject(oidSource)); + + // apply damage immunity and resistance + for (int k = 0; k < MAX_DAMAGE_TYPES; k++) + { + if (k == 12) continue; // Skip Base damage type + + if (vDamage[k] > 0) + vDamage[k] = pTarget->DoDamageImmunity(pSource, vDamage[k], 1 << k, false, false); + if (vDamage[k] > 0) + vDamage[k] = pTarget->DoDamageResistance(pSource, vDamage[k], 1 << k, false, false, false); + } + + // apply DR (combine physical damage for this) + vDamage[12] = vDamage[0] + vDamage[1] + vDamage[2]; + positive[12] = positive[0] || positive[1] || positive[2]; + if (vDamage[12] > 0) + vDamage[12] = pTarget->DoDamageReduction(pSource, vDamage[12], damagePower, false, false); + + auto *pEffect = new CGameEffect(true); + pEffect->m_nType = 38; + pEffect->SetCreator(oidSource); + pEffect->SetNumIntegers(MAX_DAMAGE_TYPES + 7); + for (int k = 0; k < 3; k++) + pEffect->SetInteger(k, -1); + for (int k = 3; k < MAX_DAMAGE_TYPES; k++) + pEffect->SetInteger(k, positive[k] ? vDamage[k] : -1); + pEffect->SetInteger(MAX_DAMAGE_TYPES + 1,1000); // Animation Time + pEffect->SetInteger(MAX_DAMAGE_TYPES + 4, true); // Combat damage + pEffect->SetInteger(MAX_DAMAGE_TYPES + 5, !!rangedDamage); //Check if ranged (this sets bRangedAttack internally) + + pTarget->ApplyEffect(pEffect, false, true); } + + return {}; +} + +int32_t Log2Int(int32_t nNumber) +{ + auto result = -1; + while (nNumber != 0) + { + result++; + nNumber = nNumber >> 1; + } + + return result; +} + +BOOL CheckAlignment(CNWSCreature* pCreature, int32_t nAlignment, BOOL bCheckGroup = false) +{ + auto nAlignGE = pCreature->m_pStats->GetSimpleAlignmentGoodEvil(); + auto nAlignLC = pCreature->m_pStats->GetSimpleAlignmentLawChaos(); + if (bCheckGroup) + return (nAlignment == nAlignGE) || (nAlignment == nAlignLC); else { - auto owner = Utils::GetGameObject(oidOwner); - if (script != "") + switch(nAlignment) { - owner->nwnxSet(event + "_EVENT_SCRIPT", script, true); - LOG_INFO("Set object 0x%08x %s Event Script to %s", oidOwner, event, script); + case 0: return (nAlignGE == Constants::Alignment::Good) && (nAlignLC == Constants::Alignment::Lawful); + case 1: return (nAlignGE == Constants::Alignment::Neutral) && (nAlignLC == Constants::Alignment::Lawful); + case 2: return (nAlignGE == Constants::Alignment::Evil) && (nAlignLC == Constants::Alignment::Lawful); + case 3: return (nAlignGE == Constants::Alignment::Good) && (nAlignLC == Constants::Alignment::Neutral); + case 4: return (nAlignGE == Constants::Alignment::Neutral) && (nAlignLC == Constants::Alignment::Neutral); + case 5: return (nAlignGE == Constants::Alignment::Evil) && (nAlignLC == Constants::Alignment::Neutral); + case 6: return (nAlignGE == Constants::Alignment::Good) && (nAlignLC == Constants::Alignment::Chaotic); + case 7: return (nAlignGE == Constants::Alignment::Neutral) && (nAlignLC == Constants::Alignment::Chaotic); + case 8: return (nAlignGE == Constants::Alignment::Evil) && (nAlignLC == Constants::Alignment::Chaotic); } + } + + return false; +} + +int32_t GetUnarmedWeaponPower(CNWSCreature* pCreature, CNWSItem* pGloves) +{ + auto result = 0; + + auto nMaxKiStrikeFeat = pCreature->m_pStats->GetHighestLevelOfFeat(Constants::Feat::EpicImprovedKiStrike4); + if (nMaxKiStrikeFeat < 0xFFFF) + result = nMaxKiStrikeFeat - Constants::Feat::EpicImprovedKiStrike4 + 4; + else + { + nMaxKiStrikeFeat = pCreature->m_pStats->GetHighestLevelOfFeat(Constants::Feat::KiStrike); + if (nMaxKiStrikeFeat == Constants::Feat::KiStrike) + result = 1; + else if (nMaxKiStrikeFeat < 0xFFFF) + result = nMaxKiStrikeFeat - Constants::Feat::KiStrike2 + 2; + } + + CNWItemProperty* pAttackBonusProperty = nullptr; + if ((pGloves) && (pGloves->GetPropertyByType(&pAttackBonusProperty, Constants::ItemProperty::AttackBonus, 0))) + { + result = std::max((int32_t)pAttackBonusProperty->m_nCostTableValue, result); + } + + return result; +} + +CGameEffect* LinkEffects(CGameEffect* pEffect1, CGameEffect* pEffect2) +{ + auto *pLinked = new CGameEffect(true); + pLinked->m_nType = Constants::EffectTrueType::Link; + pLinked->SetDurationType(pEffect1->GetDurationType()); + pLinked->m_fDuration = std::max(pEffect1->m_fDuration, pEffect2->m_fDuration); + pLinked->SetCreator(pEffect1->m_oidCreator); + pLinked->SetLinked(pEffect1, pEffect2); + + return pLinked; +} + +void CastOnHitSpell(CNWSCreature* pCaster, CNWSObject* pTarget, int32_t nSpellID, int32_t nCasterLevel) +{ + // Ignores projectile delay stuff because we don't know which spell is being cast and if there are any projectiles and which travel time those projectiles have + // Makes it so that CastOnHit does not work perfectly for every spell. + + auto* pSpell = Globals::Rules()->m_pSpellArray->GetSpell(nSpellID); + + auto* pSpellScriptData = new CNWSSpellScriptData; + pSpellScriptData->m_nSpellId = nSpellID; + pSpellScriptData->m_nFeatId = 0xFFFF; + pSpellScriptData->m_oidCaster = pCaster->m_idSelf; + pSpellScriptData->m_oidTarget = pTarget->m_idSelf; + pSpellScriptData->m_oidItem = Constants::OBJECT_INVALID; + pSpellScriptData->m_vTargetPosition = pTarget->m_vPosition; + pSpellScriptData->m_sScript = pSpell->m_sImpactScript; + pSpellScriptData->m_oidArea = pCaster->m_oidArea; + pSpellScriptData->m_nItemCastLevel = nCasterLevel; + + Globals::AppManager()->m_pServerExoApp->GetServerAIMaster()->AddEventDeltaTime(0, 0, pCaster->m_idSelf, pCaster->m_idSelf, Constants::AIMasterEvent::ItemOnHitSpellImpact, (void*)pSpellScriptData); +} + +void ApplyStateEffect(CNWSCreature* pEffectSource, CNWSObject* pTarget, int32_t nVfxEffect, int32_t nVfxDurationType, int32_t nState, float fDuration, int nEffectInt = -1, BOOL bSupernatural = false) +{ + auto *pOnHitEffect = new CGameEffect(true); + pOnHitEffect->m_nType = Constants::EffectTrueType::SetState; + pOnHitEffect->SetDurationType(Constants::EffectDurationType::Temporary); + pOnHitEffect->m_fDuration = fDuration; + pOnHitEffect->SetCreator(pEffectSource->m_idSelf); + pOnHitEffect->SetNumIntegers(1 + (nEffectInt != -1)); + pOnHitEffect->SetInteger(0, nState); + if (nEffectInt != -1) + pOnHitEffect->SetInteger(1, nEffectInt); + + auto pCessate = new CGameEffect(true); + pCessate->m_nType = Constants::EffectTrueType::VisualEffect; + pCessate->SetDurationType(Constants::EffectDurationType::Temporary); + pCessate->m_fDuration = fDuration; + pCessate->SetCreator(pEffectSource->m_idSelf); + pCessate->SetNumIntegers(3); + pCessate->SetInteger(0, 207); // VFX_DUR_CESSATE_NEGATIVE + pCessate->SetInteger(1, 0); + pCessate->SetInteger(2, 0); + + auto* pVis = new CGameEffect(true); + pVis->m_nType = Constants::EffectTrueType::VisualEffect; + pVis->SetDurationType(nVfxDurationType); + if (nVfxDurationType == Constants::EffectDurationType::Temporary) + pVis->m_fDuration = fDuration; + pVis->SetCreator(pEffectSource->m_idSelf); + pVis->SetNumIntegers(3); + pVis->SetInteger(0, nVfxEffect); + pVis->SetInteger(1, 0); + pVis->SetInteger(2, 0); + + auto* pLink = LinkEffects(pOnHitEffect, pCessate); + if (nVfxDurationType == Constants::EffectDurationType::Temporary) + pLink = LinkEffects(pLink, pVis); + else + pTarget->ApplyEffect(pVis, false, true); + + if (bSupernatural) pLink->SetSubType_Supernatural(); + pTarget->ApplyEffect(pLink, false, true); +} + +int32_t RollDamage(int32_t nNumDice, int32_t nDice, int32_t nCritMultiplier, BOOL bRollMaxDamage) +{ + if (nNumDice == 0) + { + nNumDice = 1; + bRollMaxDamage = true; + } + + if (bRollMaxDamage) + return (nNumDice * nCritMultiplier) * nDice; + else + { + auto result = 0; + auto nTotalDice = nNumDice * nCritMultiplier; + while (nTotalDice > 0) + { + result += Globals::Rules()->RollDice(1, nDice); + nTotalDice--; + } + + return result; + } +} + +BOOL CheckSneakAttack(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nMode) +{ + if (!pTarget) return false; + + auto bSneak = false; + if ((nMode) && (!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::SneakAttack, pAttacker)) && + ((!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::CriticalHit, pAttacker)) || (Config::Get("SNEAK_ATTACK_IGNORE_CRIT_IMMUNITY", false)))) + { + bSneak = (nMode == SNEAK_MODE_DO); + if (nMode == SNEAK_MODE_CHECK) + { + // Code stolen from SneakAttackCritImmunity tweak + auto* pVisNode = pTarget->GetVisibleListElement(pAttacker->m_idSelf); + if (!pVisNode || !pVisNode->m_bSeen || pTarget->GetFlatFooted()) + { + bSneak = true; + } + else if (pAttacker->GetFlanked(pTarget)) + { + bSneak = true; + if (pTarget->m_pStats->HasFeat(Constants::Feat::UncannyDodge2)) + { + const uint8_t uncannyClasses[] = + { + Constants::ClassType::Barbarian, + Constants::ClassType::Rogue, + Constants::ClassType::Assassin, + Constants::ClassType::Shadowdancer + }; + int nAttackerLevels = 0, nDefenderLevels = 0; + + for (uint8_t i = 0; i < 3; i++) + { + auto nAttackerClass = pAttacker->m_pStats->GetClass(i); + auto nDefenderClass = pTarget->m_pStats->GetClass(i); + for (size_t j = 0; j < sizeof(uncannyClasses) / sizeof(uncannyClasses[0]); j++) + { + nAttackerLevels += (nAttackerClass == uncannyClasses[j]) ? pAttacker->m_pStats->GetClassLevel(i, false) : 0; + nDefenderLevels += (nDefenderClass == uncannyClasses[j]) ? pTarget->m_pStats->GetClassLevel(i, false) : 0; + } + } + + bSneak = nAttackerLevels - nDefenderLevels >= Globals::Rules()->GetRulesetIntEntry("FLANK_LEVEL_RANGE", 4); + } + } + } + } + + return bSneak; +} + +BOOL CheckCrit(CNWSCreature* pAttacker, CNWSObject* pTarget, int32_t nMode, BOOL bOffhand) +{ + auto* pTargetCreature = Utils::AsNWSCreature(pTarget); + + auto bCrit = false; + if ((nMode) && ((!pTargetCreature) || (!pTargetCreature->m_pStats->GetEffectImmunity(Constants::ImmunityType::CriticalHit, pAttacker)))) + { + bCrit = (nMode == CRIT_MODE_CRIT); + if (nMode == CRIT_MODE_ROLL) + { + auto nBaseAttackBonus = pAttacker->m_pStats->GetBaseAttackBonus(false); + auto nMeleeAttackBonus = pAttacker->m_pStats->GetMeleeAttackBonus(bOffhand, false, false); + auto nEffectAttackBonus = pAttacker->GetTotalEffectBonus(1, pTarget, false, false, 0, 0, 0xff, 0xff, bOffhand); + auto nTotalAttackBonus = nBaseAttackBonus + nMeleeAttackBonus + nEffectAttackBonus; + + auto nCritRange = pAttacker->m_pStats->GetCriticalHitRoll(bOffhand); + + auto nTargetAC = 0; + if (pTargetCreature) + nTargetAC = pTargetCreature->m_pStats->GetArmorClassVersus(pAttacker, false); + + auto nAttackRoll = Globals::Rules()->RollDice(1, 20); + if (((nAttackRoll == 20) || (nAttackRoll + nTotalAttackBonus >= nTargetAC)) && (nAttackRoll >= nCritRange)) + { + auto nThreatRoll = Globals::Rules()->RollDice(1, 20); + bCrit = (nThreatRoll + nTotalAttackBonus) >= nTargetAC; + } + } + } + + return bCrit; +} + +CNWSItem* GetAttackWeapon(CNWSCreature* pAttacker, BOOL bOffhand) +{ + CNWSItem* pWeapon = nullptr; + if (pAttacker->GetUnarmed()) + pWeapon = pAttacker->m_pInventory->GetItemInSlot(Constants::EquipmentSlot::Arms); + else if (bOffhand) + pWeapon = pAttacker->m_pInventory->GetItemInSlot(Constants::EquipmentSlot::LeftHand); + else + pWeapon = pAttacker->m_pInventory->GetItemInSlot(Constants::EquipmentSlot::RightHand); + + // Check if actually a weapon + if (pWeapon) + { + auto pWeaponBase = Globals::Rules()->m_pBaseItemArray->GetBaseItem(pWeapon->m_nBaseItem); + if (!pWeaponBase->m_nWeaponType) + pWeapon = nullptr; + } + + return pWeapon; +} + +int32_t GetSneakAttackDiceNum(CNWSCreature* pCreature) +{ + int32_t result = 0; + + // Sneak Attack + auto nSneakAttack11PlusFeat = pCreature->m_pStats->GetHighestLevelOfFeat(Constants::Feat::SneakAttack11); + if (nSneakAttack11PlusFeat < 0xFFFF) + result += (nSneakAttack11PlusFeat - Constants::Feat::SneakAttack11) + 11; + else + { + auto nSneakAttack2PlusFeat = pCreature->m_pStats->GetHighestLevelOfFeat(Constants::Feat::SneakAttack2); + if (nSneakAttack2PlusFeat < 0xFFFF) + result += (nSneakAttack2PlusFeat - Constants::Feat::SneakAttack2) + 2; else + result += (pCreature->m_pStats->GetHighestLevelOfFeat(Constants::Feat::SneakAttack) != 0xFFFF); + } + + // DeathAttack (is buggy with GetHighestLevelOfFeat): + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack20)) result += 20; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack19)) result += 19; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack18)) result += 18; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack17)) result += 17; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack16)) result += 16; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack15)) result += 15; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack14)) result += 14; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack13)) result += 13; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack12)) result += 12; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack11)) result += 11; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack10)) result += 10; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack9)) result += 9; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack8)) result += 8; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack7)) result += 7; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack6)) result += 6; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack5)) result += 5; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack4)) result += 4; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack3)) result += 3; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack2)) result += 2; else + if (pCreature->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack1)) result += 1; + + // Blackguard sneak attack + auto nBlackguardSneakAttack4PlusFeat = pCreature->m_pStats->GetHighestLevelOfFeat(Constants::Feat::BlackguardSneakAttack4d6); + if (nBlackguardSneakAttack4PlusFeat < 0xFFFF) + result += (nBlackguardSneakAttack4PlusFeat - Constants::Feat::BlackguardSneakAttack4d6) + 4; + else + { + auto nBlackguardSneakAttack1PlusFeat = pCreature->m_pStats->GetHighestLevelOfFeat(Constants::Feat::BlackguardSneakAttack1d6); + if (nBlackguardSneakAttack1PlusFeat < 0xFFFF) + result += (nBlackguardSneakAttack1PlusFeat - Constants::Feat::BlackguardSneakAttack1d6) + 1; + } + + // Improved sneak attack + auto nImprovedSneakAttack1PlusFeat = pCreature->m_pStats->GetHighestLevelOfFeat(Constants::Feat::EpicImprovedSneakAttack1); + if (nImprovedSneakAttack1PlusFeat < 0xFFFF) + result += (nImprovedSneakAttack1PlusFeat - Constants::Feat::EpicImprovedSneakAttack1) + 1; + + return result; +} + +void ApplyPhysicalWeaponDamage(CNWSCreature* pAttacker, CNWSItem* pWeapon, CNWSObject* pTarget, BOOL bCrit, BOOL bSneak, int32_t nCritMultiplier, BOOL bRollMaxDamage, C2DA* damageCost2DA, int32_t vDamage[MAX_DAMAGE_TYPES]) +{ + auto pWeaponBase = pWeapon ? Globals::Rules()->m_pBaseItemArray->GetBaseItem(pWeapon->m_nBaseItem) : nullptr; + + // Base damage + auto nPhysDamage = 0; + if (pAttacker->GetUnarmed()) + nPhysDamage += RollDamage(pAttacker->m_pStats->GetUnarmedDamageDice(), pAttacker->m_pStats->GetUnarmedDamageDie(), nCritMultiplier, bRollMaxDamage); + else if (pWeapon) + nPhysDamage += RollDamage(pWeaponBase->m_nNumDice, pWeaponBase->m_nDieToRoll, nCritMultiplier, bRollMaxDamage); + + // Bonus damage + nPhysDamage += pAttacker->GetTotalEffectBonus(2, pTarget) * nCritMultiplier; // NWNX_CREATURE_BONUS_TYPE_DAMAGE + nPhysDamage += pAttacker->m_pStats->GetAbilityMod(Constants::Ability::Strength) * nCritMultiplier; + + // Crit damage + if (bCrit) + { + CNWItemProperty* pMassiveProperty; + if ((pWeapon) && (pWeapon->GetPropertyByType(&pMassiveProperty, Constants::ItemProperty::MassiveCriticals, 0))) + { + int32_t nDamageNumDice; + int32_t nDamageDie; + damageCost2DA->GetINTEntry(pMassiveProperty->m_nCostTableValue, "NumDice", &nDamageNumDice); + damageCost2DA->GetINTEntry(pMassiveProperty->m_nCostTableValue, "Die", &nDamageDie); + + nPhysDamage += RollDamage(nDamageNumDice, nDamageDie, 1, bRollMaxDamage); + } + + if (pAttacker->m_pStats->GetEpicWeaponOverwhelmingCritical(pWeapon)) { - owner->nwnxRemove(event + "_EVENT_SCRIPT"); - LOG_INFO("Clearing %s Event Script for object 0x%08x", event, oidOwner); + nPhysDamage += RollDamage(1, 6, nCritMultiplier, bRollMaxDamage); } } - return Events::Arguments(); + // Sneak damage + if (bSneak) + { + auto nSneakDiceNum = GetSneakAttackDiceNum(pAttacker); + nPhysDamage += RollDamage(nSneakDiceNum, 6, 1, bRollMaxDamage); + } + + // Set physical damage types + if (pAttacker->GetUnarmed()) + { + vDamage[0] = nPhysDamage; // Unarmed damage is Bludgeoning damage + } + else + { + if ((pWeaponBase->m_nWeaponType == 2) || (pWeaponBase->m_nWeaponType == 5) || (pWeapon->GetPropertyByTypeExists(Constants::ItemProperty::ExtraMeleeDamageType, 0))) // Bludgeoning + vDamage[0] = nPhysDamage; + if ((pWeaponBase->m_nWeaponType == 1) || (pWeaponBase->m_nWeaponType == 5) || (pWeapon->GetPropertyByTypeExists(Constants::ItemProperty::ExtraMeleeDamageType, 1))) // Piercing + vDamage[1] = nPhysDamage; + if ((pWeaponBase->m_nWeaponType == 3) || (pWeaponBase->m_nWeaponType == 4) || (pWeapon->GetPropertyByTypeExists(Constants::ItemProperty::ExtraMeleeDamageType, 2))) // Slashing + vDamage[2] = nPhysDamage; + } } -std::string Damage::GetEventScript(CNWSObject *pObject, const std::string &event) +void ApplyElementalWeaponDamage(CNWSItem* pWeapon, CNWSCreature* pTarget, int32_t nCritMultiplier, BOOL bRollMaxDamage, C2DA* damageCost2DA, int32_t vDamage[MAX_DAMAGE_TYPES]) { - auto posScript = pObject->nwnxGet(event + "_EVENT_SCRIPT"); - return posScript ? *posScript : g_plugin->m_EventScripts[event]; + if (!pWeapon) return; + + int32_t vDamageRanks[MAX_DAMAGE_TYPES]; + memset(vDamageRanks, 0, sizeof(vDamageRanks)); + + int32_t nDamageRank; + int32_t nDamageDie; + int32_t nDamageNumDice; + for (int i = 0; i < pWeapon->m_lstPassiveProperties.num; i++) + { + auto pProp = pWeapon->GetPassiveProperty(i); + if ((pProp->m_nPropertyName == Constants::ItemProperty::DamageBonus) || + ((pProp->m_nPropertyName == Constants::ItemProperty::DamageBonusVSAlignmentGroup) && (pTarget != nullptr) && ((pTarget->m_pStats->GetSimpleAlignmentLawChaos() == pProp->m_nSubType) || (pTarget->m_pStats->GetSimpleAlignmentGoodEvil() == pProp->m_nSubType))) || + ((pProp->m_nPropertyName == Constants::ItemProperty::DamageBonusVSRacialGroup) && (pTarget != nullptr) && (pTarget->m_pStats->m_nRace == pProp->m_nSubType)) || + ((pProp->m_nPropertyName == Constants::ItemProperty::DamageBonusVSSpecificAlignment) && (pTarget != nullptr) && (CheckAlignment(pTarget, pProp->m_nSubType)))) + { + auto nDamageTypeIndex = pProp->m_nParam1Value - 2; + if (pProp->m_nPropertyName == Constants::ItemProperty::DamageBonus) + nDamageTypeIndex = pProp->m_nSubType - 2; + + if ((nDamageTypeIndex > 2) && (nDamageTypeIndex != 12)) // Skip physical damage + { + auto nDamageCostValue = pProp->m_nCostTableValue; + damageCost2DA->GetINTEntry(nDamageCostValue, "Rank", &nDamageRank); + if (nDamageRank > vDamageRanks[nDamageTypeIndex]) + { + damageCost2DA->GetINTEntry(nDamageCostValue, "NumDice", &nDamageNumDice); + damageCost2DA->GetINTEntry(nDamageCostValue, "Die", &nDamageDie); + + vDamage[nDamageTypeIndex] = RollDamage(nDamageNumDice, nDamageDie, nCritMultiplier, bRollMaxDamage); + vDamageRanks[nDamageTypeIndex] = nDamageRank; + } + } + } + } +} + +void AddElementalDamageModifiers(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nCritMultiplier, BOOL bRollMaxDamage, C2DA* damageCost2DA, int32_t vDamage[MAX_DAMAGE_TYPES], int32_t nModifierType) +{ + int32_t nDamageRank; + int32_t nDamageDie; + int32_t nDamageNumDice; + std::unordered_map spellDamageTypeRanks; + for (auto* pEffect : pAttacker->m_appliedEffects) + { + auto nEffectRace = pEffect->GetInteger(2); + auto nEffectAlignLC = pEffect->GetInteger(3); + auto nEffectAlignGE = pEffect->GetInteger(4); + + if ( + (pEffect->m_nType == nModifierType) && + (pEffect->m_nItemPropertySourceId == 0) && // Non-Itemproperty effects + ((nEffectRace == Constants::RacialType::Invalid) || ((pTarget != nullptr) && (pTarget->m_pStats->m_nRace == nEffectRace))) && + ((nEffectAlignLC == Constants::Alignment::All) || ((pTarget != nullptr) && (pTarget->m_pStats->GetSimpleAlignmentLawChaos() == nEffectAlignLC))) && + ((nEffectAlignGE == Constants::Alignment::All) || ((pTarget != nullptr) && (pTarget->m_pStats->GetSimpleAlignmentGoodEvil() == nEffectAlignGE))) + ) + { + auto nDamageCostValue = pEffect->GetInteger(0); + auto nDamageTypeIndex = Log2Int(pEffect->GetInteger(1)); + + if ((nDamageTypeIndex > 2) && (nDamageTypeIndex != 12)) // Skip physical damage + { + auto nSpellEffectIndex = (pEffect->m_nSpellId << 5) | nDamageTypeIndex; + damageCost2DA->GetINTEntry(nDamageCostValue, "Rank", &nDamageRank); + + if ((pEffect->m_nSpellId == 0xFFFFFFFF) || (!spellDamageTypeRanks.count(nSpellEffectIndex)) || (spellDamageTypeRanks[nSpellEffectIndex] < nDamageRank)) + { + damageCost2DA->GetINTEntry(nDamageCostValue, "NumDice", &nDamageNumDice); + damageCost2DA->GetINTEntry(nDamageCostValue, "Die", &nDamageDie); + + auto nDamageRoll = RollDamage(nDamageNumDice, nDamageDie, nCritMultiplier, bRollMaxDamage); + + if (nModifierType == Constants::EffectTrueType::DamageIncrease) + vDamage[nDamageTypeIndex] += nDamageRoll + (vDamage[nDamageTypeIndex] < 0); + else + vDamage[nDamageTypeIndex] = std::max(vDamage[nDamageTypeIndex] - nDamageRoll, 0); + + if (pEffect->m_nSpellId != 0xFFFFFFFF) + spellDamageTypeRanks[nSpellEffectIndex] = nDamageRank; + } + } + } + } } -//--------------------------- Damage Event ------------------------------------ +void ApplyOnHitSleep(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) +{ + if (!pTarget) return; + + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::MindSpells, pAttacker) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Sleep, pAttacker)) + { + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Will, nDC, Constants::SavingThrowType::MindSpells, pAttacker->m_idSelf)) + ApplyStateEffect(pAttacker, pTarget, 94, Constants::EffectDurationType::Instant, 9, nDuration, 1); + } +} -ArgumentStack Damage::GetDamageEventData(ArgumentStack&&) +void ApplyOnHitStun(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) { - ArgumentStack stack; + if (!pTarget) return; - for (int k = 12; k >= 0; k--) + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::MindSpells, pAttacker) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Stun, pAttacker)) { - Events::InsertArgument(stack, m_DamageData.vDamage[k]); + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Will, nDC, Constants::SavingThrowType::MindSpells, pAttacker->m_idSelf)) + ApplyStateEffect(pAttacker, pTarget, 208, Constants::EffectDurationType::Temporary, 6, nDuration, 0); // CREATURE_STATE_HELD?, VFX_DUR_MIND_AFFECTING_DISABLED } - Events::InsertArgument(stack, m_DamageData.oidDamager); +} - return stack; +void ApplyOnHitHold(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) +{ + if (!pTarget) return; + + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::MindSpells, pAttacker) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Paralysis, pAttacker)) + { + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Will, nDC, Constants::SavingThrowType::None, pAttacker->m_idSelf)) + ApplyStateEffect(pAttacker, pTarget, 82, Constants::EffectDurationType::Temporary, 8, nDuration, 0); // CREATURE_STATE_HELD, VFX_DUR_PARALYZE_HOLD + } } -ArgumentStack Damage::SetDamageEventData(ArgumentStack&& args) +void ApplyOnHitConfusion(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) { - ArgumentStack stack; + if (!pTarget) return; - for (int k = 0; k < 13; k++) + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::MindSpells, pAttacker) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Confused, pAttacker)) { - m_DamageData.vDamage[k] = Events::ExtractArgument(args); + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Will, nDC, Constants::SavingThrowType::MindSpells, pAttacker->m_idSelf)) + ApplyStateEffect(pAttacker, pTarget, 48, Constants::EffectDurationType::Instant, 2, nDuration); // CREATURE_STATE_CONFUSED, VFX_IMP_CONFUSION_S } +} - return stack; +void ApplyOnHitDaze(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) +{ + if (!pTarget) return; + + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::MindSpells, pAttacker) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Dazed, pAttacker)) + { + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Will, nDC, Constants::SavingThrowType::MindSpells, pAttacker->m_idSelf)) + ApplyStateEffect(pAttacker, pTarget, 49, Constants::EffectDurationType::Instant, 5, nDuration); // CREATURE_STATE_DAZED, VFX_IMP_DAZED_S + } +} + +void ApplyOnHitDoom(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) +{ + if (!pTarget) return; + + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->SavingThrowRoll(Constants::SavingThrow::Will, nDC, Constants::SavingThrowType::None, pAttacker->m_idSelf)) + { + auto *pSaveDecrease = new CGameEffect(true); + pSaveDecrease->m_nType = Constants::EffectTrueType::SavingThrowDecrease; + pSaveDecrease->SetDurationType(Constants::EffectDurationType::Temporary); + pSaveDecrease->m_fDuration = nDuration; + pSaveDecrease->SetCreator(pAttacker->m_idSelf); + pSaveDecrease->SetNumIntegers(6); + pSaveDecrease->SetInteger(0, 2); // -2 + pSaveDecrease->SetInteger(1, 0); // SAVING_THROW_ALL + pSaveDecrease->SetInteger(2, 0); // SAVING_THROW_TYPE_ALL + pSaveDecrease->SetInteger(3, Constants::RacialType::Invalid); + pSaveDecrease->SetInteger(4, 0); + pSaveDecrease->SetInteger(5, 0); + + auto *pAttackDecrease = new CGameEffect(true); + pAttackDecrease->m_nType = Constants::EffectTrueType::AttackDecrease; + pAttackDecrease->SetDurationType(Constants::EffectDurationType::Temporary); + pAttackDecrease->m_fDuration = nDuration; + pAttackDecrease->SetCreator(pAttacker->m_idSelf); + pAttackDecrease->SetNumIntegers(5); + pAttackDecrease->SetInteger(0, 2); // -2 + pAttackDecrease->SetInteger(1, 0); // ATTACK_BONUS_MISC + pAttackDecrease->SetInteger(2, Constants::RacialType::Invalid); + pAttackDecrease->SetInteger(3, 0); + pAttackDecrease->SetInteger(4, 0); + + auto *pDamageDecrease = new CGameEffect(true); + pDamageDecrease->m_nType = Constants::EffectTrueType::DamageDecrease; + pDamageDecrease->SetDurationType(Constants::EffectDurationType::Temporary); + pDamageDecrease->m_fDuration = nDuration; + pDamageDecrease->SetCreator(pAttacker->m_idSelf); + pDamageDecrease->SetNumIntegers(5); + pDamageDecrease->SetInteger(0, 2); // -2 + pDamageDecrease->SetInteger(1, 8); // DAMAGE_TYPE_MAGICAL + pDamageDecrease->SetInteger(2, Constants::RacialType::Invalid); + pDamageDecrease->SetInteger(3, 0); + pDamageDecrease->SetInteger(4, 0); + + auto *pSkillDecrease = new CGameEffect(true); + pSkillDecrease->m_nType = Constants::EffectTrueType::SkillDecrease; + pSkillDecrease->SetDurationType(Constants::EffectDurationType::Temporary); + pSkillDecrease->m_fDuration = nDuration; + pSkillDecrease->SetCreator(pAttacker->m_idSelf); + pSkillDecrease->SetNumIntegers(6); + pSkillDecrease->SetInteger(0, 255); // SKILL_ALL_SKILLS + pSkillDecrease->SetInteger(1, 2); + pSkillDecrease->SetInteger(2, Constants::RacialType::Invalid); + pSkillDecrease->SetInteger(3, 0); + pSkillDecrease->SetInteger(4, 0); + pSkillDecrease->SetInteger(5, 0); + + auto* pCessate = new CGameEffect(true); + pCessate->m_nType = Constants::EffectTrueType::VisualEffect; + pCessate->SetDurationType(Constants::EffectDurationType::Temporary); + pCessate->m_fDuration = nDuration; + pCessate->SetCreator(pAttacker->m_idSelf); + pCessate->SetNumIntegers(3); + pCessate->SetInteger(0, 207); // VFX_DUR_CESSATE_NEGATIVE + pCessate->SetInteger(1, 0); + pCessate->SetInteger(2, 0); + + auto* pLink = LinkEffects(pAttackDecrease, pDamageDecrease); + pLink = LinkEffects(pLink, pSaveDecrease); + pLink = LinkEffects(pLink, pSkillDecrease); + pLink = LinkEffects(pLink, pCessate); + + auto pVis = new CGameEffect(true); + pVis->m_nType = Constants::EffectTrueType::VisualEffect; + pVis->SetDurationType(Constants::EffectDurationType::Instant); + pVis->SetCreator(pAttacker->m_idSelf); + pVis->SetNumIntegers(3); + pVis->SetInteger(0, 57); // VFX_IMP_DOOM + pVis->SetInteger(1, 0); + pVis->SetInteger(2, 0); + + pTarget->ApplyEffect(pLink, false, true); + pTarget->ApplyEffect(pVis, false, true); + } +} + +void ApplyOnHitFear(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) +{ + if (!pTarget) return; + + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::MindSpells, pAttacker) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Fear, pAttacker)) + { + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Will, nDC, Constants::SavingThrowType::Fear, pAttacker->m_idSelf)) + ApplyStateEffect(pAttacker, pTarget, 218, Constants::EffectDurationType::Temporary, 3, nDuration); // CREATURE_STATE_FRIGHTENED , VFX_DUR_MIND_AFFECTING_FEAR + } +} + +void ApplyOnHitKnock(CNWSCreature* pAttacker, CNWSPlaceable* pTarget, int32_t nDC) +{ + if ((pTarget->m_bLocked) && (pTarget->m_nOpenLockDC <= nDC)) + { + CastOnHitSpell(pAttacker, pTarget, 93, 1); + } } -int32_t Damage::OnApplyDamage(CNWSEffectListHandler *pThis, CNWSObject *pObject, CGameEffect *pEffect, BOOL bLoadingGame) +void ApplyOnHitSlow(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) { - std::string script = GetEventScript(pObject, "DAMAGE"); + if (!pTarget) return; - if (!script.empty()) + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Slow, pAttacker)) { - // We only run the OnDamage event for creatures and placeables. - if (Utils::AsNWSCreature(pObject) || Utils::AsNWSPlaceable(pObject)) + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Will, nDC, Constants::SavingThrowType::None, pAttacker->m_idSelf)) { - // Prepare the data for the nwscript - g_plugin->m_DamageData.oidDamager = pEffect->m_oidCreator; + auto *pSlow = new CGameEffect(true); + pSlow->m_nType = Constants::EffectTrueType::Slow; + pSlow->SetDurationType(Constants::EffectDurationType::Temporary); + pSlow->m_fDuration = nDuration; + pSlow->SetCreator(pAttacker->m_idSelf); + + auto* pVis = new CGameEffect(true); + pVis->m_nType = Constants::EffectTrueType::VisualEffect; + pVis->SetDurationType(Constants::EffectDurationType::Instant); + pVis->SetCreator(pAttacker->m_idSelf); + pVis->SetNumIntegers(3); + pVis->SetInteger(0, 95); // VFX_IMP_SLOW + pVis->SetInteger(1, 0); + pVis->SetInteger(2, 0); - std::memcpy(g_plugin->m_DamageData.vDamage, pEffect->m_nParamInteger, sizeof(g_plugin->m_DamageData.vDamage)); - Utils::ExecuteScript(script, pObject->m_idSelf); - std::memcpy(pEffect->m_nParamInteger, g_plugin->m_DamageData.vDamage, sizeof(g_plugin->m_DamageData.vDamage)); + pTarget->ApplyEffect(pSlow, false, true); + pTarget->ApplyEffect(pVis, false, true); } } +} + +void ApplyOnHitSilence(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) +{ + if (!pTarget) return; - return g_plugin->m_OnApplyDamageHook->CallOriginal(pThis, pObject, pEffect, bLoadingGame); + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Silence, pAttacker)) + { + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Will, nDC, Constants::SavingThrowType::None, pAttacker->m_idSelf)) + { + auto *pSilence = new CGameEffect(true); + pSilence->m_nType = Constants::EffectTrueType::Silence; + pSilence->SetDurationType(Constants::EffectDurationType::Temporary); + pSilence->m_fDuration = nDuration; + pSilence->SetCreator(pAttacker->m_idSelf); + + auto* pCessate = new CGameEffect(true); + pCessate->m_nType = Constants::EffectTrueType::VisualEffect; + pCessate->SetDurationType(Constants::EffectDurationType::Temporary); + pCessate->m_fDuration = nDuration; + pCessate->SetCreator(pAttacker->m_idSelf); + pCessate->SetNumIntegers(3); + pCessate->SetInteger(0, 207); // VFX_DUR_CESSATE_NEGATIVE + pCessate->SetInteger(1, 0); + pCessate->SetInteger(2, 0); + + auto pVis = new CGameEffect(true); + pVis->m_nType = Constants::EffectTrueType::VisualEffect; + pVis->SetDurationType(Constants::EffectDurationType::Instant); + pVis->SetCreator(pAttacker->m_idSelf); + pVis->SetNumIntegers(3); + pVis->SetInteger(0, 93); // VFX_IMP_SILENCE + pVis->SetInteger(1, 0); + pVis->SetInteger(2, 0); + + auto* pLink = LinkEffects(pSilence, pCessate); + pTarget->ApplyEffect(pLink, false, true); + pTarget->ApplyEffect(pVis, false, true); + } + } } -//--------------------------- Attack Event ------------------------------------ +void ApplyOnHitDeafness(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) +{ + if (!pTarget) return; + + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Deafness, pAttacker)) + { + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDC, Constants::SavingThrowType::None, pAttacker->m_idSelf)) + { + auto *pDeafness = new CGameEffect(true); + pDeafness->m_nType = Constants::EffectTrueType::Deaf; + pDeafness->SetDurationType(Constants::EffectDurationType::Temporary); + pDeafness->m_fDuration = nDuration; + pDeafness->SetCreator(pAttacker->m_idSelf); + + auto pCessate = new CGameEffect(true); + pCessate->m_nType = Constants::EffectTrueType::VisualEffect; + pCessate->SetDurationType(Constants::EffectDurationType::Temporary); + pCessate->m_fDuration = nDuration; + pCessate->SetCreator(pAttacker->m_idSelf); + pCessate->SetNumIntegers(3); + pCessate->SetInteger(0, 207); // VFX_DUR_CESSATE_NEGATIVE + pCessate->SetInteger(1, 0); + pCessate->SetInteger(2, 0); + + auto* pVis = new CGameEffect(true); + pVis->m_nType = Constants::EffectTrueType::VisualEffect; + pVis->SetDurationType(Constants::EffectDurationType::Instant); + pVis->SetCreator(pAttacker->m_idSelf); + pVis->SetNumIntegers(3); + pVis->SetInteger(0, 46); // VFX_IMP_BLIND_DEAF_M + pVis->SetInteger(1, 0); + pVis->SetInteger(2, 0); + + auto* pLink = LinkEffects(pDeafness, pCessate); + pTarget->ApplyEffect(pLink, false, true); + pTarget->ApplyEffect(pVis, false, true); + } + } +} -ArgumentStack Damage::GetAttackEventData(ArgumentStack&&) +void ApplyOnHitBlindness(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nTriggerChance, int32_t nDC, int32_t nDuration) { - ArgumentStack stack; + if (!pTarget) return; - Events::InsertArgument(stack, m_AttackData.nToHitModifier); - Events::InsertArgument(stack, m_AttackData.nToHitRoll); - Events::InsertArgument(stack, m_AttackData.nAttackType); - Events::InsertArgument(stack, m_AttackData.bKillingBlow); - Events::InsertArgument(stack, m_AttackData.nSneakAttack); - Events::InsertArgument(stack, m_AttackData.nWeaponAttackType); - Events::InsertArgument(stack, m_AttackData.nAttackResult); - Events::InsertArgument(stack, m_AttackData.nAttackNumber); - for (int k = 12; k >= 0; k--) + auto bDoesTrigger = Globals::Rules()->RollDice(1, 100) <= nTriggerChance; + if ((bDoesTrigger) && !pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Blindness, pAttacker)) { - Events::InsertArgument(stack, m_AttackData.vDamage[k]); + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDC, Constants::SavingThrowType::None, pAttacker->m_idSelf)) + { + auto *pBlindness = new CGameEffect(true); + pBlindness->m_nType = Constants::EffectTrueType::Blindness; + pBlindness->SetDurationType(Constants::EffectDurationType::Temporary); + pBlindness->m_fDuration = nDuration; + pBlindness->SetCreator(pAttacker->m_idSelf); + pBlindness->SetNumIntegers(1); + pBlindness->SetInteger(0, 16); // CREATURE_VISION_TYPE_BLIND + + auto pCessate = new CGameEffect(true); + pCessate->m_nType = Constants::EffectTrueType::VisualEffect; + pCessate->SetDurationType(Constants::EffectDurationType::Temporary); + pCessate->m_fDuration = nDuration; + pCessate->SetCreator(pAttacker->m_idSelf); + pCessate->SetNumIntegers(3); + pCessate->SetInteger(0, 207); // VFX_DUR_CESSATE_NEGATIVE + pCessate->SetInteger(1, 0); + pCessate->SetInteger(2, 0); + + auto* pVis = new CGameEffect(true); + pVis->m_nType = Constants::EffectTrueType::VisualEffect; + pVis->SetDurationType(Constants::EffectDurationType::Instant); + pVis->SetCreator(pAttacker->m_idSelf); + pVis->SetNumIntegers(3); + pVis->SetInteger(0, 46); // VFX_IMP_BLIND_DEAF_M + pVis->SetInteger(1, 0); + pVis->SetInteger(2, 0); + + auto* pLink = LinkEffects(pBlindness, pCessate); + pTarget->ApplyEffect(pLink, false, true); + pTarget->ApplyEffect(pVis, false, true); + } } - Events::InsertArgument(stack, m_AttackData.oidTarget); +} - return stack; +void ApplyOnHitLevelDrain(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nDC) +{ + if (!pTarget) return; + + if (!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::NegativeLevel, pAttacker)) + { + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDC, Constants::SavingThrowType::Negative, pAttacker->m_idSelf)) + { + auto *pLevelDrain = new CGameEffect(true); + pLevelDrain->m_nType = Constants::EffectTrueType::NegativeLevel; + pLevelDrain->SetDurationType(Constants::EffectDurationType::Permanent); + pLevelDrain->SetCreator(pAttacker->m_idSelf); + pLevelDrain->SetNumIntegers(2); + pLevelDrain->SetInteger(0, 1); // -1 level + pLevelDrain->SetInteger(1, 0); + + auto* pVis = new CGameEffect(true); + pVis->m_nType = Constants::EffectTrueType::VisualEffect; + pVis->SetDurationType(Constants::EffectDurationType::Instant); + pVis->SetCreator(pAttacker->m_idSelf); + pVis->SetNumIntegers(3); + pVis->SetInteger(0, 81); // VFX_IMP_NEGATIVE_ENERGY + pVis->SetInteger(1, 0); + pVis->SetInteger(2, 0); + + pTarget->ApplyEffect(pLevelDrain, false, true); + pTarget->ApplyEffect(pVis, false, true); + } + } } -ArgumentStack Damage::SetAttackEventData(ArgumentStack&& args) +void ApplyOnHitAbilityDrain(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nDC, int32_t nAbility) { - ArgumentStack stack; + if (!pTarget) return; - for (int k = 0; k < 13; k++) + if (!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::AbilityDecrease, pAttacker)) { - m_AttackData.vDamage[k] = Events::ExtractArgument(args); + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDC, Constants::SavingThrowType::Negative, pAttacker->m_idSelf)) + { + auto *pAbilityDrain = new CGameEffect(true); + pAbilityDrain->m_nType = Constants::EffectTrueType::AbilityDecrease; + pAbilityDrain->SetDurationType(Constants::EffectDurationType::Permanent); + pAbilityDrain->SetCreator(pAttacker->m_idSelf); + pAbilityDrain->SetNumIntegers(2); + pAbilityDrain->SetInteger(0, nAbility); + pAbilityDrain->SetInteger(1, 1); + + auto* pVis = new CGameEffect(true); + pVis->m_nType = Constants::EffectTrueType::VisualEffect; + pVis->SetDurationType(Constants::EffectDurationType::Instant); + pVis->SetCreator(pAttacker->m_idSelf); + pVis->SetNumIntegers(3); + pVis->SetInteger(0, 91); // VFX_IMP_REDUCE_ABILITY_SCORE + pVis->SetInteger(1, 0); + pVis->SetInteger(2, 0); + + pTarget->ApplyEffect(pAbilityDrain, false, true); + pTarget->ApplyEffect(pVis, false, true); + } } - m_AttackData.nAttackResult = Events::ExtractArgument(args); +} - return stack; +void ApplyOnHitPoison(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nDC, int32_t nAbility) +{ + if (!pTarget) return; + + if (!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Poison, pAttacker)) + { + auto *pPoison = new CGameEffect(true); + pPoison->m_nType = Constants::EffectTrueType::Poison; + pPoison->SetDurationType(Constants::EffectDurationType::Permanent); + pPoison->SetCreator(pAttacker->m_idSelf); + pPoison->SetNumIntegers(7); + pPoison->SetInteger(0, -1); // Not a poison.2da poison + pPoison->SetInteger(1, nAbility); + pPoison->SetInteger(2, 1); + pPoison->SetInteger(3, 2); + pPoison->SetInteger(4, nDC); + pPoison->SetInteger(5, 0); + pPoison->SetInteger(6, 0); + pTarget->ApplyEffect(pPoison, false, true); + } } -void Damage::HandleSignalDamage(CNWSCreature *pThis, CNWSObject *pTarget, int32_t nAttacks) +void ApplyOnHitDisease(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nDisease) { - std::string script = GetEventScript(pThis, "ATTACK"); - if ( !script.empty() ) + if (!pTarget) return; + + if (!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Disease, pAttacker)) { - // m_nCurrentAttack points to the attack *after* this flurry - uint8_t attackNumberOffset = pThis->m_pcCombatRound->m_nCurrentAttack - nAttacks; - // trigger script once per attack in the flurry - for (int32_t i = 0; i < nAttacks; i++) - OnCombatAttack(pThis, pTarget, script, attackNumberOffset + i); + auto *pDisease = new CGameEffect(true); + pDisease->m_nType = Constants::EffectTrueType::Disease; + pDisease->SetDurationType(Constants::EffectDurationType::Permanent); + pDisease->SetCreator(pAttacker->m_idSelf); + pDisease->SetNumIntegers(5); + pDisease->SetInteger(0, nDisease); + pDisease->SetInteger(1, 0); + pDisease->SetInteger(2, 0); + pDisease->SetInteger(3, 0); + pDisease->SetInteger(4, 0); + pTarget->ApplyEffect(pDisease, false, true); } } -void Damage::SignalMeleeDamageHook(CNWSCreature *pThis, CNWSObject *pTarget, int32_t nAttacks) +void SlayCreature(CNWSCreature* pAttacker, CNWSCreature* pTarget, BOOL bApplyVisualEffect = true) { - HandleSignalDamage(pThis, pTarget, nAttacks); + auto *pSlay = new CGameEffect(true); + pSlay->m_nType = Constants::EffectTrueType::Death; + pSlay->SetDurationType(Constants::EffectDurationType::Instant); + pSlay->SetCreator(pAttacker->m_idSelf); + pSlay->SetNumIntegers(2); + pSlay->SetInteger(0, 0); + pSlay->SetInteger(1, 1); + pTarget->ApplyEffect(pSlay, false, true); - g_plugin->m_SignalMeleeDamageHook->CallOriginal(pThis, pTarget, nAttacks); + if (bApplyVisualEffect) + { + auto* pVis = new CGameEffect(true); + pVis->m_nType = Constants::EffectTrueType::VisualEffect; + pVis->SetDurationType(Constants::EffectDurationType::Instant); + pVis->SetCreator(pAttacker->m_idSelf); + pVis->SetNumIntegers(3); + pVis->SetInteger(0, 50); // VFX_IMP_DEATH + pVis->SetInteger(1, 0); + pVis->SetInteger(2, 0); + pTarget->ApplyEffect(pVis, false, true); + } } -void Damage::SignalRangedDamageHook(CNWSCreature *pThis, CNWSObject *pTarget, int32_t nAttacks) +void ApplyOnHitSlayRacialGroup(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nDC, int32_t nRace) { - HandleSignalDamage(pThis, pTarget, nAttacks); + if (!pTarget) return; - g_plugin->m_SignalRangedDamageHook->CallOriginal(pThis, pTarget, nAttacks); + if ((pTarget->m_pStats->m_nRace == nRace) && + (!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Death, pAttacker)) && + (!pTarget->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDC, Constants::SavingThrowType::Death, pAttacker->m_idSelf))) + { + SlayCreature(pAttacker, pTarget); + } } -void Damage::OnCombatAttack(CNWSCreature *pThis, CNWSObject *pTarget, std::string script, uint8_t attackNumber) +void ApplyOnHitSlayAlignmentGroup(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nDC, int32_t nAlignmentGroup) { - AttackDataStr& attackData = g_plugin->m_AttackData; - CNWSCombatRound *combatRound = pThis->m_pcCombatRound; - CNWSCombatAttackData *combatAttackData = combatRound->GetAttack(attackNumber); - // Prepare the data for the nwscript - attackData.oidTarget = pTarget->m_idSelf; - attackData.nAttackNumber = attackNumber + 1; // 1-based for backwards compatibility - attackData.nAttackResult = combatAttackData->m_nAttackResult; - attackData.nWeaponAttackType = combatAttackData->m_nWeaponAttackType; - attackData.nSneakAttack = combatAttackData->m_bSneakAttack + (combatAttackData->m_bDeathAttack << 1); - attackData.bKillingBlow = combatAttackData->m_bKillingBlow; - attackData.nAttackType = combatAttackData->m_nAttackType; - attackData.nToHitRoll = combatAttackData->m_nToHitRoll; - attackData.nToHitModifier = combatAttackData->m_nToHitMod; - std::memcpy(attackData.vDamage, combatAttackData->m_nDamage, sizeof(attackData.vDamage)); - // run script, then copy back attack data - Utils::ExecuteScript(script, pThis->m_idSelf); - std::memcpy(combatAttackData->m_nDamage, attackData.vDamage, sizeof(attackData.vDamage)); - combatAttackData->m_nAttackResult = attackData.nAttackResult; + if (!pTarget) return; + + if ((CheckAlignment(pTarget, nAlignmentGroup, true)) && + (!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Death, pAttacker)) && + (!pTarget->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDC, Constants::SavingThrowType::Death, pAttacker->m_idSelf))) + { + SlayCreature(pAttacker, pTarget); + } } -//--------------------------- Dealing Damage ---------------------------------- +void ApplyOnHitSlayAlignment(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nDC, int32_t nAlignment) +{ + if (!pTarget) return; -ArgumentStack Damage::DealDamage(ArgumentStack&& args) + if ((CheckAlignment(pTarget, nAlignment)) && + (!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Death, pAttacker)) && + (!pTarget->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDC, Constants::SavingThrowType::Death, pAttacker->m_idSelf))) + { + SlayCreature(pAttacker, pTarget); + } +} + +void ApplyOnHitVorpal(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nDC) { - int vDamage[13]; - std::bitset<13> positive; + if (!pTarget) return; - // read input - auto oidSource = Events::ExtractArgument(args); - auto oidTarget = Events::ExtractArgument(args); + if ((!pTarget->m_pStats->GetEffectImmunity(Constants::ImmunityType::Death, pAttacker)) && (!pTarget->SavingThrowRoll(Constants::SavingThrow::Reflex, nDC, Constants::SavingThrowType::None, pAttacker->m_idSelf))) + { + auto *pVorpal = new CGameEffect(true); + pVorpal->m_nType = Constants::EffectTrueType::Death; + pVorpal->SetDurationType(Constants::EffectDurationType::Instant); + pVorpal->SetCreator(pAttacker->m_idSelf); + pVorpal->SetNumIntegers(2); + pVorpal->SetInteger(0, 0); + pVorpal->SetInteger(1, 1); - for (int k = 0; k < 12; k++) + pTarget->ApplyEffect(pVorpal, false, true); + } +} + +void ApplyOnHitWounding(CNWSCreature* pAttacker, CNWSCreature* pTarget, int32_t nDC) +{ + if (!pTarget) return; + + if (!pTarget->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDC, Constants::SavingThrowType::None, pAttacker->m_idSelf)) { - vDamage[k] = Events::ExtractArgument(args); - // need to distinguish between no damage dealt, and damage reduced to 0 - positive[k] = vDamage[k] > 0; + auto *pWounding = new CGameEffect(true); + pWounding->m_nType = Constants::EffectTrueType::Wounding; + pWounding->SetDurationType(Constants::EffectDurationType::Permanent); + pWounding->SetCreator(pAttacker->m_idSelf); + pWounding->SetNumIntegers(1); + pWounding->SetInteger(0, 1); + + pTarget->ApplyEffect(pWounding, false, true); } - int damagePower = Events::ExtractArgument(args); +} + +void ApplyOnHitEffects(CNWSCreature* pAttacker, CNWSItem* pWeapon, CNWSObject* pTarget, BOOL bPhysicalDamageApplied, BOOL bCrit, int32_t nMaxOnHitSpellTriggers) +{ + if (!pWeapon) return; - int range = Events::ExtractArgument(args); + CNWSCreature* pTargetCreature = nullptr; + if (pTarget->m_nObjectType == Constants::ObjectType::Creature) + pTargetCreature = Utils::AsNWSCreature(pTarget); - CNWSCreature *pSource = Globals::AppManager()->m_pServerExoApp->GetCreatureByGameObjectID(oidSource); - CNWSObject *pTarget = Utils::AsNWSObject(Globals::AppManager()->m_pServerExoApp->GetGameObject(oidTarget)); - ASSERT_OR_THROW(pTarget != nullptr); + C2DA onHitSpell2DA("iprp_onhitspell", true); + onHitSpell2DA.Load2DArray(); - // apply damage immunity and resistance - for (int k = 0; k < 12; k++) + C2DA onHitCost2DA("iprp_onhitcost", true); + onHitCost2DA.Load2DArray(); + + C2DA onHitDur2DA("iprp_onhitdur", true); + onHitDur2DA.Load2DArray(); + + auto nOnHitSpellsTriggered = 0; + for (int i = 0; i < pWeapon->m_lstPassiveProperties.num; i++) { - if ( vDamage[k] > 0 ) - vDamage[k] = pTarget->DoDamageImmunity(pSource, vDamage[k], 1 << k, false, false); - if ( vDamage[k] > 0 ) - vDamage[k] = pTarget->DoDamageResistance(pSource, vDamage[k], 1 << k, false, false, false); + auto pProp = pWeapon->GetPassiveProperty(i); + if (pProp->m_nPropertyName == Constants::ItemProperty::OnHitCastSpell) + { + auto nSpellID = 0; + if ((onHitSpell2DA.GetINTEntry(pProp->m_nSubType, "SpellIndex", &nSpellID)) && ((nOnHitSpellsTriggered < nMaxOnHitSpellTriggers) || (nMaxOnHitSpellTriggers < 0))) + { + CastOnHitSpell(pAttacker, pTarget, nSpellID, pProp->m_nCostTableValue + 1); + nOnHitSpellsTriggered++; + } + } + else if (pProp->m_nPropertyName == Constants::ItemProperty::OnHitProperties) + { + auto nOnHitDC = 0; + onHitCost2DA.GetINTEntry(pProp->m_nCostTableValue, "Value", &nOnHitDC); + + auto nOnHitChance = 0; + onHitDur2DA.GetINTEntry(pProp->m_nParam1Value, "EffectChance", &nOnHitChance); + + auto nOnHitDuration = 0.0f; + onHitDur2DA.GetFLOATEntry(pProp->m_nParam1Value, "DurationRounds", &nOnHitDuration); + nOnHitDuration = nOnHitDuration * 6.0f; + + switch(pProp->m_nSubType) + { + case 0: // Sleep + ApplyOnHitSleep(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 1: // Stun + ApplyOnHitStun(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 2: // Hold + ApplyOnHitHold(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 3: // Confusion + ApplyOnHitConfusion(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 4: // **** + break; + case 5: // Daze + ApplyOnHitDaze(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 6: // Doom + ApplyOnHitDoom(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 7: // Fear + ApplyOnHitFear(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 8: // Knock + if ((bPhysicalDamageApplied) && (pTarget->m_nObjectType == Constants::ObjectType::Placeable)) + { + auto pPlaceable = Utils::AsNWSPlaceable(pTarget); + ApplyOnHitKnock(pAttacker, pPlaceable, nOnHitDC); + } + break; + case 9: // Slow + ApplyOnHitSlow(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 10: // Lesser Dispell + CastOnHitSpell(pAttacker, pTarget, 94, nOnHitDC); + break; + case 11: // Dispel Magic + CastOnHitSpell(pAttacker, pTarget, 41, nOnHitDC); + break; + case 12: // Greater Dispel + CastOnHitSpell(pAttacker, pTarget, 67, nOnHitDC); + break; + case 13: // MordsDisjunction + CastOnHitSpell(pAttacker, pTarget, 122, nOnHitDC); + break; + case 14: // Silence + ApplyOnHitSilence(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 15: // Deafness + ApplyOnHitDeafness(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 16: // Blindness + ApplyOnHitBlindness(pAttacker, pTargetCreature, nOnHitChance, nOnHitDC, nOnHitDuration); + break; + case 17: // Level Drain + ApplyOnHitLevelDrain(pAttacker, pTargetCreature, nOnHitDC); + break; + case 18: // Ability Drain + ApplyOnHitAbilityDrain(pAttacker, pTargetCreature, nOnHitDC, pProp->m_nParam1Value); + break; + case 19: // Poison + ApplyOnHitPoison(pAttacker, pTargetCreature, nOnHitDC, pProp->m_nParam1Value); + break; + case 20: // Disease + ApplyOnHitDisease(pAttacker, pTargetCreature, pProp->m_nParam1Value); + break; + case 21: // Slay racial group + ApplyOnHitSlayRacialGroup(pAttacker, pTargetCreature, nOnHitDC, pProp->m_nParam1Value); + break; + case 22: // Slay alignment group + ApplyOnHitSlayAlignmentGroup(pAttacker, pTargetCreature, nOnHitDC, pProp->m_nParam1Value); + break; + case 23: // Slay alignment + ApplyOnHitSlayAlignment(pAttacker, pTargetCreature, nOnHitDC, pProp->m_nParam1Value); + break; + case 24: // Vorpal + if (bCrit && bPhysicalDamageApplied) ApplyOnHitVorpal(pAttacker, pTargetCreature, nOnHitDC); + break; + case 25: // Wounding + ApplyOnHitWounding(pAttacker, pTargetCreature, nOnHitDC); + break; + } + } } - // apply DR (combine physical damage for this) - vDamage[12] = vDamage[0] + vDamage[1] + vDamage[2]; - positive[12] = positive[0] || positive[1] || positive[2]; - if (vDamage[12] > 0) - vDamage[12] = pTarget->DoDamageReduction(pSource, vDamage[12], damagePower, false, false); +} - // create damage effect ... - auto *pEffect = new CGameEffect(true); - pEffect->m_nType = 38; - pEffect->SetCreator(oidSource); - pEffect->SetNumIntegers(19); - for (int k = 0; k < 3; k++) - pEffect->SetInteger(k, -1); - for (int k = 3; k < 13; k++) - pEffect->SetInteger(k, positive[k] ? vDamage[k] : -1); - pEffect->SetInteger(17, true); // combat damage - // ... and apply it +void DoAllDamageReductions(CNWSCreature* pAttacker, CNWSItem* pWeapon, BOOL bOffhand, CNWSObject* pTarget, int32_t vDamage[MAX_DAMAGE_TYPES]) +{ + // Apply immunities/resistances + for (int i = 0; i < MAX_DAMAGE_TYPES; i++) + { + if (i == 12) continue; // Skip Base damage type - //Check if ranged (this sets bRangedAttack internally) - pEffect->SetInteger(18, !!range); + if (vDamage[i] > 0) vDamage[i] = pTarget->DoDamageImmunity(pAttacker, vDamage[i], 1 << i, false, false); + if (vDamage[i] > 0) vDamage[i] = pTarget->DoDamageResistance(pAttacker, vDamage[i], 1 << i, false, false, false); + } - pTarget->ApplyEffect(pEffect, false, true); + // Get weapon power for damage reduction + int32_t nWeaponPower; + if (pAttacker->GetUnarmed()) + nWeaponPower = GetUnarmedWeaponPower(pAttacker, pWeapon); + else + nWeaponPower = pAttacker->GetWeaponPower(pTarget, bOffhand); - return Events::Arguments(); + // Set base damage and do damage reduction + vDamage[12] = std::max(vDamage[0], std::max(vDamage[1], vDamage[2])); + vDamage[12] = pTarget->DoDamageReduction(pAttacker, vDamage[12], nWeaponPower, false, false); } +NWNX_EXPORT ArgumentStack DealMeleeDamage(ArgumentStack&& args) +{ + int32_t result = 0; // something went wrong + + const auto oidTarget = Events::ExtractArgument(args); + const auto oidAttacker = Events::ExtractArgument(args); + const auto fDamageMultiplier = args.extract(); + const auto bOffhand = args.extract(); + const auto nCritMode = args.extract(); + const auto nSneakMode = args.extract(); + const auto bDoOnHitEffects = args.extract(); + const auto bRollMaxDamage = args.extract(); + const auto nMaxOnHitSpellTriggers = args.extract(); + const auto bSkipDevCritEffect = args.extract(); + + auto *pAttacker = Utils::AsNWSCreature(Utils::GetGameObject(oidAttacker)); + if (auto *pTarget = Utils::AsNWSObject(Utils::GetGameObject(oidTarget))) + { + int32_t vDamage[MAX_DAMAGE_TYPES]; + memset(vDamage, 0xFF, sizeof(vDamage)); + + CNWSCreature* pTargetCreature = nullptr; + if (pTarget->m_nObjectType == Constants::ObjectType::Creature) + pTargetCreature = Utils::AsNWSCreature(pTarget); + + // Load needed 2DAs + C2DA damageCost2DA("iprp_damagecost", true); + damageCost2DA.Load2DArray(); + + auto bSneak = CheckSneakAttack(pAttacker, pTargetCreature, nSneakMode); + + // Check for crit + auto bCrit = CheckCrit(pAttacker, pTarget, nCritMode, bOffhand); + auto nCritMultiplier = bCrit ? pAttacker->m_pStats->GetCriticalHitMultiplier(bOffhand) : 1; + + result = bCrit ? 3 : 1; // Crit or normal hit + + // Get attack weapon + auto pWeapon = GetAttackWeapon(pAttacker, bOffhand); + + // Check for devastating crit + if ((bCrit) && (pTargetCreature) && (pAttacker->m_pStats->GetEpicWeaponDevastatingCritical(pWeapon))) + { + auto nDevCritDC = Globals::Rules()->GetRulesetIntEntry("DEVASTATING_CRITICAL_BASE_DC", 10) + (pAttacker->m_pStats->GetLevel(true) / 2) + pAttacker->m_pStats->GetAbilityMod(Constants::Ability::Strength); + if (!pTargetCreature->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDevCritDC, Constants::SavingThrowType::None, oidAttacker)) + { + result = 10; // Dev Crit + if (!bSkipDevCritEffect) + { + SlayCreature(pAttacker, pTargetCreature, false); + return result; + } + } + } + + // Get total physical damage + ApplyPhysicalWeaponDamage(pAttacker, pWeapon, pTarget, bCrit, bSneak, nCritMultiplier, bRollMaxDamage, &damageCost2DA, vDamage); + + // Elemental weapon damage + ApplyElementalWeaponDamage(pWeapon, pTargetCreature, nCritMultiplier, bRollMaxDamage, &damageCost2DA, vDamage); + + // Elemental effect damage increases/decreases + AddElementalDamageModifiers(pAttacker, pTargetCreature, nCritMultiplier, bRollMaxDamage, &damageCost2DA, vDamage, Constants::EffectTrueType::DamageIncrease); + AddElementalDamageModifiers(pAttacker, pTargetCreature, nCritMultiplier, bRollMaxDamage, &damageCost2DA, vDamage, Constants::EffectTrueType::DamageDecrease); + + // Scale damage according to the fDamageMultiplier argument + for (int i=0; i < MAX_DAMAGE_TYPES; i++) + { + if (vDamage[i] > 0) + vDamage[i] = (int32_t)(fDamageMultiplier * vDamage[i]); + } + + // Damage resistance, immunity and reductions + DoAllDamageReductions(pAttacker, pWeapon, bOffhand, pTarget, vDamage); + + // Apply damage + auto *pEffect = new CGameEffect(true); + pEffect->m_nType = Constants::EffectTrueType::Damage; + pEffect->SetCreator(oidAttacker); + pEffect->SetNumIntegers(MAX_DAMAGE_TYPES + 7); + for (int k = 0; k < 3; k++) + pEffect->SetInteger(k, -1); + for (int k = 3; k < MAX_DAMAGE_TYPES; k++) + pEffect->SetInteger(k, vDamage[k]); + pEffect->SetInteger(MAX_DAMAGE_TYPES + 1, 1000); // Animation Time + pEffect->SetInteger(MAX_DAMAGE_TYPES + 4, true); // Combat damage + pEffect->SetInteger(MAX_DAMAGE_TYPES + 5, false); // Check if ranged (this sets bRangedAttack internally) + pTarget->ApplyEffect(pEffect, false, true); + + // Death Attack + if ((bSneak) && (pTargetCreature) && (pAttacker->m_pStats->HasFeat(Constants::Feat::PrestigeDeathAttack1))) + { + auto nAssassinLevel = pAttacker->m_pStats->GetNumLevelsOfClass(Constants::ClassType::Assassin); + auto nDeathAttackDC = Globals::Rules()->GetRulesetIntEntry("DEATH_ATTACK_BASE_SAVE_DC", 10) + pAttacker->m_pStats->GetAbilityMod(Constants::Ability::Intelligence) + nAssassinLevel; + if ((!pTargetCreature->m_bCombatState) && (!pTargetCreature->m_pStats->GetEffectImmunity(Constants::ImmunityType::Paralysis, pAttacker)) && + (!pTargetCreature->SavingThrowRoll(Constants::SavingThrow::Fortitude, nDeathAttackDC, Constants::SavingThrowType::Paralysis, pAttacker->m_idSelf))) + { + ApplyStateEffect(pAttacker, pTarget, 82, Constants::EffectDurationType::Temporary, 8, nAssassinLevel * 6.0f, 1, true); + } + } + + // Apply OnHit effects + if (bDoOnHitEffects) + ApplyOnHitEffects(pAttacker, pWeapon, pTarget, vDamage[12] > 0, bCrit, nMaxOnHitSpellTriggers); + } + + return result; } diff --git a/Plugins/Damage/Damage.hpp b/Plugins/Damage/Damage.hpp deleted file mode 100644 index 158a80d8c3e..00000000000 --- a/Plugins/Damage/Damage.hpp +++ /dev/null @@ -1,61 +0,0 @@ -#pragma once - -#include "nwnx.hpp" -using ArgumentStack = NWNXLib::Events::ArgumentStack; - -struct DamageDataStr -{ - uint32_t oidDamager; - int32_t vDamage[13]; -}; - -struct AttackDataStr -{ - uint32_t oidTarget; - int16_t vDamage[13]; - uint8_t nAttackNumber; - uint8_t nAttackResult; - uint8_t nWeaponAttackType; - uint8_t nSneakAttack; - uint8_t bRanged; - int32_t bKillingBlow; - uint16_t nAttackType; - uint8_t nToHitRoll; - int32_t nToHitModifier; -}; - -namespace Damage { - -class Damage : public NWNXLib::Plugin -{ -public: - Damage(NWNXLib::Services::ProxyServiceList* services); - virtual ~Damage(); - -private: - ArgumentStack SetEventScript(ArgumentStack&& args); - ArgumentStack GetDamageEventData(ArgumentStack&& args); - ArgumentStack SetDamageEventData(ArgumentStack&& args); - ArgumentStack GetAttackEventData(ArgumentStack&& args); - ArgumentStack SetAttackEventData(ArgumentStack&& args); - ArgumentStack DealDamage(ArgumentStack&& args); - - NWNXLib::Hooks::Hook m_OnApplyDamageHook; - NWNXLib::Hooks::Hook m_SignalMeleeDamageHook; - NWNXLib::Hooks::Hook m_SignalRangedDamageHook; - - static int32_t OnApplyDamage(CNWSEffectListHandler *pThis, CNWSObject *pObject, CGameEffect *pEffect, BOOL bLoadingGame); - static void HandleSignalDamage(CNWSCreature *pThis, CNWSObject *pTarget, int32_t nAttacks); - static void SignalMeleeDamageHook(CNWSCreature *pThis, CNWSObject *pTarget, int32_t nAttacks); - static void SignalRangedDamageHook(CNWSCreature *pThis, CNWSObject *pTarget, int32_t nAttacks); - static void OnCombatAttack(CNWSCreature *pThis, CNWSObject *pTarget, std::string script, uint8_t attackNumber); - - static std::string GetEventScript(CNWSObject *pObject, const std::string &event); - - std::unordered_map m_EventScripts; - - DamageDataStr m_DamageData; - AttackDataStr m_AttackData; -}; - -} diff --git a/Plugins/Damage/NWScript/nwnx_damage.nss b/Plugins/Damage/NWScript/nwnx_damage.nss index 38ed3c5ce6f..c4cc9581744 100644 --- a/Plugins/Damage/NWScript/nwnx_damage.nss +++ b/Plugins/Damage/NWScript/nwnx_damage.nss @@ -24,6 +24,25 @@ struct NWNX_Damage_DamageEventData int iPositive; ///< Positive damage int iSonic; ///< Sonic damage int iBase; ///< Base damage + int iCustom1; ///< Custom1 damage + int iCustom2; ///< Custom2 damage + int iCustom3; ///< Custom3 damage + int iCustom4; ///< Custom4 damage + int iCustom5; ///< Custom5 damage + int iCustom6; ///< Custom6 damage + int iCustom7; ///< Custom7 damage + int iCustom8; ///< Custom8 damage + int iCustom9; ///< Custom9 damage + int iCustom10; ///< Custom10 damage + int iCustom11; ///< Custom11 damage + int iCustom12; ///< Custom12 damage + int iCustom13; ///< Custom13 damage + int iCustom14; ///< Custom14 damage + int iCustom15; ///< Custom15 damage + int iCustom16; ///< Custom16 damage + int iCustom17; ///< Custom17 damage + int iCustom18; ///< Custom18 damage + int iCustom19; ///< Custom19 damage }; /// @struct NWNX_Damage_AttackEventData @@ -44,6 +63,25 @@ struct NWNX_Damage_AttackEventData int iPositive; ///< Positive damage int iSonic; ///< Sonic damage int iBase; ///< Base damage + int iCustom1; ///< Custom1 damage + int iCustom2; ///< Custom2 damage + int iCustom3; ///< Custom3 damage + int iCustom4; ///< Custom4 damage + int iCustom5; ///< Custom5 damage + int iCustom6; ///< Custom6 damage + int iCustom7; ///< Custom7 damage + int iCustom8; ///< Custom8 damage + int iCustom9; ///< Custom9 damage + int iCustom10; ///< Custom10 damage + int iCustom11; ///< Custom11 damage + int iCustom12; ///< Custom12 damage + int iCustom13; ///< Custom13 damage + int iCustom14; ///< Custom14 damage + int iCustom15; ///< Custom15 damage + int iCustom16; ///< Custom16 damage + int iCustom17; ///< Custom17 damage + int iCustom18; ///< Custom18 damage + int iCustom19; ///< Custom19 damage int iAttackNumber; ///< 1-based index of the attack in current combat round int iAttackResult; ///< 1=hit, 2=parried, 3=critical hit, 4=miss, 5=resisted, 7=automatic hit, 8=concealed, 9=miss chance, 10=devastating crit int iWeaponAttackType; ///< 1=main hand, 2=offhand, 3-5=creature, 6=extra(haste), 7=unarmed, 8=unarmed extra @@ -70,13 +108,52 @@ struct NWNX_Damage_DamageData int iNegative; ///< Negative damage int iPositive; ///< Positive damage int iSonic; ///< Sonic damage + int iCustom1; ///< Custom1 damage + int iCustom2; ///< Custom2 damage + int iCustom3; ///< Custom3 damage + int iCustom4; ///< Custom4 damage + int iCustom5; ///< Custom5 damage + int iCustom6; ///< Custom6 damage + int iCustom7; ///< Custom7 damage + int iCustom8; ///< Custom8 damage + int iCustom9; ///< Custom9 damage + int iCustom10; ///< Custom10 damage + int iCustom11; ///< Custom11 damage + int iCustom12; ///< Custom12 damage + int iCustom13; ///< Custom13 damage + int iCustom14; ///< Custom14 damage + int iCustom15; ///< Custom15 damage + int iCustom16; ///< Custom16 damage + int iCustom17; ///< Custom17 damage + int iCustom18; ///< Custom18 damage + int iCustom19; ///< Custom19 damage int iPower; ///< For overcoming DR }; +/// @name Critical Hit Modes +/// @anchor crit_modes +/// +/// Used with NWNX_Damage_DealMeleeDamage() +/// @{ +const int NWNX_DAMAGE_CRIT_MODE_DONT = 0; +const int NWNX_DAMAGE_CRIT_MODE_ROLL = 1; +const int NWNX_DAMAGE_CRIT_MODE_CRIT = 2; +/// @} + +/// @name Sneak Modes +/// @anchor sneak_modes +/// +/// Used with NWNX_Damage_DealMeleeDamage() +/// @{ +const int NWNX_DAMAGE_SNEAK_MODE_DONT = 0; +const int NWNX_DAMAGE_SNEAK_MODE_CHECK = 1; +const int NWNX_DAMAGE_SNEAK_MODE_DO = 2; +/// @} + /// @brief Sets the script to run with a damage event. /// @param sScript The script that will handle the damage event. /// @param oOwner An object if only executing for a specific object or OBJECT_INVALID for global. -void NWNX_Damage_SetDamageEventScript(string sScript, object oOwner=OBJECT_INVALID); +void NWNX_Damage_SetDamageEventScript(string sScript, object oOwner = OBJECT_INVALID); /// @brief Get Damage Event Data /// @return A NWNX_Damage_DamageEventData struct. @@ -91,7 +168,7 @@ void NWNX_Damage_SetDamageEventData(struct NWNX_Damage_DamageEventData data); /// @brief Sets the script to run with an attack event. /// @param sScript The script that will handle the attack event. /// @param oOwner An object if only executing for a specific object or OBJECT_INVALID for global. -void NWNX_Damage_SetAttackEventScript(string sScript, object oOwner=OBJECT_INVALID); +void NWNX_Damage_SetAttackEventScript(string sScript, object oOwner = OBJECT_INVALID); /// @brief Get Attack Event Data /// @return A NWNX_Damage_AttackEventData struct. @@ -109,7 +186,21 @@ void NWNX_Damage_SetAttackEventData(struct NWNX_Damage_AttackEventData data); /// @param oTarget The target object on whom the damage is dealt. /// @param oSource The source of the damage. /// @param iRanged Whether the attack should be treated as ranged by the engine (for example when considering damage inflicted by Acid Sheath and other such effects) -void NWNX_Damage_DealDamage(struct NWNX_Damage_DamageData data, object oTarget, object oSource=OBJECT_SELF, int iRanged = FALSE); +void NWNX_Damage_DealDamage(struct NWNX_Damage_DamageData data, object oTarget, object oSource = OBJECT_SELF, int iRanged = FALSE); + +/// @brief Deals melee hit damage to a target +/// @param oTarget The target receiving melee damage +/// @param oAttacker The creature dealing melee damage +/// @param fDamageMultiplier Damage multiplier to apply to the final damage (before resistances/immunities/reductions) +/// @param bOffhand false = use mainhand weapon, true = use offhand weapon +/// @param nCritMode A @ref crit_modes "Crit Mode" deciding whether or not to deal critical damage +/// @param nSneakAttackMode A @ref sneak_modes "Sneak Mode" deciding whether or not to deal sneak attack damage +/// @param bDoOnHitEffects Apply OnHit effects? +/// @param bRollMaxDamage Roll maximum possible damage? +/// @param nMaxOnHitSpellTriggers By default only 1 "On Hit Cast Spell" property will be triggered by the engine. -1 to trigger all +/// @param bSkipDevastatingCritEffect Don't kill the target on a devastating critical hit +/// @return 0 = failed, 1 = dealt normal damage, 3 = dealt critical damage, 10 = successful devastating critical hit +int NWNX_Damage_DealMeleeDamage(object oTarget, object oAttacker = OBJECT_SELF, float fDamageMultiplier = 1.0f, int bOffhand = FALSE, int nCritMode = NWNX_DAMAGE_CRIT_MODE_DONT, int nSneakAttackMode = NWNX_DAMAGE_SNEAK_MODE_DONT, int bDoOnHitEffects = FALSE, int bRollMaxDamage = FALSE, int nMaxOnHitSpellTriggers = 1, int bSkipDevastatingCritEffect = FALSE); /// @} @@ -145,6 +236,25 @@ struct NWNX_Damage_DamageEventData NWNX_Damage_GetDamageEventData() data.iPositive = NWNX_GetReturnValueInt(); data.iSonic = NWNX_GetReturnValueInt(); data.iBase = NWNX_GetReturnValueInt(); + data.iCustom1 = NWNX_GetReturnValueInt(); + data.iCustom2 = NWNX_GetReturnValueInt(); + data.iCustom3 = NWNX_GetReturnValueInt(); + data.iCustom4 = NWNX_GetReturnValueInt(); + data.iCustom5 = NWNX_GetReturnValueInt(); + data.iCustom6 = NWNX_GetReturnValueInt(); + data.iCustom7 = NWNX_GetReturnValueInt(); + data.iCustom8 = NWNX_GetReturnValueInt(); + data.iCustom9 = NWNX_GetReturnValueInt(); + data.iCustom10 = NWNX_GetReturnValueInt(); + data.iCustom11 = NWNX_GetReturnValueInt(); + data.iCustom12 = NWNX_GetReturnValueInt(); + data.iCustom13 = NWNX_GetReturnValueInt(); + data.iCustom14 = NWNX_GetReturnValueInt(); + data.iCustom15 = NWNX_GetReturnValueInt(); + data.iCustom16 = NWNX_GetReturnValueInt(); + data.iCustom17 = NWNX_GetReturnValueInt(); + data.iCustom18 = NWNX_GetReturnValueInt(); + data.iCustom19 = NWNX_GetReturnValueInt(); return data; } @@ -153,6 +263,25 @@ void NWNX_Damage_SetDamageEventData(struct NWNX_Damage_DamageEventData data) { string sFunc = "SetDamageEventData"; + NWNX_PushArgumentInt(data.iCustom19); + NWNX_PushArgumentInt(data.iCustom18); + NWNX_PushArgumentInt(data.iCustom17); + NWNX_PushArgumentInt(data.iCustom16); + NWNX_PushArgumentInt(data.iCustom15); + NWNX_PushArgumentInt(data.iCustom14); + NWNX_PushArgumentInt(data.iCustom13); + NWNX_PushArgumentInt(data.iCustom12); + NWNX_PushArgumentInt(data.iCustom11); + NWNX_PushArgumentInt(data.iCustom10); + NWNX_PushArgumentInt(data.iCustom9); + NWNX_PushArgumentInt(data.iCustom8); + NWNX_PushArgumentInt(data.iCustom7); + NWNX_PushArgumentInt(data.iCustom6); + NWNX_PushArgumentInt(data.iCustom5); + NWNX_PushArgumentInt(data.iCustom4); + NWNX_PushArgumentInt(data.iCustom3); + NWNX_PushArgumentInt(data.iCustom2); + NWNX_PushArgumentInt(data.iCustom1); NWNX_PushArgumentInt(data.iBase); NWNX_PushArgumentInt(data.iSonic); NWNX_PushArgumentInt(data.iPositive); @@ -202,6 +331,25 @@ struct NWNX_Damage_AttackEventData NWNX_Damage_GetAttackEventData() data.iPositive = NWNX_GetReturnValueInt(); data.iSonic = NWNX_GetReturnValueInt(); data.iBase = NWNX_GetReturnValueInt(); + data.iCustom1 = NWNX_GetReturnValueInt(); + data.iCustom2 = NWNX_GetReturnValueInt(); + data.iCustom3 = NWNX_GetReturnValueInt(); + data.iCustom4 = NWNX_GetReturnValueInt(); + data.iCustom5 = NWNX_GetReturnValueInt(); + data.iCustom6 = NWNX_GetReturnValueInt(); + data.iCustom7 = NWNX_GetReturnValueInt(); + data.iCustom8 = NWNX_GetReturnValueInt(); + data.iCustom9 = NWNX_GetReturnValueInt(); + data.iCustom10 = NWNX_GetReturnValueInt(); + data.iCustom11 = NWNX_GetReturnValueInt(); + data.iCustom12 = NWNX_GetReturnValueInt(); + data.iCustom13 = NWNX_GetReturnValueInt(); + data.iCustom14 = NWNX_GetReturnValueInt(); + data.iCustom15 = NWNX_GetReturnValueInt(); + data.iCustom16 = NWNX_GetReturnValueInt(); + data.iCustom17 = NWNX_GetReturnValueInt(); + data.iCustom18 = NWNX_GetReturnValueInt(); + data.iCustom19 = NWNX_GetReturnValueInt(); data.iAttackNumber = NWNX_GetReturnValueInt(); data.iAttackResult = NWNX_GetReturnValueInt(); data.iWeaponAttackType = NWNX_GetReturnValueInt(); @@ -219,6 +367,25 @@ void NWNX_Damage_SetAttackEventData(struct NWNX_Damage_AttackEventData data) string sFunc = "SetAttackEventData"; NWNX_PushArgumentInt(data.iAttackResult); + NWNX_PushArgumentInt(data.iCustom19); + NWNX_PushArgumentInt(data.iCustom18); + NWNX_PushArgumentInt(data.iCustom17); + NWNX_PushArgumentInt(data.iCustom16); + NWNX_PushArgumentInt(data.iCustom15); + NWNX_PushArgumentInt(data.iCustom14); + NWNX_PushArgumentInt(data.iCustom13); + NWNX_PushArgumentInt(data.iCustom12); + NWNX_PushArgumentInt(data.iCustom11); + NWNX_PushArgumentInt(data.iCustom10); + NWNX_PushArgumentInt(data.iCustom9); + NWNX_PushArgumentInt(data.iCustom8); + NWNX_PushArgumentInt(data.iCustom7); + NWNX_PushArgumentInt(data.iCustom6); + NWNX_PushArgumentInt(data.iCustom5); + NWNX_PushArgumentInt(data.iCustom4); + NWNX_PushArgumentInt(data.iCustom3); + NWNX_PushArgumentInt(data.iCustom2); + NWNX_PushArgumentInt(data.iCustom1); NWNX_PushArgumentInt(data.iBase); NWNX_PushArgumentInt(data.iSonic); NWNX_PushArgumentInt(data.iPositive); @@ -242,6 +409,26 @@ void NWNX_Damage_DealDamage(struct NWNX_Damage_DamageData data, object oTarget, NWNX_PushArgumentInt(iRanged); NWNX_PushArgumentInt(data.iPower); + NWNX_PushArgumentInt(data.iCustom19); + NWNX_PushArgumentInt(data.iCustom18); + NWNX_PushArgumentInt(data.iCustom17); + NWNX_PushArgumentInt(data.iCustom16); + NWNX_PushArgumentInt(data.iCustom15); + NWNX_PushArgumentInt(data.iCustom14); + NWNX_PushArgumentInt(data.iCustom13); + NWNX_PushArgumentInt(data.iCustom12); + NWNX_PushArgumentInt(data.iCustom11); + NWNX_PushArgumentInt(data.iCustom10); + NWNX_PushArgumentInt(data.iCustom9); + NWNX_PushArgumentInt(data.iCustom8); + NWNX_PushArgumentInt(data.iCustom7); + NWNX_PushArgumentInt(data.iCustom6); + NWNX_PushArgumentInt(data.iCustom5); + NWNX_PushArgumentInt(data.iCustom4); + NWNX_PushArgumentInt(data.iCustom3); + NWNX_PushArgumentInt(data.iCustom2); + NWNX_PushArgumentInt(data.iCustom1); + NWNX_PushArgumentInt(0);// Padding for Base Damage NWNX_PushArgumentInt(data.iSonic); NWNX_PushArgumentInt(data.iPositive); NWNX_PushArgumentInt(data.iNegative); @@ -259,3 +446,23 @@ void NWNX_Damage_DealDamage(struct NWNX_Damage_DamageData data, object oTarget, NWNX_CallFunction(NWNX_Damage, sFunc); } + +int NWNX_Damage_DealMeleeDamage(object oTarget, object oAttacker = OBJECT_SELF, float fDamageMultiplier = 1.0f, int bOffhand = FALSE, int nCritMode = NWNX_DAMAGE_CRIT_MODE_DONT, int nSneakAttackMode = NWNX_DAMAGE_SNEAK_MODE_DONT, int bDoOnHitEffects = FALSE, int bRollMaxDamage = FALSE, int nMaxOnHitSpellTriggers = 1, int bSkipDevastatingCritEffect = FALSE) +{ + string sFunc = "DealMeleeDamage"; + + NWNX_PushArgumentInt(bSkipDevastatingCritEffect); + NWNX_PushArgumentInt(nMaxOnHitSpellTriggers); + NWNX_PushArgumentInt(bRollMaxDamage); + NWNX_PushArgumentInt(bDoOnHitEffects); + NWNX_PushArgumentInt(nSneakAttackMode); + NWNX_PushArgumentInt(nCritMode); + NWNX_PushArgumentInt(bOffhand); + NWNX_PushArgumentFloat(fDamageMultiplier); + NWNX_PushArgumentObject(oAttacker); + NWNX_PushArgumentObject(oTarget); + + NWNX_CallFunction(NWNX_Damage, sFunc); + + return NWNX_GetReturnValueInt(); +} diff --git a/Plugins/Diagnostics/MemorySanitizer.cpp b/Plugins/Diagnostics/MemorySanitizer.cpp index 0afc1022b20..ea531ab2c01 100644 --- a/Plugins/Diagnostics/MemorySanitizer.cpp +++ b/Plugins/Diagnostics/MemorySanitizer.cpp @@ -1,6 +1,7 @@ #include "nwnx.hpp" #include "API/Functions.hpp" +#include "API/CServerExoAppInternal.hpp" #include #include #include @@ -52,8 +53,8 @@ void MemorySanitizer() LOG_WARNING("Please see Diagnostics/README.md for instructions"); return; } - static Hooks::Hook pMainLoopHook = Hooks::HookFunction(Functions::_ZN21CServerExoAppInternal8MainLoopEv, - (void*)+[](CServerExoAppInternal *pServerExoAppInternal) -> int32_t + static Hooks::Hook pMainLoopHook = Hooks::HookFunction(&CServerExoAppInternal::MainLoop, + +[](CServerExoAppInternal *pServerExoAppInternal) -> int32_t { auto retVal = pMainLoopHook->CallOriginal(pServerExoAppInternal); FreePending(); @@ -83,15 +84,8 @@ static void ReportError(void *ptr) std::strncat(buffer, "\n Allocation backtrace:\n", sizeof(buffer)-1); for (int i = 0; i < 8; ++i) { - uintptr_t addr, addr2; - char backtraceBuffer[2048] = ""; - char path[64]; + char backtraceBuffer[2048]; std::snprintf(backtraceBuffer, sizeof(backtraceBuffer), " %s\n", resolvedFrames[i]); - if (std::sscanf(backtraceBuffer, " %63[^(](+%lx) [%lx]", path, &addr, &addr2) == 3) - { - std::snprintf(backtraceBuffer, sizeof(backtraceBuffer), - " %s(%s) [0x%lx]\n", path, Platform::ResolveAddress(addr).c_str(), addr2); - } std::strncat(buffer, backtraceBuffer, sizeof(buffer)-1); } std::puts(buffer); @@ -225,7 +219,7 @@ static void FreePending() { MetaFunction mf; std::lock_guard guard(lock); - + for (auto* ptr : pending_free) { size_t size = CheckFence(ptr); diff --git a/Plugins/Dialog/Dialog.cpp b/Plugins/Dialog/Dialog.cpp index 9a6271af750..66c87b2a1de 100644 --- a/Plugins/Dialog/Dialog.cpp +++ b/Plugins/Dialog/Dialog.cpp @@ -57,26 +57,26 @@ static int32_t CheckScript(CNWSDialog*, CNWSObject*, const CResRef*, const CExoA static void RunScript(CNWSDialog*, CNWSObject*, const CResRef*, const CExoArrayList&); static Hooks::Hook s_GetStartEntryHook = Hooks::HookFunction( - Functions::_ZN10CNWSDialog13GetStartEntryEP10CNWSObject, - (void*)&GetStartEntry, Hooks::Order::Early); + &CNWSDialog::GetStartEntry, + &GetStartEntry, Hooks::Order::Early); static Hooks::Hook s_GetStartEntryOneLinerHook = Hooks::HookFunction( - Functions::_ZN10CNWSDialog21GetStartEntryOneLinerEP10CNWSObjectR13CExoLocStringR7CResRefS5_R13CExoArrayListI11ScriptParamE, - (void*)&GetStartEntryOneLiner, Hooks::Order::Early); + &CNWSDialog::GetStartEntryOneLiner, + &GetStartEntryOneLiner, Hooks::Order::Early); static Hooks::Hook s_SendDialogEntryHook = Hooks::HookFunction( - Functions::_ZN10CNWSDialog15SendDialogEntryEP10CNWSObjectjji, - (void*)&SendDialogEntry, Hooks::Order::Early); + &CNWSDialog::SendDialogEntry, + &SendDialogEntry, Hooks::Order::Early); static Hooks::Hook s_SendDialogRepliesHook = Hooks::HookFunction( - Functions::_ZN10CNWSDialog17SendDialogRepliesEP10CNWSObjectj, - (void*)&SendDialogReplies, Hooks::Order::Early); + &CNWSDialog::SendDialogReplies, + &SendDialogReplies, Hooks::Order::Early); static Hooks::Hook s_HandleReplyHook = Hooks::HookFunction( - Functions::_ZN10CNWSDialog11HandleReplyEjP10CNWSObjectjij, - (void*)&HandleReply, Hooks::Order::Early); + &CNWSDialog::HandleReply, + &HandleReply, Hooks::Order::Early); static Hooks::Hook s_CheckScriptHook = Hooks::HookFunction( - Functions::_ZN10CNWSDialog11CheckScriptEP10CNWSObjectRK7CResRefRK13CExoArrayListI11ScriptParamE, - (void*)&CheckScript, Hooks::Order::Early); + &CNWSDialog::CheckScript, + &CheckScript, Hooks::Order::Early); static Hooks::Hook s_RunScriptHook = Hooks::HookFunction( - Functions::_ZN10CNWSDialog9RunScriptEP10CNWSObjectRK7CResRefRK13CExoArrayListI11ScriptParamE, - (void*)&RunScript, Hooks::Order::Early); + &CNWSDialog::RunScript, + &RunScript, Hooks::Order::Early); static uint32_t GetStartEntry(CNWSDialog *pThis, CNWSObject *pNWSObjectOwner) { diff --git a/Plugins/DotNET/DotNETExports.cpp b/Plugins/DotNET/DotNETExports.cpp index 3cc05e11e7f..71795071d7b 100644 --- a/Plugins/DotNET/DotNETExports.cpp +++ b/Plugins/DotNET/DotNETExports.cpp @@ -4,6 +4,7 @@ #include "API/CAppManager.hpp" #include "API/CServerAIMaster.hpp" #include "API/CServerExoApp.hpp" +#include "API/CServerExoAppInternal.hpp" #include "API/CVirtualMachine.hpp" #include "API/CNWVirtualMachineCommands.hpp" #include "API/CWorldTimer.hpp" @@ -71,8 +72,8 @@ static void RegisterHandlers(AllHandlers* handlers, unsigned size) if (s_handlers.MainLoop) { LOG_DEBUG("Registered main loop handler: %p", s_handlers.MainLoop); - MainLoopHook = Hooks::HookFunction(Functions::_ZN21CServerExoAppInternal8MainLoopEv, - (void*)+[](CServerExoAppInternal* pServerExoAppInternal) -> int32_t + MainLoopHook = Hooks::HookFunction(&CServerExoAppInternal::MainLoop, + +[](CServerExoAppInternal* pServerExoAppInternal) -> int32_t { static uint64_t frame = 0; if (s_handlers.MainLoop) @@ -94,8 +95,8 @@ static void RegisterHandlers(AllHandlers* handlers, unsigned size) if (s_handlers.RunScript) { LOG_DEBUG("Registered runscript handler: %p", s_handlers.RunScript); - RunScriptHook = Hooks::HookFunction(Functions::_ZN15CVirtualMachine9RunScriptEP10CExoStringjii, - (void*)+[](CVirtualMachine* thisPtr, CExoString* script, ObjectID objId, int32_t valid, + RunScriptHook = Hooks::HookFunction(&CVirtualMachine::RunScript, + +[](CVirtualMachine* thisPtr, CExoString* script, ObjectID objId, int32_t valid, int32_t eventId) -> int32_t { if (!script || *script == "") @@ -124,8 +125,8 @@ static void RegisterHandlers(AllHandlers* handlers, unsigned size) if (s_handlers.Closure) { LOG_DEBUG("Registered closure handler: %p", s_handlers.Closure); - RunScriptSituationHook = Hooks::HookFunction(Functions::_ZN15CVirtualMachine18RunScriptSituationEPvji, - (void*)+[](CVirtualMachine* thisPtr, CVirtualMachineScript* script, ObjectID objId, + RunScriptSituationHook = Hooks::HookFunction(&CVirtualMachine::RunScriptSituation, + +[](CVirtualMachine* thisPtr, CVirtualMachineScript* script, ObjectID objId, int32_t valid) -> int32_t { uint64_t eventId; @@ -570,12 +571,49 @@ static void NWNXCallFunction() Events::Call(s_nwnxActivePlugin, s_nwnxActiveFunction); } -static NWNXLib::API::Globals::NWNXExportedGlobals GetNWNXExportedGlobals() -{ - return NWNXLib::API::Globals::ExportedGlobals; -} - -static void* RequestHook(uintptr_t address, void* managedFuncPtr, int32_t order) +static struct NWNXExportedGlobals +{ + CExoString *psBuildNumber; + CExoString *psBuildRevision; + CExoBase *pExoBase; + CExoResMan *pExoResMan; + CVirtualMachine *pVirtualMachine; + CScriptCompiler *pScriptCompiler; + CAppManager *pAppManager; + CTlkTable *pTlkTable; + CNWRules *pRules; + Task::CExoTaskManager *pExoTaskManager; + int32_t *pbEnableCombatDebugging; + int32_t *pbEnableSavingThrowDebugging; + int32_t *pbEnableMovementSpeedDebugging; + int32_t *pbEnableHitDieDebugging; + int32_t *pbExitProgram; +} ExportedGlobals; +static NWNXExportedGlobals GetNWNXExportedGlobals() +{ + if (ExportedGlobals.psBuildNumber == nullptr) + { + ExportedGlobals.psBuildNumber = Globals::BuildNumber(); + ExportedGlobals.psBuildRevision = Globals::BuildRevision(); + ExportedGlobals.pExoBase = Globals::ExoBase(); + ExportedGlobals.pExoResMan = Globals::ExoResMan(); + ExportedGlobals.pVirtualMachine = Globals::VirtualMachine(); + ExportedGlobals.pScriptCompiler = Globals::ScriptCompiler(); + ExportedGlobals.pAppManager = Globals::AppManager(); + ExportedGlobals.pTlkTable = Globals::TlkTable(); + ExportedGlobals.pRules = Globals::Rules(); + ExportedGlobals.pExoTaskManager = Globals::TaskManager(); + ExportedGlobals.pbEnableCombatDebugging = Globals::EnableCombatDebugging(); + ExportedGlobals.pbEnableSavingThrowDebugging = Globals::EnableSavingThrowDebugging(); + ExportedGlobals.pbEnableMovementSpeedDebugging = Globals::EnableMovementSpeedDebugging(); + ExportedGlobals.pbEnableHitDieDebugging = Globals::EnableHitDieDebugging(); + ExportedGlobals.pbExitProgram = Globals::ExitProgram(); + } + + return ExportedGlobals; +} + +static void* RequestHook(void* address, void* managedFuncPtr, int32_t order) { auto funchook = s_managedHooks.emplace_back(Hooks::HookFunction(address, managedFuncPtr, order)).get(); return funchook->GetOriginal(); diff --git a/Plugins/DotNET/NWN/Internal/Bootstrap.cs b/Plugins/DotNET/NWN/Internal/Bootstrap.cs index e15464950bc..ab4835f759d 100644 --- a/Plugins/DotNET/NWN/Internal/Bootstrap.cs +++ b/Plugins/DotNET/NWN/Internal/Bootstrap.cs @@ -30,14 +30,14 @@ public struct NWNXExportedGlobals { public IntPtr PSBuildNumber; public IntPtr PSBuildRevision; - public IntPtr PPExoBase; - public IntPtr PPExoResMan; - public IntPtr PPVirtualMachine; - public IntPtr PPScriptCompiler; - public IntPtr PPAppManager; - public IntPtr PPTlkTable; - public IntPtr PPRules; - public IntPtr PPExoTaskManager; + public IntPtr PExoBase; + public IntPtr PExoResMan; + public IntPtr PVirtualMachine; + public IntPtr PScriptCompiler; + public IntPtr PAppManager; + public IntPtr PTlkTable; + public IntPtr PRules; + public IntPtr PExoTaskManager; public IntPtr PBEnableCombatDebugging; public IntPtr PBEnableSavingThrowDebugging; public IntPtr PBEnableMovementSpeedDebugging; diff --git a/Plugins/ELC/ELC.cpp b/Plugins/ELC/ELC.cpp index dc97c59925a..11ab2796e25 100644 --- a/Plugins/ELC/ELC.cpp +++ b/Plugins/ELC/ELC.cpp @@ -151,8 +151,8 @@ static int32_t s_ELCSkillID; static int32_t s_ELCFeatID; static int32_t s_ELCSpellID; -static auto s_ValidateCharacter = Hooks::HookFunction(API::Functions::_ZN10CNWSPlayer17ValidateCharacterEPi, - (void*)+[](CNWSPlayer *pPlayer, int32_t *bFailedServerRestriction) -> int32_t +static auto s_ValidateCharacter = Hooks::HookFunction(&CNWSPlayer::ValidateCharacter, + +[](CNWSPlayer *pPlayer, int32_t *bFailedServerRestriction) -> int32_t { // Reset Variables s_ILRItemOID = Constants::OBJECT_INVALID; @@ -483,11 +483,7 @@ static auto s_ValidateCharacter = Hooks::HookFunction(API::Functions::_ZN10CNWSP uint8_t nAbility[6] = {0}; int32_t nMods[6] = {0}; - auto GetStatBonusesFromFeats = reinterpret_cast *, int32_t *, int32_t)>( - Platform::GetRelocatedAddress( - API::Functions::_ZN17CNWSCreatureStats23GetStatBonusesFromFeatsEP13CExoArrayListItEPii)); - - GetStatBonusesFromFeats(&pCreatureStats->m_lstFeats, nMods, true); + CNWSCreatureStats::GetStatBonusesFromFeats(&pCreatureStats->m_lstFeats, nMods, true); //LOG_DEBUG("(GetStatBonusesFromFeats) STR: %i, DEX: %i, CON: %i, INT: %i, WIS: %i, CHA: %i", nMods[0], nMods[1], nMods[2], nMods[3], nMods[4], nMods[5]); @@ -712,7 +708,7 @@ static auto s_ValidateCharacter = Hooks::HookFunction(API::Functions::_ZN10CNWSP // Add the stat bonus from feats int32_t nStatMods[6] = {0}; - GetStatBonusesFromFeats(&pLevelStats->m_lstFeats, nStatMods, false); + CNWSCreatureStats::GetStatBonusesFromFeats(&pLevelStats->m_lstFeats, nStatMods, false); // Update our ability values for (int nAbilityIndex = 0; nAbilityIndex <= Ability::MAX; nAbilityIndex++) diff --git a/Plugins/Effect/CMakeLists.txt b/Plugins/Effect/CMakeLists.txt index 0ef06f8335a..2a2fe6571a4 100644 --- a/Plugins/Effect/CMakeLists.txt +++ b/Plugins/Effect/CMakeLists.txt @@ -1,2 +1,3 @@ add_plugin(Effect - "Effect.cpp") + "Effect.cpp" + "ExtendDurationType.cpp") diff --git a/Plugins/Effect/Effect.cpp b/Plugins/Effect/Effect.cpp index 50e530babd8..5de23625f07 100644 --- a/Plugins/Effect/Effect.cpp +++ b/Plugins/Effect/Effect.cpp @@ -1,37 +1,11 @@ #include "nwnx.hpp" -#include "API/Constants.hpp" -#include "API/Globals.hpp" -#include "API/CExoString.hpp" #include "API/CGameEffect.hpp" -#include "API/Functions.hpp" -#include "API/CVirtualMachine.hpp" #include "API/CNWSObject.hpp" -#include "API/CAppManager.hpp" -#include "API/CServerExoApp.hpp" -#include "API/CNWSCreature.hpp" -#include "API/CNWSCreatureStats.hpp" -#include "API/CNWSPlayer.hpp" -#include "API/CNWCCMessageData.hpp" -#include "API/CNWSEncounter.hpp" -#include "API/CNWSPlaceable.hpp" -#include "API/CNWSDoor.hpp" -#include "API/CServerAIMaster.hpp" -#include "API/CNWSModule.hpp" -#include "API/CNWSEffectListHandler.hpp" -#include "API/CScriptEvent.hpp" -#include "API/CNWSPlayerCharSheetGUI.hpp" -#include "API/CExoArrayList.hpp" - -#include using namespace NWNXLib; using namespace NWNXLib::API; -static std::string s_effectExpiredData; -static uint32_t s_effectExpiredDepth; -static ObjectID s_effectExpiredCreator; - ArgumentStack ResolveUnpack(CGameEffect *eff, bool bLink) { ArgumentStack stack; @@ -205,54 +179,6 @@ NWNX_EXPORT ArgumentStack UnpackEffect(ArgumentStack&& args) return ResolveUnpack(eff, true); } -NWNX_EXPORT ArgumentStack SetEffectExpiredScript(ArgumentStack&& args) -{ - static Hooks::Hook pOnEffectRemovedHook = - Hooks::HookFunction(API::Functions::_ZN21CNWSEffectListHandler15OnEffectRemovedEP10CNWSObjectP11CGameEffect, - (void*)+[](CNWSEffectListHandler *pEffectListHandler, CNWSObject* pObject, CGameEffect* pEffect) -> int32_t - { - CExoString& sScriptName = pEffect->m_sParamString[4]; - if (!sScriptName.IsEmpty()) - { - s_effectExpiredData = std::string(pEffect->m_sParamString[5].CStr()); - s_effectExpiredCreator = pEffect->m_oidCreator; - - LOG_DEBUG("(SetEffectExpiredScript) Running script '%s' on object '%x' with data '%s'", - sScriptName.CStr(), pObject->m_idSelf, s_effectExpiredData); - - ++s_effectExpiredDepth; - Globals::VirtualMachine()->RunScript(&sScriptName, pObject->m_idSelf, 1); - --s_effectExpiredDepth; - } - return pOnEffectRemovedHook->CallOriginal(pEffectListHandler, pObject, pEffect); - }, Hooks::Order::Early); - - auto effect = args.extract(); - - // Script name - effect->m_sParamString[4] = args.extract().c_str(); - // Data - effect->m_sParamString[5] = args.extract().c_str(); - - return effect; -} - -NWNX_EXPORT ArgumentStack GetEffectExpiredData(ArgumentStack&&) -{ - if (s_effectExpiredDepth == 0) - throw std::runtime_error("Attempted to get effect expired data in an invalid context."); - - return s_effectExpiredData; -} - -NWNX_EXPORT ArgumentStack GetEffectExpiredCreator(ArgumentStack&&) -{ - if (s_effectExpiredDepth == 0) - throw std::runtime_error("Attempted to get effect expired creator in an invalid context."); - - return s_effectExpiredCreator; -} - NWNX_EXPORT ArgumentStack ReplaceEffect(ArgumentStack&& args) { int found = 0; @@ -345,342 +271,14 @@ NWNX_EXPORT ArgumentStack Apply(ArgumentStack&& args) return {}; } -NWNX_EXPORT ArgumentStack AccessorizeVisualEffect(ArgumentStack&& args) +NWNX_EXPORT ArgumentStack SetEffectCreator(ArgumentStack&& args) { - static Hooks::Hook s_RemoveBadEffects = Hooks::HookFunction(Functions::_ZN12CNWSCreature16RemoveBadEffectsEv, - (void*)+[](CNWSCreature *pCreature) -> void - { - CExoArrayList *pAppliedEffects = &pCreature->m_appliedEffects; - int32_t nIndex = 0; - - while (nIndex < pAppliedEffects->num) - { - auto *pEffect = (*pAppliedEffects)[nIndex]; - int32_t nDurationType = pEffect->GetDurationType(); - - if ((nDurationType == Constants::EffectDurationType::Temporary || - (nDurationType == Constants::EffectDurationType::Permanent && (pEffect->GetSubType_Extraordinary() || pEffect->GetSubType_Magical()))) && - (pEffect->m_nType != Constants::EffectTrueType::VisualEffect || (pEffect->m_nType == Constants::EffectTrueType::VisualEffect && pEffect->GetInteger(7) != 1))) - { - pCreature->RemoveEffectById(pEffect->m_nID); - nIndex = 0; - continue; - } - - nIndex++; - } - }, Hooks::Order::Final); - - static Hooks::Hook s_OnApplyDeathHook = Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler12OnApplyDeathEP10CNWSObjectP11CGameEffecti, - (void*)+[](CNWSEffectListHandler*, CNWSObject *pObject, CGameEffect *pEffect, BOOL bLoadingGame)-> int32_t - { - auto *pServerAIMaster = Globals::AppManager()->m_pServerExoApp->GetServerAIMaster(); - - ObjectID nCallerObjectId = pEffect->m_oidCreator; - - if (pObject->m_bPlotObject) - return 1;// DELETE_EFFECT - - if (auto *pCreature = Utils::AsNWSCreature(pObject)) - { - if (pCreature->m_bIsImmortal) - { - if (pCreature->GetCurrentHitPoints() < 1) - pCreature->m_nCurrentHitPoints = 1; - - return 1;// DELETE_EFFECT - } - } - - if (pObject->m_nObjectType != Constants::ObjectType::Creature) - pObject->ClearAllActions(); - - auto *pKiller = Utils::AsNWSCreature(Utils::GetGameObject(nCallerObjectId)); - - if (nCallerObjectId == pObject->m_idSelf) - nCallerObjectId = pObject->m_oidLastDamager; - - if (auto *pCreature = Utils::AsNWSCreature(pObject)) - { - if (pCreature->m_nAIState != Constants::AIState::IsDead) - { - if (pEffect->GetSubType_Magical()) - { - if (pCreature->m_pStats->GetEffectImmunity(Constants::ImmunityType::Death, pKiller) && pEffect->m_nSpellId != 0xFFFFFFFF) - { - auto *pData = new CNWCCMessageData; - pData->SetObjectID(0, pObject->m_idSelf); - - if (pKiller) - { - auto *pDataForKiller = new CNWCCMessageData; - pData->CopyTo(pDataForKiller); - - pKiller->SendFeedbackMessage(127, pDataForKiller); - } - - pCreature->SendFeedbackMessage(127, pData); - - return 1;// DELETE_EFFECT - } - } - - pCreature->ClearAllActions(); - pServerAIMaster->AdjustTargetAndWitnessReputations(pCreature->m_idSelf, nCallerObjectId, 2/*ACTION_KILL*/); - - int32_t nSpectacularDeath = pEffect->GetInteger(0); - int32_t nDisplayFeedback = pEffect->GetInteger(1); - - if (pCreature->m_nState == 15/*Petrified*/) - nSpectacularDeath = true; - if (!pCreature->m_bDestroyable || pCreature->m_bNoPermDeath) - nSpectacularDeath = false; - - if (pCreature->m_nAssociateType == Constants::AssociateType::DominatedByPC || - pCreature->m_nAssociateType == Constants::AssociateType::DominatedByNPC) - pCreature->RemoveDomination(); - - pCreature->SetActivity(0x00000001/*ActiveStealth*/, false); - pCreature->RemoveCombatInvisibilityEffects(); - - pCreature->m_oidKiller = nCallerObjectId; - pCreature->RunEventScript(Constants::ScriptEvent::OnDeath); - - pCreature->ApplyDeathExperience(); - - if (!pCreature->GetIsPossessedFamiliar()) - { - if (pCreature->m_nAssociateType == Constants::AssociateType::DMPossess || - pCreature->m_nAssociateType == Constants::AssociateType::DMImpersonate) - { - if (auto *pPlayer = Globals::AppManager()->m_pServerExoApp->GetClientObjectByObjectId(pCreature->m_idSelf)) - { - if (pPlayer->GetIsDM()) - { - pPlayer->PossessCreature(Constants::OBJECT_INVALID, Constants::AssociateType::None); - } - } - } - else if (pCreature->m_bPlayerCharacter) - { - pCreature->StopGuiTimingBar(); - } - } - else - { - pCreature->StopGuiTimingBar(); - pCreature->ReceiveAssociateCommand(-13/*UnpossessFamiliar*/); - } - - ObjectID oidFamiliar = pCreature->GetAssociateId(Constants::AssociateType::Familiar); - if (oidFamiliar != Constants::OBJECT_INVALID) - { - auto *pPlayer = Globals::AppManager()->m_pServerExoApp->GetClientObjectByObjectId(oidFamiliar); - - if (pPlayer) - { - pCreature->UnpossessFamiliar(); - } - } - - if (pCreature->m_oidMaster != Constants::OBJECT_INVALID) - { - if (pCreature->m_nNumCharSheetViewers > 0) - { - if (auto *pPlayer = Globals::AppManager()->m_pServerExoApp->GetClientObjectByObjectId(pCreature->m_oidMaster)) - { - if (pPlayer->m_pCharSheetGUI) - { - pPlayer->m_pCharSheetGUI->SetCreatureDisplayed(Constants::OBJECT_INVALID); - Globals::AppManager()->m_pServerExoApp->GetNWSMessage()->SendServerToPlayerGUICharacterSheet_NotPermitted( - pPlayer->m_nPlayerID, pCreature->m_idSelf); - } - } - } - - if (auto *pMaster = Utils::AsNWSCreature(Utils::GetGameObject(pCreature->m_oidMaster))) - { - pMaster->RemoveAssociate(pCreature->m_idSelf); - } - } - - if (pCreature->m_nAmbientAnimationState != 3/*AmbientAnimationStateDeadButt*/ && - pCreature->m_nAmbientAnimationState != 4/*AmbientAnimationStateDeadFront*/) - { - if (pKiller) - { - Vector vDeltaPos = VectorMath::Normalize(VectorMath::Subtract(pKiller->m_vPosition, pCreature->m_vPosition)); - float fAngle = VectorMath::Dot(VectorMath::Normalize(pCreature->m_vOrientation), vDeltaPos); - - if (fAngle >= 0.707f) - { - pCreature->m_nAmbientAnimationState = 3;// AmbientAnimationStateDeadButt - pCreature->SetAnimation(Constants::Animation::DeadButt); - } - else - { - pCreature->m_nAmbientAnimationState = 4;// AmbientAnimationStateDeadFront; - pCreature->SetAnimation(Constants::Animation::DeadFront); - } - } - else - { - pCreature->m_nAmbientAnimationState = 3;// AmbientAnimationStateDeadButt - pCreature->SetAnimation(Constants::Animation::DeadButt); - } - } - - if (nDisplayFeedback) - { - auto pMessageData = new CNWCCMessageData; - pMessageData->SetObjectID(0, nCallerObjectId); - pMessageData->SetObjectID(1, pCreature->m_idSelf); - - if (auto *pOpponent = Utils::AsNWSCreature(Utils::GetGameObject(nCallerObjectId))) - pCreature->BroadcastDeathDataToParty(pMessageData, pOpponent); - else - pCreature->BroadcastDeathDataToParty(pMessageData); - - delete pMessageData; - pMessageData = nullptr; - } - - pCreature->m_bListening = false; - pCreature->m_nAIState = Constants::AIState::IsDead; - - if (pCreature->GetCurrentHitPoints(true) > -11) - pCreature->m_nCurrentHitPoints = -11; - - pCreature->AutoCloseGUIPanels(false); - pCreature->SetCombatMode(Constants::CombatMode::None, true); - pCreature->UpdateActionQueue(); - - CExoArrayList *pAppliedEffects = &pCreature->m_appliedEffects; - int32_t nIndex = 0; - while (nIndex < pAppliedEffects->num) - { - auto *pAppliedEffect = (*pAppliedEffects)[nIndex]; - int32_t nDurationType = pAppliedEffect->GetDurationType(); - - if (nDurationType != Constants::EffectDurationType::Innate && - nDurationType != Constants::EffectDurationType::Equipped) - { - if (pAppliedEffect->m_nType != Constants::EffectTrueType::VisualEffect || - (pAppliedEffect->m_nType == Constants::EffectTrueType::VisualEffect && pAppliedEffect->GetInteger(7) != 1)) - { - pCreature->RemoveEffectById(pAppliedEffect->m_nID); - nIndex = 0; - continue; - } - } - - nIndex++; - } - - if (!pCreature->m_bPlayerCharacter) - { - if (!nSpectacularDeath || pCreature->m_bLootable) - { - if (!pCreature->m_bLootable) - { - pServerAIMaster->AddEventDeltaTime( - 0, pCreature->m_nDecayTime, pEffect->m_oidCreator, - pObject->m_idSelf, Constants::AIMasterEvent::DestroyObject); - } - else - { - pCreature->SpawnBodyBag(); - } - - if (pCreature->m_oidEncounter != Constants::OBJECT_INVALID) - { - if (auto *pEncounter = Globals::AppManager()->m_pServerExoApp->GetEncounterByGameObjectID(pCreature->m_oidEncounter)) - { - pEncounter->RemoveFromActiveCreatureCount(pCreature->m_pStats->m_fChallengeRating, 0/*EncounterCreatureDeath*/); - pCreature->m_bAlreadyRemovedFromEncounter = true; - } - } - } - else - { - auto *pGibEffect = new CGameEffect; - pGibEffect->m_nType = Constants::EffectTrueType::VisualEffect; - pGibEffect->SetDurationType(Constants::EffectDurationType::Instant); - pGibEffect->SetInteger(0, 119/*VisualEffectGib*/); - pCreature->ApplyEffect(pGibEffect, bLoadingGame); - - pServerAIMaster->AddEventDeltaTime( - 0, 3000, pEffect->m_oidCreator, - pObject->m_idSelf, Constants::AIMasterEvent::DestroyObject); - - if (pCreature->m_oidEncounter != Constants::OBJECT_INVALID) - { - if (auto *pEncounter = Globals::AppManager()->m_pServerExoApp->GetEncounterByGameObjectID(pCreature->m_oidEncounter)) - { - pEncounter->RemoveFromActiveCreatureCount(pCreature->m_pStats->m_fChallengeRating, 0/*EncounterCreatureDeath*/); - pCreature->m_bAlreadyRemovedFromEncounter = true; - } - } - } - } - else - { - auto *pScriptEvent = new CScriptEvent; - pScriptEvent->m_nType = Constants::ScriptEvent::OnDeath; - pServerAIMaster->AddEventDeltaTime( - 0, 0, pCreature->m_idSelf, Utils::GetModule()->m_idSelf, - Constants::AIMasterEvent::SignalEvent, pScriptEvent); - } - - pCreature->ProcessMasterDeathForAssociates(); - pCreature->BroadcastVoiceChat(18/*VoiceChatDeath*/); - } - } - else if (pObject->m_nObjectType == Constants::ObjectType::Placeable || pObject->m_nObjectType == Constants::ObjectType::Door) - { - if (auto *pPlaceable = Utils::AsNWSPlaceable(pObject)) - { - pPlaceable->ClosePlaceableForAllPlayers(); - pPlaceable->SetAnimation(Constants::Animation::Destroyed); - } - else if (auto *pDoor = Utils::AsNWSDoor(pObject)) - { - pDoor->SetOpenState(3/*OpenStateDestroyed*/); - - if (auto *pLinkedDoor = Utils::AsNWSDoor(pDoor->m_pTransition.LookupTarget())) - { - if (pLinkedDoor->m_nAnimation != Constants::Animation::Destroyed) - { - auto *pDeathEffect = new CGameEffect; - pDeathEffect->m_nType = Constants::EffectTrueType::Death; - pDeathEffect->SetInteger(0, false); - pDeathEffect->SetInteger(1, true); - pCreature->ApplyEffect(pDeathEffect, bLoadingGame); - } - } - } - - auto *pScriptEvent = new CScriptEvent; - pScriptEvent->m_nType = Constants::ScriptEvent::OnDeath; - pServerAIMaster->AddEventDeltaTime( - 0, 0, pEffect->m_oidCreator, pObject->m_idSelf, - Constants::AIMasterEvent::SignalEvent, pScriptEvent); - - pServerAIMaster->AddEventDeltaTime( - 0, 2000, pEffect->m_oidCreator, pObject->m_idSelf, - Constants::AIMasterEvent::DestroyObject); - } - - return 1;// DELETE_EFFECT - }, Hooks::Order::Final); + auto effect = args.extract(); + ASSERT_OR_THROW(effect); + auto creator = Utils::PopObject(args); + ASSERT_OR_THROW(creator); - auto *pEffect = args.extract(); + effect->m_oidCreator = creator->m_idSelf; - if (pEffect->m_nType == Constants::EffectTrueType::VisualEffect) - { - pEffect->SetSubType_Extraordinary(); - pEffect->SetInteger(7, true); - } - - return pEffect; + return effect; } diff --git a/Plugins/Effect/ExtendDurationType.cpp b/Plugins/Effect/ExtendDurationType.cpp new file mode 100644 index 00000000000..4cee5d95d08 --- /dev/null +++ b/Plugins/Effect/ExtendDurationType.cpp @@ -0,0 +1,114 @@ +#include "nwnx.hpp" + +#include "API/Constants.hpp" +#include "API/CAppManager.hpp" +#include "API/CServerExoApp.hpp" +#include "API/CVirtualMachine.hpp" +#include "API/CNWVirtualMachineCommands.hpp" +#include "API/CNWSObject.hpp" +#include "API/CGameEffect.hpp" + +using namespace NWNXLib; +using namespace NWNXLib::API; + +static void ExtendDurationType() __attribute__((constructor)); + +static void ExtendDurationType() +{ + if (!Config::Get("EXTEND_DURATION_TYPE")) + return; + + static int32_t nextEffectDurationType; + + static Hooks::Hook pCNWSObjectApplyEffect = Hooks::HookFunction( + &CNWSObject::ApplyEffect, + +[](CNWSObject* pThis, CGameEffect* e, BOOL bLoadingGame, BOOL bInitialApplication) + { + if (nextEffectDurationType == 3 || // EQUIPPED + nextEffectDurationType == 4) // INNATE + { + LOG_DEBUG("ApplyEffectOnObject(%x, %p): Overriding DURATION_TYPE=%d\n", + pThis->m_idSelf, e, nextEffectDurationType); + + e->SetDurationType(nextEffectDurationType); + } + + pCNWSObjectApplyEffect->CallOriginal(pThis, e, bLoadingGame, + bInitialApplication); + + }, Hooks::Order::VeryEarly); + + static Hooks::Hook pExecuteCommandApplyEffectOnObjectHook = Hooks::HookFunction( + &CNWVirtualMachineCommands::ExecuteCommandApplyEffectOnObject, + +[](CNWVirtualMachineCommands *pThis, int32_t nCommandId, int32_t nParameters) -> int32_t + { + // At this point in the original game code, this is the comment pasted here verbatim: + // + // don't want to inadvertantly give people the ability to apply 'innate' or 'equipped' durations + // so we're going to do this carefully rather than just assigning the value. + // + // It follows with basically this code: + // + // switch ( nDurationType ) + // { + // case CGAMEEFFECT_DURATION_TYPE_INSTANTANEOUS: + // pEffect->SetDurationType(CGAMEEFFECT_DURATION_TYPE_INSTANTANEOUS); + // .. + // default: + // pEffect->SetDurationType(CGAMEEFFECT_DURATION_TYPE_PERMANENT); + // } + // + // So we just fix it in ApplyEffect instead: We grab the intended duration type + // off the stack and save it for the immediately-following invocation of ApplyEffect. + + if (!g_pVirtualMachine->StackPopInteger(&nextEffectDurationType)) + return Constants::VMError::StackUnderflow; + + if (!g_pVirtualMachine->StackPushInteger(nextEffectDurationType)) + return Constants::VMError::StackOverflow; + + int32_t ret = pExecuteCommandApplyEffectOnObjectHook->CallOriginal(pThis, + nCommandId, nParameters); + + nextEffectDurationType = 0; + + return ret; + + }, Hooks::Order::VeryEarly); +} + +NWNX_EXPORT ArgumentStack GetIsEffectValid(ArgumentStack&& args) +{ + auto* pEffect = args.extract(); + ASSERT_OR_THROW(pEffect); + SCOPEGUARD(Utils::DestroyGameEffect(pEffect)); + + return pEffect->m_nType != Constants::EffectTrueType::Invalid; +} + +NWNX_EXPORT ArgumentStack GetAppliedEffectCount(ArgumentStack&& args) +{ + if (auto* pObj = Utils::PopObject(args)) + { + return pObj->m_appliedEffects.num; + } + + return 0; +} + +NWNX_EXPORT ArgumentStack GetAppliedEffect(ArgumentStack&& args) +{ + auto* pEffect = new CGameEffect; + pEffect->m_nType = Constants::EffectTrueType::Invalid; + + if (auto* pObj = Utils::PopObject(args)) + { + int32_t nNth = args.extract(); + if (nNth >= 0 && nNth < pObj->m_appliedEffects.num) + { + *pEffect = *pObj->m_appliedEffects.element[nNth]; + } + } + + return pEffect; +} diff --git a/Plugins/Effect/NWScript/nwnx_effect.nss b/Plugins/Effect/NWScript/nwnx_effect.nss index 1acb56f8f6c..5a6c051aab0 100644 --- a/Plugins/Effect/NWScript/nwnx_effect.nss +++ b/Plugins/Effect/NWScript/nwnx_effect.nss @@ -6,6 +6,20 @@ const string NWNX_Effect = "NWNX_Effect"; ///< @private +/// EQUIPPED effects are always associated with a slotted item: +/// Setting this duration type requires the effect creator +/// to be set to the (already equipped) item that should remove +/// this effect when unequipped. +/// Removal behaviour for effects where the creator is NOT a equipped +/// item is undefined. +/// They are not removed by resting, cannot be dispelled, etc. +const int DURATION_TYPE_EQUIPPED = 3; + +/// These are feat/racial effects used internally by the game to +/// implement things like movement speed changes and darkvision. +/// They cannot be removed by resting, dispelling, etc. +const int DURATION_TYPE_INNATE = 4; + /// An unpacked effect struct NWNX_EffectUnpacked { @@ -69,24 +83,6 @@ struct NWNX_EffectUnpacked NWNX_Effect_UnpackEffect(effect e); /// @return The effect. effect NWNX_Effect_PackEffect(struct NWNX_EffectUnpacked e); -/// @brief Set a script with optional data that runs when an effect expires -/// @param e The effect. -/// @param script The script to run when the effect expires. -/// @param data Any other data you wish to send back to the script. -/// @remark OBJECT_SELF in the script is the object the effect is applied to. -/// @note Only works for TEMPORARY and PERMANENT effects applied to an object. -effect NWNX_Effect_SetEffectExpiredScript(effect e, string script, string data = ""); - -/// @brief Get the data set with NWNX_Effect_SetEffectExpiredScript() -/// @note Should only be called from a script set with NWNX_Effect_SetEffectExpiredScript(). -/// @return The data attached to the effect. -string NWNX_Effect_GetEffectExpiredData(); - -/// @brief Get the effect creator. -/// @note Should only be called from a script set with NWNX_Effect_SetEffectExpiredScript(). -/// @return The object from which the effect originated. -object NWNX_Effect_GetEffectExpiredCreator(); - /// @brief replace an already applied effect on an object /// Only duration, subtype, tag and spell related fields can be overwritten. /// @note eNew and eOld need to have the same type. @@ -122,11 +118,27 @@ int NWNX_Effect_RemoveEffectById(object oObject, string sID); /// @param oObject The object to apply it to. void NWNX_Effect_Apply(effect eEffect, object oObject); -/// @brief Accessorize an EffectVisualEffect(), making it undispellable and unable to be removed by resting or death. -/// @note If linked with a non-visualeffect or a non-accessorized visualeffect it *will* get removed. -/// @param eEffect An EffectVisualEffect(), does not work for other effect types. -/// @return The accessorized effect or an unchanged effect if not an EffectVisualEffect(). -effect NWNX_Effect_AccessorizeVisualEffect(effect eEffect); +/// @brief Sets an effect creator. +/// @param eEffect The effect to be modified. +/// @return The effect with creator field set. +effect NWNX_Effect_SetEffectCreator(effect eEffect, object oObject); + +/// @brief Checks if the given effect is valid. Unlike the game builtin, this call considers internal types too. +/// @param eEffect The effect to check +/// @return TRUE if the effect is valid (including internal types). +int NWNX_Effect_GetIsEffectValid(effect eEffect); + +/// @brief Returns the number of applied effects on the given object. +/// @param oObject The object to get the applied effect count for. +/// @return The number of applied effects, including internal. +int NWNX_Effect_GetAppliedEffectCount(object oObject); + +/// @brief Returns the nNth applied effect on a object. +/// @param oObject The object to get the applied effect copy for. +/// @param nNth The effect index to get. +/// @note Make sure to check with NWNX_Effect_GetIsEffectValid, as this iterator also includes internal effects. +/// @return A copy of the applied game effect, or a invalid effect. +effect NWNX_Effect_GetAppliedEffect(object oObject, int nNth); /// @} @@ -281,37 +293,6 @@ effect NWNX_Effect_PackEffect(struct NWNX_EffectUnpacked e) return NWNX_GetReturnValueEffect(); } -effect NWNX_Effect_SetEffectExpiredScript(effect e, string script, string data = "") -{ - string sFunc = "SetEffectExpiredScript"; - - NWNX_PushArgumentString(data); - NWNX_PushArgumentString(script); - NWNX_PushArgumentEffect(e); - - NWNX_CallFunction(NWNX_Effect, sFunc); - - return NWNX_GetReturnValueEffect(); -} - -string NWNX_Effect_GetEffectExpiredData() -{ - string sFunc = "GetEffectExpiredData"; - - NWNX_CallFunction(NWNX_Effect, sFunc); - - return NWNX_GetReturnValueString(); -} - -object NWNX_Effect_GetEffectExpiredCreator() -{ - string sFunc = "GetEffectExpiredCreator"; - - NWNX_CallFunction(NWNX_Effect, sFunc); - - return NWNX_GetReturnValueObject(); -} - int NWNX_Effect_ReplaceEffect(object obj, effect eOld, effect eNew) { string sFunc = "ReplaceEffect"; @@ -373,10 +354,48 @@ void NWNX_Effect_Apply(effect eEffect, object oObject) NWNX_CallFunction(NWNX_Effect, sFunc); } -effect NWNX_Effect_AccessorizeVisualEffect(effect eEffect) +effect NWNX_Effect_SetEffectCreator(effect eEffect, object oObject) { - string sFunc = "AccessorizeVisualEffect"; + string sFunc = "SetEffectCreator"; + + NWNX_PushArgumentObject(oObject); NWNX_PushArgumentEffect(eEffect); + NWNX_CallFunction(NWNX_Effect, sFunc); + + return NWNX_GetReturnValueEffect(); +} + +int NWNX_Effect_GetIsEffectValid(effect eEffect) +{ + string sFunc = "GetIsEffectValid"; + + NWNX_PushArgumentEffect(eEffect); + + NWNX_CallFunction(NWNX_Effect, sFunc); + + return NWNX_GetReturnValueInt(); +} + +int NWNX_Effect_GetAppliedEffectCount(object oObject) +{ + string sFunc = "GetAppliedEffectCount"; + + NWNX_PushArgumentObject(oObject); + + NWNX_CallFunction(NWNX_Effect, sFunc); + + return NWNX_GetReturnValueInt(); +} + +effect NWNX_Effect_GetAppliedEffect(object oObject, int nNth) +{ + string sFunc = "GetAppliedEffect"; + + NWNX_PushArgumentInt(nNth); + NWNX_PushArgumentObject(oObject); + + NWNX_CallFunction(NWNX_Effect, sFunc); + return NWNX_GetReturnValueEffect(); } diff --git a/Plugins/Effect/NWScript/nwnx_effect_t.nss b/Plugins/Effect/NWScript/nwnx_effect_t.nss index efcda85e487..e6735dd5d6f 100644 --- a/Plugins/Effect/NWScript/nwnx_effect_t.nss +++ b/Plugins/Effect/NWScript/nwnx_effect_t.nss @@ -78,11 +78,6 @@ void main() object oCreature = CreateObject(OBJECT_TYPE_CREATURE, "nw_chicken", GetStartingLocation()); ApplyEffectToObject(DURATION_TYPE_PERMANENT, packed, oCreature); - e = NWNX_Effect_SetEffectExpiredScript(EffectDarkness(), "effect_test"); - unpacked = NWNX_Effect_UnpackEffect(e); - NWNX_Tests_Report("NWNX_Effect", "SetEffectExpiredScript", unpacked.sParam4 == "effect_test"); - - e = GetFirstEffect(oCreature); while (GetIsEffectValid(e)) { diff --git a/Plugins/Effect/README.md b/Plugins/Effect/README.md index d686aa56712..bbdc278955f 100644 --- a/Plugins/Effect/README.md +++ b/Plugins/Effect/README.md @@ -2,3 +2,32 @@ @ingroup effect Provide various utility functions to manipulate builtin effect type + +## Environment Variables + +### NWNX_EFFECT_EXTEND_DURATION_TYPE = true/false + +Allow ApplyEffectToObject to apply internal duration types; simply give the new constants as described +below to the function. + +To correctly read and iterate these functions, you need to use: + +* NWNX_Effect_GetIsEffectValid() +* NWNX_Effect_GetAppliedEffectCount() +* NWNX_Effect_GetAppliedEffect() + +The builtin functions (GetFirstEffect, GetNextEffect, GetIsEffectValid) do not expose internal effect types. + +#### const int DURATION_TYPE_EQUIPPED = 3; + +This effect gets automatically removed when the item that created it gets unequipped. + +For this to work, the effect creator needs to be a valid equipped item; you can set this either by +spawning the effect from the item handler, or by using SetEffectCreator(). + +Behaviour without a equipped item in the effect creator slot is undefined. + +#### const int DURATION_TYPE_INNATE = 4; + +This is used by the game to represent things like racial and feat effects, as well as movement speed +adjustments. diff --git a/Plugins/Events/Events.cpp b/Plugins/Events/Events.cpp index f14fd06fea2..52e3097856f 100644 --- a/Plugins/Events/Events.cpp +++ b/Plugins/Events/Events.cpp @@ -246,6 +246,30 @@ NWNX_EXPORT ArgumentStack UnsubscribeEvent(ArgumentStack&& args) return {}; } +NWNX_EXPORT ArgumentStack UnsubscribeAllStartingWith(ArgumentStack&& args) +{ + const auto prefix = args.extract(); + + for (auto& eventMapPair : s_eventMap) + { + auto it = eventMapPair.second.begin(); + while (it != eventMapPair.second.end()) + { + if (it->second.rfind(prefix, 0) == 0) + { + LOG_INFO("Script '%s' unsubscribed from event '%s'.", it->second, eventMapPair.first); + it = eventMapPair.second.erase(it); + } + else + { + it++; + } + } + } + + return {}; +} + NWNX_EXPORT ArgumentStack SubscribeEventScriptChunk(ArgumentStack&& args) { const auto event = args.extract(); diff --git a/Plugins/Events/Events/AssociateEvents.cpp b/Plugins/Events/Events/AssociateEvents.cpp index 0bcbfbfd365..3bfce816d17 100644 --- a/Plugins/Events/Events/AssociateEvents.cpp +++ b/Plugins/Events/Events/AssociateEvents.cpp @@ -20,23 +20,23 @@ void AssociateEvents() __attribute__((constructor)); void AssociateEvents() { InitOnFirstSubscribe("NWNX_ON_ADD_ASSOCIATE_.*", []() { - s_AddAssociateHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature12AddAssociateEjt, - (void*)&AddAssociateHook, Hooks::Order::Earliest); + s_AddAssociateHook = Hooks::HookFunction(&CNWSCreature::AddAssociate, + &AddAssociateHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_REMOVE_ASSOCIATE_.*", []() { - s_RemoveAssociateHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature15RemoveAssociateEj, - (void*)&RemoveAssociateHook, Hooks::Order::Earliest); + s_RemoveAssociateHook = Hooks::HookFunction(&CNWSCreature::RemoveAssociate, + &RemoveAssociateHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_UNPOSSESS_FAMILIAR_.*", []() { - s_UnpossessFamiliarHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature17UnpossessFamiliarEv, - (void*)&UnpossessFamiliarHook, Hooks::Order::Earliest); + s_UnpossessFamiliarHook = Hooks::HookFunction(&CNWSCreature::UnpossessFamiliar, + &UnpossessFamiliarHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_POSSESS_FAMILIAR_.*", []() { - s_PossessFamiliarHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature15PossessFamiliarEv, - (void*)&PossessFamiliarHook, Hooks::Order::Earliest); + s_PossessFamiliarHook = Hooks::HookFunction(&CNWSCreature::PossessFamiliar, + &PossessFamiliarHook, Hooks::Order::Earliest); }); } diff --git a/Plugins/Events/Events/BarterEvents.cpp b/Plugins/Events/Events/BarterEvents.cpp index 32f74268b51..25cb5b417dc 100644 --- a/Plugins/Events/Events/BarterEvents.cpp +++ b/Plugins/Events/Events/BarterEvents.cpp @@ -31,20 +31,20 @@ void BarterEvents() { InitOnFirstSubscribe("NWNX_ON_BARTER_START_.*", []() { s_HandlePlayerToServerBarter_StartBarterHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage38HandlePlayerToServerBarter_StartBarterEP10CNWSPlayer, - (void*)&HandlePlayerToServerBarter_StartBarterHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerBarter_StartBarter, + &HandlePlayerToServerBarter_StartBarterHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_BARTER_END_.*", []() { - s_SetListAcceptedHook = Hooks::HookFunction(Functions::_ZN10CNWSBarter15SetListAcceptedEi, - (void*)&SetListAcceptedHook, Hooks::Order::Earliest); + s_SetListAcceptedHook = Hooks::HookFunction(&CNWSBarter::SetListAccepted, + &SetListAcceptedHook, Hooks::Order::Earliest); s_SendServerToPlayerBarterCloseBarterHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage35SendServerToPlayerBarterCloseBarterEjji, - (void*)&SendServerToPlayerBarterCloseBarterHook, Hooks::Order::Earliest); + &CNWSMessage::SendServerToPlayerBarterCloseBarter, + &SendServerToPlayerBarterCloseBarterHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_BARTER_ADD_ITEM_.*", []() { s_AddItemHook = Hooks::HookFunction( - Functions::_ZN10CNWSBarter7AddItemEjRhS0_, - (void*)&AddItemHook, Hooks::Order::Early); + &CNWSBarter::AddItem, + &AddItemHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/CalendarEvents.cpp b/Plugins/Events/Events/CalendarEvents.cpp index 8cb71f62e7a..d0c5f55fd41 100644 --- a/Plugins/Events/Events/CalendarEvents.cpp +++ b/Plugins/Events/Events/CalendarEvents.cpp @@ -15,7 +15,7 @@ void CalendarEvents() __attribute__((constructor)); void CalendarEvents() { InitOnFirstSubscribe("NWNX_ON_CALENDAR_.*", []() { - s_UpdateTimeHook = Hooks::HookFunction(Functions::_ZN10CNWSModule10UpdateTimeEjjj, (void*)&HandleUpdateTimeHook, Hooks::Order::Earliest); + s_UpdateTimeHook = Hooks::HookFunction(&CNWSModule::UpdateTime, &HandleUpdateTimeHook, Hooks::Order::Earliest); }); } diff --git a/Plugins/Events/Events/ClientEvents.cpp b/Plugins/Events/Events/ClientEvents.cpp index b385d1e832d..357f2009248 100644 --- a/Plugins/Events/Events/ClientEvents.cpp +++ b/Plugins/Events/Events/ClientEvents.cpp @@ -4,6 +4,7 @@ #include "API/CNWSPlayer.hpp" #include "API/CNWSArea.hpp" #include "API/CServerExoApp.hpp" +#include "API/CServerExoAppInternal.hpp" #include "API/CNetLayer.hpp" #include "API/CNetLayerPlayerInfo.hpp" #include "API/CNWSModule.hpp" @@ -34,45 +35,45 @@ void ClientEvents() __attribute__((constructor)); void ClientEvents() { InitOnFirstSubscribe("NWNX_ON_CLIENT_DISCONNECT_.*", []() { - s_RemovePCFromWorldHook = Hooks::HookFunction(API::Functions::_ZN21CServerExoAppInternal17RemovePCFromWorldEP10CNWSPlayer, - (void*)&RemovePCFromWorldHook, Hooks::Order::Earliest); + s_RemovePCFromWorldHook = Hooks::HookFunction(&CServerExoAppInternal::RemovePCFromWorld, + &RemovePCFromWorldHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_SERVER_CHARACTER_SAVE_.*", []() { - s_ServerCharacterSaveHook = Hooks::HookFunction(API::Functions::_ZN10CNWSPlayer19SaveServerCharacterEi, - (void*)&SaveServerCharacterHook, Hooks::Order::Early); + s_ServerCharacterSaveHook = Hooks::HookFunction(&CNWSPlayer::SaveServerCharacter, + &SaveServerCharacterHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_CLIENT_CONNECT_.*", []() { s_SendServerToPlayerCharListHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage26SendServerToPlayerCharListEP10CNWSPlayer, - (void*)&SendServerToPlayerCharListHook, Hooks::Order::Early); + &CNWSMessage::SendServerToPlayerCharList, + &SendServerToPlayerCharListHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_CHECK_STICKY_PLAYER_NAME_RESERVED_.*", []() { s_CheckStickyPlayerNameReservedHook = Hooks::HookFunction( - API::Functions::_ZN21CServerExoAppInternal29CheckStickyPlayerNameReservedE10CExoStringS0_S0_i, - (void*)&CheckStickyPlayerNameReservedHook, Hooks::Order::Early); + &CServerExoAppInternal::CheckStickyPlayerNameReserved, + &CheckStickyPlayerNameReservedHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_CLIENT_EXPORT_CHARACTER_.*", []() { s_SendServerToPlayerModule_ExportReplyHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage36SendServerToPlayerModule_ExportReplyEP10CNWSPlayer, - (void*)&SendServerToPlayerModule_ExportReplyHook, Hooks::Order::Early); + &CNWSMessage::SendServerToPlayerModule_ExportReply, + &SendServerToPlayerModule_ExportReplyHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_SERVER_SEND_AREA_.*", []() { s_SendServerToPlayerArea_ClientAreaHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage33SendServerToPlayerArea_ClientAreaEP10CNWSPlayerP8CNWSAreafffRK6Vectori, - (void*)&SendServerToPlayerArea_ClientAreaHook, Hooks::Order::Earliest); + &CNWSMessage::SendServerToPlayerArea_ClientArea, + &SendServerToPlayerArea_ClientAreaHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_CLIENT_SET_DEVICE_PROPERTY_.*", []() { s_HandlePlayerToServerDeviceHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage26HandlePlayerToServerDeviceEP10CNWSPlayerh, - (void*)&HandlePlayerToServerDeviceHook, Hooks::Order::Earliest); + &CNWSMessage::HandlePlayerToServerDevice, + &HandlePlayerToServerDeviceHook, Hooks::Order::Earliest); }); } diff --git a/Plugins/Events/Events/CombatEvents.cpp b/Plugins/Events/Events/CombatEvents.cpp index 6132cf19b02..2407a6328dd 100644 --- a/Plugins/Events/Events/CombatEvents.cpp +++ b/Plugins/Events/Events/CombatEvents.cpp @@ -6,6 +6,8 @@ #include "API/CNWSPlayer.hpp" #include "API/CNWSCombatRound.hpp" #include "API/CNWCCMessageData.hpp" +#include "API/CNWSEffectListHandler.hpp" +#include "API/CNWSMessage.hpp" namespace Events { @@ -29,27 +31,27 @@ void CombatEvents() __attribute__((constructor)); void CombatEvents() { InitOnFirstSubscribe("NWNX_ON_START_COMBAT_ROUND_.*", []() { - s_StartCombatRoundHook = Hooks::HookFunction(API::Functions::_ZN15CNWSCombatRound16StartCombatRoundEj, - (void*)&StartCombatRoundHook, Hooks::Order::Earliest); + s_StartCombatRoundHook = Hooks::HookFunction(&CNWSCombatRound::StartCombatRound, + &StartCombatRoundHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_DISARM_*", []() { - s_ApplyDisarmHook = Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler13OnApplyDisarmEP10CNWSObjectP11CGameEffecti, - (void*)&ApplyDisarmHook, Hooks::Order::Early); + s_ApplyDisarmHook = Hooks::HookFunction(&CNWSEffectListHandler::OnApplyDisarm, + &ApplyDisarmHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_COMBAT_ENTER.*", []() { s_SendServerToPlayerAmbientBattleMusicPlayHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage40SendServerToPlayerAmbientBattleMusicPlayEji, - (void*)&SendServerToPlayerAmbientBattleMusicPlayHook, Hooks::Order::Earliest); + &CNWSMessage::SendServerToPlayerAmbientBattleMusicPlay, + &SendServerToPlayerAmbientBattleMusicPlayHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_COMBAT_DR_BROKEN.*", []() { s_SendFeedbackMessageHook = Hooks::HookFunction( - API::Functions::_ZN12CNWSCreature19SendFeedbackMessageEtP16CNWCCMessageDataP10CNWSPlayer, - (void*)&SendFeedbackMessageHook, Hooks::Order::Earliest); + &CNWSCreature::SendFeedbackMessage, + &SendFeedbackMessageHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_COMBAT_MODE_.*", []() { s_SetCombatModeHook = Hooks::HookFunction( - API::Functions::_ZN12CNWSCreature13SetCombatModeEhi, - (void*)&SetCombatModeHook, Hooks::Order::Early); + &CNWSCreature::SetCombatMode, + &SetCombatModeHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/DMActionEvents.cpp b/Plugins/Events/Events/DMActionEvents.cpp index b2ef2f4264d..f05beaa8901 100644 --- a/Plugins/Events/Events/DMActionEvents.cpp +++ b/Plugins/Events/Events/DMActionEvents.cpp @@ -8,6 +8,7 @@ #include "API/CNetLayer.hpp" #include "API/CNetLayerPlayerInfo.hpp" #include "API/CNWSPlayer.hpp" +#include "API/CNWSMessage.hpp" #include namespace Events { @@ -30,8 +31,8 @@ void DMActionEvents() { InitOnFirstSubscribe("NWNX_ON_DM_.*", []() { s_HandlePlayerToServerDungeonMasterMessageHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage40HandlePlayerToServerDungeonMasterMessageEP10CNWSPlayerhi, - (void*)&HandleDMMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerDungeonMasterMessage, + &HandleDMMessageHook, Hooks::Order::Early); }); } @@ -602,7 +603,7 @@ int32_t HandleDMMessageHook(CNWSMessage *thisPtr, CNWSPlayer *pPlayer, uint8_t n case MessageDungeonMasterMinor::GetVar: { event += "GET_VARIABLE"; - + int32_t offset = 0; uint8_t varType = Utils::PeekMessage(thisPtr, offset); offset += sizeof(uint8_t); diff --git a/Plugins/Events/Events/DebugEvents.cpp b/Plugins/Events/Events/DebugEvents.cpp index f8c324b3a62..d67a815e2e8 100644 --- a/Plugins/Events/Events/DebugEvents.cpp +++ b/Plugins/Events/Events/DebugEvents.cpp @@ -16,8 +16,8 @@ void DebugEvents() { InitOnFirstSubscribe("NWNX_ON_DEBUG_.*", []() { s_HandlePlayerToServerCheatMessageHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage32HandlePlayerToServerCheatMessageEP10CNWSPlayerh, - (void*)&HandlePlayerToServerCheatMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerCheatMessage, + &HandlePlayerToServerCheatMessageHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/EffectEvents.cpp b/Plugins/Events/Events/EffectEvents.cpp index 86dcd29ea81..a302022463d 100644 --- a/Plugins/Events/Events/EffectEvents.cpp +++ b/Plugins/Events/Events/EffectEvents.cpp @@ -1,5 +1,6 @@ #include "Events.hpp" #include "API/CNWSObject.hpp" +#include "API/CNWSEffectListHandler.hpp" namespace Events { @@ -19,13 +20,13 @@ void EffectEvents() { InitOnFirstSubscribe("NWNX_ON_EFFECT_APPLIED_.*", []() { s_OnEffectAppliedHook = Hooks::HookFunction( - NWNXLib::API::Functions::_ZN21CNWSEffectListHandler15OnEffectAppliedEP10CNWSObjectP11CGameEffecti, - (void*)&OnEffectAppliedHook, Hooks::Order::Earliest); + &CNWSEffectListHandler::OnEffectApplied, + &OnEffectAppliedHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_EFFECT_REMOVED_.*", []() { s_OnEffectRemovedHook = Hooks::HookFunction( - NWNXLib::API::Functions::_ZN21CNWSEffectListHandler15OnEffectRemovedEP10CNWSObjectP11CGameEffect, - (void*)&OnEffectRemovedHook, Hooks::Order::Earliest); + &CNWSEffectListHandler::OnEffectRemoved, + &OnEffectRemovedHook, Hooks::Order::Earliest); }); } diff --git a/Plugins/Events/Events/EventScriptEvents.cpp b/Plugins/Events/Events/EventScriptEvents.cpp index aa3bafb1384..098ec22ed35 100644 --- a/Plugins/Events/Events/EventScriptEvents.cpp +++ b/Plugins/Events/Events/EventScriptEvents.cpp @@ -26,23 +26,23 @@ void HookEvents() InitOnFirstSubscribe("NWNX_ON_RUN_EVENT_SCRIPT_(BEFORE|AFTER)", []() { ForceEnableWhitelist("NWNX_ON_RUN_EVENT_SCRIPT"); - s_runAreaEventScript = NWNXLib::Hooks::HookFunction(Functions::_ZN8CNWSArea14RunEventScriptEiP10CExoString, - (void*)&AreaRunEventScript, NWNXLib::Hooks::Order::Earliest); + s_runAreaEventScript = NWNXLib::Hooks::HookFunction(&CNWSArea::RunEventScript, + &AreaRunEventScript, NWNXLib::Hooks::Order::Earliest); - s_runModuleEventScript = NWNXLib::Hooks::HookFunction(Functions::_ZN10CNWSModule14RunEventScriptEiP10CExoString, - (void*)&ModuleRunEventScript, NWNXLib::Hooks::Order::Earliest); + s_runModuleEventScript = NWNXLib::Hooks::HookFunction(&CNWSModule::RunEventScript, + &ModuleRunEventScript, NWNXLib::Hooks::Order::Earliest); - s_runObjectEventScript = NWNXLib::Hooks::HookFunction(Functions::_ZN10CNWSObject14RunEventScriptEiP10CExoString, - (void*)&ObjectRunEventScript, NWNXLib::Hooks::Order::Earliest); + s_runObjectEventScript = NWNXLib::Hooks::HookFunction(&CNWSObject::RunEventScript, + &ObjectRunEventScript, NWNXLib::Hooks::Order::Earliest); }); } -static BOOL DoEH(uint32_t tySelf, ObjectID idSelf, +static BOOL DoEH(uint32_t tySelf, ObjectID idSelf, int32_t nScriptIdx, CExoString* psScript, std::function fnEv) { const int32_t nType = tySelf * 1000 + nScriptIdx; - + if (!IsIDInWhitelist("NWNX_ON_RUN_EVENT_SCRIPT", nType)) { return fnEv(); @@ -72,7 +72,7 @@ BOOL AreaRunEventScript(CNWSArea* thisPtr, int32_t nScript, CExoString* psOverri CExoString* psScript = psOverrideScriptName ? psOverrideScriptName : &(thisPtr->m_sScripts[nScript]); return DoEH(thisPtr->m_nObjectType, thisPtr->m_idSelf, nScript, psScript, [&]() -> BOOL { - return s_runAreaEventScript->CallOriginal(thisPtr, nScript, psOverrideScriptName); + return s_runAreaEventScript->CallOriginal(thisPtr, nScript, psOverrideScriptName); }); } diff --git a/Plugins/Events/Events/ExamineEvents.cpp b/Plugins/Events/Events/ExamineEvents.cpp index 43974b78836..5ed34103be6 100644 --- a/Plugins/Events/Events/ExamineEvents.cpp +++ b/Plugins/Events/Events/ExamineEvents.cpp @@ -24,7 +24,7 @@ void ExamineEvents() #define HOOK_EXAMINE(_address) \ static Hooks::Hook CAT(pExamineHook, __LINE__) = Hooks::HookFunction(_address, \ - (void*)+[](CNWSMessage *pMessage, CNWSPlayer* pPlayer, ObjectID oidObject) -> int32_t \ + +[](CNWSMessage *pMessage, CNWSPlayer* pPlayer, ObjectID oidObject) -> int32_t \ { \ HandleExamine(true, pPlayer->m_oidNWSObject, oidObject); \ auto retVal = CAT(pExamineHook, __LINE__)->CallOriginal(pMessage, pPlayer, oidObject); \ @@ -32,28 +32,28 @@ void ExamineEvents() return retVal; \ }, Hooks::Order::Earliest) - HOOK_EXAMINE(API::Functions::_ZN11CNWSMessage41SendServerToPlayerExamineGui_CreatureDataEP10CNWSPlayerj); - HOOK_EXAMINE(API::Functions::_ZN11CNWSMessage37SendServerToPlayerExamineGui_DoorDataEP10CNWSPlayerj); - HOOK_EXAMINE(API::Functions::_ZN11CNWSMessage37SendServerToPlayerExamineGui_ItemDataEP10CNWSPlayerj); - HOOK_EXAMINE(API::Functions::_ZN11CNWSMessage42SendServerToPlayerExamineGui_PlaceableDataEP10CNWSPlayerj); + HOOK_EXAMINE(&CNWSMessage::SendServerToPlayerExamineGui_CreatureData); + HOOK_EXAMINE(&CNWSMessage::SendServerToPlayerExamineGui_DoorData); + HOOK_EXAMINE(&CNWSMessage::SendServerToPlayerExamineGui_ItemData); + HOOK_EXAMINE(&CNWSMessage::SendServerToPlayerExamineGui_PlaceableData); #undef HOOK_EXAMINE s_SendServerToPlayerExamineGui_TrapDataHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage37SendServerToPlayerExamineGui_TrapDataEP10CNWSPlayerjP12CNWSCreaturei, - (void*)&ExamineTrapHook, Hooks::Order::Earliest); + &CNWSMessage::SendServerToPlayerExamineGui_TrapData, + &ExamineTrapHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_CHARACTER_SHEET_PERMITTED_.*", []() { s_PermittedToDisplayCharacterSheetHook = Hooks::HookFunction( - API::Functions::_ZN10CNWSPlayer32PermittedToDisplayCharacterSheetEj, - (void*)&PermittedToDisplayCharacterSheetHook, Hooks::Order::Early); + &CNWSPlayer::PermittedToDisplayCharacterSheet, + &PermittedToDisplayCharacterSheetHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_CHARACTER_SHEET_(OPEN|CLOSE)_.*", []() { static Hooks::Hook s_HandlePlayerToServerCharacterSheetMessageHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage41HandlePlayerToServerCharacterSheetMessageEP10CNWSPlayerh, - (void*)&HandlePlayerToServerCharacterSheetMessageHook, Hooks::Order::Final); + &CNWSMessage::HandlePlayerToServerCharacterSheetMessage, + &HandlePlayerToServerCharacterSheetMessageHook, Hooks::Order::Final); }); } diff --git a/Plugins/Events/Events/FactionEvents.cpp b/Plugins/Events/Events/FactionEvents.cpp index bff9e30f331..6a3901b1036 100644 --- a/Plugins/Events/Events/FactionEvents.cpp +++ b/Plugins/Events/Events/FactionEvents.cpp @@ -15,8 +15,8 @@ void FactionEvents() __attribute__((constructor)); void FactionEvents() { InitOnFirstSubscribe("NWNX_ON_SET_NPC_FACTION_REPUTATION_.*", []() { - s_HandleSetNPCFactionReputationHook = Hooks::HookFunction(API::Functions::_ZN15CFactionManager23SetNPCFactionReputationEiii, - (void*)&HandleSetNPCFactionReputationHook, Hooks::Order::Early); + s_HandleSetNPCFactionReputationHook = Hooks::HookFunction(&CFactionManager::SetNPCFactionReputation, + &HandleSetNPCFactionReputationHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/FeatEvents.cpp b/Plugins/Events/Events/FeatEvents.cpp index b6143a19a05..64444eab861 100644 --- a/Plugins/Events/Events/FeatEvents.cpp +++ b/Plugins/Events/Events/FeatEvents.cpp @@ -18,11 +18,11 @@ void FeatEvents() __attribute__((constructor)); void FeatEvents() { InitOnFirstSubscribe("NWNX_ON_USE_FEAT_.*", []() { - s_UseFeatHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature7UseFeatEttjjP6Vector, (void*)&UseFeatHook, Hooks::Order::Early); + s_UseFeatHook = Hooks::HookFunction(&CNWSCreature::UseFeat, &UseFeatHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_HAS_FEAT_.*", []() { ForceEnableWhitelist("NWNX_ON_HAS_FEAT"); - s_HasFeatHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats7HasFeatEt, (void*)&HasFeatHook, Hooks::Order::Early); + s_HasFeatHook = Hooks::HookFunction(&CNWSCreatureStats::HasFeat, &HasFeatHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/HealingEvents.cpp b/Plugins/Events/Events/HealingEvents.cpp index b73cc76f4c9..3db2f38b288 100644 --- a/Plugins/Events/Events/HealingEvents.cpp +++ b/Plugins/Events/Events/HealingEvents.cpp @@ -1,6 +1,7 @@ #include "Events.hpp" #include "API/CNWSCreature.hpp" #include "API/CNWSObjectActionNode.hpp" +#include "API/CNWSEffectListHandler.hpp" namespace Events { @@ -16,12 +17,12 @@ void HealingEvents() __attribute__((constructor)); void HealingEvents() { InitOnFirstSubscribe("NWNX_ON_HEALER_KIT_.*", []() { - s_AIActionHealHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature12AIActionHealEP20CNWSObjectActionNode, - (void*)&AIActionHealHook, Hooks::Order::Early); + s_AIActionHealHook = Hooks::HookFunction(&CNWSCreature::AIActionHeal, + &AIActionHealHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_HEAL_.*", []() { - s_OnApplyHealHook = Hooks::HookFunction(API::Functions::_ZN21CNWSEffectListHandler11OnApplyHealEP10CNWSObjectP11CGameEffecti, - (void*)&OnApplyHealHook, Hooks::Order::Early); + s_OnApplyHealHook = Hooks::HookFunction(&CNWSEffectListHandler::OnApplyHeal, + &OnApplyHealHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/InputEvents.cpp b/Plugins/Events/Events/InputEvents.cpp index 2eac9ac275e..029b3424a84 100644 --- a/Plugins/Events/Events/InputEvents.cpp +++ b/Plugins/Events/Events/InputEvents.cpp @@ -32,36 +32,36 @@ void InputEvents() { InitOnFirstSubscribe("NWNX_ON_INPUT_WALK_TO_WAYPOINT_.*", []() { s_HandlePlayerToServerInputWalkToWaypointHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage39HandlePlayerToServerInputWalkToWaypointEP10CNWSPlayer, - (void*)&HandlePlayerToServerInputWalkToWaypointHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerInputWalkToWaypoint, + &HandlePlayerToServerInputWalkToWaypointHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_INPUT_ATTACK_OBJECT_.*", []() { - s_AddAttackActionsHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature16AddAttackActionsEjiii, - (void*)&AddAttackActionsHook, Hooks::Order::Early); + s_AddAttackActionsHook = Hooks::HookFunction(&CNWSCreature::AddAttackActions, + &AddAttackActionsHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_INPUT_FORCE_MOVE_TO_OBJECT_.*", []() { s_AddMoveToPointActionToFrontHook = Hooks::HookFunction( - API::Functions::_ZN12CNWSCreature27AddMoveToPointActionToFrontEt6Vectorjjiffiiiiii, - (void*)&AddMoveToPointActionToFrontHook, Hooks::Order::Early); + &CNWSCreature::AddMoveToPointActionToFront, + &AddMoveToPointActionToFrontHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_INPUT_CAST_SPELL_.*", []() { - s_AddCastSpellActionsHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature19AddCastSpellActionsEjiiii6Vectorjiiihiiih, - (void*)&AddCastSpellActionsHook, Hooks::Order::Early); + s_AddCastSpellActionsHook = Hooks::HookFunction(&CNWSCreature::AddCastSpellActions, + &AddCastSpellActionsHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_INPUT_(KEYBOARD|TOGGLE_PAUSE|EMOTE)_.*", []() { s_HandlePlayerToServerInputMessageHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage32HandlePlayerToServerInputMessageEP10CNWSPlayerh, - (void*)&HandlePlayerToServerInputMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerInputMessage, + &HandlePlayerToServerInputMessageHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_INPUT_DROP_ITEM_.*", []() { s_HandlePlayerToServerInventoryMessageHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage36HandlePlayerToServerInventoryMessageEP10CNWSPlayerh, - (void*)&HandlePlayerToServerInventoryMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerInventoryMessage, + &HandlePlayerToServerInventoryMessageHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/InventoryEvents.cpp b/Plugins/Events/Events/InventoryEvents.cpp index c7185c9c6d3..8212f636e47 100644 --- a/Plugins/Events/Events/InventoryEvents.cpp +++ b/Plugins/Events/Events/InventoryEvents.cpp @@ -32,28 +32,28 @@ void InventoryEvents() InitOnFirstSubscribe("NWNX_ON_INVENTORY_(SELECT|OPEN)_.*", []() { s_HandlePlayerToServerGuiInventoryMessageHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage39HandlePlayerToServerGuiInventoryMessageEP10CNWSPlayerh, - (void*)&HandlePlayerToServerGuiInventoryMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerGuiInventoryMessage, + &HandlePlayerToServerGuiInventoryMessageHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_INVENTORY_ADD_ITEM_.*", []() { - s_AddItemHook = Hooks::HookFunction(API::Functions::_ZN15CItemRepository7AddItemEPP8CNWSItemhhii, - (void*)&AddItemHook, Hooks::Order::Early); + s_AddItemHook = Hooks::HookFunction(&CItemRepository::AddItem, + &AddItemHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_INVENTORY_REMOVE_ITEM_.*", []() { - s_RemoveItemHook = Hooks::HookFunction(API::Functions::_ZN15CItemRepository10RemoveItemEP8CNWSItem, - (void*)&RemoveItemHook, Hooks::Order::Earliest); + s_RemoveItemHook = Hooks::HookFunction(&CItemRepository::RemoveItem, + &RemoveItemHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_INVENTORY_ADD_GOLD_.*", []() { - s_AddGoldHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature7AddGoldEii, - (void*)&AddGoldHook, Hooks::Order::Early); + s_AddGoldHook = Hooks::HookFunction(&CNWSCreature::AddGold, + &AddGoldHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_INVENTORY_REMOVE_GOLD_.*", []() { - s_RemoveGoldHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature10RemoveGoldEii, - (void*)&RemoveGoldHook, Hooks::Order::Early); + s_RemoveGoldHook = Hooks::HookFunction(&CNWSCreature::RemoveGold, + &RemoveGoldHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/ItemEvents.cpp b/Plugins/Events/Events/ItemEvents.cpp index 682a84f8056..b679625f847 100644 --- a/Plugins/Events/Events/ItemEvents.cpp +++ b/Plugins/Events/Events/ItemEvents.cpp @@ -49,78 +49,78 @@ void ItemEvents() __attribute__((constructor)); void ItemEvents() { InitOnFirstSubscribe("NWNX_ON_VALIDATE_USE_ITEM_.*", []() { - s_CanUseItemHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature10CanUseItemEP8CNWSItemi, - (void*)&CanUseItemHook, Hooks::Order::Early); + s_CanUseItemHook = Hooks::HookFunction(&CNWSCreature::CanUseItem, + &CanUseItemHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_USE_ITEM_.*", []() { - s_UseItemHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature7UseItemEjhhj6Vectorji, - (void*)&UseItemHook, Hooks::Order::Early); + s_UseItemHook = Hooks::HookFunction(&CNWSCreature::UseItem, + &UseItemHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_INVENTORY_OPEN_.*", []() { - s_OpenInventoryHook = Hooks::HookFunction(API::Functions::_ZN8CNWSItem13OpenInventoryEj, - (void*)&OpenInventoryHook, Hooks::Order::Early); + s_OpenInventoryHook = Hooks::HookFunction(&CNWSItem::OpenInventory, + &OpenInventoryHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_INVENTORY_CLOSE_.*", []() { - s_CloseInventoryHook = Hooks::HookFunction(API::Functions::_ZN8CNWSItem14CloseInventoryEji, - (void*)&CloseInventoryHook, Hooks::Order::Early); + s_CloseInventoryHook = Hooks::HookFunction(&CNWSItem::CloseInventory, + &CloseInventoryHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_AMMO_RELOAD_.*", []() { - s_FindItemWithBaseItemIdHook = Hooks::HookFunction(API::Functions::_ZN15CItemRepository22FindItemWithBaseItemIdEji, - (void*)&FindItemWithBaseItemIdHook, Hooks::Order::Early); + s_FindItemWithBaseItemIdHook = Hooks::HookFunction(&CItemRepository::FindItemWithBaseItemId, + &FindItemWithBaseItemIdHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_SCROLL_LEARN_.*", []() { - s_LearnScrollHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature11LearnScrollEj, - (void*)&LearnScrollHook, Hooks::Order::Early); + s_LearnScrollHook = Hooks::HookFunction(&CNWSCreature::LearnScroll, + &LearnScrollHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_VALIDATE_ITEM_EQUIP_.*", []() { - s_CanEquipItemHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature12CanEquipItemEP8CNWSItemPjiiiP10CNWSPlayer, - (void*)&CanEquipItemHook, Hooks::Order::Early); + s_CanEquipItemHook = Hooks::HookFunction(&CNWSCreature::CanEquipItem, + &CanEquipItemHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_EQUIP_.*", []() { - s_RunEquipHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature8RunEquipEjjj, - (void*)&RunEquipHook, Hooks::Order::Early); + s_RunEquipHook = Hooks::HookFunction(&CNWSCreature::RunEquip, + &RunEquipHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_UNEQUIP_.*", []() { - s_RunUnequipHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature10RunUnequipEjjhhij, - (void*)&RunUnequipHook, Hooks::Order::Early); + s_RunUnequipHook = Hooks::HookFunction(&CNWSCreature::RunUnequip, + &RunUnequipHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_(DESTROY_OBJECT|DECREMENT_STACKSIZE)_.*", []() { - s_ItemEventHandlerHook = Hooks::HookFunction(API::Functions::_ZN8CNWSItem12EventHandlerEjjPvjj, - (void*)&ItemEventHandlerHook, Hooks::Order::Early); + s_ItemEventHandlerHook = Hooks::HookFunction(&CNWSItem::EventHandler, + &ItemEventHandlerHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_USE_LORE_.*", []() { - s_UseLoreOnItemHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature13UseLoreOnItemEj, - (void*)&UseLoreOnItemHook, Hooks::Order::Early); + s_UseLoreOnItemHook = Hooks::HookFunction(&CNWSCreature::UseLoreOnItem, + &UseLoreOnItemHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_PAY_TO_IDENTIFY_.*", []() { - s_PayToIdenfifyItemHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature17PayToIdentifyItemEjj, - (void*)&PayToIdentifyItemHook, Hooks::Order::Early); + s_PayToIdenfifyItemHook = Hooks::HookFunction(&CNWSCreature::PayToIdentifyItem, + &PayToIdentifyItemHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_SPLIT_.*", []() { - s_SplitItemHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature9SplitItemEP8CNWSItemi, - (void*)&SplitItemHook, Hooks::Order::Early); + s_SplitItemHook = Hooks::HookFunction(&CNWSCreature::SplitItem, + &SplitItemHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_MERGE_.*", []() { - s_MergeItemHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature9MergeItemEP8CNWSItemS1_, - (void*)&MergeItemHook, Hooks::Order::Early); + s_MergeItemHook = Hooks::HookFunction(&CNWSCreature::MergeItem, + &MergeItemHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_ITEM_ACQUIRE_.*", []() { - s_AcquireItemHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature11AcquireItemEPP8CNWSItemjjhhii, - (void*)&AcquireItemHook, Hooks::Order::Early); + s_AcquireItemHook = Hooks::HookFunction(&CNWSCreature::AcquireItem, + &AcquireItemHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/JournalEvents.cpp b/Plugins/Events/Events/JournalEvents.cpp index 5ccb2200259..ccff16ac226 100644 --- a/Plugins/Events/Events/JournalEvents.cpp +++ b/Plugins/Events/Events/JournalEvents.cpp @@ -16,8 +16,8 @@ void JournalEvents() { InitOnFirstSubscribe("NWNX_ON_JOURNAL_(OPEN|CLOSE)_.*", []() { s_HandlePlayerToServerJournalMessageHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage34HandlePlayerToServerJournalMessageEP10CNWSPlayerh, - (void*)&HandlePlayerToServerJournalMessageHook, Hooks::Order::Earliest); + &CNWSMessage::HandlePlayerToServerJournalMessage, + &HandlePlayerToServerJournalMessageHook, Hooks::Order::Earliest); }); } diff --git a/Plugins/Events/Events/LevelEvents.cpp b/Plugins/Events/Events/LevelEvents.cpp index 0b2c3b5e6ec..1611143b2af 100644 --- a/Plugins/Events/Events/LevelEvents.cpp +++ b/Plugins/Events/Events/LevelEvents.cpp @@ -23,20 +23,20 @@ void LevelEvents() __attribute__((constructor)); void LevelEvents() { InitOnFirstSubscribe("NWNX_ON_LEVEL_UP_.*", []() { - s_LevelUpHook = Hooks::HookFunction(API::Functions::_ZN17CNWSCreatureStats7LevelUpEP13CNWLevelStatshhhi, - (void*)&LevelUpHook, Hooks::Order::Earliest); + s_LevelUpHook = Hooks::HookFunction(&CNWSCreatureStats::LevelUp, + &LevelUpHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_LEVEL_UP_AUTOMATIC_.*", []() { - s_LevelUpAutomaticHook= Hooks::HookFunction(API::Functions::_ZN17CNWSCreatureStats16LevelUpAutomaticEhih, - (void*)&LevelUpAutomaticHook, Hooks::Order::Earliest); + s_LevelUpAutomaticHook= Hooks::HookFunction(&CNWSCreatureStats::LevelUpAutomatic, + &LevelUpAutomaticHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_LEVEL_DOWN_.*", []() { - s_LevelDownHook = Hooks::HookFunction(API::Functions::_ZN17CNWSCreatureStats9LevelDownEP13CNWLevelStats, - (void*)&LevelDownHook, Hooks::Order::Earliest); + s_LevelDownHook = Hooks::HookFunction(&CNWSCreatureStats::LevelDown, + &LevelDownHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_CLIENT_LEVEL_UP_BEGIN_.*", []() { - s_HandlePlayerToServerLevelUpMessageHook = Hooks::HookFunction(API::Functions::_ZN11CNWSMessage34HandlePlayerToServerLevelUpMessageEP10CNWSPlayerh, - (void*)&HandlePlayerToServerLevelUpMessageHook, Hooks::Order::Early); + s_HandlePlayerToServerLevelUpMessageHook = Hooks::HookFunction(&CNWSMessage::HandlePlayerToServerLevelUpMessage, + &HandlePlayerToServerLevelUpMessageHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/MapEvents.cpp b/Plugins/Events/Events/MapEvents.cpp index 4c00cef76ec..a6762a8574d 100644 --- a/Plugins/Events/Events/MapEvents.cpp +++ b/Plugins/Events/Events/MapEvents.cpp @@ -21,20 +21,20 @@ void MapEvents() { InitOnFirstSubscribe("NWNX_ON_MAP_PIN_ADD_PIN_.*", []() { s_HandlePlayerToServerMapPinSetMapPinAtHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage37HandlePlayerToServerMapPinSetMapPinAtEP10CNWSPlayer, - (void*)&HandleMapPinSetMapPinAtMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerMapPinSetMapPinAt, + &HandleMapPinSetMapPinAtMessageHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_MAP_PIN_CHANGE_PIN_.*", []() { s_HandlePlayerToServerMapPinChangePinHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage35HandlePlayerToServerMapPinChangePinEP10CNWSPlayer, - (void*)&HandleMapPinChangePinMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerMapPinChangePin, + &HandleMapPinChangePinMessageHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_MAP_PIN_DESTROY_PIN_.*", []() { s_HandlePlayerToServerMapPinDestroyMapPinHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage39HandlePlayerToServerMapPinDestroyMapPinEP10CNWSPlayer, - (void*)&HandleMapPinDestroyMapPinMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerMapPinDestroyMapPin, + &HandleMapPinDestroyMapPinMessageHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/MaterialChangeEvents.cpp b/Plugins/Events/Events/MaterialChangeEvents.cpp index caca2b19b39..49f3eb197fc 100644 --- a/Plugins/Events/Events/MaterialChangeEvents.cpp +++ b/Plugins/Events/Events/MaterialChangeEvents.cpp @@ -17,8 +17,8 @@ void MaterialChangeEvents() __attribute__((constructor)); void MaterialChangeEvents() { InitOnFirstSubscribe("NWNX_ON_MATERIALCHANGE_.*", []() { - s_SetPositionHook = Hooks::HookFunction(API::Functions::_ZN10CNWSObject11SetPositionE6Vectori, - (void*)&SetPositionHook, Hooks::Order::Earliest); + s_SetPositionHook = Hooks::HookFunction(&CNWSObject::SetPosition, + &SetPositionHook, Hooks::Order::Earliest); }); } diff --git a/Plugins/Events/Events/ObjectEvents.cpp b/Plugins/Events/Events/ObjectEvents.cpp index 6d57d82dd5c..c10b9c971dc 100644 --- a/Plugins/Events/Events/ObjectEvents.cpp +++ b/Plugins/Events/Events/ObjectEvents.cpp @@ -19,19 +19,19 @@ void ObjectEvents() __attribute__((constructor)); void ObjectEvents() { InitOnFirstSubscribe("NWNX_ON_OBJECT_LOCK_.*", []() { - s_AddLockObjectActionHook = Hooks::HookFunction(API::Functions::_ZN10CNWSObject19AddLockObjectActionEj, - (void*)&AddLockObjectActionHook, Hooks::Order::Early); + s_AddLockObjectActionHook = Hooks::HookFunction(&CNWSObject::AddLockObjectAction, + &AddLockObjectActionHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_OBJECT_UNLOCK_.*", []() { - s_AddUnlockObjectActionHook = Hooks::HookFunction(API::Functions::_ZN10CNWSObject21AddUnlockObjectActionEjji, - (void*)&AddUnlockObjectActionHook, Hooks::Order::Early); + s_AddUnlockObjectActionHook = Hooks::HookFunction(&CNWSObject::AddUnlockObjectAction, + &AddUnlockObjectActionHook, Hooks::Order::Early); }); - + InitOnFirstSubscribe("NWNX_ON_OBJECT_USE_.*", []() { - s_AddUseObjectActionHook = Hooks::HookFunction(API::Functions::_ZN10CNWSObject18AddUseObjectActionEj, + s_AddUseObjectActionHook = Hooks::HookFunction(&CNWSObject::AddUseObjectAction, (void*)&AddUseObjectActionHook, Hooks::Order::Early); - }); + }); } int32_t AddLockObjectActionHook(CNWSObject *thisPtr, ObjectID oidDoor) diff --git a/Plugins/Events/Events/PVPEvents.cpp b/Plugins/Events/Events/PVPEvents.cpp index ed0a72afbf7..da0bfb8ed9a 100644 --- a/Plugins/Events/Events/PVPEvents.cpp +++ b/Plugins/Events/Events/PVPEvents.cpp @@ -18,8 +18,8 @@ void PVPEvents() { InitOnFirstSubscribe("NWNX_ON_PVP_ATTITUDE_CHANGE_.*", []() { s_HandlePlayerToServerPVPListOperationsHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage37HandlePlayerToServerPVPListOperationsEP10CNWSPlayerh, - (void*)&HandlePlayerToServerPVPListOperationsHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerPVPListOperations, + &HandlePlayerToServerPVPListOperationsHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/PartyEvents.cpp b/Plugins/Events/Events/PartyEvents.cpp index 41336fee64b..8a81f961d4c 100644 --- a/Plugins/Events/Events/PartyEvents.cpp +++ b/Plugins/Events/Events/PartyEvents.cpp @@ -17,8 +17,8 @@ void PartyEvents() { InitOnFirstSubscribe("NWNX_ON_PARTY_.*", []() { s_HandlePlayerToServerPartyHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage25HandlePlayerToServerPartyEP10CNWSPlayerh, - (void*)&HandlePartyMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerParty, + &HandlePartyMessageHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/PolymorphEvents.cpp b/Plugins/Events/Events/PolymorphEvents.cpp index 76f249ad38f..b2f0abc0421 100644 --- a/Plugins/Events/Events/PolymorphEvents.cpp +++ b/Plugins/Events/Events/PolymorphEvents.cpp @@ -1,5 +1,6 @@ #include "Events.hpp" #include "API/CNWSCreature.hpp" +#include "API/CNWSEffectListHandler.hpp" namespace Events { @@ -16,12 +17,12 @@ void PolymorphEvents() __attribute__((constructor)); void PolymorphEvents() { InitOnFirstSubscribe("NWNX_ON_POLYMORPH_.*", []() { - s_OnApplyPolymorphHook = Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler16OnApplyPolymorphEP10CNWSObjectP11CGameEffecti, - (void*)&OnApplyPolymorphHook, Hooks::Order::Early); + s_OnApplyPolymorphHook = Hooks::HookFunction(&CNWSEffectListHandler::OnApplyPolymorph, + &OnApplyPolymorphHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_UNPOLYMORPH_.*", []() { - s_OnRemovePolymorphHook = Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler17OnRemovePolymorphEP10CNWSObjectP11CGameEffect, - (void*)&OnRemovePolymorphHook, Hooks::Order::Early); + s_OnRemovePolymorphHook = Hooks::HookFunction(&CNWSEffectListHandler::OnRemovePolymorph, + &OnRemovePolymorphHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/QuickChatEvents.cpp b/Plugins/Events/Events/QuickChatEvents.cpp index cde976b1f3a..f4dcfc6c406 100644 --- a/Plugins/Events/Events/QuickChatEvents.cpp +++ b/Plugins/Events/Events/QuickChatEvents.cpp @@ -16,8 +16,8 @@ void QuickChatEvents() { InitOnFirstSubscribe("NWNX_ON_QUICKCHAT_.*", []() { s_HandlePlayerToServerQuickChatMessageHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage36HandlePlayerToServerQuickChatMessageEP10CNWSPlayerh, - (void*)&HandlePlayerToServerQuickChatMessageHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerQuickChatMessage, + &HandlePlayerToServerQuickChatMessageHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/QuickbarEvents.cpp b/Plugins/Events/Events/QuickbarEvents.cpp index 631368f24c8..b4d4f7e735b 100644 --- a/Plugins/Events/Events/QuickbarEvents.cpp +++ b/Plugins/Events/Events/QuickbarEvents.cpp @@ -16,8 +16,8 @@ void QuickbarEvents() { InitOnFirstSubscribe("NWNX_ON_QUICKBAR_SET_BUTTON_.*", []() { s_HandlePlayerToServerGuiQuickbar_SetButtonHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage41HandlePlayerToServerGuiQuickbar_SetButtonEP10CNWSPlayerhh, - (void*)&HandlePlayerToServerGuiQuickbar_SetButtonHook, Hooks::Order::Early); + &CNWSMessage::HandlePlayerToServerGuiQuickbar_SetButton, + &HandlePlayerToServerGuiQuickbar_SetButtonHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/SkillEvents.cpp b/Plugins/Events/Events/SkillEvents.cpp index 4726e0667c8..e2349f91be4 100644 --- a/Plugins/Events/Events/SkillEvents.cpp +++ b/Plugins/Events/Events/SkillEvents.cpp @@ -13,8 +13,8 @@ void SkillEvents() __attribute__((constructor)); void SkillEvents() { InitOnFirstSubscribe("NWNX_ON_USE_SKILL_.*", []() { - s_UseSkillHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature8UseSkillEhhj6Vectorjji, - (void*)&UseSkillHook, Hooks::Order::Early); + s_UseSkillHook = Hooks::HookFunction(&CNWSCreature::UseSkill, + &UseSkillHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/SpellEvents.cpp b/Plugins/Events/Events/SpellEvents.cpp index 190b6800e17..f5d9c9c6403 100644 --- a/Plugins/Events/Events/SpellEvents.cpp +++ b/Plugins/Events/Events/SpellEvents.cpp @@ -1,6 +1,7 @@ #include "Events.hpp" #include "API/CNWSCreature.hpp" #include "API/CNWSCreatureStats.hpp" +#include "API/CNWSEffectListHandler.hpp" #include "API/CNWRules.hpp" #include "API/CNWSpellArray.hpp" @@ -27,33 +28,33 @@ void SpellEvents() __attribute__((constructor)); void SpellEvents() { InitOnFirstSubscribe("NWNX_ON_CAST_SPELL_.*", []() { - s_SpellCastAndImpactHook = Hooks::HookFunction(Functions::_ZN10CNWSObject18SpellCastAndImpactEj6Vectorjhjiihi, - (void*)&SpellCastAndImpactHook, Hooks::Order::Early); + s_SpellCastAndImpactHook = Hooks::HookFunction(&CNWSObject::SpellCastAndImpact, + &SpellCastAndImpactHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_SET_MEMORIZED_SPELL_SLOT_.*", []() { - s_SetMemorizedSpellSlotHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats21SetMemorizedSpellSlotEhhjhhi, - (void*)&SetMemorizedSpellSlotHook, Hooks::Order::Early); + s_SetMemorizedSpellSlotHook = Hooks::HookFunction(&CNWSCreatureStats::SetMemorizedSpellSlot, + &SetMemorizedSpellSlotHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_CLEAR_MEMORIZED_SPELL_.*", []() { - s_ClearMemorizedSpellSlotHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats23ClearMemorizedSpellSlotEhhh, - (void*)&ClearMemorizedSpellSlotHook, Hooks::Order::Early); + s_ClearMemorizedSpellSlotHook = Hooks::HookFunction(&CNWSCreatureStats::ClearMemorizedSpellSlot, + &ClearMemorizedSpellSlotHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_BROADCAST_CAST_SPELL_.*", []() { - s_BroadcastSpellCastHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature18BroadcastSpellCastEjht, - (void*)&BroadcastSpellCastHook, Hooks::Order::Early); + s_BroadcastSpellCastHook = Hooks::HookFunction(&CNWSCreature::BroadcastSpellCast, + &BroadcastSpellCastHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_SPELL_INTERRUPTED_.*", []() { - s_OnEffectAppliedHook = Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler15OnEffectAppliedEP10CNWSObjectP11CGameEffecti, - (void*)&OnEffectAppliedHook, Hooks::Order::Earliest); + s_OnEffectAppliedHook = Hooks::HookFunction(&CNWSEffectListHandler::OnEffectApplied, + &OnEffectAppliedHook, Hooks::Order::Earliest); }); InitOnFirstSubscribe("NWNX_ON_DECREMENT_SPELL_COUNT_.*", []() { - s_DecrementSpellReadyCountHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature24DecrementSpellReadyCountEjhhhh, - (void*)&DecrementSpellReadyCountHook, Hooks::Order::Early); + s_DecrementSpellReadyCountHook = Hooks::HookFunction(&CNWSCreature::DecrementSpellReadyCount, + &DecrementSpellReadyCountHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/StealthEvents.cpp b/Plugins/Events/Events/StealthEvents.cpp index fa6d0562f70..e5c6af8f796 100644 --- a/Plugins/Events/Events/StealthEvents.cpp +++ b/Plugins/Events/Events/StealthEvents.cpp @@ -22,23 +22,23 @@ void StealthEvents() __attribute__((constructor)); void StealthEvents() { InitOnFirstSubscribe("NWNX_ON_STEALTH_E.*", []() { - s_SetStealthModeHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature14SetStealthModeEh, - (void*)&SetStealthModeHook, Hooks::Order::Early); + s_SetStealthModeHook = Hooks::HookFunction(&CNWSCreature::SetStealthMode, + &SetStealthModeHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_DETECT_E.*", []() { - s_SetDetectModeHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature13SetDetectModeEh, - (void*)&SetDetectModeHook, Hooks::Order::Early); + s_SetDetectModeHook = Hooks::HookFunction(&CNWSCreature::SetDetectMode, + &SetDetectModeHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_DO_LISTEN_DETECTION_.*", []() { - s_DoListenDetectionHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature17DoListenDetectionEPS_i, - (void*)&DoListenDetectionHook, Hooks::Order::Early); + s_DoListenDetectionHook = Hooks::HookFunction(&CNWSCreature::DoListenDetection, + &DoListenDetectionHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_DO_SPOT_DETECTION.*", []() { - s_DoSpotDetectionHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature15DoSpotDetectionEPS_i, - (void*)&DoSpotDetectionHook, Hooks::Order::Early); + s_DoSpotDetectionHook = Hooks::HookFunction(&CNWSCreature::DoSpotDetection, + &DoSpotDetectionHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/StoreEvents.cpp b/Plugins/Events/Events/StoreEvents.cpp index 1b3b9014409..0d229808ffb 100644 --- a/Plugins/Events/Events/StoreEvents.cpp +++ b/Plugins/Events/Events/StoreEvents.cpp @@ -18,11 +18,11 @@ void StoreEvents() __attribute__((constructor)); void StoreEvents() { InitOnFirstSubscribe("NWNX_ON_STORE_REQUEST_BUY_.*", []() { - s_RequestBuyHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature10RequestBuyEjjj, (void*)&RequestBuyHook, Hooks::Order::Early); + s_RequestBuyHook = Hooks::HookFunction(&CNWSCreature::RequestBuy, &RequestBuyHook, Hooks::Order::Early); }); InitOnFirstSubscribe("NWNX_ON_STORE_REQUEST_SELL_.*", []() { - s_RequestSellHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature11RequestSellEjj, (void*)&RequestSellHook, Hooks::Order::Early); + s_RequestSellHook = Hooks::HookFunction(&CNWSCreature::RequestSell, &RequestSellHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/TimingBarEvents.cpp b/Plugins/Events/Events/TimingBarEvents.cpp index 9d46bac7441..f3065c69662 100644 --- a/Plugins/Events/Events/TimingBarEvents.cpp +++ b/Plugins/Events/Events/TimingBarEvents.cpp @@ -17,10 +17,10 @@ void TimingBarEvents() __attribute__((constructor)); void TimingBarEvents() { InitOnFirstSubscribe("NWNX_ON_TIMING_BAR_.*", []() { - s_SendServerToPlayerGuiTimingEventHook = Hooks::HookFunction(API::Functions::_ZN11CNWSMessage32SendServerToPlayerGuiTimingEventEP10CNWSPlayerihj, - (void*)&SendServerToPlayerGuiTimingEventHook, Hooks::Order::Earliest); + s_SendServerToPlayerGuiTimingEventHook = Hooks::HookFunction(&CNWSMessage::SendServerToPlayerGuiTimingEvent, + &SendServerToPlayerGuiTimingEventHook, Hooks::Order::Earliest); s_HandlePlayerToServerInputCancelGuiTimingEventHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage45HandlePlayerToServerInputCancelGuiTimingEventEP10CNWSPlayer, + &CNWSMessage::HandlePlayerToServerInputCancelGuiTimingEvent, (void*)&HandlePlayerToServerInputCancelGuiTimingEventHook, Hooks::Order::Earliest); }); } diff --git a/Plugins/Events/Events/TrapEvents.cpp b/Plugins/Events/Events/TrapEvents.cpp index 8408596b1d0..192f66eac37 100644 --- a/Plugins/Events/Events/TrapEvents.cpp +++ b/Plugins/Events/Events/TrapEvents.cpp @@ -27,18 +27,18 @@ void TrapEvents() __attribute__((constructor)); void TrapEvents() { InitOnFirstSubscribe("NWNX_ON_TRAP_.*", []() { - s_AIActionDisarmTrapHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature18AIActionDisarmTrapEP20CNWSObjectActionNode, - (void*)&AIActionDisarmTrapHook, Hooks::Order::Early); - s_AIActionExamineTrapHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature19AIActionExamineTrapEP20CNWSObjectActionNode, - (void*)&AIActionExamineTrapHook, Hooks::Order::Early); - s_AIActionFlagTrapHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature16AIActionFlagTrapEP20CNWSObjectActionNode, - (void*)&AIActionFlagTrapHook, Hooks::Order::Early); - s_AIActionRecoverTrapHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature19AIActionRecoverTrapEP20CNWSObjectActionNode, - (void*)&AIActionRecoverTrapHook, Hooks::Order::Early); - s_AIActionSetTrapHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature15AIActionSetTrapEP20CNWSObjectActionNode, - (void*)&AIActionSetTrapHook, Hooks::Order::Early); - s_OnEnterTrapHook = Hooks::HookFunction(API::Functions::_ZN11CNWSTrigger11OnEnterTrapEi, - (void*)&OnEnterTrapHook, Hooks::Order::Early); + s_AIActionDisarmTrapHook = Hooks::HookFunction(&CNWSCreature::AIActionDisarmTrap, + &AIActionDisarmTrapHook, Hooks::Order::Early); + s_AIActionExamineTrapHook = Hooks::HookFunction(&CNWSCreature::AIActionExamineTrap, + &AIActionExamineTrapHook, Hooks::Order::Early); + s_AIActionFlagTrapHook = Hooks::HookFunction(&CNWSCreature::AIActionFlagTrap, + &AIActionFlagTrapHook, Hooks::Order::Early); + s_AIActionRecoverTrapHook = Hooks::HookFunction(&CNWSCreature::AIActionRecoverTrap, + &AIActionRecoverTrapHook, Hooks::Order::Early); + s_AIActionSetTrapHook = Hooks::HookFunction(&CNWSCreature::AIActionSetTrap, + &AIActionSetTrapHook, Hooks::Order::Early); + s_OnEnterTrapHook = Hooks::HookFunction(&CNWSTrigger::OnEnterTrap, + &OnEnterTrapHook, Hooks::Order::Early); }); } diff --git a/Plugins/Events/Events/UUIDEvents.cpp b/Plugins/Events/Events/UUIDEvents.cpp index 6a3d28937d1..9a917f6f321 100644 --- a/Plugins/Events/Events/UUIDEvents.cpp +++ b/Plugins/Events/Events/UUIDEvents.cpp @@ -17,8 +17,8 @@ void UUIDEvents() __attribute__((constructor)); void UUIDEvents() { InitOnFirstSubscribe("NWNX_ON_UUID_COLLISION_.*", []() { - s_UUIDLoadFromGffHook = NWNXLib::Hooks::HookFunction(Functions::_ZN8CNWSUUID11LoadFromGffEP7CResGFFP10CResStruct, - (void*)&LoadFromGffHook, NWNXLib::Hooks::Order::Earliest); + s_UUIDLoadFromGffHook = NWNXLib::Hooks::HookFunction(&CNWSUUID::LoadFromGff, + &LoadFromGffHook, NWNXLib::Hooks::Order::Earliest); }); } @@ -30,10 +30,7 @@ bool LoadFromGffHook(CNWSUUID *thisPtr, CResGFF *pResGFF, CResStruct *pResStruct if (success && !uuid.IsEmpty()) { - auto LookupObjectIdByUUID = reinterpret_cast( - NWNXLib::Platform::GetRelocatedAddress(Functions::_ZN8CNWSUUID20LookupObjectIdByUUIDERK10CExoString)); - - bCollided = LookupObjectIdByUUID(uuid) != Constants::OBJECT_INVALID; + bCollided = CNWSUUID::LookupObjectIdByUUID(uuid) != Constants::OBJECT_INVALID; if (bCollided) { diff --git a/Plugins/Events/NWScript/nwnx_events.nss b/Plugins/Events/NWScript/nwnx_events.nss index dfb002978e0..63181dddbdf 100644 --- a/Plugins/Events/NWScript/nwnx_events.nss +++ b/Plugins/Events/NWScript/nwnx_events.nss @@ -1588,6 +1588,10 @@ void NWNX_Events_SubscribeEvent(string evt, string script); /// @param script The script. void NWNX_Events_UnsubscribeEvent(string evt, string script); +/// @brief Unsubscribe all scripts from all events starting with prefix. +/// @param prefix the prefix to match against. Can be empty. +void NWNX_Events_UnsubscribeAllStartingWith(string prefix); + /// @brief Script chunks can subscribe to events. /// /// Some events are dispatched via the NWNX plugin (see NWNX_EVENTS_EVENT_* constants). @@ -1749,6 +1753,14 @@ void NWNX_Events_UnsubscribeEvent(string evt, string script) NWNX_CallFunction(NWNX_Events, sFunc); } +void NWNX_Events_UnsubscribeAllStartingWith(string prefix) +{ + string sFunc = "UnsubscribeAllStartingWith"; + + NWNX_PushArgumentString(prefix); + NWNX_CallFunction(NWNX_Events, sFunc); +} + void NWNX_Events_SubscribeEventScriptChunk(string sEvent, string sScriptChunk, int bWrapIntoMain = TRUE) { string sFunc = "SubscribeEventScriptChunk"; diff --git a/Plugins/Experimental/AdjustReputationFix.cpp b/Plugins/Experimental/AdjustReputationFix.cpp index b25ea833853..3b248a6bd76 100644 --- a/Plugins/Experimental/AdjustReputationFix.cpp +++ b/Plugins/Experimental/AdjustReputationFix.cpp @@ -19,8 +19,8 @@ void AdjustReputationFix() LOG_INFO("EXPERIMENTAL: Attempting to resolve faction/reputation crash."); - static Hooks::Hook s_AdjustReputationHook = Hooks::HookFunction(API::Functions::_ZN12CNWSCreature16AdjustReputationEii, - (void*)+[](CNWSCreature *pThis, int32_t nFactionId, int32_t nAdjustment) -> void + static Hooks::Hook s_AdjustReputationHook = Hooks::HookFunction(&CNWSCreature::AdjustReputation, + +[](CNWSCreature *pThis, int32_t nFactionId, int32_t nAdjustment) -> void { auto *pFactionManager = Globals::AppManager()->m_pServerExoApp->m_pcExoAppInternal->m_pFactionManager; diff --git a/Plugins/Experimental/DisableLevelUpValidation.cpp b/Plugins/Experimental/DisableLevelUpValidation.cpp index 0a9cce1068d..843df8915e1 100644 --- a/Plugins/Experimental/DisableLevelUpValidation.cpp +++ b/Plugins/Experimental/DisableLevelUpValidation.cpp @@ -24,8 +24,8 @@ void DisableLevelUpValidation() LOG_INFO("EXPERIMENTAL: Disabling LevelUp Validation."); - static Hooks::Hook s_ValidateLevelUpHook = Hooks::HookFunction(API::Functions::_ZN17CNWSCreatureStats15ValidateLevelUpEP13CNWLevelStatshhh, - (void*)+[](CNWSCreatureStats* pCreatureStats, CNWLevelStats* pLevelUpStats, uint8_t nDomain1, uint8_t nDomain2, uint8_t nSchool) -> uint32_t + static Hooks::Hook s_ValidateLevelUpHook = Hooks::HookFunction(&CNWSCreatureStats::ValidateLevelUp, + +[](CNWSCreatureStats* pCreatureStats, CNWLevelStats* pLevelUpStats, uint8_t nDomain1, uint8_t nDomain2, uint8_t nSchool) -> uint32_t { bool bValidated = pCreatureStats->CanLevelUp() && pCreatureStats->GetIsClassAvailable(pLevelUpStats->m_nClass); diff --git a/Plugins/Experimental/IgnoreModuleVersion.cpp b/Plugins/Experimental/IgnoreModuleVersion.cpp index 548a3cf84bc..7ad25fdc6a3 100644 --- a/Plugins/Experimental/IgnoreModuleVersion.cpp +++ b/Plugins/Experimental/IgnoreModuleVersion.cpp @@ -20,8 +20,8 @@ void IgnoreModuleVersion() LOG_INFO("EXPERIMENTAL: Ignoring Module Version check"); - s_ReadFieldCExoStringHook = Hooks::HookFunction(API::Functions::_ZN7CResGFF19ReadFieldCExoStringEP10CResStructPcRiRK10CExoString, - (void*)+[](CResGFF *pThis, CResStruct* pStructure, char* szFieldID, BOOL &bSuccess, const CExoString &sDefault) -> CExoString + s_ReadFieldCExoStringHook = Hooks::HookFunction(&CResGFF::ReadFieldCExoString, + +[](CResGFF *pThis, CResStruct* pStructure, char* szFieldID, BOOL &bSuccess, const CExoString &sDefault) -> CExoString { if (strcmp(szFieldID, "Mod_MinGameVer") == 0) { diff --git a/Plugins/Experimental/PlayerHitpointsAsPercentage.cpp b/Plugins/Experimental/PlayerHitpointsAsPercentage.cpp index c23df41f287..b5a42c73c6e 100644 --- a/Plugins/Experimental/PlayerHitpointsAsPercentage.cpp +++ b/Plugins/Experimental/PlayerHitpointsAsPercentage.cpp @@ -69,10 +69,10 @@ void PlayerHitpointsAsPercentage() s_current_player = nullptr; s_damage_level = false; - + s_CNWSObject_GetCurrentHitPoints_Hook = Hooks::HookFunction( - API::Functions::_ZN10CNWSObject19GetCurrentHitPointsEi, - (void *)+[](CNWSObject *pThis, BOOL bExcludeTemporaryHits) -> int16_t + &CNWSObject::GetCurrentHitPoints, + +[](CNWSObject *pThis, BOOL bExcludeTemporaryHits) -> int16_t { const int16_t cur = s_CNWSObject_GetCurrentHitPoints_Hook->CallOriginal(pThis, bExcludeTemporaryHits); @@ -84,14 +84,14 @@ void PlayerHitpointsAsPercentage() return std::clamp(100 * cur / std::max(max, 1), 0, 100); } } - + return cur; }, Hooks::Order::Late); s_CNWSObject_GetDamageLevel_Hook = Hooks::HookFunction( - API::Functions::_ZN10CNWSObject14GetDamageLevelEv, - (void *)+[](CNWSObject *pThis) -> int8_t + &CNWSObject::GetDamageLevel, + +[](CNWSObject *pThis) -> int8_t { s_damage_level = true; int8_t ret = s_CNWSObject_GetDamageLevel_Hook->CallOriginal(pThis); @@ -101,23 +101,23 @@ void PlayerHitpointsAsPercentage() Hooks::Order::Late); s_CNWSCreature_GetMaxHitPoints_Hook = Hooks::HookFunction( - API::Functions::_ZN12CNWSCreature15GetMaxHitPointsEi, - (void *)+[](CNWSCreature *pThis, BOOL bIncludeToughness) -> int16_t + &CNWSCreature::GetMaxHitPoints, + +[](CNWSCreature *pThis, BOOL bIncludeToughness) -> int16_t { int16_t ret = s_CNWSCreature_GetMaxHitPoints_Hook->CallOriginal(pThis, bIncludeToughness); - + if (!s_damage_level && ObjectHitpointsAsPercentage(s_current_player, pThis)) { ret = 100; // % } - + return ret; }, Hooks::Order::Late); - + s_CNWSMessage_SendServerToPlayerGameObjUpdate_Hook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage31SendServerToPlayerGameObjUpdateEP10CNWSPlayerj, - (void *)+[](CNWSMessage *pThis, CNWSPlayer *pPlayer, OBJECT_ID oidObjectToUpdate) -> BOOL + &CNWSMessage::SendServerToPlayerGameObjUpdate, + +[](CNWSMessage *pThis, CNWSPlayer *pPlayer, OBJECT_ID oidObjectToUpdate) -> BOOL { s_current_player = pPlayer; BOOL ret = s_CNWSMessage_SendServerToPlayerGameObjUpdate_Hook->CallOriginal(pThis, pPlayer, oidObjectToUpdate); diff --git a/Plugins/Experimental/SuppressPlayerLoginInfo.cpp b/Plugins/Experimental/SuppressPlayerLoginInfo.cpp index a05442b785b..e6cc3872c80 100644 --- a/Plugins/Experimental/SuppressPlayerLoginInfo.cpp +++ b/Plugins/Experimental/SuppressPlayerLoginInfo.cpp @@ -20,26 +20,26 @@ void SuppressPlayerLoginInfo() LOG_INFO("EXPERIMENTAL: Suppressing playerlist and player login/logout messages for non DMs."); - s_SendServerToPlayerPlayerList_AddHook = Hooks::HookFunction(API::Functions::_ZN11CNWSMessage32SendServerToPlayerPlayerList_AddEjP10CNWSPlayer, - (void*)+[](CNWSMessage *pThis, uint32_t nPlayerId, CNWSPlayer *pNewPlayer) -> int32_t + s_SendServerToPlayerPlayerList_AddHook = Hooks::HookFunction(&CNWSMessage::SendServerToPlayerPlayerList_Add, + +[](CNWSMessage *pThis, uint32_t nPlayerId, CNWSPlayer *pNewPlayer) -> int32_t { return nPlayerId == Constants::PLAYERID_ALL_GAMEMASTERS ? s_SendServerToPlayerPlayerList_AddHook->CallOriginal(pThis, nPlayerId, pNewPlayer) : false; }, Hooks::Order::Late); - s_SendServerToPlayerPlayerList_AllHook = Hooks::HookFunction(API::Functions::_ZN11CNWSMessage32SendServerToPlayerPlayerList_AllEP10CNWSPlayer, - (void*)+[](CNWSMessage *pThis, CNWSPlayer *pPlayer) -> int32_t + s_SendServerToPlayerPlayerList_AllHook = Hooks::HookFunction(&CNWSMessage::SendServerToPlayerPlayerList_All, + +[](CNWSMessage *pThis, CNWSPlayer *pPlayer) -> int32_t { return pPlayer->m_nPlayerID == Constants::PLAYERID_ALL_GAMEMASTERS ? s_SendServerToPlayerPlayerList_AllHook->CallOriginal(pThis, pPlayer) : false; }, Hooks::Order::Late); - s_SendServerToPlayerPlayerList_DeleteHook = Hooks::HookFunction(API::Functions::_ZN11CNWSMessage35SendServerToPlayerPlayerList_DeleteEjP10CNWSPlayer, - (void*)+[](CNWSMessage *pThis, uint32_t nPlayerId, CNWSPlayer *pNewPlayer) -> int32_t + s_SendServerToPlayerPlayerList_DeleteHook = Hooks::HookFunction(&CNWSMessage::SendServerToPlayerPlayerList_Delete, + +[](CNWSMessage *pThis, uint32_t nPlayerId, CNWSPlayer *pNewPlayer) -> int32_t { return nPlayerId == Constants::PLAYERID_ALL_GAMEMASTERS ? s_SendServerToPlayerPlayerList_DeleteHook->CallOriginal(pThis, nPlayerId, pNewPlayer) : false; }, Hooks::Order::Late); - s_HandlePlayerToServerPlayModuleCharacterList_StartHook = Hooks::HookFunction(API::Functions::_ZN11CNWSMessage49HandlePlayerToServerPlayModuleCharacterList_StartEP10CNWSPlayer, - (void*)+[](CNWSMessage* pThis, CNWSPlayer* pPlayer) -> int32_t + s_HandlePlayerToServerPlayModuleCharacterList_StartHook = Hooks::HookFunction(&CNWSMessage::HandlePlayerToServerPlayModuleCharacterList_Start, + +[](CNWSMessage* pThis, CNWSPlayer* pPlayer) -> int32_t { if (pThis->MessageReadOverflow(true) || pThis->MessageReadUnderflow(true)) return false; diff --git a/Plugins/Experimental/UnhardcodeRangerDualWield.cpp b/Plugins/Experimental/UnhardcodeRangerDualWield.cpp index 2873d730626..019801b175f 100644 --- a/Plugins/Experimental/UnhardcodeRangerDualWield.cpp +++ b/Plugins/Experimental/UnhardcodeRangerDualWield.cpp @@ -21,12 +21,11 @@ void UnhardcodeRangerDualWield() LOG_INFO("EXPERIMENTAL: Unhardcoding Ranger DualWield Feat."); - s_HasFeatHook = Hooks::HookFunction(API::Functions::_ZN17CNWSCreatureStats7HasFeatEt, - (void*)+[](CNWSCreatureStats* pCreatureStats, uint16_t nFeat) -> int32_t + s_HasFeatHook = Hooks::HookFunction(&CNWSCreatureStats::HasFeat, + +[](CNWSCreatureStats* pCreatureStats, uint16_t nFeat) -> int32_t { return pCreatureStats->m_lstFeats.Contains(nFeat) || pCreatureStats->m_lstBonusFeats.Contains(nFeat); }, Hooks::Order::Final); } } - diff --git a/Plugins/Feat/Feat.cpp b/Plugins/Feat/Feat.cpp index 08662359d0b..4a07333a522 100644 --- a/Plugins/Feat/Feat.cpp +++ b/Plugins/Feat/Feat.cpp @@ -9,6 +9,7 @@ #include "API/CNWSpellArray.hpp" #include "API/CNWSCreature.hpp" #include "API/CNWSCreatureStats.hpp" +#include "API/CNWSEffectListHandler.hpp" #include "API/CNWSPlayer.hpp" #include "API/CNWSPlayerTURD.hpp" #include "API/CTwoDimArrays.hpp" @@ -59,20 +60,20 @@ Feat::Feat(Services::ProxyServiceList* services) m_nCustomSpellID = Config::Get("CUSTOM_SPELL_ID", 0xFFFFFFFF); // We want the feat bonuses to not count toward limits - s_GetTotalEffectBonusHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature19GetTotalEffectBonusEhP10CNWSObjectiihhhhi, - (void*)&GetTotalEffectBonusHook, Hooks::Order::Early); - s_SavingThrowRollHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature15SavingThrowRollEhthjiti, - (void*)&SavingThrowRollHook, Hooks::Order::Early); - s_GetWeaponPowerHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature14GetWeaponPowerEP10CNWSObjecti, - (void*)&GetWeaponPowerHook, Hooks::Order::Early); - - s_AddFeatHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats7AddFeatEt, (void*)&AddFeatHook, Hooks::Order::Early); - s_RemoveFeatHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats10RemoveFeatEt, (void*)&RemoveFeatHook, Hooks::Order::Early); - s_OnApplyBonusFeatHook = Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler16OnApplyBonusFeatEP10CNWSObjectP11CGameEffecti, - (void*)&OnApplyBonusFeatHook, Hooks::Order::Early); - s_OnRemoveBonusFeatHook = Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler17OnRemoveBonusFeatEP10CNWSObjectP11CGameEffect, - (void*)&OnRemoveBonusFeatHook, Hooks::Order::Early); - s_EatTURDHook = Hooks::HookFunction(Functions::_ZN10CNWSPlayer7EatTURDEP14CNWSPlayerTURD, (void*)&EatTURDHook, Hooks::Order::Early); + s_GetTotalEffectBonusHook = Hooks::HookFunction(&CNWSCreature::GetTotalEffectBonus, + &GetTotalEffectBonusHook, Hooks::Order::Early); + s_SavingThrowRollHook = Hooks::HookFunction(&CNWSCreature::SavingThrowRoll, + &SavingThrowRollHook, Hooks::Order::Early); + s_GetWeaponPowerHook = Hooks::HookFunction(&CNWSCreature::GetWeaponPower, + &GetWeaponPowerHook, Hooks::Order::Early); + + s_AddFeatHook = Hooks::HookFunction(&CNWSCreatureStats::AddFeat, &AddFeatHook, Hooks::Order::Early); + s_RemoveFeatHook = Hooks::HookFunction(&CNWSCreatureStats::RemoveFeat, &RemoveFeatHook, Hooks::Order::Early); + s_OnApplyBonusFeatHook = Hooks::HookFunction(&CNWSEffectListHandler::OnApplyBonusFeat, + &OnApplyBonusFeatHook, Hooks::Order::Early); + s_OnRemoveBonusFeatHook = Hooks::HookFunction(&CNWSEffectListHandler::OnRemoveBonusFeat, + &OnRemoveBonusFeatHook, Hooks::Order::Early); + s_EatTURDHook = Hooks::HookFunction(&CNWSPlayer::EatTURD, &EatTURDHook, Hooks::Order::Early); } Feat::~Feat() @@ -326,8 +327,8 @@ void Feat::ApplyFeatEffects(CNWSCreature *pCreature, uint16_t nFeat) if (!pCalculateSpellSaveDC_hook) { pCalculateSpellSaveDC_hook = Hooks::HookFunction( - Functions::_ZN12CNWSCreature20CalculateSpellSaveDCEi, - (void*)+[](CNWSCreature *pThis, int32_t nSpellID) -> int32_t + &CNWSCreature::CalculateSpellSaveDC, + +[](CNWSCreature *pThis, int32_t nSpellID) -> int32_t { int iMods = 0; for (auto &spellSaveDCMod : g_plugin->m_FeatSpellSaveDC) diff --git a/Plugins/Feedback/Feedback.cpp b/Plugins/Feedback/Feedback.cpp index 0fce6f8d6d2..fd78e5ffafe 100644 --- a/Plugins/Feedback/Feedback.cpp +++ b/Plugins/Feedback/Feedback.cpp @@ -26,16 +26,16 @@ static int32_t SendServerToPlayerJournalUpdatedHook(CNWSMessage*, CNWSPlayer*, i static NWNXLib::Hooks::Hook s_SendFeedbackMessageHook = Hooks::HookFunction( - API::Functions::_ZN12CNWSCreature19SendFeedbackMessageEtP16CNWCCMessageDataP10CNWSPlayer, - (void*)&SendFeedbackMessageHook, Hooks::Order::Late); + &CNWSCreature::SendFeedbackMessage, + &SendFeedbackMessageHook, Hooks::Order::Late); static NWNXLib::Hooks::Hook s_SendServerToPlayerCCMessageHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage27SendServerToPlayerCCMessageEjhP16CNWCCMessageDataP20CNWSCombatAttackData, - (void*)&SendServerToPlayerCCMessageHook, Hooks::Order::Late); + &CNWSMessage::SendServerToPlayerCCMessage, + &SendServerToPlayerCCMessageHook, Hooks::Order::Late); static NWNXLib::Hooks::Hook s_SendServerToPlayerJournalUpdatedHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage32SendServerToPlayerJournalUpdatedEP10CNWSPlayerii13CExoLocString, - (void*)&SendServerToPlayerJournalUpdatedHook, Hooks::Order::Late); + &CNWSMessage::SendServerToPlayerJournalUpdated, + &SendServerToPlayerJournalUpdatedHook, Hooks::Order::Late); static void SendFeedbackMessageHook(CNWSCreature *pCreature, uint16_t nFeedbackID, CNWCCMessageData *pMessageData , CNWSPlayer *pFeedbackPlayer) diff --git a/Plugins/Item/Item.cpp b/Plugins/Item/Item.cpp index fcf36971c25..2790879481e 100644 --- a/Plugins/Item/Item.cpp +++ b/Plugins/Item/Item.cpp @@ -80,21 +80,27 @@ NWNX_EXPORT ArgumentStack SetItemAppearance(ArgumentStack&& args) } break; case Constants::ItemAppearanceType::WeaponColor: - if (val >= 0 && val <= 255 && idx >= 0 && idx <= 5) + if (val >= 1 && val <= 9 && idx >= 0 && idx <= 2) { - pItem->m_nLayeredTextureColors[idx] = val; + uint16_t nTemp = pItem->m_nModelPart[idx]; + nTemp = nTemp - (nTemp % 10) + val; + pItem->m_nModelPart[idx] = nTemp; } break; case Constants::ItemAppearanceType::WeaponModel: if (val >= 0 && idx >= 0 && idx <= 2) { - pItem->m_nModelPart[idx] = val; + uint16_t nTemp = pItem->m_nModelPart[idx]; + nTemp = (nTemp % 10) + (val * 10); + pItem->m_nModelPart[idx] = nTemp; } break; case Constants::ItemAppearanceType::ArmorModel: if (val >= 0 && idx >= 0 && idx <= 18) { pItem->m_nArmorModelPart[idx] = val; + pItem->m_nArmorValue = pItem->ComputeArmorClass(); + pItem->ComputeWeight(); } break; case Constants::ItemAppearanceType::ArmorColor: diff --git a/Plugins/Lua/Lua.cpp b/Plugins/Lua/Lua.cpp index 0893dcba798..081af64dd16 100644 --- a/Plugins/Lua/Lua.cpp +++ b/Plugins/Lua/Lua.cpp @@ -137,8 +137,8 @@ namespace Lua { lua_getglobal(m_luaInstance, runScriptTable.c_str()); m_runScriptTable = luaL_ref(m_luaInstance, LUA_REGISTRYINDEX); - s_RunScriptHook = Hooks::HookFunction(Functions::_ZN15CVirtualMachine9RunScriptEP10CExoStringjii, - (void*)+[](CVirtualMachine* thisPtr, CExoString* script, ObjectID objId, int32_t valid, int32_t eventId) + s_RunScriptHook = Hooks::HookFunction(&CVirtualMachine::RunScript, + +[](CVirtualMachine* thisPtr, CExoString* script, ObjectID objId, int32_t valid, int32_t eventId) { bool skip = script->m_sString && g_plugin->OnScript(script->m_sString, objId, !!valid); return skip ? 1 : s_RunScriptHook->CallOriginal(thisPtr, script, objId, valid, eventId); @@ -147,8 +147,8 @@ namespace Lua { } // RunScriptSituation hook - s_RunScriptSituationHook = Hooks::HookFunction(Functions::_ZN15CVirtualMachine18RunScriptSituationEPvji, - (void*)+[](CVirtualMachine* thisPtr, CVirtualMachineScript* script, ObjectID oid, int32_t oidValid) + s_RunScriptSituationHook = Hooks::HookFunction(&CVirtualMachine::RunScriptSituation, + +[](CVirtualMachine* thisPtr, CVirtualMachineScript* script, ObjectID oid, int32_t oidValid) { if (strstr(script->m_sScriptName.m_sString, "NWNX_LUA_INTERNAL")) { diff --git a/Plugins/MaxLevel/MaxLevel.cpp b/Plugins/MaxLevel/MaxLevel.cpp index d47a2d0a180..4cf55aade4b 100644 --- a/Plugins/MaxLevel/MaxLevel.cpp +++ b/Plugins/MaxLevel/MaxLevel.cpp @@ -10,6 +10,7 @@ #include "API/CServerInfo.hpp" #include "API/CNWSCreatureStats.hpp" #include "API/CNWSCreature.hpp" +#include "API/CNWSModule.hpp" #include "API/CNWRace.hpp" #include "API/CNWSpellArray.hpp" #include "API/CNWLevelStats.hpp" @@ -63,26 +64,26 @@ MaxLevel::MaxLevel(Services::ProxyServiceList* services) if (m_maxLevel > CORE_MAX_LEVEL) { - s_GetServerInfoFromIniFileHook = Hooks::HookFunction(Functions::_ZN21CServerExoAppInternal24GetServerInfoFromIniFileEv, - (void*)&GetServerInfoFromIniFileHook, Hooks::Order::Early); + s_GetServerInfoFromIniFileHook = Hooks::HookFunction(&CServerExoAppInternal::GetServerInfoFromIniFile, + &GetServerInfoFromIniFileHook, Hooks::Order::Early); s_LoadModuleStartHook = Hooks::HookFunction(Functions::_ZN10CNWSModule15LoadModuleStartE10CExoStringiiRKN6NWSync13AdvertisementE, (void*)&LoadModuleStartHook, Hooks::Order::Early); - s_CanLevelUpHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats10CanLevelUpEv, - (void*)&CanLevelUpHook, Hooks::Order::Final); - s_GetExpNeededForLevelUpHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats22GetExpNeededForLevelUpEv, - (void*)&GetExpNeededForLevelUpHook, Hooks::Order::Final); - s_LevelDownHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats9LevelDownEP13CNWLevelStats, - (void*)&LevelDownHook, Hooks::Order::Late); - s_SummonAssociateHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature15SummonAssociateE7CResRef10CExoStringt, - (void*)&SummonAssociateHook, Hooks::Order::Late); - s_LoadSpellGainTableHook = Hooks::HookFunction(Functions::_ZN8CNWClass18LoadSpellGainTableE10CExoString, - (void*)&LoadSpellGainTableHook, Hooks::Order::Early); - s_LoadSpellKnownTableHook = Hooks::HookFunction(Functions::_ZN8CNWClass19LoadSpellKnownTableE10CExoString, - (void*)&LoadSpellKnownTableHook, Hooks::Order::Early); - s_GetSpellGainHook = Hooks::HookFunction(Functions::_ZN8CNWClass12GetSpellGainEhh, - (void*)&GetSpellGainHook, Hooks::Order::Final); - s_GetSpellsKnownPerLevelHook = Hooks::HookFunction(Functions::_ZN8CNWClass22GetSpellsKnownPerLevelEhhhth, - (void*)&GetSpellsKnownPerLevelHook, Hooks::Order::Final); + s_CanLevelUpHook = Hooks::HookFunction(&CNWSCreatureStats::CanLevelUp, + &CanLevelUpHook, Hooks::Order::Final); + s_GetExpNeededForLevelUpHook = Hooks::HookFunction(&CNWSCreatureStats::GetExpNeededForLevelUp, + &GetExpNeededForLevelUpHook, Hooks::Order::Final); + s_LevelDownHook = Hooks::HookFunction(&CNWSCreatureStats::LevelDown, + &LevelDownHook, Hooks::Order::Late); + s_SummonAssociateHook = Hooks::HookFunction(&CNWSCreature::SummonAssociate, + &SummonAssociateHook, Hooks::Order::Late); + s_LoadSpellGainTableHook = Hooks::HookFunction(&CNWClass::LoadSpellGainTable, + &LoadSpellGainTableHook, Hooks::Order::Early); + s_LoadSpellKnownTableHook = Hooks::HookFunction(&CNWClass::LoadSpellKnownTable, + &LoadSpellKnownTableHook, Hooks::Order::Early); + s_GetSpellGainHook = Hooks::HookFunction(&CNWClass::GetSpellGain, + &GetSpellGainHook, Hooks::Order::Final); + s_GetSpellsKnownPerLevelHook = Hooks::HookFunction(&CNWClass::GetSpellsKnownPerLevel, + &GetSpellsKnownPerLevelHook, Hooks::Order::Final); } } diff --git a/Plugins/NoStack/BonusStacking.cpp b/Plugins/NoStack/BonusStacking.cpp index a8b5c9aaf94..ecf1e1b116c 100644 --- a/Plugins/NoStack/BonusStacking.cpp +++ b/Plugins/NoStack/BonusStacking.cpp @@ -96,7 +96,7 @@ void BonusStacking() s_bAlwaysStackPenalties = Config::Get("ALWAYS_STACK_PENALTIES", false); s_bSeparateInvalidOidEffects = Config::Get("SEPARATE_INVALID_OID_EFFECTS", false); - s_GetTotalEffectBonusHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature19GetTotalEffectBonusEhP10CNWSObjectiihhhhi, (void*)&CNWSCreature__GetTotalEffectBonus, Hooks::Order::Final); + s_GetTotalEffectBonusHook = Hooks::HookFunction(&CNWSCreature::GetTotalEffectBonus, &CNWSCreature__GetTotalEffectBonus, Hooks::Order::Final); s_positiveEffects.reserve(50); s_negativeEffects.reserve(50); diff --git a/Plugins/Object/NWScript/nwnx_object.nss b/Plugins/Object/NWScript/nwnx_object.nss index bc4d3d99104..8cb6d7aa7a0 100644 --- a/Plugins/Object/NWScript/nwnx_object.nss +++ b/Plugins/Object/NWScript/nwnx_object.nss @@ -68,13 +68,6 @@ int NWNX_Object_GetLocalVariableCount(object obj); /// @return An NWNX_Object_LocalVariable struct. struct NWNX_Object_LocalVariable NWNX_Object_GetLocalVariable(object obj, int index); -/// @brief Convert an object id to the actual object. -/// @param id The object id. -/// @return An object from the provided object ID. -/// @remark This is the counterpart to ObjectToString. -/// @deprecated Use the basegame StringToObject() function. This will be removed in a future NWNX release. -object NWNX_Object_StringToObject(string id); - /// @brief Set oObject's position. /// @param oObject The object. /// @param vPosition A vector position. @@ -137,12 +130,6 @@ int NWNX_Object_GetAppearance(object oPlaceable); /// @return TRUE if the object has the visual effect applied to it int NWNX_Object_GetHasVisualEffect(object obj, int nVFX); -/// @brief Check if an item can fit in an object's inventory. -/// @param obj The object with an inventory. -/// @param baseitem The base item id to check for a fit. -/// @return TRUE if an item of base item type can fit in object's inventory -int NWNX_Object_CheckFit(object obj, int baseitem); - /// @brief Get an object's damage immunity. /// @param obj The object. /// @param damageType The damage type to check for immunity. Use DAMAGE_TYPE_* constants. @@ -192,19 +179,6 @@ string NWNX_Object_GetTriggerGeometry(object oTrigger); /// @remark The minimum number of vertices is 3. void NWNX_Object_SetTriggerGeometry(object oTrigger, string sGeometry); -/// @brief Add an effect to an object that displays an icon and has no other effect. -/// @remark See effecticons.2da for a list of possible effect icons. -/// @param obj The object to apply the effect. -/// @param nIcon The icon id. -/// @param fDuration If specified the effect will be temporary and last this length in seconds, otherwise the effect -/// will be permanent. -void NWNX_Object_AddIconEffect(object obj, int nIcon, float fDuration=0.0); - -/// @brief Remove an icon effect from an object that was added by the NWNX_Object_AddIconEffect() function. -/// @param obj The object. -/// @param nIcon The icon id. -void NWNX_Object_RemoveIconEffect(object obj, int nIcon); - /// @brief Export an object to the UserDirectory/nwnx folder. /// @param sFileName The filename without extension, 16 or less characters. /// @param oObject The object to export. Valid object types: Creature, Item, Placeable, Waypoint, Door, Store, Trigger @@ -290,14 +264,6 @@ int NWNX_Object_GetInternalObjectType(object oObject); /// @return TRUE on success. int NWNX_Object_AcquireItem(object oObject, object oItem); -/// @brief Cause oObject to face fDirection. -/// @note This function is almost identical to SetFacing(), the only difference being that it allows you to specify -/// the target object without the use of AssignCommand(). This is useful when you want to change the facing of an object -/// in an ExecuteScriptChunk() call where AssignCommand() does not work. -/// @param oObject The object to change its facing of -/// @param fDirection The direction the object should face -void NWNX_Object_SetFacing(object oObject, float fDirection); - /// @brief Clear all spell effects oObject has applied to others. /// @param oObject The object that applied the spell effects. void NWNX_Object_ClearSpellEffectsOnOthers(object oObject); @@ -402,6 +368,11 @@ void NWNX_Object_SetAoEObjectRadius(object oAoE, float fRadius); /// @return The radius or 0.0f on error float NWNX_Object_GetAoEObjectRadius(object oAoE); +/// @brief Force the given object to carry the given UUID. Any other object currently owning the UUID is stripped of it. +/// @param oObject The object +/// @param sUUID The UUID to force +void NWNX_Object_ForceAssignUUID(object oObject, string sUUID); + /// @} int NWNX_Object_GetLocalVariableCount(object obj) @@ -428,13 +399,6 @@ struct NWNX_Object_LocalVariable NWNX_Object_GetLocalVariable(object obj, int in return var; } -object NWNX_Object_StringToObject(string id) -{ - WriteTimestampedLogEntry("WARNING: NWNX_Object_StringToObject() is deprecated, please use the basegame's StringToObject()"); - - return StringToObject(id); -} - void NWNX_Object_SetPosition(object oObject, vector vPosition, int bUpdateSubareas = TRUE) { string sFunc = "SetPosition"; @@ -550,18 +514,6 @@ int NWNX_Object_GetHasVisualEffect(object obj, int nVFX) return NWNX_GetReturnValueInt(); } -int NWNX_Object_CheckFit(object obj, int baseitem) -{ - string sFunc = "CheckFit"; - - NWNX_PushArgumentInt(baseitem); - NWNX_PushArgumentObject(obj); - - NWNX_CallFunction(NWNX_Object, sFunc); - - return NWNX_GetReturnValueInt(); -} - int NWNX_Object_GetDamageImmunity(object obj, int damageType) { string sFunc = "GetDamageImmunity"; @@ -645,25 +597,6 @@ void NWNX_Object_SetTriggerGeometry(object oTrigger, string sGeometry) NWNX_CallFunction(NWNX_Object, sFunc); } -void NWNX_Object_AddIconEffect(object obj, int nIcon, float fDuration=0.0) -{ - string sFunc = "AddIconEffect"; - - NWNX_PushArgumentFloat(fDuration); - NWNX_PushArgumentInt(nIcon); - NWNX_PushArgumentObject(obj); - NWNX_CallFunction(NWNX_Object, sFunc); -} - -void NWNX_Object_RemoveIconEffect(object obj, int nIcon) -{ - string sFunc = "RemoveIconEffect"; - - NWNX_PushArgumentInt(nIcon); - NWNX_PushArgumentObject(obj); - NWNX_CallFunction(NWNX_Object, sFunc); -} - void NWNX_Object_Export(object oObject, string sFileName, string sAlias = "NWNX") { string sFunc = "Export"; @@ -810,15 +743,6 @@ int NWNX_Object_AcquireItem(object oObject, object oItem) return NWNX_GetReturnValueInt(); } -void NWNX_Object_SetFacing(object oObject, float fDirection) -{ - string sFunc = "SetFacing"; - - NWNX_PushArgumentFloat(fDirection); - NWNX_PushArgumentObject(oObject); - NWNX_CallFunction(NWNX_Object, sFunc); -} - void NWNX_Object_ClearSpellEffectsOnOthers(object oObject) { string sFunc = "ClearSpellEffectsOnOthers"; @@ -1003,3 +927,11 @@ float NWNX_Object_GetAoEObjectRadius(object oAoE) return NWNX_GetReturnValueFloat(); } +void NWNX_Object_ForceAssignUUID(object oObject, string sUUID) +{ + string sFunc = "ForceAssignUUID"; + + NWNX_PushArgumentString(sUUID); + NWNX_PushArgumentObject(oObject); + NWNX_CallFunction(NWNX_Object, sFunc); +} diff --git a/Plugins/Object/NWScript/nwnx_object_t.nss b/Plugins/Object/NWScript/nwnx_object_t.nss index a55d5fbf8c7..b69d65e8929 100644 --- a/Plugins/Object/NWScript/nwnx_object_t.nss +++ b/Plugins/Object/NWScript/nwnx_object_t.nss @@ -29,10 +29,6 @@ void main() NWNX_Object_SetMaxHitPoints(o, nMaxHP + 1); NWNX_Tests_Report("NWNX_Object", "SetMaxHitPoints", GetMaxHitPoints(o) == (nMaxHP + 1)); - int nCurrHP = GetCurrentHitPoints(o); - NWNX_Object_SetCurrentHitPoints(o, nCurrHP + 1); - NWNX_Tests_Report("NWNX_Object", "SetCurrentHitPoints", GetCurrentHitPoints(o) == (nCurrHP + 1)); - string dialog = "nwnxtest"; NWNX_Object_SetDialogResref(o, dialog); NWNX_Tests_Report("NWNX_Object", "SetDialogResRef/GetDialogResRef", NWNX_Object_GetDialogResref(o) == dialog); @@ -76,22 +72,6 @@ void main() WriteTimestampedLogEntry("Deserialized " + GetName(oDeserialized) + " in " + GetName(GetArea(oDeserialized))); - object bag = CreateObject(OBJECT_TYPE_ITEM, "nw_it_contain006", GetStartingLocation()); // Bag of holding - CreateItemOnObject("x2_it_adaplate", bag, 1); - CreateItemOnObject("x2_it_adaplate", bag, 1); - CreateItemOnObject("x2_it_adaplate", bag, 1); - int iFits = NWNX_Object_CheckFit(bag, BASE_ITEM_ARROW); - NWNX_Tests_Report("NWNX_Object", "CheckFit", iFits == 1); - iFits = NWNX_Object_CheckFit(bag, BASE_ITEM_ARMOR); - NWNX_Tests_Report("NWNX_Object", "CheckFit", iFits == 0); - object oItem = GetFirstItemInInventory(bag); - while (oItem != OBJECT_INVALID) - { - DestroyObject(oItem); - oItem = GetNextItemInInventory(bag); - } - DestroyObject(bag); - NWNX_Tests_Report("NWNX_Object", "GetDamageImmunity", NWNX_Object_GetDamageImmunity(o, DAMAGE_TYPE_FIRE) == 0); ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectDamageImmunityIncrease(DAMAGE_TYPE_FIRE, 50), o); NWNX_Tests_Report("NWNX_Object", "GetDamageImmunity", NWNX_Object_GetDamageImmunity(o, DAMAGE_TYPE_FIRE) == 50); diff --git a/Plugins/Object/Object.cpp b/Plugins/Object/Object.cpp index 2fd14a0de95..ce6cbed53d1 100644 --- a/Plugins/Object/Object.cpp +++ b/Plugins/Object/Object.cpp @@ -218,51 +218,6 @@ NWNX_EXPORT ArgumentStack GetHasVisualEffect(ArgumentStack&& args) return false; } -NWNX_EXPORT ArgumentStack CheckFit(ArgumentStack&& args) -{ - if (auto *pObject = Utils::PopObject(args)) - { - CItemRepository *pRepo; - - if (auto *pCreature = Utils::AsNWSCreature(pObject)) - pRepo = pCreature->m_pcItemRepository; - else if (auto *pPlaceable = Utils::AsNWSPlaceable(pObject)) - pRepo = pPlaceable->m_pcItemRepository; - else if (auto *pItem = Utils::AsNWSItem(pObject)) - pRepo = pItem->m_pItemRepository; - else - { - return -1; - } - const auto baseitem = args.extract(); - - if (pRepo == nullptr || Globals::Rules()->m_pBaseItemArray->GetBaseItem(baseitem) == nullptr) - { - LOG_ERROR("Base Item or Object Repository not found."); - return -1; - } - - static CNWSItem *tmp = new CNWSItem(Constants::OBJECT_INVALID); - tmp->m_nBaseItem = baseitem; - - uint8_t width = Globals::Rules()->m_pBaseItemArray->GetBaseItem(baseitem)->m_nInvSlotWidth; - uint8_t height = Globals::Rules()->m_pBaseItemArray->GetBaseItem(baseitem)->m_nInvSlotHeight; - - for (uint8_t y = 0; y < (pRepo->m_nHeight - height + 1); y++) - { - for (uint8_t x = 0; x < (pRepo->m_nWidth - width + 1); x++) - { - if (pRepo->CheckFit(tmp, x, y)) - { - return 1; - } - } - } - return 0; - } - return -1; -} - NWNX_EXPORT ArgumentStack GetDamageImmunity(ArgumentStack&& args) { if (auto *pObject = Utils::PopObject(args)) @@ -455,72 +410,6 @@ NWNX_EXPORT ArgumentStack SetTriggerGeometry(ArgumentStack&& args) return {}; } -NWNX_EXPORT ArgumentStack RemoveIconEffect(ArgumentStack&& args) -{ - if (auto *pObject = Utils::PopObject(args)) - { - const auto nIcon = args.extract(); - - for (int i = 0; i < pObject->m_appliedEffects.num; i++) - { - auto *eff = pObject->m_appliedEffects.element[i]; - - if (eff->m_sCustomTag == "NWNX_Object_IconEffect" && eff->m_nParamInteger[0] == nIcon) - { - pObject->RemoveEffect(eff); - break; - } - } - } - - return {}; -} - -NWNX_EXPORT ArgumentStack AddIconEffect(ArgumentStack&& args) -{ - if (auto *pObject = Utils::PopObject(args)) - { - const auto nIcon = args.extract(); - ASSERT_OR_THROW(nIcon > 0); - const auto fDuration = args.extract(); - - for (int i = 0; i < pObject->m_appliedEffects.num; i++) - { - auto *eff = pObject->m_appliedEffects.element[i]; - - if (eff->m_sCustomTag == "NWNX_Object_IconEffect" && eff->m_nParamInteger[0] == nIcon) - { - pObject->RemoveEffect(eff); - break; - } - } - - auto *effIcon = new CGameEffect(true); - effIcon->m_oidCreator = 0; - effIcon->m_nType = Constants::EffectTrueType::Icon; - effIcon->m_nSubType = Constants::EffectSubType::Supernatural; - effIcon->m_bShowIcon = true; - effIcon->m_bExpose = true; - effIcon->m_sCustomTag = "NWNX_Object_IconEffect"; - - effIcon->m_nParamInteger[0] = nIcon; - - if (fDuration > 0.0) - { - effIcon->m_nSubType |= Constants::EffectDurationType::Temporary; - effIcon->m_fDuration = fDuration; - } - else - { - effIcon->m_nSubType |= Constants::EffectDurationType::Permanent; - } - - pObject->ApplyEffect(effIcon, false, true); - } - - return {}; -} - NWNX_EXPORT ArgumentStack Export(ArgumentStack&& args) { if (auto *pGameObject = Utils::PopObject(args)) @@ -751,17 +640,6 @@ NWNX_EXPORT ArgumentStack AcquireItem(ArgumentStack&& args) return false; } -NWNX_EXPORT ArgumentStack SetFacing(ArgumentStack&& args) -{ - if (auto *pObject = Utils::PopObject(args)) - { - const auto degrees = args.extract(); - Utils::SetOrientation(pObject, degrees); - } - - return {}; -} - NWNX_EXPORT ArgumentStack ClearSpellEffectsOnOthers(ArgumentStack&& args) { if (auto *pObject = Utils::PopObject(args)) @@ -774,10 +652,7 @@ NWNX_EXPORT ArgumentStack PeekUUID(ArgumentStack&& args) { if (auto *pGameObject = Utils::PopGameObject(args)) { - static auto CanCarryUUID = reinterpret_cast( - Platform::GetRelocatedAddress(API::Functions::_ZN8CNWSUUID12CanCarryUUIDEi)); - - if (CanCarryUUID(pGameObject->m_nObjectType)) + if (CNWSUUID::CanCarryUUID(pGameObject->m_nObjectType)) { if (auto *pArea = Utils::AsNWSArea(pGameObject)) return pArea->m_pUUID.m_uuid.CStr(); @@ -1073,3 +948,40 @@ NWNX_EXPORT ArgumentStack GetAoEObjectRadius(ArgumentStack&& args) return 0.0f; } + +NWNX_EXPORT ArgumentStack ForceAssignUUID(ArgumentStack&& args) +{ + if (auto *pGameObject = Utils::PopGameObject(args)) + { + auto GetUUIDPtr = [](CGameObject* obj) -> CNWSUUID* + { + if (auto *nwo = Utils::AsNWSObject(obj)) return &nwo->m_pUUID; + else if (auto *are = Utils::AsNWSArea(obj)) return &are->m_pUUID; + else return nullptr; + }; + + auto sUUID = args.extract(); + + // Internal UUID references in the game are all in exactly this format. + const auto cUUID = CUUID::rebuild(sUUID); + ASSERT_OR_THROW(cUUID.str() == sUUID); + + auto *newuuid = GetUUIDPtr(pGameObject); + ASSERT_OR_THROW(newuuid); + + using MapType = std::unordered_map; + auto& map = *reinterpret_cast(CNWSUUID::GetMapPtr()); + + if (map.find(sUUID) != map.end()) + { + auto *old = GetUUIDPtr(map.at(sUUID)); + ASSERT_OR_THROW(old); + old->m_uuid = ""; + map.erase(sUUID); + } + + newuuid->TryAssign(sUUID); + } + + return {}; +} diff --git a/Plugins/Optimizations/AsyncLogFlush.cpp b/Plugins/Optimizations/AsyncLogFlush.cpp index 5c6722f5b38..e8f21705283 100644 --- a/Plugins/Optimizations/AsyncLogFlush.cpp +++ b/Plugins/Optimizations/AsyncLogFlush.cpp @@ -13,8 +13,8 @@ void AsyncLogFlush() if (Config::Get("ASYNC_LOG_FLUSH", false)) { LOG_INFO("Game logs will be flushed asynchronously"); - static auto s_FlushLogFile = Hooks::HookFunction(API::Functions::_ZN17CExoDebugInternal12FlushLogFileEv, - (void*)+[](CExoDebugInternal* pThis) + static auto s_FlushLogFile = Hooks::HookFunction(&CExoDebugInternal::FlushLogFile, + +[](CExoDebugInternal* pThis) { // Rotating log file, do synchronously if (pThis->m_bRotateLogFile && ((pThis->m_nCurrentLogSize << 2) > pThis->m_nMaxLogSize)) diff --git a/Plugins/Optimizations/CMakeLists.txt b/Plugins/Optimizations/CMakeLists.txt index 7139f9774c6..e7c3f4deed3 100644 --- a/Plugins/Optimizations/CMakeLists.txt +++ b/Plugins/Optimizations/CMakeLists.txt @@ -5,5 +5,5 @@ add_plugin(Optimizations "PlayerLookup.cpp" "ReconcileAutoMap.cpp" "CacheScriptChunks.cpp" - "ClientGameObjectUpdateTime.cpp" + "CacheDebuggerInstances.cpp" ) diff --git a/Plugins/Optimizations/CacheDebuggerInstances.cpp b/Plugins/Optimizations/CacheDebuggerInstances.cpp new file mode 100644 index 00000000000..cdd8b1f3b0c --- /dev/null +++ b/Plugins/Optimizations/CacheDebuggerInstances.cpp @@ -0,0 +1,45 @@ +#include "nwnx.hpp" + +#include "API/CVirtualMachine.hpp" +#include "API/CScriptCompiler.hpp" + +namespace Optimizations { + +using namespace NWNXLib; +using namespace NWNXLib::API; + +static std::unordered_map> s_DebuggerInstances; + +void CacheDebuggerInstances() __attribute__((constructor)); +void CacheDebuggerInstances() +{ + if (Config::Get("CACHE_DEBUGGER_INSTANCES", false)) + { + LOG_INFO("Caching debugger instances"); + + static Hooks::Hook s_GetDebuggerInstanceHook = Hooks::HookFunction(&CVirtualMachine::GetDebuggerInstance, + +[](CVirtualMachine *pVirtualMachine) -> std::shared_ptr + { + auto pScript = pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel]; + std::string key = pScript.m_sScriptChunk.IsEmpty() ? pScript.m_sScriptName.CStr() : pScript.m_sScriptChunk.CStr(); + + if (key.empty()) + return s_GetDebuggerInstanceHook->CallOriginal>(pVirtualMachine); + + auto debuggerInstance = s_DebuggerInstances.find(key); + if (debuggerInstance != s_DebuggerInstances.end()) + return debuggerInstance->second; + else + { + auto dbg = s_GetDebuggerInstanceHook->CallOriginal>(pVirtualMachine); + + if (dbg) + s_DebuggerInstances[key] = dbg; + + return dbg; + } + }, Hooks::Order::Late); + } +} + +} diff --git a/Plugins/Optimizations/CacheScriptChunks.cpp b/Plugins/Optimizations/CacheScriptChunks.cpp index 7bc06a1d539..90bcc119a46 100644 --- a/Plugins/Optimizations/CacheScriptChunks.cpp +++ b/Plugins/Optimizations/CacheScriptChunks.cpp @@ -2,13 +2,14 @@ #include "API/CVirtualMachine.hpp" #include "API/CScriptCompiler.hpp" +#include "API/CExoResMan.hpp" namespace Optimizations { using namespace NWNXLib; using namespace NWNXLib::API; -static std::unordered_map s_CachedScriptChunks; +static std::unordered_map> s_CachedScriptChunks; void CacheScriptChunks() __attribute__((constructor)); void CacheScriptChunks() @@ -17,8 +18,8 @@ void CacheScriptChunks() { LOG_INFO("Caching script chunks"); - static Hooks::Hook s_SetUpJITCompiledScript = Hooks::HookFunction(API::Functions::_ZN15CVirtualMachine22SetUpJITCompiledScriptERK10CExoStringi, - (void*)+[](CVirtualMachine *pVirtualMachine, const CExoString& sScriptChunk, BOOL bWrapIntoMain) -> int32_t + static Hooks::Hook s_SetUpJITCompiledScript = Hooks::HookFunction(&CVirtualMachine::SetUpJITCompiledScript, + +[](CVirtualMachine *pVirtualMachine, const CExoString& sScriptChunk, BOOL bWrapIntoMain) -> int32_t { pVirtualMachine->m_nRecursionLevel += 1; if (pVirtualMachine->m_nRecursionLevel >= 8) @@ -30,9 +31,10 @@ void CacheScriptChunks() auto cachedScript = s_CachedScriptChunks.find(sScriptChunk.CStr()); if (cachedScript != s_CachedScriptChunks.end()) { - pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel].m_sScriptName = "Chunk"; + pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel].m_sScriptName = "!Chunk"; pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel].m_nScriptEventID = 0; - pVirtualMachine->InitializeScript(&pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel], cachedScript->second); + pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel].m_sScriptChunk = sScriptChunk; + pVirtualMachine->InitializeScript(&pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel], cachedScript->second.first, cachedScript->second.second); return 0; } @@ -67,11 +69,14 @@ void CacheScriptChunks() DataBlockRef pScriptDataBlock = std::make_shared(); pScriptDataBlock->Append(pScriptData, nScriptDataSize); - s_CachedScriptChunks[sScriptChunk.CStr()] = pScriptDataBlock; + auto pNDB = Globals::ExoResMan()->Get("!Chunk", Constants::ResRefType::NDB); - pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel].m_sScriptName = "Chunk"; + s_CachedScriptChunks[sScriptChunk.CStr()] = std::make_pair(pScriptDataBlock, pNDB); + + pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel].m_sScriptName = "!Chunk"; pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel].m_nScriptEventID = 0; - pVirtualMachine->InitializeScript(&pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel], pScriptDataBlock); + pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel].m_sScriptChunk = sScriptChunk; + pVirtualMachine->InitializeScript(&pVirtualMachine->m_pVirtualMachineScript[pVirtualMachine->m_nRecursionLevel], pScriptDataBlock, pNDB); return 0; } diff --git a/Plugins/Optimizations/ClientGameObjectUpdateTime.cpp b/Plugins/Optimizations/ClientGameObjectUpdateTime.cpp deleted file mode 100644 index e97dab3ec12..00000000000 --- a/Plugins/Optimizations/ClientGameObjectUpdateTime.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include "nwnx.hpp" - -#include "API/CAppManager.hpp" -#include "API/CServerExoApp.hpp" -#include "API/CServerExoAppInternal.hpp" -#include "API/CNWSPlayer.hpp" -#include "API/CNWSObject.hpp" -#include "API/CNWSCreature.hpp" -#include "API/CExoBase.hpp" -#include "API/CExoTimers.hpp" -#include "API/CNetLayer.hpp" -#include "API/CNWSMessage.hpp" - -namespace Optimizations -{ - -using namespace NWNXLib; -using namespace NWNXLib::API; - -static uint64_t s_ClientGameObjectUpdateTime; -static uint64_t s_ClientGameObjectUpdateTimeLoading; - -void ClientGameObjectUpdateTime() __attribute__((constructor)); -void ClientGameObjectUpdateTime() -{ - s_ClientGameObjectUpdateTime = Config::Get("CLIENT_GAMEOBJECT_UPDATE_TIME", 200000); - s_ClientGameObjectUpdateTimeLoading = Config::Get("CLIENT_GAMEOBJECT_UPDATE_TIME_LOADING", 200000); - - if (s_ClientGameObjectUpdateTime == 200000 && s_ClientGameObjectUpdateTimeLoading == 200000) - return; - - LOG_INFO("Improving client gameobject update time: global: %uμs, loading: %uμs", s_ClientGameObjectUpdateTime, s_ClientGameObjectUpdateTimeLoading); - - static Hooks::Hook s_UpdateClientGameObjectsForPlayer = Hooks::HookFunction( - API::Functions::_ZN21CServerExoAppInternal32UpdateClientGameObjectsForPlayerEP10CNWSPlayerim, - (void *) +[](CServerExoAppInternal*, CNWSPlayer *pPlayer, BOOL bForce, uint64_t nCurrentSystemTime) -> void - { - auto *pMessage = Globals::AppManager()->m_pServerExoApp->GetNWSMessage(); - uint64_t nSystemTime = nCurrentSystemTime; - - if (bForce && nCurrentSystemTime == 0) - { - nSystemTime = Globals::ExoBase()->m_pcExoTimers->GetHighResolutionTimer(); - } - - bool bDoUpdate = false; - if (pPlayer->m_nLoginState == 2) - bDoUpdate = true; - else if (pPlayer->m_nLoginState == 1) - { - if (pPlayer->m_bModuleInfoSucceeded && pPlayer->GetGameObject()) - { - if (auto *pCreature = Utils::AsNWSCreature(pPlayer->GetGameObject())) - { - if (pCreature->m_oidDesiredArea != Constants::OBJECT_INVALID) - bDoUpdate = true; - } - } - } - - if (!bDoUpdate) - return; - - uint64_t nUpdateInterval = s_ClientGameObjectUpdateTime; - - if (auto *pCreature = Utils::AsNWSCreature(pPlayer->GetGameObject())) - { - if (!pCreature->m_bDesiredAreaUpdateComplete) - nUpdateInterval = s_ClientGameObjectUpdateTimeLoading; - } - - if (Globals::AppManager()->m_pServerExoApp->GetNetLayer()->GetAnyWindowBehind()) - nUpdateInterval *= 2; - - bool bTimeForUpdate = (nCurrentSystemTime - pPlayer->m_nLastUpdatedTime) >= nUpdateInterval; - - if (bForce || bTimeForUpdate) - { - pMessage->SendServerToPlayerGameObjUpdate(pPlayer); - - if (auto *pObject = pPlayer->GetGameObject()) - { - if (pPlayer->m_oidLastObjectControlled != pObject->m_idSelf) - { - pMessage->SendServerToPlayerGameObjUpdate_ObjControl(pPlayer->m_nPlayerID, pObject->m_idSelf); - pMessage->SendServerToPlayerGuiQuickbar_SetButton(pPlayer, 0 , true); - pPlayer->m_oidLastObjectControlled = pObject->m_idSelf; - pPlayer->m_nLastUpdatedTime = nSystemTime; - } - } - pPlayer->m_nLastUpdatedTime = nSystemTime; - } - - if (auto *pCreature = Utils::AsNWSCreature(pPlayer->GetGameObject())) - { - if (!pCreature->GetArea()) - { - if (pPlayer->m_oidLastObjectControlled != Constants::OBJECT_INVALID) - { - pPlayer->m_oidLastObjectControlled = Constants::OBJECT_INVALID; - pMessage->SendServerToPlayerGameObjUpdate_ObjControl(pPlayer->m_nPlayerID, Constants::OBJECT_INVALID); - pMessage->SendServerToPlayerGuiQuickbar_SetButton(pPlayer, 0 , true); - pPlayer->m_nLastUpdatedTime = nSystemTime; - } - } - } - }, Hooks::Order::Final); -} - -} diff --git a/Plugins/Optimizations/GameObjectLookup.cpp b/Plugins/Optimizations/GameObjectLookup.cpp index 72e8255715d..76646061e27 100644 --- a/Plugins/Optimizations/GameObjectLookup.cpp +++ b/Plugins/Optimizations/GameObjectLookup.cpp @@ -67,12 +67,15 @@ void GameObjectLookup() pThis->m_nArraySize = 0; }, Hooks::Order::Final); - static auto s_AddObjectAtPos = Hooks::HookFunction(API::Functions::_ZN16CGameObjectArray14AddObjectAtPosEjP11CGameObject, (void*)&AddObjectAtPos, Hooks::Order::Final); - static auto s_AddExternalObject = Hooks::HookFunction(API::Functions::_ZN16CGameObjectArray17AddExternalObjectERjP11CGameObjecti, (void*)&AddExternalObject, Hooks::Order::Final); - static auto s_AddInternalObject = Hooks::HookFunction(API::Functions::_ZN16CGameObjectArray17AddInternalObjectERjP11CGameObjecti, (void*)&AddInternalObject, Hooks::Order::Final); - static auto s_Delete1 = Hooks::HookFunction(API::Functions::_ZN16CGameObjectArray6DeleteEjPP11CGameObject, (void*)&Delete, Hooks::Order::Final); - static auto s_Delete2 = Hooks::HookFunction(API::Functions::_ZN16CGameObjectArray6DeleteEj, (void*)+[](void* p, uint32_t id) -> uint8_t { return Delete(p, id, nullptr); }, Hooks::Order::Final); - static auto s_GetGameObject = Hooks::HookFunction(API::Functions::_ZN16CGameObjectArray13GetGameObjectEjPP11CGameObject, (void*)&GetGameObject, Hooks::Order::Final); + uint8_t (CGameObjectArray::* delete1Ptr)(OBJECT_ID, CGameObject**) = &CGameObjectArray::Delete; + uint8_t (CGameObjectArray::* delete2Ptr)(OBJECT_ID) = &CGameObjectArray::Delete; + + static auto s_AddObjectAtPos = Hooks::HookFunction(&CGameObjectArray::AddObjectAtPos, &AddObjectAtPos, Hooks::Order::Final); + static auto s_AddExternalObject = Hooks::HookFunction(&CGameObjectArray::AddExternalObject, &AddExternalObject, Hooks::Order::Final); + static auto s_AddInternalObject = Hooks::HookFunction(&CGameObjectArray::AddInternalObject, &AddInternalObject, Hooks::Order::Final); + static auto s_Delete1 = Hooks::HookFunction(delete1Ptr, &Delete, Hooks::Order::Final); + static auto s_Delete2 = Hooks::HookFunction(delete2Ptr, +[](void* p, uint32_t id) -> uint8_t { return Delete(p, id, nullptr); }, Hooks::Order::Final); + static auto s_GetGameObject = Hooks::HookFunction(&CGameObjectArray::GetGameObject, &GetGameObject, Hooks::Order::Final); s_nNextObjectArrayID[InternalObject] = 0x00000000; s_nNextCharArrayID[InternalObject] = 0x7FFFFFFF; @@ -161,19 +164,19 @@ static CNWSSoundObject* GetSoundObject (CServerExoApp*, ObjectID oid) __ static void SetupWrapperHooks() { - static auto s_GetGameObj = Hooks::HookFunction(Functions::_ZN13CServerExoApp13GetGameObjectEj, (void*)&GetGameObj, Hooks::Order::Final); - static auto s_GetStore = Hooks::HookFunction(Functions::_ZN13CServerExoApp22GetStoreByGameObjectIDEj, (void*)&GetStore, Hooks::Order::Final); - static auto s_GetItem = Hooks::HookFunction(Functions::_ZN13CServerExoApp21GetItemByGameObjectIDEj, (void*)&GetItem, Hooks::Order::Final); - static auto s_GetCreature = Hooks::HookFunction(Functions::_ZN13CServerExoApp25GetCreatureByGameObjectIDEj, (void*)&GetCreature, Hooks::Order::Final); - static auto s_GetModule = Hooks::HookFunction(Functions::_ZN13CServerExoApp23GetModuleByGameObjectIDEj, (void*)&GetModule, Hooks::Order::Final); - static auto s_GetArea = Hooks::HookFunction(Functions::_ZN13CServerExoApp21GetAreaByGameObjectIDEj, (void*)&GetArea, Hooks::Order::Final); - static auto s_GetTrigger = Hooks::HookFunction(Functions::_ZN13CServerExoApp24GetTriggerByGameObjectIDEj, (void*)&GetTrigger, Hooks::Order::Final); - static auto s_GetPlaceable = Hooks::HookFunction(Functions::_ZN13CServerExoApp26GetPlaceableByGameObjectIDEj, (void*)&GetPlaceable, Hooks::Order::Final); - static auto s_GetDoor = Hooks::HookFunction(Functions::_ZN13CServerExoApp21GetDoorByGameObjectIDEj, (void*)&GetDoor, Hooks::Order::Final); - static auto s_GetAreaOfEffect = Hooks::HookFunction(Functions::_ZN13CServerExoApp29GetAreaOfEffectByGameObjectIDEj, (void*)&GetAreaOfEffect, Hooks::Order::Final); - static auto s_GetWaypoint = Hooks::HookFunction(Functions::_ZN13CServerExoApp25GetWaypointByGameObjectIDEj, (void*)&GetWaypoint, Hooks::Order::Final); - static auto s_GetEncounter = Hooks::HookFunction(Functions::_ZN13CServerExoApp26GetEncounterByGameObjectIDEj, (void*)&GetEncounter, Hooks::Order::Final); - static auto s_GetSoundObject = Hooks::HookFunction(Functions::_ZN13CServerExoApp28GetSoundObjectByGameObjectIDEj, (void*)&GetSoundObject, Hooks::Order::Final); + static auto s_GetGameObj = Hooks::HookFunction(&CServerExoApp::GetGameObject, &GetGameObj, Hooks::Order::Final); + static auto s_GetStore = Hooks::HookFunction(&CServerExoApp::GetStoreByGameObjectID, &GetStore, Hooks::Order::Final); + static auto s_GetItem = Hooks::HookFunction(&CServerExoApp::GetItemByGameObjectID, &GetItem, Hooks::Order::Final); + static auto s_GetCreature = Hooks::HookFunction(&CServerExoApp::GetCreatureByGameObjectID, &GetCreature, Hooks::Order::Final); + static auto s_GetModule = Hooks::HookFunction(&CServerExoApp::GetModuleByGameObjectID, &GetModule, Hooks::Order::Final); + static auto s_GetArea = Hooks::HookFunction(&CServerExoApp::GetAreaByGameObjectID, &GetArea, Hooks::Order::Final); + static auto s_GetTrigger = Hooks::HookFunction(&CServerExoApp::GetTriggerByGameObjectID, &GetTrigger, Hooks::Order::Final); + static auto s_GetPlaceable = Hooks::HookFunction(&CServerExoApp::GetPlaceableByGameObjectID, &GetPlaceable, Hooks::Order::Final); + static auto s_GetDoor = Hooks::HookFunction(&CServerExoApp::GetDoorByGameObjectID, &GetDoor, Hooks::Order::Final); + static auto s_GetAreaOfEffect = Hooks::HookFunction(&CServerExoApp::GetAreaOfEffectByGameObjectID, &GetAreaOfEffect, Hooks::Order::Final); + static auto s_GetWaypoint = Hooks::HookFunction(&CServerExoApp::GetWaypointByGameObjectID, &GetWaypoint, Hooks::Order::Final); + static auto s_GetEncounter = Hooks::HookFunction(&CServerExoApp::GetEncounterByGameObjectID, &GetEncounter, Hooks::Order::Final); + static auto s_GetSoundObject = Hooks::HookFunction(&CServerExoApp::GetSoundObjectByGameObjectID, &GetSoundObject, Hooks::Order::Final); } static CGameObject* GetGameObj(CServerExoApp*, ObjectID oid) diff --git a/Plugins/Optimizations/LuoLookup.cpp b/Plugins/Optimizations/LuoLookup.cpp index 52429899064..a4e274c1ccf 100644 --- a/Plugins/Optimizations/LuoLookup.cpp +++ b/Plugins/Optimizations/LuoLookup.cpp @@ -37,7 +37,6 @@ static void DestroyPlayer0(CNWSPlayer* pThis); static void DestroyPlayer1(CNWSPlayer* pThis); static BOOL SendServerToPlayerGameObjUpdate(CNWSMessage*, CNWSPlayer*, ObjectID); -static bool s_FixPlaceableEffectReapplyBug; void LuoLookup() __attribute__((constructor)); void LuoLookup() @@ -47,19 +46,19 @@ void LuoLookup() LOG_INFO("LastUpdateObject lookup optimization enabled"); s_playerluo.Initialize(); - s_CreateNewLastUpdateObject = Hooks::HookFunction(Functions::_ZN11CNWSMessage25CreateNewLastUpdateObjectEP10CNWSPlayerP10CNWSObjectPjS4_, (void*)CreateNewLastUpdateObject, Hooks::Order::Early); + s_CreateNewLastUpdateObject = Hooks::HookFunction(&CNWSMessage::CreateNewLastUpdateObject, CreateNewLastUpdateObject, Hooks::Order::Early); s_DestroyPlayer0 = Hooks::HookFunction(Functions::_ZN10CNWSPlayerD0Ev, (void*)DestroyPlayer0, Hooks::Order::Early); s_DestroyPlayer1 = Hooks::HookFunction(Functions::_ZN10CNWSPlayerD1Ev, (void*)DestroyPlayer1, Hooks::Order::Early); - s_GetLastUpdateObject = Hooks::HookFunction(Functions::_ZN10CNWSPlayer19GetLastUpdateObjectEj, (void*)GetLastUpdateObject, Hooks::Order::Final); - s_TestObjectUpdateDifferences = Hooks::HookFunction(Functions::_ZN11CNWSMessage27TestObjectUpdateDifferencesEP10CNWSPlayerP10CNWSObjectPP17CLastUpdateObjectPjS7_, (void*)TestObjectUpdateDifferences, Hooks::Order::Final); - s_DeleteLastUpdateObjectsForObject = Hooks::HookFunction(Functions::_ZN11CNWSMessage32DeleteLastUpdateObjectsForObjectEP10CNWSPlayerj, (void*)DeleteLastUpdateObjectsForObject, Hooks::Order::Final); - s_DeleteLastUpdateObjectsInOtherAreas = Hooks::HookFunction(Functions::_ZN11CNWSMessage35DeleteLastUpdateObjectsInOtherAreasEP10CNWSPlayer, (void*)DeleteLastUpdateObjectsInOtherAreas, Hooks::Order::Final); + s_GetLastUpdateObject = Hooks::HookFunction(&CNWSPlayer::GetLastUpdateObject, GetLastUpdateObject, Hooks::Order::Final); + s_TestObjectUpdateDifferences = Hooks::HookFunction(&CNWSMessage::TestObjectUpdateDifferences, TestObjectUpdateDifferences, Hooks::Order::Final); + s_DeleteLastUpdateObjectsForObject = Hooks::HookFunction(&CNWSMessage::DeleteLastUpdateObjectsForObject, DeleteLastUpdateObjectsForObject, Hooks::Order::Final); + s_DeleteLastUpdateObjectsInOtherAreas = Hooks::HookFunction(&CNWSMessage::DeleteLastUpdateObjectsInOtherAreas, DeleteLastUpdateObjectsInOtherAreas, Hooks::Order::Final); if (Config::Get("ALTERNATE_GAME_OBJECT_UPDATE", false)) { LOG_INFO("Using alternative game object update mechanism"); - s_SendServerToPlayerGameObjUpdate = Hooks::HookFunction(Functions::_ZN11CNWSMessage31SendServerToPlayerGameObjUpdateEP10CNWSPlayerj, (void*)SendServerToPlayerGameObjUpdate, Hooks::Order::Final); + s_SendServerToPlayerGameObjUpdate = Hooks::HookFunction(&CNWSMessage::SendServerToPlayerGameObjUpdate, SendServerToPlayerGameObjUpdate, Hooks::Order::Final); auto dist = Config::Get("OBJECT_UPDATE_DISTANCE", 45.0); LOG_INFO("Object update distance is %f", dist); @@ -67,12 +66,6 @@ void LuoLookup() for (int32_t i = 0; i <= Constants::ObjectType::MAX; i++) s_UpdateDistances[i] = dist * dist; } - - if (Config::Get("FIX_PLACEABLE_VFX_REAPPLY_BUG", false)) - { - LOG_INFO("Fixing a bug where VFXs on placeables keep getting reapplied"); - s_FixPlaceableEffectReapplyBug = true; - } } } @@ -153,9 +146,6 @@ static void MessageDeleteLuo(CNWSMessage* msg, CLastUpdateObject* luo, CNWSPlaye bDelete = false; } - if (s_FixPlaceableEffectReapplyBug && luo->m_nObjectType == Constants::ObjectType::Placeable) - bDelete = true; - msg->WriteBOOL(bDelete); } } diff --git a/Plugins/Optimizations/PlayerLookup.cpp b/Plugins/Optimizations/PlayerLookup.cpp index ec40e427b08..bc571b4359a 100644 --- a/Plugins/Optimizations/PlayerLookup.cpp +++ b/Plugins/Optimizations/PlayerLookup.cpp @@ -1,6 +1,7 @@ #include "nwnx.hpp" #include "HashTable32.hpp" +#include "API/CServerExoApp.hpp" #include "API/CNWSPlayer.hpp" #include "API/CNWSCreature.hpp" #include "API/CNWSCreatureStats.hpp" @@ -36,14 +37,14 @@ void PlayerLookup() LOG_INFO("Player object lookup optimization enabled"); s_playerobjects.Initialize(); - s_SetGameObject = Hooks::HookFunction(Functions::_ZN10CNWSPlayer13SetGameObjectEP10CNWSObject, (void*)SetGameObject, Hooks::Order::VeryEarly); + s_SetGameObject = Hooks::HookFunction(&CNWSPlayer::SetGameObject, SetGameObject, Hooks::Order::VeryEarly); s_DestroyPlayer0 = Hooks::HookFunction(Functions::_ZN10CNWSPlayerD0Ev, (void*)DestroyPlayer0, Hooks::Order::Early); s_DestroyPlayer1 = Hooks::HookFunction(Functions::_ZN10CNWSPlayerD1Ev, (void*)DestroyPlayer1, Hooks::Order::Early); - s_GetIsDM = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats7GetIsDMEv, (void*)GetIsDM, Hooks::Order::Final); - s_GetIsPlayerDM = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats13GetIsPlayerDMEv, (void*)GetIsPlayerDM, Hooks::Order::Final); - - s_GetClientObjectByObjectId = Hooks::HookFunction(Functions::_ZN13CServerExoApp25GetClientObjectByObjectIdEj, (void*)GetClientObjectByObjectId, Hooks::Order::Final); + s_GetIsDM = Hooks::HookFunction(&CNWSCreatureStats::GetIsDM, GetIsDM, Hooks::Order::Final); + s_GetIsPlayerDM = Hooks::HookFunction(&CNWSCreatureStats::GetIsPlayerDM, GetIsPlayerDM, Hooks::Order::Final); + + s_GetClientObjectByObjectId = Hooks::HookFunction(&CServerExoApp::GetClientObjectByObjectId, GetClientObjectByObjectId, Hooks::Order::Final); } } diff --git a/Plugins/Optimizations/README.md b/Plugins/Optimizations/README.md index 84ce71abc14..a4ba053d24b 100644 --- a/Plugins/Optimizations/README.md +++ b/Plugins/Optimizations/README.md @@ -12,9 +12,7 @@ Game optimizations. Improves performance of various game elements. | `NWNX_OPTIMIZATIONS_GAME_OBJECT_LOOKUP` | true/false | Optimizes object lookup code, improving performance | | `NWNX_OPTIMIZATIONS_PLAYER_LOOKUP` | true/false | Optimizes Player client lookup from object IDs, improving performance | | `NWNX_OPTIMIZATIONS_LUO_LOOKUP` | true/false | Optimizes LastUpdateObject lookup code, improving performance | -| `NWNX_OPTIMIZATIONS_FIX_PLACEABLE_VFX_REAPPLY_BUG` | true/false | Fixes a bug where visual effects on placeables keep getting reapplied. Requires `LUO_LOOKUP`. | | `NWNX_OPTIMIZATIONS_ALTERNATE_GAME_OBJECT_UPDATE` | true/false | Uses an experimental alternative update mechanism. Requires `LUO_LOOKUP`. **WARNING**: Will break all of NWNX_Appearance and the following NWNX_Player functions: SetObjectVisualTransformOverride, ApplyLoopingVisualEffectToObject, SetPlaceableNameOverride, SetCreatureNameOverride, SetObjectMouseCursorOverride and SetObjectHiliteColorOverride. Forcing objects to be always visible with NWNX_Visibility will also break. | | `NWNX_OPTIMIZATIONS_RECONCILE_AUTOMAP_DATA` | true/false | Reduces the number of checks for mismatches between players' and module's area list | | `NWNX_OPTIMIZATIONS_CACHE_SCRIPT_CHUNKS` | true/false | Caches all script chunks, improving performance | -| `NWNX_OPTIMIZATIONS_CLIENT_GAMEOBJECT_UPDATE_TIME` | int | The global client gameobject update time in microseconds, default 200000 (200 milliseconds) | -| `NWNX_OPTIMIZATIONS_CLIENT_GAMEOBJECT_UPDATE_TIME_LOADING` | int | The client gameobject update time in microseconds for players loading an area, default 200000 (200 milliseconds) | +| `NWNX_OPTIMIZATIONS_CACHE_DEBUGGER_INSTANCES` | true/false | Caches all nwscript debugger instances, improving GetScriptBacktrace() performance | diff --git a/Plugins/Optimizations/ReconcileAutoMap.cpp b/Plugins/Optimizations/ReconcileAutoMap.cpp index 7caeeecaaee..b4922e4d4ea 100644 --- a/Plugins/Optimizations/ReconcileAutoMap.cpp +++ b/Plugins/Optimizations/ReconcileAutoMap.cpp @@ -4,6 +4,7 @@ #include "API/CNWSPlayer.hpp" #include "API/CNWSCreature.hpp" #include "API/CNWSCreatureStats.hpp" +#include "API/CNWVirtualMachineCommands.hpp" namespace Optimizations { @@ -28,8 +29,8 @@ void ReconcileAutoMap() { LOG_INFO("AutoMap data fixup optimization enabled"); - s_ReconcileAutoMapData = Hooks::HookFunction(Functions::_ZN12CNWSCreature20ReconcileAutoMapDataEv, (void*)ReconcileAutoMapData, Hooks::Order::Early); - s_VMAreaManagement = Hooks::HookFunction(Functions::_ZN25CNWVirtualMachineCommands28ExecuteCommandAreaManagementEii, (void*)ExecuteCommandAreaManagement, Hooks::Order::Early); + s_ReconcileAutoMapData = Hooks::HookFunction(&CNWSCreature::ReconcileAutoMapData, ReconcileAutoMapData, Hooks::Order::Early); + s_VMAreaManagement = Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandAreaManagement, ExecuteCommandAreaManagement, Hooks::Order::Early); s_SeqTable.Initialize(); } } diff --git a/Plugins/Player/NWScript/nwnx_player.nss b/Plugins/Player/NWScript/nwnx_player.nss index 6e543979479..b323fb67747 100644 --- a/Plugins/Player/NWScript/nwnx_player.nss +++ b/Plugins/Player/NWScript/nwnx_player.nss @@ -416,6 +416,17 @@ void NWNX_Player_UpdateFogColor(object oPlayer, int nSunFogColor, int nMoonFogCo /// @param nMoonFogAmount The int value of Moon Fog amount (range 0-255). void NWNX_Player_UpdateFogAmount(object oPlayer, int nSunFogAmount, int nMoonFogAmount); +/// @brief Return's the currently-possessed game object of a player. +/// @param oPlayer The player object (e.g. from GetFirst/NextPC()). +/// @return the actual game object of oPlayer, or OBJECT_INVALID on error. +object NWNX_Player_GetGameObject(object oPlayer); + +/// @brief Override the ui discovery mask of oObject for oPlayer only +/// @param oPlayer The player object. +/// @param oObject The target object. +/// @param nMask A mask of OBJECT_UI_DISCOVERY_*, or -1 to clear the override +void NWNX_Player_SetObjectUiDiscoveryMaskOverride(object oPlayer, object oObject, int nMask); + /// @} void NWNX_Player_ForcePlaceableExamineWindow(object player, object placeable) @@ -1049,3 +1060,23 @@ void NWNX_Player_UpdateFogAmount(object oPlayer, int nSunFogAmount, int nMoonFog NWNX_PushArgumentObject(oPlayer); NWNX_CallFunction(NWNX_Player, sFunc); } + +object NWNX_Player_GetGameObject(object oPlayer) +{ + string sFunc = "GetGameObject"; + + NWNX_PushArgumentObject(oPlayer); + NWNX_CallFunction(NWNX_Player, sFunc); + return NWNX_GetReturnValueObject(); +} + +void NWNX_Player_SetObjectUiDiscoveryMaskOverride(object oPlayer, object oObject, int nMask) +{ + string sFunc = "SetObjectUiDiscoveryMaskOverride"; + + NWNX_PushArgumentInt(nMask); + NWNX_PushArgumentObject(oObject); + NWNX_PushArgumentObject(oPlayer); + + NWNX_CallFunction(NWNX_Player, sFunc); +} diff --git a/Plugins/Player/Player.cpp b/Plugins/Player/Player.cpp index abb039389e9..1066b0d478c 100644 --- a/Plugins/Player/Player.cpp +++ b/Plugins/Player/Player.cpp @@ -4,6 +4,7 @@ #include "API/CServerExoApp.hpp" #include "API/CServerInfo.hpp" #include "API/CNWSArea.hpp" +#include "API/CNWSEffectListHandler.hpp" #include "API/CNWSPlayer.hpp" #include "API/CNWSMessage.hpp" #include "API/CNWSObject.hpp" @@ -80,8 +81,8 @@ NWNX_EXPORT ArgumentStack ForcePlaceableInventoryWindow(ArgumentStack&& args) NWNX_EXPORT ArgumentStack StartGuiTimingBar(ArgumentStack&& args) { static Hooks::Hook pHandlePlayerToServerInputCancelGuiTimingEventHook = - Hooks::HookFunction(Functions::_ZN11CNWSMessage45HandlePlayerToServerInputCancelGuiTimingEventEP10CNWSPlayer, - (void*)+[](CNWSMessage* pMessage, CNWSPlayer* pPlayer) -> int32_t + Hooks::HookFunction(&CNWSMessage::HandlePlayerToServerInputCancelGuiTimingEvent, + +[](CNWSMessage* pMessage, CNWSPlayer* pPlayer) -> int32_t { CNWSScriptVarTable *pScriptVarTable = Utils::GetScriptVarTable(Utils::GetGameObject(pPlayer->m_oidPCObject)); @@ -132,8 +133,8 @@ NWNX_EXPORT ArgumentStack StopGuiTimingBar(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetAlwaysWalk(ArgumentStack&& args) { static NWNXLib::Hooks::Hook pOnRemoveLimitMovementSpeed_hook = - Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler26OnRemoveLimitMovementSpeedEP10CNWSObjectP11CGameEffect, - (void*)+[](CNWSEffectListHandler *pThis, CNWSObject *pObject, CGameEffect *pEffect) -> int32_t + Hooks::HookFunction(&CNWSEffectListHandler::OnRemoveLimitMovementSpeed, + +[](CNWSEffectListHandler *pThis, CNWSObject *pObject, CGameEffect *pEffect) -> int32_t { // Don't remove the forced walk flag when various slowdown effects expire auto walk = pObject->nwnxGet("ALWAYS_WALK"); @@ -401,8 +402,8 @@ NWNX_EXPORT ArgumentStack SetPlaceableUsable(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetRestDuration(ArgumentStack&& args) { static Hooks::Hook pAIActionRestHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature12AIActionRestEP20CNWSObjectActionNode, - (void*)+[](CNWSCreature* pCreature, CNWSObjectActionNode *pNode) -> uint32_t + Hooks::HookFunction(&CNWSCreature::AIActionRest, + +[](CNWSCreature* pCreature, CNWSObjectActionNode *pNode) -> uint32_t { if (auto restDuration = pCreature->nwnxGet("REST_DURATION")) { @@ -565,8 +566,8 @@ NWNX_EXPORT ArgumentStack SetAreaExplorationState(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetRestAnimation(ArgumentStack&& args) { static Hooks::Hook pAIActionRestHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature12AIActionRestEP20CNWSObjectActionNode, - (void*)+[](CNWSCreature* pCreature, CNWSObjectActionNode *pNode) -> uint32_t + Hooks::HookFunction(&CNWSCreature::AIActionRest, + +[](CNWSCreature* pCreature, CNWSObjectActionNode *pNode) -> uint32_t { auto retVal = pAIActionRestHook->CallOriginal(pCreature, pNode); @@ -601,8 +602,8 @@ NWNX_EXPORT ArgumentStack SetRestAnimation(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetObjectVisualTransformOverride(ArgumentStack&& args) { static Hooks::Hook pSetObjectVisualTransformOverrideHook = - Hooks::HookFunction(Functions::_ZN11CNWSMessage32ComputeGameObjectUpdateForObjectEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayj, - (void*)+[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void + Hooks::HookFunction(&CNWSMessage::ComputeGameObjectUpdateForObject, + +[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void { if (auto *pObject = Utils::AsNWSObject(Utils::GetGameObject(oidObjectToUpdate))) { @@ -615,9 +616,9 @@ NWNX_EXPORT ArgumentStack SetObjectVisualTransformOverride(ArgumentStack&& args) { auto *pObjectVisualTransformData = static_cast(*objectVisualTransformData); - std::swap(*pObjectVisualTransformData, pObject->m_pVisualTransformData); + std::swap(pObjectVisualTransformData, pObject->m_pVisualTransformData); pSetObjectVisualTransformOverrideHook->CallOriginal(pMessage, pPlayer, pPlayerGameObject, pGameObjectArray, oidObjectToUpdate); - std::swap(*pObjectVisualTransformData, pObject->m_pVisualTransformData); + std::swap(pObjectVisualTransformData, pObject->m_pVisualTransformData); return; } @@ -656,10 +657,10 @@ NWNX_EXPORT ArgumentStack SetObjectVisualTransformOverride(ArgumentStack&& args) else { pObjectVisualTransformData = new ObjectVisualTransformData(); - pObjectVisualTransformData->m_scale = Vector{1.0f, 1.0f, 1.0f}; - pObjectVisualTransformData->m_rotate = Vector{0.0f, 0.0f, 0.0f}; - pObjectVisualTransformData->m_translate = Vector{0.0f, 0.0f, 0.0f}; - pObjectVisualTransformData->m_animationSpeed = 1.0f; + pObjectVisualTransformData->m_scopes[0].m_scale = Vector{1.0f, 1.0f, 1.0f}; + pObjectVisualTransformData->m_scopes[0].m_rotate = Vector{0.0f, 0.0f, 0.0f}; + pObjectVisualTransformData->m_scopes[0].m_translate = Vector{0.0f, 0.0f, 0.0f}; + pObjectVisualTransformData->m_scopes[0].m_animationSpeed = 1.0f; obj->nwnxSet("OVTO!" + Utils::ObjectIDToString(pPlayer->m_oidNWSObject), pObjectVisualTransformData, [](void*p) { delete static_cast(p); }); @@ -668,35 +669,35 @@ NWNX_EXPORT ArgumentStack SetObjectVisualTransformOverride(ArgumentStack&& args) switch (transform) { case Constants::ObjectVisualTransform::Scale: - pObjectVisualTransformData->m_scale.x = value; + pObjectVisualTransformData->m_scopes[0].m_scale.x = value; break; case Constants::ObjectVisualTransform::RotateX: - pObjectVisualTransformData->m_rotate.x = value; + pObjectVisualTransformData->m_scopes[0].m_rotate.x = value; break; case Constants::ObjectVisualTransform::RotateY: - pObjectVisualTransformData->m_rotate.y = value; + pObjectVisualTransformData->m_scopes[0].m_rotate.y = value; break; case Constants::ObjectVisualTransform::RotateZ: - pObjectVisualTransformData->m_rotate.z = value; + pObjectVisualTransformData->m_scopes[0].m_rotate.z = value; break; case Constants::ObjectVisualTransform::TranslateX: - pObjectVisualTransformData->m_translate.x = value; + pObjectVisualTransformData->m_scopes[0].m_translate.x = value; break; case Constants::ObjectVisualTransform::TranslateY: - pObjectVisualTransformData->m_translate.y = value; + pObjectVisualTransformData->m_scopes[0].m_translate.y = value; break; case Constants::ObjectVisualTransform::TranslateZ: - pObjectVisualTransformData->m_translate.z = value; + pObjectVisualTransformData->m_scopes[0].m_translate.z = value; break; case Constants::ObjectVisualTransform::AnimationSpeed: - pObjectVisualTransformData->m_animationSpeed = value; + pObjectVisualTransformData->m_scopes[0].m_animationSpeed = value; break; default: @@ -712,8 +713,8 @@ NWNX_EXPORT ArgumentStack SetObjectVisualTransformOverride(ArgumentStack&& args) NWNX_EXPORT ArgumentStack ApplyLoopingVisualEffectToObject(ArgumentStack&& args) { static Hooks::Hook pApplyLoopingVisualEffectToObjectHook = - Hooks::HookFunction(Functions::_ZN11CNWSMessage32ComputeGameObjectUpdateForObjectEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayj, - (void*)+[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void + Hooks::HookFunction(&CNWSMessage::ComputeGameObjectUpdateForObject, + +[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void { if (auto *pObject = Utils::AsNWSObject(Utils::GetGameObject(oidObjectToUpdate))) { @@ -792,8 +793,8 @@ NWNX_EXPORT ArgumentStack ApplyLoopingVisualEffectToObject(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetPlaceableNameOverride(ArgumentStack&& args) { static Hooks::Hook pSetPlaceableNameOverrideHook = - Hooks::HookFunction(Functions::_ZN11CNWSMessage32ComputeGameObjectUpdateForObjectEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayj, - (void*)+[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void + Hooks::HookFunction(&CNWSMessage::ComputeGameObjectUpdateForObject, + +[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void { if (auto *pPlaceable = Utils::AsNWSPlaceable(Utils::GetGameObject(oidObjectToUpdate))) { @@ -864,8 +865,8 @@ NWNX_EXPORT ArgumentStack GetQuestCompleted(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetPersistentLocation(ArgumentStack&& args) { static Hooks::Hook pSetPersistentLocationHook = - Hooks::HookFunction(API::Functions::_ZN21CServerExoAppInternal19LoadCharacterFinishEP10CNWSPlayerii, - (void*)+[](CServerExoAppInternal *pServerExoAppInternal, CNWSPlayer *pPlayer, int32_t bUseSaveGameCharacter, int32_t bUseStateDataInSaveGame ) -> int32_t + Hooks::HookFunction(&CServerExoAppInternal::LoadCharacterFinish, + +[](CServerExoAppInternal *pServerExoAppInternal, CNWSPlayer *pPlayer, int32_t bUseSaveGameCharacter, int32_t bUseStateDataInSaveGame ) -> int32_t { auto retVal = pSetPersistentLocationHook->CallOriginal(pServerExoAppInternal, pPlayer, bUseSaveGameCharacter, bUseStateDataInSaveGame); @@ -985,8 +986,8 @@ NWNX_EXPORT ArgumentStack PossessCreature(ArgumentStack&& args) // When a PC is logging off we don't want this creature to unsummon themselves (unless crashed in AT) static NWNXLib::Hooks::Hook pUnsummonMyselfHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature14UnsummonMyselfEv, - (void*)+[](CNWSCreature *pPossessed) -> void + Hooks::HookFunction(&CNWSCreature::UnsummonMyself, + +[](CNWSCreature *pPossessed) -> void { auto possessorOidPOS = pPossessed->nwnxGet("possessorOid"); auto pServer = Globals::AppManager()->m_pServerExoApp; @@ -1023,8 +1024,8 @@ NWNX_EXPORT ArgumentStack PossessCreature(ArgumentStack&& args) }, Hooks::Order::Late); static NWNXLib::Hooks::Hook pPossessFamiliarHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature15PossessFamiliarEv, - (void*)+[](CNWSCreature *pPossessor) -> void + Hooks::HookFunction(&CNWSCreature::PossessFamiliar, + +[](CNWSCreature *pPossessor) -> void { auto possessorOidPOS = pPossessor->nwnxGet("possessorOid"); if (possessorOidPOS) @@ -1038,8 +1039,8 @@ NWNX_EXPORT ArgumentStack PossessCreature(ArgumentStack&& args) }, Hooks::Order::Late); static NWNXLib::Hooks::Hook pUnpossessFamiliarHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature17UnpossessFamiliarEv, - (void*)+[](CNWSCreature *pPossessor) -> void + Hooks::HookFunction(&CNWSCreature::UnpossessFamiliar, + +[](CNWSCreature *pPossessor) -> void { pUnpossessFamiliarHook->CallOriginal(pPossessor); @@ -1160,8 +1161,8 @@ NWNX_EXPORT ArgumentStack SetCustomToken(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetCreatureNameOverride(ArgumentStack&& args) { static Hooks::Hook pSetCreatureNameOverrideHook = - Hooks::HookFunction(Functions::_ZN11CNWSMessage32ComputeGameObjectUpdateForObjectEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayj, - (void*)+[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void + Hooks::HookFunction(&CNWSMessage::ComputeGameObjectUpdateForObject, + +[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void { if (auto *pCreature = Utils::AsNWSCreature(Utils::GetGameObject(oidObjectToUpdate))) { @@ -1302,8 +1303,8 @@ NWNX_EXPORT ArgumentStack ToggleDM(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetObjectMouseCursorOverride(ArgumentStack&& args) { static Hooks::Hook pSetObjectMouseCursorOverrideHook = - Hooks::HookFunction(Functions::_ZN11CNWSMessage32ComputeGameObjectUpdateForObjectEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayj, - (void*)+[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void + Hooks::HookFunction(&CNWSMessage::ComputeGameObjectUpdateForObject, + +[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void { if (auto *pObject = Utils::AsNWSObject(Utils::GetGameObject(oidObjectToUpdate))) { @@ -1342,8 +1343,8 @@ NWNX_EXPORT ArgumentStack SetObjectMouseCursorOverride(ArgumentStack&& args) NWNX_EXPORT ArgumentStack SetObjectHiliteColorOverride(ArgumentStack&& args) { static Hooks::Hook pSetObjectHiliteColorHook = - Hooks::HookFunction(Functions::_ZN11CNWSMessage32ComputeGameObjectUpdateForObjectEP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayj, - (void*)+[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void + Hooks::HookFunction(&CNWSMessage::ComputeGameObjectUpdateForObject, + +[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void { if (auto *pObject = Utils::AsNWSObject(Utils::GetGameObject(oidObjectToUpdate))) { @@ -1593,7 +1594,7 @@ NWNX_EXPORT ArgumentStack GetJournalEntry(ArgumentStack&& args) if (pEntry.szPlot_Id.CStr() == tag) { SJournalEntry lastJournalEntry = entries[i]; - return + return { std::string(Utils::ExtractLocString(lastJournalEntry.szText)), std::string(Utils::ExtractLocString(lastJournalEntry.szName)), @@ -1676,7 +1677,7 @@ NWNX_EXPORT ArgumentStack UpdateSkyBox(ArgumentStack&& args) if (auto* pArea = pPlayerCreature->GetArea()) { const auto skyBox = args.extract(); - const auto oidArea = pArea->m_idSelf; + const auto oidArea = pArea->m_idSelf; if (auto *pMessage = Globals::AppManager()->m_pServerExoApp->GetNWSMessage()) { pMessage->CreateWriteMessage(sizeof(skyBox) + sizeof(oidArea), pPlayer->m_nPlayerID, 1); @@ -1691,7 +1692,7 @@ NWNX_EXPORT ArgumentStack UpdateSkyBox(ArgumentStack&& args) Constants::MessageAreaMinor::UpdateSkyBox, buffer, size); } - } + } } } } @@ -1701,7 +1702,7 @@ NWNX_EXPORT ArgumentStack UpdateSkyBox(ArgumentStack&& args) NWNX_EXPORT ArgumentStack UpdateFogColor(ArgumentStack&& args) { if (auto *pPlayer = Utils::PopPlayer(args)) - { + { if (auto pPlayerCreature = Utils::AsNWSCreature(pPlayer->GetGameObject())) { if (auto* pArea = pPlayerCreature->GetArea()) @@ -1739,7 +1740,7 @@ NWNX_EXPORT ArgumentStack UpdateFogAmount(ArgumentStack&& args) if (auto *pPlayer = Utils::PopPlayer(args)) { if (auto pPlayerCreature = Utils::AsNWSCreature(pPlayer->GetGameObject())) - { + { if (auto* pArea = pPlayerCreature->GetArea()) { const auto sunFogAmount = args.extract(); @@ -1770,3 +1771,65 @@ NWNX_EXPORT ArgumentStack UpdateFogAmount(ArgumentStack&& args) } return {}; } + +NWNX_EXPORT ArgumentStack GetGameObject(ArgumentStack&& args) +{ + if (auto *obj = Utils::PopGameObject(args)) + { + auto *playerList = (CExoLinkedList*) Globals::AppManager()->m_pServerExoApp->GetPlayerList(); + CExoLinkedListPosition pListPosition = playerList->GetHeadPos(); + while (pListPosition != NULL) + { + auto pPlayer = (CNWSPlayer *) playerList->GetAtPos(pListPosition); + + if (pPlayer->m_oidPCObject == obj->m_idSelf) + { + return pPlayer->m_oidNWSObject; + } + + playerList->GetNext(pListPosition); + } + } + + return Constants::OBJECT_INVALID; +} + +NWNX_EXPORT ArgumentStack SetObjectUiDiscoveryMaskOverride(ArgumentStack&& args) +{ + static Hooks::Hook pSetObjectUiDiscoveryMaskOverrideHook = + Hooks::HookFunction(&CNWSMessage::ComputeGameObjectUpdateForObject, + +[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, CNWSObject *pPlayerGameObject, CGameObjectArray *pGameObjectArray, ObjectID oidObjectToUpdate) -> void + { + if (auto *pObject = Utils::AsNWSObject(Utils::GetGameObject(oidObjectToUpdate))) + { + if (auto discoveryMask = pObject->nwnxGet("OBJUDO_" + Utils::ObjectIDToString(pPlayer->m_oidNWSObject))) + { + std::swap(*discoveryMask, pObject->m_nUiDiscoveryMask); + pSetObjectUiDiscoveryMaskOverrideHook->CallOriginal(pMessage, pPlayer, pPlayerGameObject, pGameObjectArray, oidObjectToUpdate); + std::swap(*discoveryMask, pObject->m_nUiDiscoveryMask); + return; + } + } + pSetObjectUiDiscoveryMaskOverrideHook->CallOriginal(pMessage, pPlayer, pPlayerGameObject, pGameObjectArray, oidObjectToUpdate); + }, Hooks::Order::Early); + + if (auto *pPlayer = Utils::PopPlayer(args)) + { + auto oidTarget = args.extract(); + ASSERT_OR_THROW(oidTarget != Constants::OBJECT_INVALID); + auto discoveryMask = args.extract(); + + if (auto *pObject = Utils::AsNWSObject(Utils::GetGameObject(oidTarget))) + { + if (discoveryMask < 0) + { + pObject->nwnxRemove("OBJUDO_" + Utils::ObjectIDToString(pPlayer->m_oidNWSObject)); + } + else + { + pObject->nwnxSet("OBJUDO_" + Utils::ObjectIDToString(pPlayer->m_oidNWSObject), discoveryMask); + } + } + } + return {}; +} diff --git a/Plugins/Profiler/Profiler.cpp b/Plugins/Profiler/Profiler.cpp index 4ec525d5276..bb75f472130 100644 --- a/Plugins/Profiler/Profiler.cpp +++ b/Plugins/Profiler/Profiler.cpp @@ -1,6 +1,7 @@ #include "Profiler.hpp" #include "API/Functions.hpp" +#include "API/CServerExoAppInternal.hpp" #include "ProfilerMacros.hpp" #include "Services/Metrics/Resamplers.hpp" #include "Targets/AIMasterUpdates.hpp" @@ -119,8 +120,8 @@ Profiler::Profiler(Services::ProxyServiceList* services) if (g_recalibrate || g_tickrate) { - s_MainLoopHook = Hooks::HookFunction(API::Functions::_ZN21CServerExoAppInternal8MainLoopEv, - (void*)&MainLoopUpdate, Hooks::Order::Earliest); + s_MainLoopHook = Hooks::HookFunction(&CServerExoAppInternal::MainLoop, + &MainLoopUpdate, Hooks::Order::Earliest); } // Resamples all of the automated timing data. diff --git a/Plugins/Profiler/ProfilerMacros.hpp b/Plugins/Profiler/ProfilerMacros.hpp index 8b12cf5f9c0..d0eb6859ff0 100644 --- a/Plugins/Profiler/ProfilerMacros.hpp +++ b/Plugins/Profiler/ProfilerMacros.hpp @@ -100,13 +100,13 @@ DECLARE_PROFILE_TARGET_FAST( #define DEFINE_PROFILER_TARGET(name, address, ret, ...) \ { \ g_##name##Hook = Hooks::HookFunction(address, \ - (void*)&ProfileLanding__##name<__VA_ARGS__>, \ + &ProfileLanding__##name<__VA_ARGS__>, \ NWNXLib::Hooks::Order::Earliest); \ } #define DEFINE_PROFILER_TARGET_FAST(name, address, ret, ...) \ { \ g_##name##Hook = Hooks::HookFunction(address, \ - (void*)&ProfileLanding__##name<__VA_ARGS__>, \ + &ProfileLanding__##name<__VA_ARGS__>, \ NWNXLib::Hooks::Order::Earliest); \ } diff --git a/Plugins/Profiler/Targets/AIMasterUpdates.cpp b/Plugins/Profiler/Targets/AIMasterUpdates.cpp index e532acf639c..678096a22be 100644 --- a/Plugins/Profiler/Targets/AIMasterUpdates.cpp +++ b/Plugins/Profiler/Targets/AIMasterUpdates.cpp @@ -4,6 +4,7 @@ #include "API/CExoLinkedListInternal.hpp" #include "API/CExoLinkedList.hpp" #include "API/CServerAIMaster.hpp" +#include "API/CNWSObject.hpp" #include "API/Functions.hpp" #include "ProfilerMacros.hpp" #include "Services/Metrics/Resamplers.hpp" @@ -28,32 +29,32 @@ AIMasterUpdates::AIMasterUpdates(const bool overkill, MetricsProxy* metrics) { g_metrics = metrics; - s_UpdateStateHook = Hooks::HookFunction(API::Functions::_ZN15CServerAIMaster11UpdateStateEv, (void*)&AIMasterUpdate, Hooks::Order::Earliest); + s_UpdateStateHook = Hooks::HookFunction(&CServerAIMaster::UpdateState, &AIMasterUpdate, Hooks::Order::Earliest); Resamplers::ResamplerFuncPtr resampler = &Resamplers::template Mean; metrics->SetResampler("AIQueuedEvents", resampler, std::chrono::seconds(1)); metrics->SetResampler("AIUpdateListObjects", resampler, std::chrono::seconds(1)); DEFINE_PROFILER_TARGET( - AIMasterUpdateState, API::Functions::_ZN15CServerAIMaster11UpdateStateEv, + AIMasterUpdateState, &CServerAIMaster::UpdateState, void, CServerAIMaster*) if (overkill) { DEFINE_PROFILER_TARGET_FAST( - EventPending, API::Functions::_ZN15CServerAIMaster12EventPendingEjj, + EventPending, &CServerAIMaster::EventPending, int32_t, CServerAIMaster*, uint32_t, uint32_t) DEFINE_PROFILER_TARGET_FAST( - GetNextObject, API::Functions::_ZN13CServerAIList13GetNextObjectEv, + GetNextObject, &CServerAIList::GetNextObject, CNWSObject*, CServerAIList*) DEFINE_PROFILER_TARGET_FAST( - GetPendingEvent, API::Functions::_ZN15CServerAIMaster15GetPendingEventEPjS0_S0_S0_S0_PPv, + GetPendingEvent, &CServerAIMaster::GetPendingEvent, int32_t, CServerAIMaster*, uint32_t*, uint32_t*, uint32_t*, uint32_t*, uint32_t*, void**); DEFINE_PROFILER_TARGET_FAST( - UpdateDialog, API::Functions::_ZN10CNWSObject12UpdateDialogEv, + UpdateDialog, &CNWSObject::UpdateDialog, int32_t, CNWSObject*) } } diff --git a/Plugins/Profiler/Targets/MainLoop.cpp b/Plugins/Profiler/Targets/MainLoop.cpp index 4a60ce0db79..3be4c83b24b 100644 --- a/Plugins/Profiler/Targets/MainLoop.cpp +++ b/Plugins/Profiler/Targets/MainLoop.cpp @@ -1,6 +1,7 @@ #include "Targets/MainLoop.hpp" #include "API/Functions.hpp" +#include "API/CServerExoAppInternal.hpp" #include "ProfilerMacros.hpp" namespace Profiler { @@ -18,15 +19,15 @@ MainLoop::MainLoop(NWNXLib::Services::MetricsProxy* metrics) g_metrics = metrics; DEFINE_PROFILER_TARGET( - ExoAppMainLoop, API::Functions::_ZN21CServerExoAppInternal8MainLoopEv, + ExoAppMainLoop, &CServerExoAppInternal::MainLoop, int32_t, CServerExoAppInternal*); DEFINE_PROFILER_TARGET( - ExoAppConnectionLibMainLoop, API::Functions::_ZN21CServerExoAppInternal21ConnectionLibMainLoopEv, + ExoAppConnectionLibMainLoop, &CServerExoAppInternal::ConnectionLibMainLoop, void, CServerExoAppInternal*); DEFINE_PROFILER_TARGET( - ExoAppUpdateClientGameObjects, API::Functions::_ZN21CServerExoAppInternal23UpdateClientGameObjectsEi, + ExoAppUpdateClientGameObjects, &CServerExoAppInternal::UpdateClientGameObjects, void, CServerExoAppInternal*, int32_t); } diff --git a/Plugins/Profiler/Targets/NetLayer.cpp b/Plugins/Profiler/Targets/NetLayer.cpp index 14c99bfb709..c47cdd77d4e 100644 --- a/Plugins/Profiler/Targets/NetLayer.cpp +++ b/Plugins/Profiler/Targets/NetLayer.cpp @@ -1,6 +1,7 @@ #include "Targets/NetLayer.hpp" #include "API/Functions.hpp" +#include "API/CNetLayer.hpp" #include "ProfilerMacros.hpp" namespace Profiler { @@ -17,11 +18,11 @@ NetLayer::NetLayer(NWNXLib::Services::MetricsProxy* metrics) g_metrics = metrics; DEFINE_PROFILER_TARGET( - NetLayerProcessReceivedFrames, API::Functions::_ZN9CNetLayer21ProcessReceivedFramesEi, + NetLayerProcessReceivedFrames, &CNetLayer::ProcessReceivedFrames, void, CNetLayer*, int32_t); DEFINE_PROFILER_TARGET( - NetLayerUpdateStatusLoop, API::Functions::_ZN9CNetLayer16UpdateStatusLoopEj, + NetLayerUpdateStatusLoop, &CNetLayer::UpdateStatusLoop, int32_t, CNetLayer*, uint32_t); } diff --git a/Plugins/Profiler/Targets/NetMessages.cpp b/Plugins/Profiler/Targets/NetMessages.cpp index 1b3a1fc8ab2..f1b32345ba7 100644 --- a/Plugins/Profiler/Targets/NetMessages.cpp +++ b/Plugins/Profiler/Targets/NetMessages.cpp @@ -18,14 +18,14 @@ NetMessages::NetMessages(Services::MetricsProxy* metrics) g_metrics = metrics; s_ComputeGameObjectUpdateForCategoryHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage34ComputeGameObjectUpdateForCategoryEjjP10CNWSPlayerP10CNWSObjectP16CGameObjectArrayP29CNWSPlayerLUOSortedObjectListi, - (void*)&ComputeGameObjectUpdateForCategoryHook, Hooks::Order::Earliest); + &CNWSMessage::ComputeGameObjectUpdateForCategory, + &ComputeGameObjectUpdateForCategoryHook, Hooks::Order::Earliest); - s_SendServerToPlayerMessageHook = Hooks::HookFunction(Functions::_ZN11CNWSMessage25SendServerToPlayerMessageEjhhPhj, - (void*)&SendServerToPlayerMessageHook, Hooks::Order::Earliest); + s_SendServerToPlayerMessageHook = Hooks::HookFunction(&CNWSMessage::SendServerToPlayerMessage, + &SendServerToPlayerMessageHook, Hooks::Order::Earliest); - s_HandlePlayerToServerMessageHook = Hooks::HookFunction(Functions::_ZN11CNWSMessage27HandlePlayerToServerMessageEjPhj, - (void*)&HandlePlayerToServerMessageHook, Hooks::Order::Earliest); + s_HandlePlayerToServerMessageHook = Hooks::HookFunction(&CNWSMessage::HandlePlayerToServerMessage, + &HandlePlayerToServerMessageHook, Hooks::Order::Earliest); Services::Resamplers::ResamplerFuncPtr sumResampler = &Services::Resamplers::template Sum; metrics->SetResampler("GameObjectUpdate", sumResampler, std::chrono::seconds(1)); diff --git a/Plugins/Profiler/Targets/ObjectAIUpdates.cpp b/Plugins/Profiler/Targets/ObjectAIUpdates.cpp index b2d84cac764..ea1039b6a88 100644 --- a/Plugins/Profiler/Targets/ObjectAIUpdates.cpp +++ b/Plugins/Profiler/Targets/ObjectAIUpdates.cpp @@ -1,6 +1,17 @@ #include "Targets/ObjectAIUpdates.hpp" #include "API/Functions.hpp" +#include "API/CNWSArea.hpp" +#include "API/CNWSAreaOfEffectObject.hpp" +#include "API/CNWSCreature.hpp" +#include "API/CNWSDoor.hpp" +#include "API/CNWSEncounter.hpp" +#include "API/CNWSItem.hpp" +#include "API/CNWSModule.hpp" +#include "API/CNWSPlaceable.hpp" +#include "API/CNWSStore.hpp" +#include "API/CNWSTrigger.hpp" +#include "API/CNWSWaypoint.hpp" #include "ProfilerMacros.hpp" namespace Profiler { @@ -26,47 +37,47 @@ ObjectAIUpdates::ObjectAIUpdates(NWNXLib::Services::MetricsProxy* metrics) g_metrics = metrics; DEFINE_PROFILER_TARGET_FAST( - AIUpdateArea, API::Functions::_ZN8CNWSArea8AIUpdateEv, + AIUpdateArea, &CNWSArea::AIUpdate, int32_t, CNWSArea*); DEFINE_PROFILER_TARGET_FAST( - AIUpdateAreaOfEffect, API::Functions::_ZN22CNWSAreaOfEffectObject8AIUpdateEv, + AIUpdateAreaOfEffect, &CNWSAreaOfEffectObject::AIUpdate, void, CNWSAreaOfEffectObject*); DEFINE_PROFILER_TARGET_FAST( - AIUpdateCreature, API::Functions::_ZN12CNWSCreature8AIUpdateEv, + AIUpdateCreature, &CNWSCreature::AIUpdate, void, CNWSCreature*); DEFINE_PROFILER_TARGET_FAST( - AIUpdateDoor, API::Functions::_ZN8CNWSDoor8AIUpdateEv, + AIUpdateDoor, &CNWSDoor::AIUpdate, void, CNWSDoor*); DEFINE_PROFILER_TARGET_FAST( - AIUpdateEncounter, API::Functions::_ZN13CNWSEncounter8AIUpdateEv, + AIUpdateEncounter, &CNWSEncounter::AIUpdate, void, CNWSEncounter*); DEFINE_PROFILER_TARGET_FAST( - AIUpdateItem, API::Functions::_ZN8CNWSItem8AIUpdateEv, + AIUpdateItem, &CNWSItem::AIUpdate, void, CNWSItem*); DEFINE_PROFILER_TARGET_FAST( - AIUpdateModule, API::Functions::_ZN10CNWSModule8AIUpdateEv, + AIUpdateModule, &CNWSModule::AIUpdate, int32_t, CNWSModule*); DEFINE_PROFILER_TARGET_FAST( - AIUpdatePlaceable, API::Functions::_ZN13CNWSPlaceable8AIUpdateEv, + AIUpdatePlaceable, &CNWSPlaceable::AIUpdate, void, CNWSPlaceable*); DEFINE_PROFILER_TARGET_FAST( - AIUpdateStore, API::Functions::_ZN9CNWSStore8AIUpdateEv, + AIUpdateStore, &CNWSStore::AIUpdate, void, CNWSStore*); DEFINE_PROFILER_TARGET_FAST( - AIUpdateTrigger, API::Functions::_ZN11CNWSTrigger8AIUpdateEv, + AIUpdateTrigger, &CNWSTrigger::AIUpdate, void, CNWSTrigger*); DEFINE_PROFILER_TARGET_FAST( - AIUpdateWaypoint, API::Functions::_ZN12CNWSWaypoint8AIUpdateEv, + AIUpdateWaypoint, &CNWSWaypoint::AIUpdate, void, CNWSWaypoint*); } diff --git a/Plugins/Profiler/Targets/ObjectEventHandlers.cpp b/Plugins/Profiler/Targets/ObjectEventHandlers.cpp index ae2f03bb9fa..8997ef31900 100644 --- a/Plugins/Profiler/Targets/ObjectEventHandlers.cpp +++ b/Plugins/Profiler/Targets/ObjectEventHandlers.cpp @@ -1,6 +1,17 @@ #include "Targets/ObjectEventHandlers.hpp" #include "API/Functions.hpp" +#include "API/CNWSArea.hpp" +#include "API/CNWSAreaOfEffectObject.hpp" +#include "API/CNWSCreature.hpp" +#include "API/CNWSDoor.hpp" +#include "API/CNWSEncounter.hpp" +#include "API/CNWSItem.hpp" +#include "API/CNWSModule.hpp" +#include "API/CNWSPlaceable.hpp" +#include "API/CNWSStore.hpp" +#include "API/CNWSTrigger.hpp" +#include "API/CNWSWaypoint.hpp" #include "ProfilerMacros.hpp" namespace Profiler { @@ -26,47 +37,47 @@ ObjectEventHandlers::ObjectEventHandlers(NWNXLib::Services::MetricsProxy* metric g_metrics = metrics; DEFINE_PROFILER_TARGET_FAST( - EventHandlerArea, API::Functions::_ZN8CNWSArea12EventHandlerEjjPvjj, + EventHandlerArea, &CNWSArea::EventHandler, void, CNWSArea*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerAreaOfEffect, API::Functions::_ZN22CNWSAreaOfEffectObject12EventHandlerEjjPvjj, + EventHandlerAreaOfEffect, &CNWSAreaOfEffectObject::EventHandler, void, CNWSAreaOfEffectObject*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerCreature, API::Functions::_ZN12CNWSCreature12EventHandlerEjjPvjj, + EventHandlerCreature, &CNWSCreature::EventHandler, void, CNWSCreature*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerDoor, API::Functions::_ZN8CNWSDoor12EventHandlerEjjPvjj, + EventHandlerDoor, &CNWSDoor::EventHandler, void, CNWSDoor*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerEncounter, API::Functions::_ZN13CNWSEncounter12EventHandlerEjjPvjj, + EventHandlerEncounter, &CNWSEncounter::EventHandler, void, CNWSEncounter*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerItem, API::Functions::_ZN8CNWSItem12EventHandlerEjjPvjj, + EventHandlerItem, &CNWSItem::EventHandler, void, CNWSItem*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerModule, API::Functions::_ZN10CNWSModule12EventHandlerEjjPvjj, + EventHandlerModule, &CNWSModule::EventHandler, void, CNWSModule*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerPlaceable, API::Functions::_ZN13CNWSPlaceable12EventHandlerEjjPvjj, + EventHandlerPlaceable, &CNWSPlaceable::EventHandler, void, CNWSPlaceable*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerStore, API::Functions::_ZN9CNWSStore12EventHandlerEjjPvjj, + EventHandlerStore, &CNWSStore::EventHandler, void, CNWSStore*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerTrigger, API::Functions::_ZN11CNWSTrigger12EventHandlerEjjPvjj, + EventHandlerTrigger, &CNWSTrigger::EventHandler, void, CNWSTrigger*, uint32_t, uint32_t, void*, uint32_t, uint32_t); DEFINE_PROFILER_TARGET_FAST( - EventHandlerWaypoint, API::Functions::_ZN12CNWSWaypoint12EventHandlerEjjPvjj, + EventHandlerWaypoint, &CNWSWaypoint::EventHandler, void, CNWSWaypoint*, uint32_t, uint32_t, void*, uint32_t, uint32_t); } diff --git a/Plugins/Profiler/Targets/Pathing.cpp b/Plugins/Profiler/Targets/Pathing.cpp index f25b44ec06c..8a260cb8b5b 100644 --- a/Plugins/Profiler/Targets/Pathing.cpp +++ b/Plugins/Profiler/Targets/Pathing.cpp @@ -3,6 +3,7 @@ #include "API/CAppManager.hpp" #include "API/CNWSArea.hpp" #include "API/CNWSCreature.hpp" +#include "API/CNWSModule.hpp" #include "API/CPathfindInformation.hpp" #include "API/CServerExoApp.hpp" #include "API/Constants.hpp" @@ -52,7 +53,7 @@ Pathing::Pathing(NWNXLib::Services::MetricsProxy* metrics) g_metrics = metrics; DEFINE_PROFILER_TARGET_FAST( - PlotPath, API::Functions::_ZN10CNWSModule8PlotPathEP20CPathfindInformationj, + PlotPath, &CNWSModule::PlotPath, int32_t, CNWSModule*, CPathfindInformation*, uint32_t); } diff --git a/Plugins/Profiler/Targets/Scripts.cpp b/Plugins/Profiler/Targets/Scripts.cpp index 856ab6a9ed8..16c16166d8a 100644 --- a/Plugins/Profiler/Targets/Scripts.cpp +++ b/Plugins/Profiler/Targets/Scripts.cpp @@ -6,6 +6,7 @@ #include "API/CNWSArea.hpp" #include "API/CNWSObject.hpp" #include "API/CServerExoApp.hpp" +#include "API/CVirtualMachine.hpp" #include "API/Constants.hpp" #include "API/Functions.hpp" #include "API/Globals.hpp" @@ -89,7 +90,7 @@ Scripts::Scripts(const bool areaTimings, const bool typeTimings, g_typeTimings = typeTimings; DEFINE_PROFILER_TARGET_FAST( - RunScript, API::Functions::_ZN15CVirtualMachine9RunScriptEP10CExoStringjii, + RunScript, &CVirtualMachine::RunScript, int32_t, CVirtualMachine*, CExoString*, uint32_t, int32_t, int32_t); } diff --git a/Plugins/Profiler/Timing.cpp b/Plugins/Profiler/Timing.cpp index 2a06fbffa21..61024cc0ab9 100644 --- a/Plugins/Profiler/Timing.cpp +++ b/Plugins/Profiler/Timing.cpp @@ -1,6 +1,7 @@ #include "Timing.hpp" #include "API/CExoBase.hpp" +#include "API/CExoBaseInternal.hpp" #include "API/Functions.hpp" #include "API/Globals.hpp" #include "Services/Metrics/Resamplers.hpp" @@ -78,8 +79,8 @@ void FastTimer::Calibrate(const size_t runs, MetricsProxy* metrics) unhookedResults.emplace_back(runTest(10)); } - s_CheckForCDHook = Hooks::HookFunction(Functions::_ZN16CExoBaseInternal10CheckForCDEj, - (void*)&ProfilerCalibrateHookFuncWithScope, Hooks::Order::Earliest); + s_CheckForCDHook = Hooks::HookFunction(&CExoBaseInternal::CheckForCD, + &ProfilerCalibrateHookFuncWithScope, Hooks::Order::Earliest); for (size_t i = 0; i < runs; ++i) { hookedResults.emplace_back(runTest(10)); diff --git a/Plugins/Race/NWScript/nwnx_race_2da.nss b/Plugins/Race/NWScript/nwnx_race_2da.nss index 5b6f8021ae0..cacd9d24d4c 100644 --- a/Plugins/Race/NWScript/nwnx_race_2da.nss +++ b/Plugins/Race/NWScript/nwnx_race_2da.nss @@ -2,7 +2,6 @@ /// @file nwnx_race_2da.nss /// @brief Parse a column in the racialtypes.2da to load the modifiers. #include "nwnx_race" -#include "nwnx_util" /// @ingroup race /// @brief Translate a modifier type from a string to its constant. @@ -45,14 +44,14 @@ int NWNX_Race_GetModifierConstant(string raceMod) void NWNX_Race_LoadRacialModifiers(string sColumnName = "RacialModsTable") { - int iRaceRows = NWNX_Util_Get2DARowCount("racialtypes"); + int iRaceRows = Get2DARowCount("racialtypes"); int iRace; for (iRace = 0; iRace < iRaceRows; iRace++) { string sRaceModTable = Get2DAString("racialtypes", sColumnName, iRace); if(sRaceModTable != "") { - int iRaceModRows = NWNX_Util_Get2DARowCount(sRaceModTable); + int iRaceModRows = Get2DARowCount(sRaceModTable); int iRaceMod; for (iRaceMod = 0; iRaceMod < iRaceModRows; iRaceMod++) { diff --git a/Plugins/Race/Race.cpp b/Plugins/Race/Race.cpp index f8407be26a5..b7a89f9080e 100644 --- a/Plugins/Race/Race.cpp +++ b/Plugins/Race/Race.cpp @@ -3,6 +3,7 @@ #include "API/CTwoDimArrays.hpp" #include "API/CAppManager.hpp" #include "API/CServerExoApp.hpp" +#include "API/CServerExoAppInternal.hpp" #include "API/Constants.hpp" #include "API/CNWCCMessageData.hpp" #include "API/CNWFeat.hpp" @@ -13,6 +14,7 @@ #include "API/CNWSpellArray.hpp" #include "API/CNWSCreature.hpp" #include "API/CNWSCreatureStats.hpp" +#include "API/CNWSEffectListHandler.hpp" #include "API/CNWSPlayer.hpp" #include "API/Globals.hpp" #include "API/Functions.hpp" @@ -74,78 +76,78 @@ Race::Race(Services::ProxyServiceList* services) m_ShowEffectIcon = Config::Get("SHOW_EFFECT_ICON", false); // Most racial adjustments are done here using effects only once per server reset or after a level up - s_LoadCharacterFinishHook = Hooks::HookFunction(Functions::_ZN21CServerExoAppInternal19LoadCharacterFinishEP10CNWSPlayerii, - (void*)&LoadCharacterFinishHook, Hooks::Order::Early); + s_LoadCharacterFinishHook = Hooks::HookFunction(&CServerExoAppInternal::LoadCharacterFinish, + &LoadCharacterFinishHook, Hooks::Order::Early); // We want the racial bonuses to not count toward limits - s_GetTotalEffectBonusHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature19GetTotalEffectBonusEhP10CNWSObjectiihhhhi, - (void*)&GetTotalEffectBonusHook, Hooks::Order::Early); - s_SavingThrowRollHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature15SavingThrowRollEhthjiti, - (void*)&SavingThrowRollHook, Hooks::Order::Early); - s_GetWeaponPowerHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature14GetWeaponPowerEP10CNWSObjecti, - (void*)&GetWeaponPowerHook, Hooks::Order::Early); + s_GetTotalEffectBonusHook = Hooks::HookFunction(&CNWSCreature::GetTotalEffectBonus, + &GetTotalEffectBonusHook, Hooks::Order::Early); + s_SavingThrowRollHook = Hooks::HookFunction(&CNWSCreature::SavingThrowRoll, + &SavingThrowRollHook, Hooks::Order::Early); + s_GetWeaponPowerHook = Hooks::HookFunction(&CNWSCreature::GetWeaponPower, + &GetWeaponPowerHook, Hooks::Order::Early); s_GetAttackModifierVersusHook = Hooks::HookFunction( - Functions::_ZN17CNWSCreatureStats23GetAttackModifierVersusEP12CNWSCreature, (void*)&Race::GetAttackModifierVersusHook, Hooks::Order::Late); + &CNWSCreatureStats::GetAttackModifierVersus, &Race::GetAttackModifierVersusHook, Hooks::Order::Late); s_GetArmorClassVersusHook = Hooks::HookFunction( - Functions::_ZN17CNWSCreatureStats19GetArmorClassVersusEP12CNWSCreaturei, (void*)&Race::GetArmorClassVersusHook, Hooks::Order::Late); + &CNWSCreatureStats::GetArmorClassVersus, &Race::GetArmorClassVersusHook, Hooks::Order::Late); #define HOOK_APPLY_EFFECT(_address) \ static Hooks::Hook CAT(pOnApplyHook, __LINE__) = Hooks::HookFunction(_address, \ - (void*)+[](CNWSEffectListHandler *thisPtr, CNWSObject *pObject, CGameEffect *pEffect, BOOL bLoadingGame) -> int32_t \ + +[](CNWSEffectListHandler *thisPtr, CNWSObject *pObject, CGameEffect *pEffect, BOOL bLoadingGame) -> int32_t \ { \ ApplyEffectHook(pObject, pEffect); \ return CAT(pOnApplyHook, __LINE__)->CallOriginal(thisPtr, pObject, pEffect, bLoadingGame); \ }, Hooks::Order::Early) // Make effects applied to parent races effect every child race - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler21OnApplyAttackIncreaseEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler21OnApplyAttackDecreaseEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler18OnApplyConcealmentEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler21OnApplyDamageIncreaseEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler21OnApplyDamageDecreaseEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler21OnApplyEffectImmunityEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler17OnApplyACDecreaseEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler17OnApplyACIncreaseEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler19OnApplyInvisibilityEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler16OnApplySanctuaryEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler26OnApplySavingThrowDecreaseEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler26OnApplySavingThrowIncreaseEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler20OnApplySkillDecreaseEP10CNWSObjectP11CGameEffecti); - HOOK_APPLY_EFFECT(Functions::_ZN21CNWSEffectListHandler20OnApplySkillIncreaseEP10CNWSObjectP11CGameEffecti); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplyAttackIncrease); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplyAttackDecrease); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplyConcealment); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplyDamageIncrease); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplyDamageDecrease); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplyEffectImmunity); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplyACDecrease); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplyACIncrease); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplyInvisibility); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplySanctuary); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplySavingThrowDecrease); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplySavingThrowIncrease); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplySkillDecrease); + HOOK_APPLY_EFFECT(&CNWSEffectListHandler::OnApplySkillIncrease); #undef HOOK_APPLY_EFFECT // Special hook for resetting the feat usages after rest etc. - s_ResetFeatRemainingUsesHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats22ResetFeatRemainingUsesEv, - (void*)&ResetFeatRemainingUsesHook, Hooks::Order::Early); + s_ResetFeatRemainingUsesHook = Hooks::HookFunction(&CNWSCreatureStats::ResetFeatRemainingUses, + &ResetFeatRemainingUsesHook, Hooks::Order::Early); // Completely rewritten in NWNX for Race plugin so we can add our Initiative changes - s_ResolveInitiativeHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature17ResolveInitiativeEv, (void*)&ResolveInitiativeHook, Hooks::Order::Final); + s_ResolveInitiativeHook = Hooks::HookFunction(&CNWSCreature::ResolveInitiative, &ResolveInitiativeHook, Hooks::Order::Final); // If a level up has been confirmed we rerun the racial applications in case of new feats, level based adjustments etc. - s_SendServerToPlayerLevelUp_ConfirmationHook = Hooks::HookFunction(Functions::_ZN11CNWSMessage38SendServerToPlayerLevelUp_ConfirmationEji, - (void*)&SendServerToPlayerLevelUp_ConfirmationHook, Hooks::Order::Early); + s_SendServerToPlayerLevelUp_ConfirmationHook = Hooks::HookFunction(&CNWSMessage::SendServerToPlayerLevelUp_Confirmation, + &SendServerToPlayerLevelUp_ConfirmationHook, Hooks::Order::Early); // Swap race with parent race due to hardcoded checks here - s_CreateDefaultQuickButtonsHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature25CreateDefaultQuickButtonsEv, - (void*)&CreateDefaultQuickButtonsHook, Hooks::Order::Early); - s_LevelUpAutomaticHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats16LevelUpAutomaticEhih, - (void*)&LevelUpAutomaticHook, Hooks::Order::Early); - s_GetMeetsPrestigeClassRequirementsHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats33GetMeetsPrestigeClassRequirementsEP8CNWClass, - (void*)&GetMeetsPrestigeClassRequirementsHook, Hooks::Order::Early); + s_CreateDefaultQuickButtonsHook = Hooks::HookFunction(&CNWSCreature::CreateDefaultQuickButtons, + &CreateDefaultQuickButtonsHook, Hooks::Order::Early); + s_LevelUpAutomaticHook = Hooks::HookFunction(&CNWSCreatureStats::LevelUpAutomatic, + &LevelUpAutomaticHook, Hooks::Order::Early); + s_GetMeetsPrestigeClassRequirementsHook = Hooks::HookFunction(&CNWSCreatureStats::GetMeetsPrestigeClassRequirements, + &GetMeetsPrestigeClassRequirementsHook, Hooks::Order::Early); //Don't swap, check as both parent and child race - s_CheckItemRaceRestrictionsHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature25CheckItemRaceRestrictionsEP8CNWSItem, (void*)&CheckItemRaceRestrictionsHook, Hooks::Order::Final); + s_CheckItemRaceRestrictionsHook = Hooks::HookFunction(&CNWSCreature::CheckItemRaceRestrictions, &CheckItemRaceRestrictionsHook, Hooks::Order::Final); // Need to set up default parent race to invalid before the on module load sets up the parents - s_LoadRaceInfoHook = Hooks::HookFunction(Functions::_ZN8CNWRules12LoadRaceInfoEv, (void*)&LoadRaceInfoHook, Hooks::Order::Early); + s_LoadRaceInfoHook = Hooks::HookFunction(&CNWRules::LoadRaceInfo, &LoadRaceInfoHook, Hooks::Order::Early); // Check for favored enemy bonuses on either the race or parent race including custom set favored enemy feats for custom races - s_GetFavoredEnemyBonusHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats20GetFavoredEnemyBonusEP12CNWSCreature, (void*)&GetFavoredEnemyBonusHook, Hooks::Order::Final); + s_GetFavoredEnemyBonusHook = Hooks::HookFunction(&CNWSCreatureStats::GetFavoredEnemyBonus, &GetFavoredEnemyBonusHook, Hooks::Order::Final); - s_ValidateCharacterHook = Hooks::HookFunction(Functions::_ZN10CNWSPlayer17ValidateCharacterEPi, (void*)&ValidateCharacterHook, Hooks::Order::Early); + s_ValidateCharacterHook = Hooks::HookFunction(&CNWSPlayer::ValidateCharacter, &ValidateCharacterHook, Hooks::Order::Early); } Race::~Race() diff --git a/Plugins/Redis/Redis.cpp b/Plugins/Redis/Redis.cpp index cabe7bffddb..9645241a15d 100644 --- a/Plugins/Redis/Redis.cpp +++ b/Plugins/Redis/Redis.cpp @@ -22,7 +22,7 @@ using namespace NWNXLib::Services; Redis::Redis(Services::ProxyServiceList* services) : Plugin(services) { - m_ClearStackHook = Hooks::HookFunction(Functions::_ZN20CVirtualMachineStack10ClearStackEv, (void*)&CleanState, Hooks::Order::Early); + m_ClearStackHook = Hooks::HookFunction(&CVirtualMachineStack::ClearStack, &CleanState, Hooks::Order::Early); m_internal = new Internal(std::bind(&Redis::PoolMakeFunc, this)); diff --git a/Plugins/Regex/CMakeLists.txt b/Plugins/Regex/CMakeLists.txt deleted file mode 100644 index 38032ac5aef..00000000000 --- a/Plugins/Regex/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -add_plugin(Regex - "Regex.cpp") diff --git a/Plugins/Regex/NWScript/nwnx_regex.nss b/Plugins/Regex/NWScript/nwnx_regex.nss deleted file mode 100644 index 08dea44f1c3..00000000000 --- a/Plugins/Regex/NWScript/nwnx_regex.nss +++ /dev/null @@ -1,57 +0,0 @@ -/// @addtogroup regex Regex -/// @brief Provide regular expression functions. -/// @{ -/// @file nwnx_regex.nss -#include "nwnx" - -const string NWNX_Regex = "NWNX_Regex"; ///< @private - -/// @param str The string to search. -/// @param regex The regular expression to use when searching. -/// @return TRUE if string matches the regular expression. -int NWNX_Regex_Search(string str, string regex); - -/// @brief Replaces any matches of the regular expression with a string. -/// @param str The string to search. -/// @param regex The regular expression to use when searching. -/// @param replace The string to replace the matches with. -/// @param firstOnly Set to TRUE to only replace the first match. -/// @return A new string with any replacements made. -string NWNX_Regex_Replace(string str, string regex, string replace = "", int firstOnly = FALSE); - -/// @brief Returns all matches in a string that match the regular expression. -/// @param str The string to search. -/// @param regex The regular expression to use. -/// @return A json array with json arrays of all (sub)matches. Returns JsonNull() on error. -json NWNX_Regex_Match(string str, string regex); - -/// @} - -int NWNX_Regex_Search(string str, string regex) -{ - string sFunc = "Search"; - NWNX_PushArgumentString(regex); - NWNX_PushArgumentString(str); - NWNX_CallFunction(NWNX_Regex, sFunc); - return NWNX_GetReturnValueInt(); -} - -string NWNX_Regex_Replace(string str, string regex, string replace="", int firstOnly=0) -{ - string sFunc = "Replace"; - NWNX_PushArgumentInt(firstOnly); - NWNX_PushArgumentString(replace); - NWNX_PushArgumentString(regex); - NWNX_PushArgumentString(str); - NWNX_CallFunction(NWNX_Regex, sFunc); - return NWNX_GetReturnValueString(); -} - -json NWNX_Regex_Match(string str, string regex) -{ - string sFunc = "Match"; - NWNX_PushArgumentString(regex); - NWNX_PushArgumentString(str); - NWNX_CallFunction(NWNX_Regex, sFunc); - return NWNX_GetReturnValueJson(); -} diff --git a/Plugins/Regex/NWScript/nwnx_regex_t.nss b/Plugins/Regex/NWScript/nwnx_regex_t.nss deleted file mode 100644 index 04dc1a4f53e..00000000000 --- a/Plugins/Regex/NWScript/nwnx_regex_t.nss +++ /dev/null @@ -1,29 +0,0 @@ -#include "nwnx_regex" -#include "nwnx_tests" -#include "x3_inc_string" - -void main() -{ - WriteTimestampedLogEntry("NWNX_Regex unit test begin.."); - - string str = "This string has a color code."; - int regex_search = NWNX_Regex_Search(str,")>"); - NWNX_Tests_Report("NWNX_Regex", "RegexSearch", regex_search == 1); - str = "This string has \na new line."; - regex_search = NWNX_Regex_Search(str,"\\n"); - NWNX_Tests_Report("NWNX_Regex", "RegexSearch", regex_search == 1); - str = "This string does not have any non-ASCII characters."; - regex_search = NWNX_Regex_Search(str,"[^\\x01-\\x7E]"); - NWNX_Tests_Report("NWNX_Regex", "RegexSearch", regex_search == 0); - - - string sRedString = StringToRGBString("stripped colors.", STRING_COLOR_RED); - str = "This is a test of "+sRedString; - string strip_colors = NWNX_Regex_Replace(str,")>|"); - NWNX_Tests_Report("NWNX_Regex", "RegexReplace", strip_colors == "This is a test of stripped colors."); - str = "This is a “test” of stripping to just ascii printable and new lines."; - string strip_non_ascii = NWNX_Regex_Replace(str,"[^\\n\\r\\x20-\\x7E]"); - NWNX_Tests_Report("NWNX_Regex", "RegexReplace", strip_non_ascii == "This is a test of stripping to just ascii printable and new lines."); - - WriteTimestampedLogEntry("NWNX_Regex unit test end."); -} diff --git a/Plugins/Regex/README.md b/Plugins/Regex/README.md deleted file mode 100644 index 800315e0992..00000000000 --- a/Plugins/Regex/README.md +++ /dev/null @@ -1,4 +0,0 @@ -@page regex Readme -@ingroup regex - -Provide regular expression functions. \ No newline at end of file diff --git a/Plugins/Regex/Regex.cpp b/Plugins/Regex/Regex.cpp deleted file mode 100644 index 4d904d5ce72..00000000000 --- a/Plugins/Regex/Regex.cpp +++ /dev/null @@ -1,61 +0,0 @@ -#include "nwnx.hpp" - -#include - -using namespace NWNXLib; -using namespace NWNXLib::Services; - -NWNX_EXPORT ArgumentStack Search(ArgumentStack&& args) -{ - const auto str = args.extract(); - const auto regex = args.extract(); - - std::regex rgx(regex); - const auto retVal = std::regex_search(str, rgx); - - return retVal; -} - -NWNX_EXPORT ArgumentStack Replace(ArgumentStack&& args) -{ - const auto str = args.extract(); - const auto regex = args.extract(); - const auto rpl = args.extract(); - const auto firstOnly = args.extract(); - - std::regex rgx(regex); - std::string retVal; - if (firstOnly) - retVal = std::regex_replace(str, rgx, rpl, std::regex_constants::format_first_only); - else - retVal = std::regex_replace(str, rgx, rpl); - - return retVal; -} - -NWNX_EXPORT ArgumentStack Match(ArgumentStack&& args) -{ - const auto str = args.extract(); - ASSERT_OR_THROW(!str.empty()); - const auto regex = args.extract(); - ASSERT_OR_THROW(!regex.empty()); - - std::regex rgx(regex); - std::sregex_iterator it(str.begin(), str.end(), rgx); - const static std::sregex_iterator end; - - JsonEngineStructure retVal(json::array()); - - while (it != end) - { - json matches = json::array(); - for (size_t i = 0; i < it->size(); i++) - { - matches.emplace_back(it->str(i)); - } - retVal.m_json.emplace_back(matches); - it++; - } - - return retVal; -} diff --git a/Plugins/Rename/Rename.cpp b/Plugins/Rename/Rename.cpp index 37ef20ea498..f87e5bbb56d 100644 --- a/Plugins/Rename/Rename.cpp +++ b/Plugins/Rename/Rename.cpp @@ -71,15 +71,15 @@ Rename::Rename(Services::ProxyServiceList* services) m_RenameOverwriteDisplayName = Config::Get("OVERWRITE_DISPLAY_NAME", false); s_WriteGameObjUpdate_UpdateObjectHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage31WriteGameObjUpdate_UpdateObjectEP10CNWSPlayerP10CNWSObjectP17CLastUpdateObjectjj, - (void*)&WriteGameObjUpdate_UpdateObjectHook, Hooks::Order::Early); + &CNWSMessage::WriteGameObjUpdate_UpdateObject, + &WriteGameObjUpdate_UpdateObjectHook, Hooks::Order::Early); s_SendServerToPlayerExamineGui_CreatureDataHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage41SendServerToPlayerExamineGui_CreatureDataEP10CNWSPlayerj, - (void*)&SendServerToPlayerExamineGui_CreatureDataHook, Hooks::Order::Early); + &CNWSMessage::SendServerToPlayerExamineGui_CreatureData, + &SendServerToPlayerExamineGui_CreatureDataHook, Hooks::Order::Early); #define HOOK_CHAT(_address) \ static Hooks::Hook CAT(pChatHook, __LINE__) = Hooks::HookFunction(_address, \ - (void*)+[](CNWSMessage *thisPtr, uint32_t nPlayerID, OBJECT_ID oidSpeaker, CExoString sSpeakerMessage) -> int32_t \ + +[](CNWSMessage *thisPtr, uint32_t nPlayerID, OBJECT_ID oidSpeaker, CExoString sSpeakerMessage) -> int32_t \ { \ auto *targetPlayer = Globals::AppManager()->m_pServerExoApp->GetClientObjectByObjectId(oidSpeaker); \ auto *observerClient = Globals::AppManager()->m_pServerExoApp->GetClientObjectByPlayerId(nPlayerID, 0); \ @@ -90,46 +90,47 @@ Rename::Rename(Services::ProxyServiceList* services) return retVal; \ }, Hooks::Order::Early) - HOOK_CHAT(Functions::_ZN11CNWSMessage28SendServerToPlayerChat_PartyEjj10CExoString); - HOOK_CHAT(Functions::_ZN11CNWSMessage28SendServerToPlayerChat_ShoutEjj10CExoString); - HOOK_CHAT(Functions::_ZN11CNWSMessage27SendServerToPlayerChat_TellEjj10CExoString); + HOOK_CHAT(&CNWSMessage::SendServerToPlayerChat_Party); + HOOK_CHAT(&CNWSMessage::SendServerToPlayerChat_Shout); + HOOK_CHAT(&CNWSMessage::SendServerToPlayerChat_Tell); #undef HOOK_CHAT if (m_RenameOnModuleCharList) { s_SendServerToPlayerPlayModuleCharacterListResponseHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage49SendServerToPlayerPlayModuleCharacterListResponseEjji, - (void*)&SendServerToPlayerPlayModuleCharacterListResponseHook, Hooks::Order::Early); + &CNWSMessage::SendServerToPlayerPlayModuleCharacterListResponse, + &SendServerToPlayerPlayModuleCharacterListResponseHook, Hooks::Order::Early); } if (m_RenameOnPlayerList) { s_SendServerToPlayerPlayerList_AllHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage32SendServerToPlayerPlayerList_AllEP10CNWSPlayer, - (void*)&SendServerToPlayerPlayerList_AllHook, Hooks::Order::Early); + &CNWSMessage::SendServerToPlayerPlayerList_All, + &SendServerToPlayerPlayerList_AllHook, Hooks::Order::Early); s_SendServerToPlayerPlayerList_AddHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage32SendServerToPlayerPlayerList_AddEjP10CNWSPlayer, - (void*)&SendServerToPlayerPlayerList_AddHook, Hooks::Order::Early); + &CNWSMessage::SendServerToPlayerPlayerList_Add, + &SendServerToPlayerPlayerList_AddHook, Hooks::Order::Early); s_SendServerToPlayerPlayerList_DeleteHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage35SendServerToPlayerPlayerList_DeleteEjP10CNWSPlayer, - (void*)&SendServerToPlayerPlayerList_DeleteHook, Hooks::Order::Early); + &CNWSMessage::SendServerToPlayerPlayerList_Delete, + &SendServerToPlayerPlayerList_DeleteHook, Hooks::Order::Early); } else LOG_INFO("Not renaming PCs in the player list."); if (m_RenameAllowDM) { + BOOL (CNWSMessage::* funcPtr)(uint32_t) = &CNWSMessage::SendServerToPlayerDungeonMasterUpdatePartyList; s_SendServerToPlayerDungeonMasterUpdatePartyList = Hooks::HookFunction( - Functions::_ZN11CNWSMessage46SendServerToPlayerDungeonMasterUpdatePartyListEj, + funcPtr, (void*)&SendServerToPlayerDungeonMasterUpdatePartyListHook, Hooks::Order::Early); LOG_INFO("DMs will be included with rename logic."); } // TODO: When shared hooks are executed by exclusive hooks change this to HandlePlayerToServerParty s_SendServerToPlayerPopUpGUIPanelHook = Hooks::HookFunction( - Functions::_ZN11CNWSMessage31SendServerToPlayerPopUpGUIPanelEjiiii10CExoString, - (void*)&SendServerToPlayerPopUpGUIPanelHook, Hooks::Order::Early); + &CNWSMessage::SendServerToPlayerPopUpGUIPanel, + &SendServerToPlayerPopUpGUIPanelHook, Hooks::Order::Early); MessageBus::Subscribe("NWNX_CREATURE_ORIGINALNAME_SIGNAL", [](const std::vector& message) diff --git a/Plugins/Reveal/Reveal.cpp b/Plugins/Reveal/Reveal.cpp index bdaf47e5343..d873ee6da2f 100644 --- a/Plugins/Reveal/Reveal.cpp +++ b/Plugins/Reveal/Reveal.cpp @@ -40,7 +40,7 @@ Reveal::Reveal(Services::ProxyServiceList* services) #undef REGISTER - m_DoStealthDetection = Hooks::HookFunction(Functions::_ZN12CNWSCreature18DoStealthDetectionEPS_iPiS1_i, (void*)&HookStealthDetection, Hooks::Order::Late); + m_DoStealthDetection = Hooks::HookFunction(&CNWSCreature::DoStealthDetection, (void*)&HookStealthDetection, Hooks::Order::Late); } Reveal::~Reveal() diff --git a/Plugins/SQL/NWScript/nwnx_sql.nss b/Plugins/SQL/NWScript/nwnx_sql.nss index 4ef2e6d8432..b3198962989 100644 --- a/Plugins/SQL/NWScript/nwnx_sql.nss +++ b/Plugins/SQL/NWScript/nwnx_sql.nss @@ -102,6 +102,10 @@ string NWNX_SQL_GetLastError(); /// @return Returns the number of parameters expected by the prepared query or -1 if no query is prepared. int NWNX_SQL_GetPreparedQueryParamCount(); +/// @brief Set the next query to return full binary results **ON THE FIRST COLUMN ONLY**. +/// @note This is ONLY needed on PostgreSQL, and ONLY if you want to deserialize raw bytea in NWNX_SQL_ReadFullObjectInActiveRow with base64=FALSE. +void NWNX_SQL_PostgreSQL_SetNextQueryResultsBinaryMode(); + /// @} int NWNX_SQL_PrepareQuery(string query) @@ -261,3 +265,10 @@ int NWNX_SQL_GetPreparedQueryParamCount() NWNX_CallFunction(NWNX_SQL, sFunc); return NWNX_GetReturnValueInt(); } + +void NWNX_SQL_PostgreSQL_SetNextQueryResultsBinaryMode() +{ + string sFunc = "PostgreSQL_SetNextQueryResultsBinaryMode"; + + NWNX_CallFunction(NWNX_SQL, sFunc); +} diff --git a/Plugins/SQL/README.md b/Plugins/SQL/README.md index f575fb7c0ef..26e07b0da66 100644 --- a/Plugins/SQL/README.md +++ b/Plugins/SQL/README.md @@ -112,11 +112,19 @@ export NWNX_SQL_USE_UTF8=true Set the connection's character set to be used. -Only supported on mysql. For pgsql and sqlite this can be achieved with a query. +Only supported on mysql and pgsql. For sqlite this can be achieved with a query. -__Examples__ +__Examples (MySQL)__ ``` export NWNX_SQL_CHARACTER_SET=utf8 export NWNX_SQL_CHARACTER_SET=cp1251 ``` + +__Examples (PostgreSQL)__ + +``` +export NWNX_SQL_CHARACTER_SET=WIN1252 +``` + +(see https://www.postgresql.org/docs/current/multibyte.html for list) diff --git a/Plugins/SQL/SQL.hpp b/Plugins/SQL/SQL.hpp index c76af4d8e60..c6732a2e1c1 100644 --- a/Plugins/SQL/SQL.hpp +++ b/Plugins/SQL/SQL.hpp @@ -32,6 +32,9 @@ class SQL : public NWNXLib::Plugin ArgumentStack DestroyPreparedQuery (ArgumentStack&& args); ArgumentStack GetLastError (ArgumentStack&& args); ArgumentStack GetPreparedQueryParamCount (ArgumentStack&& args); + + ITarget* GetTarget() { return m_target.get(); } + private: bool Reconnect(int32_t attempts = 1); diff --git a/Plugins/SQL/Targets/PostgreSQL.cpp b/Plugins/SQL/Targets/PostgreSQL.cpp index 34cadb575e6..03064f238d4 100644 --- a/Plugins/SQL/Targets/PostgreSQL.cpp +++ b/Plugins/SQL/Targets/PostgreSQL.cpp @@ -7,6 +7,16 @@ #include "PostgreSQL.hpp" using namespace NWNXLib; + +static bool s_nextQueryBinaryResults; + +NWNX_EXPORT Events::ArgumentStack PostgreSQL_SetNextQueryResultsBinaryMode(Events::ArgumentStack&&) +{ + LOG_DEBUG("Next query only: Results will be returned in binary mode."); + s_nextQueryBinaryResults = true; + return {}; +} + namespace SQL { PostgreSQL::PostgreSQL() @@ -53,6 +63,22 @@ void PostgreSQL::Connect() { throw std::runtime_error("Error connecting to Postgres DB"); } + + s_nextQueryBinaryResults = false; + + if (auto charset = Config::Get("CHARACTER_SET")) + { + LOG_INFO("Connection character set is '%s'", *charset); + const std::string query = "SET CLIENT_ENCODING TO '" + *charset + "';"; + PGresult* ret = PQexec(m_conn, query.c_str()); + SCOPEGUARD(PQclear(ret)); + if (PQresultStatus(ret) != PGRES_COMMAND_OK) + { + throw std::runtime_error(std::string("unable to set connection character set: ") + + PQerrorMessage(m_conn)); + } + + } } bool PostgreSQL::IsConnected() @@ -143,8 +169,17 @@ std::optional PostgreSQL::ExecuteQuery() { if (m_params[i]) { - paramValues[i] = new char[m_params[i]->size()+1]; - strcpy(paramValues[i], m_params[i]->c_str()); + if (m_formats[i] == 1) + { + size_t toLen; + paramValues[i] = (char*) PQescapeByteaConn(m_conn, + (const unsigned char*) m_params[i]->c_str(), m_params[i]->size(), &toLen); + } + else + { + paramValues[i] = new char[m_params[i]->size()+1]; + strcpy(paramValues[i], m_params[i]->c_str()); + } } else { @@ -158,8 +193,10 @@ std::optional PostgreSQL::ExecuteQuery() "", // statement name (same as in the prepare above) m_paramCount, // m_paramCount from previous paramValues, // param data (can be null) - m_lengths.data(), // param lengths - only for binary data - m_formats.data(), // param formats - server will infer text + // NB: Both of these are null; all data passed in is text mode. + // bytea data gets escaped automatically by setting m_format[i] in PrepareBinary(). + NULL, // param lengths - only for binary data + NULL, // param formats - server will infer text 0); // result format, 0=text, 1=binary // done with parameters. @@ -186,11 +223,22 @@ std::optional PostgreSQL::ExecuteQuery() row.reserve(cols); for (int j=0; j<(int)cols; j++) { - row.emplace_back(Result(PQgetvalue(res, i, j), PQgetlength(res, i, j))); + const unsigned char* ptr = (unsigned char*) PQgetvalue(res, i, j); + size_t ptrLen = PQgetlength(res, i, j); + if (j == 0 && s_nextQueryBinaryResults) + { + LOG_DEBUG("Forcefully unescaping query result column %d.", j); + ptr = PQunescapeBytea(ptr, &ptrLen); + } + + row.emplace_back(Result((char*) ptr, ptrLen)); } results.push(row); } + // Always disable binary mode, even if no columns with it were read. + s_nextQueryBinaryResults = false; + PQclear(res); return std::make_optional(std::move(results)); // Succeeded query, succeeded results. } @@ -288,6 +336,8 @@ void PostgreSQL::DestroyPreparedQuery() // Force deallocation std::vector>().swap(m_params); m_paramCount = 0; + + s_nextQueryBinaryResults = false; } } diff --git a/Plugins/SWIG/CMakeLists.txt b/Plugins/SWIG/CMakeLists.txt index dd3c9f7abb4..fb3837bba70 100644 --- a/Plugins/SWIG/CMakeLists.txt +++ b/Plugins/SWIG/CMakeLists.txt @@ -20,8 +20,6 @@ function(add_swig_plugin target language interfaces) SWIG_INCLUDE_DIRECTORIES ../../../NWNXLib/API SWIG_USE_TARGET_INCLUDE_DIRECTORIES ON POSITION_INDEPENDENT_CODE ON) - - target_link_options(${target} PRIVATE "LINKER:--no-undefined,--no-demangle") endfunction() if(SWIG_FOUND) @@ -29,6 +27,6 @@ if(SWIG_FOUND) INCLUDE(${SWIG_USE_FILE}) add_swig_plugin(SWIG_DotNET csharp - "${CMAKE_CURRENT_SOURCE_DIR}/SWIG_DotNET/API_NWNXLib.i;${CMAKE_CURRENT_SOURCE_DIR}/SWIG_DotNET/API_FunctionsLinux.i" + "${CMAKE_CURRENT_SOURCE_DIR}/SWIG_DotNET/API_NWNXLib.i" -DSWIGWORDSIZE64 -dllimport "${PLUGIN_PREFIX}SWIG_DotNET" -namespace "NWN.Native.API") endif(SWIG_FOUND) diff --git a/Plugins/SWIG/SWIG_DotNET/API_FunctionsLinux.i b/Plugins/SWIG/SWIG_DotNET/API_FunctionsLinux.i deleted file mode 100644 index 7f645bcc988..00000000000 --- a/Plugins/SWIG/SWIG_DotNET/API_FunctionsLinux.i +++ /dev/null @@ -1,17 +0,0 @@ -%module FunctionsLinux - -%include - -#pragma SWIG nowarn=317 -#define NWNXLIB_FUNCTION_NO_VERSION_CHECK -#define NWNX_SWIG_PARSING - -%pragma(csharp) moduleclassmodifiers="public static class" - -%define NWNXLIB_FUNCTION(name, address) -%constant uintptr_t name = address; -%enddef - -%include "FunctionsLinux.hpp" - -#undef NWNXLIB_FUNCTION diff --git a/Plugins/SWIG/SWIG_DotNET/NamespaceUsings.i b/Plugins/SWIG/SWIG_DotNET/NamespaceUsings.i new file mode 100644 index 00000000000..090c2990a58 --- /dev/null +++ b/Plugins/SWIG/SWIG_DotNET/NamespaceUsings.i @@ -0,0 +1,3 @@ +%{ +using namespace Task; +%} diff --git a/Plugins/SWIG/generate.sh b/Plugins/SWIG/generate.sh index d561aaf737f..81fb6572913 100755 --- a/Plugins/SWIG/generate.sh +++ b/Plugins/SWIG/generate.sh @@ -12,6 +12,8 @@ echo "%{" > $NWNXLIB_SWG find ../../../NWNXLib/API -type f -name '*.hpp' "${FIND_ARGS[@]}" -printf '#include "%P"\n' | sort >> $NWNXLIB_SWG echo "%}" >> $NWNXLIB_SWG +echo "%include NamespaceUsings.i" >> $NWNXLIB_SWG + for include in "${FIRST_INCLUDES[@]}" do echo "%include \"$include\"" >> $NWNXLIB_SWG diff --git a/Plugins/ServerLogRedirector/ServerLogRedirector.cpp b/Plugins/ServerLogRedirector/ServerLogRedirector.cpp index 4301f3c31d2..2fd9266047d 100644 --- a/Plugins/ServerLogRedirector/ServerLogRedirector.cpp +++ b/Plugins/ServerLogRedirector/ServerLogRedirector.cpp @@ -1,5 +1,8 @@ #include "nwnx.hpp" +#include "API/CExoDebugInternal.hpp" +#include "API/CNWVirtualMachineCommands.hpp" + using namespace NWNXLib; using namespace NWNXLib::API; @@ -21,8 +24,8 @@ inline std::string TrimMessage(CExoString* message) return String::Trim(s); } -static Hooks::Hook s_WriteToLogFileHook = Hooks::HookFunction(Functions::_ZN17CExoDebugInternal14WriteToLogFileERK10CExoString, - (void*)+[](CExoDebugInternal *pExoDebugInternal, CExoString* message) -> void +static Hooks::Hook s_WriteToLogFileHook = Hooks::HookFunction((void*)&CExoDebugInternal::WriteToLogFile, + +[](CExoDebugInternal *pExoDebugInternal, CExoString* message) -> void { std::string str = TrimMessage(message); @@ -41,8 +44,8 @@ static Hooks::Hook s_WriteToLogFileHook = Hooks::HookFunction(Functions::_ZN17CE s_WriteToLogFileHook->CallOriginal(pExoDebugInternal, message); }, Hooks::Order::VeryEarly); -static Hooks::Hook s_WriteToErrorFileHook = Hooks::HookFunction(Functions::_ZN17CExoDebugInternal16WriteToErrorFileERK10CExoString, - (void*)+[](CExoDebugInternal *pExoDebugInternal, CExoString* message) -> void +static Hooks::Hook s_WriteToErrorFileHook = Hooks::HookFunction((void*)&CExoDebugInternal::WriteToErrorFile, + +[](CExoDebugInternal *pExoDebugInternal, CExoString* message) -> void { std::string str = TrimMessage(message); LOG_INFO("(Error) %s", str); @@ -50,8 +53,8 @@ static Hooks::Hook s_WriteToErrorFileHook = Hooks::HookFunction(Functions::_ZN17 s_WriteToErrorFileHook->CallOriginal(pExoDebugInternal, message); }, Hooks::Order::VeryEarly); -static Hooks::Hook s_ExecuteCommandPrintStringHook = Hooks::HookFunction(Functions::_ZN25CNWVirtualMachineCommands25ExecuteCommandPrintStringEii, - (void*)+[](CNWVirtualMachineCommands *pVirtualMachineCommands, int32_t nCommandId, int32_t nParameters) -> int32_t +static Hooks::Hook s_ExecuteCommandPrintStringHook = Hooks::HookFunction((void*)&CNWVirtualMachineCommands::ExecuteCommandPrintString, + +[](CNWVirtualMachineCommands *pVirtualMachineCommands, int32_t nCommandId, int32_t nParameters) -> int32_t { s_printString = true; auto retVal = s_ExecuteCommandPrintStringHook->CallOriginal(pVirtualMachineCommands, nCommandId, nParameters); diff --git a/Plugins/SkillRanks/SkillRanks.cpp b/Plugins/SkillRanks/SkillRanks.cpp index 821cae9815b..391b45076f1 100644 --- a/Plugins/SkillRanks/SkillRanks.cpp +++ b/Plugins/SkillRanks/SkillRanks.cpp @@ -61,8 +61,8 @@ SkillRanks::SkillRanks(Services::ProxyServiceList* services) #undef REGISTER - s_LoadRulesetInfoHook = Hooks::HookFunction(Functions::_ZN8CNWRules15LoadRulesetInfoEv, (void*)&LoadRulesetInfoHook, Hooks::Order::Earliest); - static auto s_GetSkillRank = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats12GetSkillRankEhP10CNWSObjecti, (void*)&GetSkillRankHook, Hooks::Order::Final); + s_LoadRulesetInfoHook = Hooks::HookFunction(&CNWRules::LoadRulesetInfo, (void*)&LoadRulesetInfoHook, Hooks::Order::Earliest); + static auto s_GetSkillRank = Hooks::HookFunction(&CNWSCreatureStats::GetSkillRank, (void*)&GetSkillRankHook, Hooks::Order::Final); } SkillRanks::~SkillRanks() @@ -672,7 +672,7 @@ char SkillRanks::GetSkillRankHook(CNWSCreatureStats* thisPtr, uint8_t nSkill, CN // Area set skill rank modifiers if (pArea) { - if(auto areaMod = pArea->nwnxGet(areaModPOSKey + std::to_string(nSkill))) + if(auto areaMod = pArea->nwnxGet(areaModPOSKey + std::to_string(nSkill))) { retVal += *areaMod; } diff --git a/Plugins/ThreadWatchdog/ThreadWatchdog.cpp b/Plugins/ThreadWatchdog/ThreadWatchdog.cpp index 44ae08bfacc..0e5691a838c 100644 --- a/Plugins/ThreadWatchdog/ThreadWatchdog.cpp +++ b/Plugins/ThreadWatchdog/ThreadWatchdog.cpp @@ -1,5 +1,6 @@ #include "ThreadWatchdog.hpp" #include "API/Functions.hpp" +#include "API/CServerExoAppInternal.hpp" using namespace NWNXLib; @@ -23,8 +24,8 @@ static Hooks::Hook s_MainLoopHook; ThreadWatchdog::ThreadWatchdog(Services::ProxyServiceList* services) : Plugin(services) { - s_MainLoopHook = Hooks::HookFunction(API::Functions::_ZN21CServerExoAppInternal8MainLoopEv, - (void*)&MainLoopUpdate, Hooks::Order::Earliest); + s_MainLoopHook = Hooks::HookFunction(&CServerExoAppInternal::MainLoop, + &MainLoopUpdate, Hooks::Order::Earliest); s_watchdogPeriod = Config::Get("PERIOD", 15); // Default to effectively infinite diff --git a/Plugins/Tileset/Tileset.cpp b/Plugins/Tileset/Tileset.cpp index 2c42f6e6162..33e7361d4af 100644 --- a/Plugins/Tileset/Tileset.cpp +++ b/Plugins/Tileset/Tileset.cpp @@ -1,11 +1,13 @@ #include "nwnx.hpp" +#include "API/CExoResMan.hpp" #include "API/CResStruct.hpp" #include "API/CNWSArea.hpp" #include "API/CNWTileSetManager.hpp" #include "API/CNWTileSet.hpp" #include "API/CNWSTile.hpp" #include "API/CNWTileData.hpp" +#include "API/CNWVirtualMachineCommands.hpp" #include "API/CAppManager.hpp" using namespace NWNXLib; @@ -83,8 +85,8 @@ static bool s_CreatingArea = false; static std::string s_OriginalSourceAreaResRef; static Hooks::Hook s_ExecuteCommandAreaManagementHook = Hooks::HookFunction( - API::Functions::_ZN25CNWVirtualMachineCommands28ExecuteCommandAreaManagementEii, - (void*)+[](CNWVirtualMachineCommands *pThis, int32_t nCommandId, int32_t nParameters) -> int32_t + &CNWVirtualMachineCommands::ExecuteCommandAreaManagement, + +[](CNWVirtualMachineCommands *pThis, int32_t nCommandId, int32_t nParameters) -> int32_t { if (nCommandId == Constants::VMCommand::CreateArea) { @@ -98,8 +100,8 @@ static Hooks::Hook s_ExecuteCommandAreaManagementHook = Hooks::HookFunction( }, Hooks::Order::Earliest); static Hooks::Hook s_ResManGet = Hooks::HookFunction( - API::Functions::_ZN10CExoResMan3GetERK7CResReft, - (void*)+[](CExoResMan *pThis, CResRef* cResRef, RESTYPE nType) -> DataBlockRef + &CExoResMan::Get, + +[](CExoResMan *pThis, CResRef* cResRef, RESTYPE nType) -> DataBlockRef { if (s_CreatingArea && nType == Constants::ResRefType::ARE) s_OriginalSourceAreaResRef = cResRef->GetResRefStr(); @@ -107,8 +109,8 @@ static Hooks::Hook s_ResManGet = Hooks::HookFunction( }, Hooks::Order::Earliest); static Hooks::Hook s_LoadTileSetInfoHook = Hooks::HookFunction( - API::Functions::_ZN8CNWSArea15LoadTileSetInfoEP10CResStruct, - (void*)+[](CNWSArea *pArea, CResStruct *pStruct) -> int32_t + &CNWSArea::LoadTileSetInfo, + +[](CNWSArea *pArea, CResStruct *pStruct) -> int32_t { if (s_CreatingArea) { diff --git a/Plugins/Tracking/Targets/Activity.cpp b/Plugins/Tracking/Targets/Activity.cpp index 44b5938b26d..6ca44c1e6fb 100644 --- a/Plugins/Tracking/Targets/Activity.cpp +++ b/Plugins/Tracking/Targets/Activity.cpp @@ -23,7 +23,7 @@ static Hooks::Hook s_MainLoopHook; Activity::Activity(Services::MetricsProxy* metrics) { g_metrics = metrics; - s_MainLoopHook = Hooks::HookFunction(Functions::_ZN21CServerExoAppInternal8MainLoopEv, (void*)&MainLoopUpdate, Hooks::Order::Earliest); + s_MainLoopHook = Hooks::HookFunction(&CServerExoAppInternal::MainLoop, &MainLoopUpdate, Hooks::Order::Earliest); Services::Resamplers::ResamplerFuncPtr resampler = &Services::Resamplers::template Sum; metrics->SetResampler("Activity", resampler, std::chrono::seconds(1)); } diff --git a/Plugins/Tweaks/AddPrestigeclassCasterLevels.cpp b/Plugins/Tweaks/AddPrestigeclassCasterLevels.cpp index 52c3c07cf39..193954bcb41 100644 --- a/Plugins/Tweaks/AddPrestigeclassCasterLevels.cpp +++ b/Plugins/Tweaks/AddPrestigeclassCasterLevels.cpp @@ -5,6 +5,7 @@ #include "API/CNWSCreatureStats.hpp" #include "API/CNWSRules.hpp" #include "API/CServerExoAppInternal.hpp" +#include "API/CNWVirtualMachineCommands.hpp" #include "API/CTwoDimArrays.hpp" @@ -46,26 +47,26 @@ void AddPrestigeclassCasterLevels() LOG_INFO("Automatically adding prestige class caster levels using (Div|Arc)SpellLvlMod colums in classes.2da"); - s_LoadClassInfoHook = Hooks::HookFunction(Functions::_ZN8CNWRules13LoadClassInfoEv, (void*)&LoadClassInfoHook, Hooks::Order::Early); - s_GetClassLevelHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats13GetClassLevelEhi, (void*)&GetClassLevelHook, Hooks::Order::Early); - s_ExecuteCommandGetCasterLevelHook = Hooks::HookFunction(Functions::_ZN25CNWVirtualMachineCommands28ExecuteCommandGetCasterLevelEii, - (void*)+[](CNWVirtualMachineCommands *thisPtr, int32_t nCommandId, int32_t nParameters) + s_LoadClassInfoHook = Hooks::HookFunction(&CNWRules::LoadClassInfo, &LoadClassInfoHook, Hooks::Order::Early); + s_GetClassLevelHook = Hooks::HookFunction(&CNWSCreatureStats::GetClassLevel, &GetClassLevelHook, Hooks::Order::Early); + s_ExecuteCommandGetCasterLevelHook = Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandGetCasterLevel, + +[](CNWVirtualMachineCommands *thisPtr, int32_t nCommandId, int32_t nParameters) { s_bAdjustCasterLevel = true; auto retVal = s_ExecuteCommandGetCasterLevelHook->CallOriginal(thisPtr, nCommandId, nParameters); s_bAdjustCasterLevel = false; return retVal; }, Hooks::Order::Early); - s_ExecuteCommandResistSpellHook = Hooks::HookFunction(Functions::_ZN25CNWVirtualMachineCommands25ExecuteCommandResistSpellEii, - (void*)+[](CNWVirtualMachineCommands *thisPtr, int32_t nCommandId, int32_t nParameters) + s_ExecuteCommandResistSpellHook = Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandResistSpell, + +[](CNWVirtualMachineCommands *thisPtr, int32_t nCommandId, int32_t nParameters) { s_bAdjustCasterLevel = true; auto retVal = s_ExecuteCommandResistSpellHook->CallOriginal(thisPtr, nCommandId, nParameters); s_bAdjustCasterLevel = false; return retVal; }, Hooks::Order::Early); - s_SetCreatorHook = Hooks::HookFunction(Functions::_ZN11CGameEffect10SetCreatorEj, - (void*)+[](CGameEffect *thisPtr, ObjectID oidCreator) + s_SetCreatorHook = Hooks::HookFunction(&CGameEffect::SetCreator, + +[](CGameEffect *thisPtr, ObjectID oidCreator) { s_bAdjustCasterLevel = true; s_SetCreatorHook->CallOriginal(thisPtr, oidCreator); diff --git a/Plugins/Tweaks/AlwaysReturnFullDEXStat.cpp b/Plugins/Tweaks/AlwaysReturnFullDEXStat.cpp index 472d045c0db..e5c08f427cf 100644 --- a/Plugins/Tweaks/AlwaysReturnFullDEXStat.cpp +++ b/Plugins/Tweaks/AlwaysReturnFullDEXStat.cpp @@ -19,8 +19,8 @@ void AlwaysReturnFullDEXStat() LOG_INFO("GetDEXStat() is always returning a creature's full Dexterity Stat."); - static Hooks::Hook s_GetDEXStatHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats10GetDEXStatEv, - (void*)+[](CNWSCreatureStats *pCreatureStats) -> uint8_t + static Hooks::Hook s_GetDEXStatHook = Hooks::HookFunction(&CNWSCreatureStats::GetDEXStat, + +[](CNWSCreatureStats *pCreatureStats) -> uint8_t { return std::max(pCreatureStats->m_nDexterityBase + pCreatureStats->GetTotalDEXBonus() + diff --git a/Plugins/Tweaks/BlockDMSpawnItem.cpp b/Plugins/Tweaks/BlockDMSpawnItem.cpp index 5a5555e96fa..215ab41b6c6 100644 --- a/Plugins/Tweaks/BlockDMSpawnItem.cpp +++ b/Plugins/Tweaks/BlockDMSpawnItem.cpp @@ -16,8 +16,8 @@ void BlockDMSpawnItem() LOG_INFO("Blocking the 'dm_spawnitem' console command."); static Hooks::Hook s_HandlePlayerToServerGameObjectUpdateHook = - Hooks::HookFunction(Functions::_ZN11CNWSMessage36HandlePlayerToServerGameObjectUpdateEP10CNWSPlayerh, - (void*)+[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, uint8_t nMinor) -> int32_t + Hooks::HookFunction(&CNWSMessage::HandlePlayerToServerGameObjectUpdate, + +[](CNWSMessage *pMessage, CNWSPlayer *pPlayer, uint8_t nMinor) -> int32_t { auto nMsgType = Utils::PeekMessage(pMessage, 0); diff --git a/Plugins/Tweaks/CMakeLists.txt b/Plugins/Tweaks/CMakeLists.txt index f594153280b..d1af85f1ba8 100644 --- a/Plugins/Tweaks/CMakeLists.txt +++ b/Plugins/Tweaks/CMakeLists.txt @@ -12,11 +12,8 @@ add_plugin(Tweaks "DisplayNumAttacksOverrideInCharacterSheet.cpp" "FixArmorDexBonusUnderOne.cpp" "FixDispelEffectLevels.cpp" - "FixDMFactionBug.cpp" - "FixDMSelectionBox.cpp" "FixGreaterSanctuaryBug.cpp" "FixItemNullptrInCItemRepository.cpp" - "FixMulticlassXPPenaltyBug.cpp" "FixResolveSpecialAttackDamage.cpp" "FixTriggerEnterDetection.cpp" "FixUnlimitedPotionsBug.cpp" @@ -33,7 +30,6 @@ add_plugin(Tweaks "SendTlkOverrideBeforeChargen.cpp" "SneakAttackCritImmunity.cpp" "StringToIntBaseToAuto.cpp" - "SummonAssociateUseComputeSafeLocation.cpp" "TURDByCDKey.cpp" "UnhardcodeShields.cpp" "UncapDamageResistanceDamageFlags.cpp" diff --git a/Plugins/Tweaks/CanUseItemCheckILRForHenchmen.cpp b/Plugins/Tweaks/CanUseItemCheckILRForHenchmen.cpp index 9f4b35284a9..64d25e1b6e7 100644 --- a/Plugins/Tweaks/CanUseItemCheckILRForHenchmen.cpp +++ b/Plugins/Tweaks/CanUseItemCheckILRForHenchmen.cpp @@ -31,8 +31,8 @@ void CanUseItemCheckILRForHenchmen() LOG_INFO("CNWSCreature::CanUseItem() will also check ILR for Henchmen."); - static Hooks::Hook s_CanUseItemHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature10CanUseItemEP8CNWSItemi, - (void*)+[](CNWSCreature *pCreature, CNWSItem *pItem, BOOL bIgnoreIdentifiedFlag) -> BOOL + static Hooks::Hook s_CanUseItemHook = Hooks::HookFunction(&CNWSCreature::CanUseItem, + +[](CNWSCreature *pCreature, CNWSItem *pItem, BOOL bIgnoreIdentifiedFlag) -> BOOL { bool bUsable = true; diff --git a/Plugins/Tweaks/ClearSpellEffectsOnTURDs.cpp b/Plugins/Tweaks/ClearSpellEffectsOnTURDs.cpp index a35c6278372..5346483252b 100644 --- a/Plugins/Tweaks/ClearSpellEffectsOnTURDs.cpp +++ b/Plugins/Tweaks/ClearSpellEffectsOnTURDs.cpp @@ -18,8 +18,8 @@ void ClearSpellEffectsOnTURDs() LOG_INFO("Effects on logged out users will be removed when a caster rests."); static Hooks::Hook s_ClearSpellEffectsOnOthersHook = - Hooks::HookFunction(Functions::_ZN10CNWSObject25ClearSpellEffectsOnOthersEv, - (void*)+[](CNWSObject *pObject) -> void + Hooks::HookFunction(&CNWSObject::ClearSpellEffectsOnOthers, + +[](CNWSObject *pObject) -> void { if (auto *pTURDList = Utils::GetModule()->m_lstTURDList.m_pcExoLinkedListInternal) { diff --git a/Plugins/Tweaks/CompareVarsForMerge.cpp b/Plugins/Tweaks/CompareVarsForMerge.cpp index 7fc38eba563..25f07192b88 100644 --- a/Plugins/Tweaks/CompareVarsForMerge.cpp +++ b/Plugins/Tweaks/CompareVarsForMerge.cpp @@ -17,8 +17,8 @@ void CompareVarsForMerge() LOG_INFO("Will compare local variables when merging item stacks"); - static Hooks::Hook s_CompareItem_hook = Hooks::HookFunction(Functions::_ZN8CNWSItem11CompareItemEPS_, - (void*)+[](CNWSItem* thisPtr, CNWSItem* pOtherItem) -> int32_t + static Hooks::Hook s_CompareItem_hook = Hooks::HookFunction(&CNWSItem::CompareItem, + +[](CNWSItem* thisPtr, CNWSItem* pOtherItem) -> int32_t { auto bCompare = s_CompareItem_hook->CallOriginal(thisPtr, pOtherItem); if (bCompare) diff --git a/Plugins/Tweaks/DeadCreatureFiresOnAreaExit.cpp b/Plugins/Tweaks/DeadCreatureFiresOnAreaExit.cpp index 4f1f764d901..f3c98b71069 100644 --- a/Plugins/Tweaks/DeadCreatureFiresOnAreaExit.cpp +++ b/Plugins/Tweaks/DeadCreatureFiresOnAreaExit.cpp @@ -20,8 +20,8 @@ void DeadCreatureFiresOnAreaExit() LOG_INFO("Dead creatures will fire on area exit."); - static Hooks::Hook s_RemoveObjectFromAreaHook = Hooks::HookFunction(Functions::_ZN8CNWSArea20RemoveObjectFromAreaEj, - (void*)+[](CNWSArea *pArea, ObjectID objectId) -> int32_t + static Hooks::Hook s_RemoveObjectFromAreaHook = Hooks::HookFunction(&CNWSArea::RemoveObjectFromArea, + +[](CNWSArea *pArea, ObjectID objectId) -> int32_t { pArea->m_aGameObjects.Remove(objectId); diff --git a/Plugins/Tweaks/DisableMonkAbilitiesWhenPolymorphed.cpp b/Plugins/Tweaks/DisableMonkAbilitiesWhenPolymorphed.cpp index 5879bc5cb07..3ed95060ec7 100644 --- a/Plugins/Tweaks/DisableMonkAbilitiesWhenPolymorphed.cpp +++ b/Plugins/Tweaks/DisableMonkAbilitiesWhenPolymorphed.cpp @@ -17,8 +17,8 @@ void DisableMonkAbilitiesWhenPolymorphed() LOG_INFO("Monk abilities (ac, speed, attacks) will be disabled during polymorph"); - static Hooks::Hook s_GetUseMonkAbilitiesHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature19GetUseMonkAbilitiesEv, - (void*)+[](CNWSCreature *pThis) -> int32_t + static Hooks::Hook s_GetUseMonkAbilitiesHook = Hooks::HookFunction(&CNWSCreature::GetUseMonkAbilities, + +[](CNWSCreature *pThis) -> int32_t { if ( pThis->m_bIsPolymorphed ) return false; diff --git a/Plugins/Tweaks/DisablePause.cpp b/Plugins/Tweaks/DisablePause.cpp index 3e5e62c2001..36d44fd5357 100644 --- a/Plugins/Tweaks/DisablePause.cpp +++ b/Plugins/Tweaks/DisablePause.cpp @@ -17,8 +17,8 @@ void DisablePause() LOG_INFO("Disabling pausing of the server"); - static Hooks::Hook s_SetPauseState_hook = Hooks::HookFunction(Functions::_ZN21CServerExoAppInternal13SetPauseStateEhi, - (void*)+[](CServerExoAppInternal* thisPtr, uint8_t nState, int32_t bPause) -> void + static Hooks::Hook s_SetPauseState_hook = Hooks::HookFunction(&CServerExoAppInternal::SetPauseState, + +[](CServerExoAppInternal* thisPtr, uint8_t nState, int32_t bPause) -> void { // nState=1 - timestop // nState=2 - DM pause diff --git a/Plugins/Tweaks/DisplayNumAttacksOverrideInCharacterSheet.cpp b/Plugins/Tweaks/DisplayNumAttacksOverrideInCharacterSheet.cpp index a1008c1dc08..db7e98bae4d 100644 --- a/Plugins/Tweaks/DisplayNumAttacksOverrideInCharacterSheet.cpp +++ b/Plugins/Tweaks/DisplayNumAttacksOverrideInCharacterSheet.cpp @@ -17,8 +17,8 @@ void DisplayNumAttacksOverrideInCharacterSheet() LOG_INFO("Number of attacks per round overridden by SetBaseAttackBonus() will show on the character sheet."); - static Hooks::Hook s_GetAttacksPerRoundHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats18GetAttacksPerRoundEv, - (void*)+[](CNWSCreatureStats *pCreatureStats) -> uint8_t + static Hooks::Hook s_GetAttacksPerRoundHook = Hooks::HookFunction(&CNWSCreatureStats::GetAttacksPerRound, + +[](CNWSCreatureStats *pCreatureStats) -> uint8_t { if (pCreatureStats->m_nOverrideBaseAttackBonus) return pCreatureStats->m_nOverrideBaseAttackBonus; diff --git a/Plugins/Tweaks/FixArmorDexBonusUnderOne.cpp b/Plugins/Tweaks/FixArmorDexBonusUnderOne.cpp index f16de14756f..97107475724 100644 --- a/Plugins/Tweaks/FixArmorDexBonusUnderOne.cpp +++ b/Plugins/Tweaks/FixArmorDexBonusUnderOne.cpp @@ -22,8 +22,8 @@ void FixArmorDexBonusUnderOne() LOG_INFO("Allowing armors with max DEX bonus under 1."); - static Hooks::Hook s_ReplacedFunc = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats9GetDEXModEi, - (void*)+[](CNWSCreatureStats *pThis, int32_t bArmorDexCap) -> uint8_t + static Hooks::Hook s_ReplacedFunc = Hooks::HookFunction(&CNWSCreatureStats::GetDEXMod, + +[](CNWSCreatureStats *pThis, int32_t bArmorDexCap) -> uint8_t { auto nDexAC = pThis->m_nDexterityModifier; diff --git a/Plugins/Tweaks/FixDMFactionBug.cpp b/Plugins/Tweaks/FixDMFactionBug.cpp deleted file mode 100644 index 616f2a6cbc9..00000000000 --- a/Plugins/Tweaks/FixDMFactionBug.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "nwnx.hpp" - -#include "API/CNWSCreature.hpp" -#include "API/CNWSCreatureStats.hpp" - - -namespace Tweaks { - -using namespace NWNXLib; -using namespace NWNXLib::API; - - -void FixDMFactionBug() __attribute__((constructor)); -void FixDMFactionBug() -{ - if (!Config::Get("FIX_DM_FACTION_BUG", false)) - return; - - LOG_INFO("Fixing a DM faction bug when using a non-DMClient BIC file."); - - static Hooks::Hook s_PostProcessHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature11PostProcessEv, - (void*)+[](CNWSCreature *thisPtr) -> void - { - thisPtr->m_bPlayerCharacter = thisPtr->m_pStats->m_bIsPC; - s_PostProcessHook->CallOriginal(thisPtr); - }, Hooks::Order::Early); -} - -} diff --git a/Plugins/Tweaks/FixDMSelectionBox.cpp b/Plugins/Tweaks/FixDMSelectionBox.cpp deleted file mode 100644 index 5fd5ff41aca..00000000000 --- a/Plugins/Tweaks/FixDMSelectionBox.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "nwnx.hpp" - -#include "API/CAppManager.hpp" -#include "API/CServerExoApp.hpp" -#include "API/CServerInfo.hpp" -#include "API/CPlayOptions.hpp" -#include "API/CNWSModule.hpp" -#include "API/CNWSClient.hpp" -#include "API/CNWSPlayer.hpp" - - -namespace Tweaks { - -using namespace NWNXLib; -using namespace NWNXLib::API; - - -void FixDMSelectionBox() __attribute__((constructor)); -void FixDMSelectionBox() -{ - if (!Config::Get("FIX_DM_SELECTION_BOX", false)) - return; - - LOG_INFO("Fixing the DM creature selection box not showing up when player party control is off."); - - static Hooks::Hook s_PackModuleIntoMessageHook = Hooks::HookFunction(Functions::_ZN10CNWSModule21PackModuleIntoMessageEj, - (void*)+[](CNWSModule *thisPtr, uint32_t nPlayerId) -> void - { - if (auto *pPlayer = static_cast(Globals::AppManager()->m_pServerExoApp->GetClientObjectByPlayerId(nPlayerId))) - { - if (pPlayer->GetIsDM()) - { - if (!Globals::AppManager()->m_pServerExoApp->GetServerInfo()->m_PlayOptions.bPlayerPartyControl) - { - Globals::AppManager()->m_pServerExoApp->GetServerInfo()->m_PlayOptions.bPlayerPartyControl = true; - s_PackModuleIntoMessageHook->CallOriginal(thisPtr, nPlayerId); - Globals::AppManager()->m_pServerExoApp->GetServerInfo()->m_PlayOptions.bPlayerPartyControl = false; - return; - } - } - } - - s_PackModuleIntoMessageHook->CallOriginal(thisPtr, nPlayerId); - }, Hooks::Order::Early); -} - -} diff --git a/Plugins/Tweaks/FixDispelEffectLevels.cpp b/Plugins/Tweaks/FixDispelEffectLevels.cpp index 5c2746ccad7..775ad0034c4 100644 --- a/Plugins/Tweaks/FixDispelEffectLevels.cpp +++ b/Plugins/Tweaks/FixDispelEffectLevels.cpp @@ -4,6 +4,7 @@ #include "API/CNWCCMessageData.hpp" #include "API/CNWSCreature.hpp" #include "API/CNWSCreatureStats.hpp" +#include "API/CNWSEffectListHandler.hpp" #include "API/CNWSPlayer.hpp" #include "API/CNWSRules.hpp" #include "API/CServerAIMaster.hpp" @@ -29,11 +30,11 @@ void FixDispelEffectLevels() LOG_INFO("Fixing dispel checks vs. effects created by deleted objects."); static Hooks::Hook s_ApplyDispelAllMagic = - Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler21OnApplyDispelAllMagicEP10CNWSObjectP11CGameEffecti, - (void*)&OnApplyDispelAllMagicHook, Hooks::Order::Final); + Hooks::HookFunction(&CNWSEffectListHandler::OnApplyDispelAllMagic, + &OnApplyDispelAllMagicHook, Hooks::Order::Final); static Hooks::Hook s_ApplyDispelBestMagic = - Hooks::HookFunction(Functions::_ZN21CNWSEffectListHandler22OnApplyDispelBestMagicEP10CNWSObjectP11CGameEffecti, - (void*)&OnApplyDispelBestMagicHook, Hooks::Order::Final); + Hooks::HookFunction(&CNWSEffectListHandler::OnApplyDispelBestMagic, + &OnApplyDispelBestMagicHook, Hooks::Order::Final); } static int32_t OnApplyDispelAllMagicHook(CNWSEffectListHandler*, CNWSObject* pObject, CGameEffect* pEffect, BOOL) diff --git a/Plugins/Tweaks/FixGreaterSanctuaryBug.cpp b/Plugins/Tweaks/FixGreaterSanctuaryBug.cpp index f4ed03930f6..ec08725e958 100644 --- a/Plugins/Tweaks/FixGreaterSanctuaryBug.cpp +++ b/Plugins/Tweaks/FixGreaterSanctuaryBug.cpp @@ -19,8 +19,8 @@ void FixGreaterSanctuaryBug() LOG_INFO("Greater sanctuary bug fixed."); static Hooks::Hook s_RemoveCombatInvisibilityEffectsHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature31RemoveCombatInvisibilityEffectsEv, - (void*)+[](CNWSCreature *pThis) -> void + Hooks::HookFunction(&CNWSCreature::RemoveCombatInvisibilityEffects, + +[](CNWSCreature *pThis) -> void { int sanctPtr = pThis->m_pStats->m_nSanctuaryPtr; int invPtr = pThis->m_pStats->m_nInvisibilityPtr; diff --git a/Plugins/Tweaks/FixItemNullptrInCItemRepository.cpp b/Plugins/Tweaks/FixItemNullptrInCItemRepository.cpp index dc750890974..76df07e68be 100644 --- a/Plugins/Tweaks/FixItemNullptrInCItemRepository.cpp +++ b/Plugins/Tweaks/FixItemNullptrInCItemRepository.cpp @@ -27,8 +27,8 @@ void FixItemNullptrInCItemRepository() LOG_INFO("Will check for invalid items in the CItemRepository List."); - static Hooks::Hook s_CalculateContentsWeightHook = Hooks::HookFunction(Functions::_ZN15CItemRepository23CalculateContentsWeightEv, - (void*)&CalculateContentsWeightHook, Hooks::Order::Final); + static Hooks::Hook s_CalculateContentsWeightHook = Hooks::HookFunction(&CItemRepository::CalculateContentsWeight, + &CalculateContentsWeightHook, Hooks::Order::Final); } static int32_t CalculateContentsWeightHook(CItemRepository *pThis) diff --git a/Plugins/Tweaks/FixMulticlassXPPenaltyBug.cpp b/Plugins/Tweaks/FixMulticlassXPPenaltyBug.cpp deleted file mode 100644 index 8b8504d22ae..00000000000 --- a/Plugins/Tweaks/FixMulticlassXPPenaltyBug.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include "nwnx.hpp" - -#include "API/CNWSCreatureStats.hpp" -#include "API/CNWSCreature.hpp" -#include "API/CNWRules.hpp" -#include "API/CNWRace.hpp" -#include "API/CNWClass.hpp" - - -namespace Tweaks { - -using namespace NWNXLib; -using namespace NWNXLib::API; - - -void FixMulticlassXPPenaltyBug() __attribute__((constructor)); -void FixMulticlassXPPenaltyBug() -{ - if (!Config::Get("FIX_MULTICLASS_XP_PENALTY_BUG", false)) - return; - - LOG_INFO("Fixing a multiclass xp penalty bug."); - - static Hooks::Hook s_AddExperienceHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats13AddExperienceEj, - (void*)+[](CNWSCreatureStats *pThis, uint32_t nValue) -> void - { - if (pThis->m_pBaseCreature->m_nAssociateType != Constants::AssociateType::None) - return; - - if (pThis->m_nNumMultiClasses > 1) - { - auto GetCNWClass = [](uint8_t nClass) -> CNWClass* - { - if (nClass < Globals::Rules()->m_nNumClasses) - return &Globals::Rules()->m_lstClasses[nClass]; - else - return nullptr; - }; - - uint8_t nFavoredClass = Globals::Rules()->m_lstRaces[pThis->m_nRace].m_nFavoredClass; - if (nFavoredClass == Constants::ClassType::Invalid) - { - uint8_t nMaxLevelMultiClass = 0; - - if (auto *pClass = GetCNWClass(pThis->GetClass(1))) - { - if (pClass->m_sPreReqTable == "" && pThis->GetClassLevel(0) < pThis->GetClassLevel(1)) - nMaxLevelMultiClass = 1; - } - - if (auto *pClass = GetCNWClass(pThis->GetClass(2))) - { - if (pClass->m_sPreReqTable == "" && pThis->GetClassLevel(nMaxLevelMultiClass) < pThis->GetClassLevel(2)) - nMaxLevelMultiClass = 2; - } - - nFavoredClass = pThis->GetClass(nMaxLevelMultiClass); - } - - uint8_t nMaxLevel = 0; - for (uint8_t nMultiClass = 0; nMultiClass < pThis->m_nNumMultiClasses; nMultiClass++) - { - uint8_t nClass = pThis->GetClass(nMultiClass); - if (auto *pClass = GetCNWClass(nClass)) - { - if (nFavoredClass != nClass && pClass->m_bXPPenalty) - nMaxLevel = std::max(nMaxLevel, pThis->GetClassLevel(nMultiClass)); - } - } - - double dXPPenalties = 0.0; - for (uint8_t nMultiClass = 0; nMultiClass < pThis->m_nNumMultiClasses; nMultiClass++) - { - uint8_t nClass = pThis->GetClass(nMultiClass); - if (auto *pClass = GetCNWClass(nClass)) - { - if (nFavoredClass != nClass && pClass->m_bXPPenalty) - { - if ((nMaxLevel - pThis->GetClassLevel(nMultiClass)) >= 2) - dXPPenalties += 1.0; - } - } - } - - nValue = (uint32_t)(((double)nValue) * (1.0l - 0.2l * dXPPenalties)); - } - - pThis->SetExperience(pThis->m_nExperience + nValue); - }, Hooks::Order::Final); -} - -} diff --git a/Plugins/Tweaks/FixResolveSpecialAttackDamage.cpp b/Plugins/Tweaks/FixResolveSpecialAttackDamage.cpp index 7ef578ac660..f02474a7b79 100644 --- a/Plugins/Tweaks/FixResolveSpecialAttackDamage.cpp +++ b/Plugins/Tweaks/FixResolveSpecialAttackDamage.cpp @@ -28,8 +28,8 @@ void FixResolveSpecialAttackDamage() LOG_INFO("Special Attacks will not resolve damage on a miss."); static Hooks::Hook s_ResolveMeleeSpecialAttackHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature25ResolveMeleeSpecialAttackEiiP10CNWSObjecti, - (void*)+[](CNWSCreature *pThis, int32_t nAttackIndex, int32_t nAttacks, CNWSObject *pTarget, int32_t nTimeAnimation) -> void + Hooks::HookFunction(&CNWSCreature::ResolveMeleeSpecialAttack, + +[](CNWSCreature *pThis, int32_t nAttackIndex, int32_t nAttacks, CNWSObject *pTarget, int32_t nTimeAnimation) -> void { s_InResolveSpecialAttack = true; s_ResolveMeleeSpecialAttackHook->CallOriginal(pThis, nAttackIndex, nAttacks, pTarget, nTimeAnimation); @@ -38,8 +38,8 @@ void FixResolveSpecialAttackDamage() }, Hooks::Order::Earliest); static Hooks::Hook s_ResolveRangedSpecialAttackHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature26ResolveRangedSpecialAttackEP10CNWSObjecti, - (void*)+[](CNWSCreature *pThis, CNWSObject *pTarget, int32_t nTimeAnimation) -> void + Hooks::HookFunction(&CNWSCreature::ResolveRangedSpecialAttack, + +[](CNWSCreature *pThis, CNWSObject *pTarget, int32_t nTimeAnimation) -> void { s_InResolveSpecialAttack = true; s_ResolveRangedSpecialAttackHook->CallOriginal(pThis, pTarget, nTimeAnimation); @@ -48,8 +48,8 @@ void FixResolveSpecialAttackDamage() }, Hooks::Order::Earliest); static Hooks::Hook s_ResolveDamageHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature13ResolveDamageEP10CNWSObject, - (void*)+[](CNWSCreature *pThis, CNWSObject *pTarget) -> void + Hooks::HookFunction(&CNWSCreature::ResolveDamage, + +[](CNWSCreature *pThis, CNWSObject *pTarget) -> void { if (s_InResolveSpecialAttack) { @@ -61,8 +61,8 @@ void FixResolveSpecialAttackDamage() }, Hooks::Order::Early); static Hooks::Hook s_ResolvePostMeleeDamageHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature22ResolvePostMeleeDamageEP10CNWSObject, - (void*)+[](CNWSCreature *pThis, CNWSObject *pTarget) -> void + Hooks::HookFunction(&CNWSCreature::ResolvePostMeleeDamage, + +[](CNWSCreature *pThis, CNWSObject *pTarget) -> void { if (s_InResolveSpecialAttack) { @@ -74,8 +74,8 @@ void FixResolveSpecialAttackDamage() }, Hooks::Order::Early); static Hooks::Hook s_ResolvePostRangedDamageHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature23ResolvePostRangedDamageEP10CNWSObject, - (void*)+[](CNWSCreature *pThis, CNWSObject *pTarget) -> void + Hooks::HookFunction(&CNWSCreature::ResolvePostRangedDamage, + +[](CNWSCreature *pThis, CNWSObject *pTarget) -> void { if (s_InResolveSpecialAttack) { diff --git a/Plugins/Tweaks/FixTriggerEnterDetection.cpp b/Plugins/Tweaks/FixTriggerEnterDetection.cpp index 91f246276c4..cb996ef7934 100644 --- a/Plugins/Tweaks/FixTriggerEnterDetection.cpp +++ b/Plugins/Tweaks/FixTriggerEnterDetection.cpp @@ -39,8 +39,8 @@ void FixTriggerEnterDetection() LOG_INFO("Will additionally validate trigger enter events to fix a trigger enter detection bug."); - static Hooks::Hook s_TriggerEventHandlerHook = Hooks::HookFunction(Functions::_ZN11CNWSTrigger12EventHandlerEjjPvjj, - (void*)+[](CNWSTrigger *thisPtr, uint32_t nEventId, OBJECT_ID nCallerObjectId, void* pScript, uint32_t nCalendarDay, uint32_t nTimeOfDay) -> void + static Hooks::Hook s_TriggerEventHandlerHook = Hooks::HookFunction(&CNWSTrigger::EventHandler, + +[](CNWSTrigger *thisPtr, uint32_t nEventId, OBJECT_ID nCallerObjectId, void* pScript, uint32_t nCalendarDay, uint32_t nTimeOfDay) -> void { if (nEventId == AIMasterEvent::SignalEvent) { diff --git a/Plugins/Tweaks/FixUnlimitedPotionsBug.cpp b/Plugins/Tweaks/FixUnlimitedPotionsBug.cpp index dbc867bc10d..fd66cd31870 100644 --- a/Plugins/Tweaks/FixUnlimitedPotionsBug.cpp +++ b/Plugins/Tweaks/FixUnlimitedPotionsBug.cpp @@ -2,6 +2,7 @@ #include "API/CNWSItem.hpp" #include "API/CNWSCreature.hpp" +#include "API/CServerAIMaster.hpp" namespace Tweaks { @@ -25,10 +26,10 @@ void FixUnlimitedPotionsBug() LOG_INFO("Fixing unlimited potion/scroll uses bug"); - s_AIActionItemCastSpellHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature21AIActionItemCastSpellEP20CNWSObjectActionNode, - (void*)&AIActionItemCastSpellHook, Hooks::Order::Early); - s_AddEventDeltaTimeHook = Hooks::HookFunction(Functions::_ZN15CServerAIMaster17AddEventDeltaTimeEjjjjjPv, - (void*)&AddEventDeltaTimeHook, Hooks::Order::Late); + s_AIActionItemCastSpellHook = Hooks::HookFunction(&CNWSCreature::AIActionItemCastSpell, + &AIActionItemCastSpellHook, Hooks::Order::Early); + s_AddEventDeltaTimeHook = Hooks::HookFunction(&CServerAIMaster::AddEventDeltaTime, + &AddEventDeltaTimeHook, Hooks::Order::Late); } static uint32_t AIActionItemCastSpellHook(CNWSCreature *thisPtr, CNWSObjectActionNode *pNode) diff --git a/Plugins/Tweaks/HideHardcodedItemVFX.cpp b/Plugins/Tweaks/HideHardcodedItemVFX.cpp index 671a337b376..adc94a5c25a 100644 --- a/Plugins/Tweaks/HideHardcodedItemVFX.cpp +++ b/Plugins/Tweaks/HideHardcodedItemVFX.cpp @@ -26,8 +26,8 @@ void HideHardcodedItemVFX() LOG_INFO("One or more hardcoded Item VFX will be hidden: %i", s_HiddenVFX); - static Hooks::Hook s_UpdateVisualEffectHook = Hooks::HookFunction(Functions::_ZN8CNWSItem18UpdateVisualEffectEv, - (void*)+[](CNWSItem *pThis) -> void + static Hooks::Hook s_UpdateVisualEffectHook = Hooks::HookFunction(&CNWSItem::UpdateVisualEffect, + +[](CNWSItem *pThis) -> void { if (Globals::Rules()->m_pBaseItemArray->GetBaseItem(pThis->m_nBaseItem)->m_nModelType != 2/*Composite*/) { diff --git a/Plugins/Tweaks/HideOnCharList.cpp b/Plugins/Tweaks/HideOnCharList.cpp index 8081ef56f7c..a7f3fc4dd09 100644 --- a/Plugins/Tweaks/HideOnCharList.cpp +++ b/Plugins/Tweaks/HideOnCharList.cpp @@ -37,8 +37,8 @@ void HideOnCharList() LOG_INFO("Hiding the display of classes to other PCs on the character list."); static Hooks::Hook s_SendServerToPlayerPlayModuleCharacterListResponseHook = - Hooks::HookFunction(API::Functions::_ZN11CNWSMessage49SendServerToPlayerPlayModuleCharacterListResponseEjji, - (void*)&SendServerToPlayerPlayModuleCharacterListResponseHook, Hooks::Order::Final); + Hooks::HookFunction(&CNWSMessage::SendServerToPlayerPlayModuleCharacterListResponse, + &SendServerToPlayerPlayModuleCharacterListResponseHook, Hooks::Order::Final); } static int32_t SendServerToPlayerPlayModuleCharacterListResponseHook(CNWSMessage* thisPtr, PlayerID nPlayerId, ObjectID nCharacterId, int32_t bAdd) diff --git a/Plugins/Tweaks/ItemChargesCost.cpp b/Plugins/Tweaks/ItemChargesCost.cpp index a67fdd8870c..be8c4fa1057 100644 --- a/Plugins/Tweaks/ItemChargesCost.cpp +++ b/Plugins/Tweaks/ItemChargesCost.cpp @@ -28,8 +28,8 @@ void ItemChargesCost() LOG_INFO("Changing cost for items with charges."); - static Hooks::Hook s_CalculateBaseCostsHook = Hooks::HookFunction(Functions::_ZN8CNWSItem18CalculateBaseCostsEv, - (void*)+[](CNWSItem* pThis) -> void + static Hooks::Hook s_CalculateBaseCostsHook = Hooks::HookFunction(&CNWSItem::CalculateBaseCosts, + +[](CNWSItem* pThis) -> void { int32_t savedCharges = pThis->m_nNumCharges; diff --git a/Plugins/Tweaks/LanguageOverride.cpp b/Plugins/Tweaks/LanguageOverride.cpp index 246dcbaa28d..aaaf9aa9955 100644 --- a/Plugins/Tweaks/LanguageOverride.cpp +++ b/Plugins/Tweaks/LanguageOverride.cpp @@ -23,14 +23,14 @@ void LanguageOverride() LOG_INFO("Language override set to %d", s_Lang); - static Hooks::Hook s_GetPlayerLanguage_hook = Hooks::HookFunction(Functions::_ZN21CServerExoAppInternal17GetPlayerLanguageEj, - (void*)+[](CServerExoAppInternal*, uint32_t) -> int32_t + static Hooks::Hook s_GetPlayerLanguage_hook = Hooks::HookFunction(&CServerExoAppInternal::GetPlayerLanguage, + +[](CServerExoAppInternal*, uint32_t) -> int32_t { return s_Lang; }, Hooks::Order::Final); - static Hooks::Hook s_GetModuleLanguage_hook = Hooks::HookFunction(Functions::_ZN21CServerExoAppInternal17GetModuleLanguageEv, - (void*)+[](CServerExoAppInternal*) -> int32_t + static Hooks::Hook s_GetModuleLanguage_hook = Hooks::HookFunction(&CServerExoAppInternal::GetModuleLanguage, + +[](CServerExoAppInternal*) -> int32_t { return s_Lang; }, Hooks::Order::Final); diff --git a/Plugins/Tweaks/MaterialNameNullIsAll.cpp b/Plugins/Tweaks/MaterialNameNullIsAll.cpp index 811b936977b..56a510e6425 100644 --- a/Plugins/Tweaks/MaterialNameNullIsAll.cpp +++ b/Plugins/Tweaks/MaterialNameNullIsAll.cpp @@ -130,12 +130,12 @@ void MaterialNameNullIsAll() LOG_INFO("Passing sMaterial=\"\" to SetMaterialShaderUniformXxx() will apply to all materials"); static auto s_SetInt = Hooks::HookFunction( - Functions::_ZN10CNWSObject23SetMaterialShaderParamIERK10CExoStringS2_i, - (void*)hook_SetMaterialShaderParamI, Hooks::Order::Final); + &CNWSObject::SetMaterialShaderParamI, + hook_SetMaterialShaderParamI, Hooks::Order::Final); static auto s_SetVec4 = Hooks::HookFunction( - Functions::_ZN10CNWSObject26SetMaterialShaderParamVec4ERK10CExoStringS2_ffff, - (void*)hook_SetMaterialShaderParamVec4, Hooks::Order::Final); + &CNWSObject::SetMaterialShaderParamVec4, + hook_SetMaterialShaderParamVec4, Hooks::Order::Final); } } diff --git a/Plugins/Tweaks/ParryAllAttacks.cpp b/Plugins/Tweaks/ParryAllAttacks.cpp index 80e041451d7..2a310817109 100644 --- a/Plugins/Tweaks/ParryAllAttacks.cpp +++ b/Plugins/Tweaks/ParryAllAttacks.cpp @@ -18,8 +18,8 @@ void ParryAllAttacks() LOG_INFO("Parry will no longer be limited to one attack per flurry"); - static Hooks::Hook s_ResolveAttackRollHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature17ResolveAttackRollEP10CNWSObject, - (void*)+[](CNWSCreature *pThis, CNWSObject *pTarget) -> void + static Hooks::Hook s_ResolveAttackRollHook = Hooks::HookFunction(&CNWSCreature::ResolveAttackRoll, + +[](CNWSCreature *pThis, CNWSObject *pTarget) -> void { int32_t bRoundPaused = false; if (auto *pCreature = Utils::AsNWSCreature(pTarget)) diff --git a/Plugins/Tweaks/PlayerDyingHitPointLimit.cpp b/Plugins/Tweaks/PlayerDyingHitPointLimit.cpp index cd83bca0a09..051594d6863 100644 --- a/Plugins/Tweaks/PlayerDyingHitPointLimit.cpp +++ b/Plugins/Tweaks/PlayerDyingHitPointLimit.cpp @@ -21,8 +21,8 @@ void PlayerDyingHitPointLimit() LOG_INFO("Setting the player dying HP limit to %d", s_HPLimit); - static Hooks::Hook s_GetIsPCDyingHook = Hooks::HookFunction(API::Functions::_ZN10CNWSObject12GetIsPCDyingEv, - (void*)+[](CNWSObject* thisPtr) -> int32_t + static Hooks::Hook s_GetIsPCDyingHook = Hooks::HookFunction(&CNWSObject::GetIsPCDying, + +[](CNWSObject* thisPtr) -> int32_t { if (auto *pCreature = Utils::AsNWSCreature(thisPtr)) { @@ -36,8 +36,8 @@ void PlayerDyingHitPointLimit() return false; }, Hooks::Order::Final); - static Hooks::Hook s_GetDeadHook = Hooks::HookFunction(API::Functions::_ZN10CNWSObject7GetDeadEv, - (void*)+[](CNWSObject* thisPtr) -> int32_t + static Hooks::Hook s_GetDeadHook = Hooks::HookFunction(&CNWSObject::GetDead, + +[](CNWSObject* thisPtr) -> int32_t { int16_t hp = thisPtr->GetCurrentHitPoints(false); if (auto *pCreature = Utils::AsNWSCreature(thisPtr)) diff --git a/Plugins/Tweaks/PreserveActionsOnDMPossess.cpp b/Plugins/Tweaks/PreserveActionsOnDMPossess.cpp index 1dc1fd8a94c..2bb7ffda8e8 100644 --- a/Plugins/Tweaks/PreserveActionsOnDMPossess.cpp +++ b/Plugins/Tweaks/PreserveActionsOnDMPossess.cpp @@ -20,8 +20,8 @@ void PreserveActionsOnDMPossess() LOG_INFO("DMs possessing a creature will no longer clear their actions"); - static Hooks::Hook s_PossessCreatureHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature17PossessCreatureDMEjh, - (void*)+[](CNWSCreature* thisPtr, ObjectID nObjectId, uint8_t nMode) -> void + static Hooks::Hook s_PossessCreatureHook = Hooks::HookFunction(&CNWSCreature::PossessCreatureDM, + +[](CNWSCreature* thisPtr, ObjectID nObjectId, uint8_t nMode) -> void { if (nObjectId != Constants::OBJECT_INVALID) { diff --git a/Plugins/Tweaks/PreserveDepletedItems.cpp b/Plugins/Tweaks/PreserveDepletedItems.cpp index 0f9998c466a..245235c85c8 100644 --- a/Plugins/Tweaks/PreserveDepletedItems.cpp +++ b/Plugins/Tweaks/PreserveDepletedItems.cpp @@ -18,8 +18,8 @@ void PreserveDepletedItems() LOG_INFO("Items will no longer be destroyed when they run out of charges"); - static Hooks::Hook s_AIActionItemCastSpellHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature21AIActionItemCastSpellEP20CNWSObjectActionNode, - (void*)+[](CNWSCreature *thisPtr, CNWSObjectActionNode *pNode) -> uint32_t + static Hooks::Hook s_AIActionItemCastSpellHook = Hooks::HookFunction(&CNWSCreature::AIActionItemCastSpell, + +[](CNWSCreature *thisPtr, CNWSObjectActionNode *pNode) -> uint32_t { if (auto *pItem = Utils::AsNWSItem(Utils::GetGameObject((ObjectID)(uintptr_t)pNode->m_pParameter[0]))) { diff --git a/Plugins/Tweaks/PreventAttackBonusBypassingReductions.cpp b/Plugins/Tweaks/PreventAttackBonusBypassingReductions.cpp index cf38a983fe0..133f3b7db8c 100644 --- a/Plugins/Tweaks/PreventAttackBonusBypassingReductions.cpp +++ b/Plugins/Tweaks/PreventAttackBonusBypassingReductions.cpp @@ -30,7 +30,7 @@ void PreventAttackBonusBypassingReductions() LOG_INFO("Preventing attack bonus effects from bypassing damage reductions"); - s_getWeaponPowerHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature14GetWeaponPowerEP10CNWSObjecti, (void*)&CNWSCreature__GetWeaponPower, Hooks::Order::Final); + s_getWeaponPowerHook = Hooks::HookFunction(&CNWSCreature::GetWeaponPower, &CNWSCreature__GetWeaponPower, Hooks::Order::Final); } int32_t CNWSCreature__GetWeaponPower(CNWSCreature* thisPtr, CNWSObject* pTarget, int32_t bOffhand) diff --git a/Plugins/Tweaks/README.md b/Plugins/Tweaks/README.md index f43d3eabe23..0949befa7fc 100644 --- a/Plugins/Tweaks/README.md +++ b/Plugins/Tweaks/README.md @@ -39,13 +39,9 @@ Tweaks stuff. See below. | `NWNX_TWEAKS_RETAIN_LOCAL_VARIABLES_ON_ITEM_SPLIT` | true or false | When splitting an item, local variables will be copied. | | `NWNX_TWEAKS_PREVENT_ATTACK_BONUS_BYPASSING_REDUCTION` | true or false | Prevents attack bonus effects from bypassing damage reductions. | | `NWNX_TWEAKS_MATERIAL_NAME_NULL_IS_ALL` | true or false | Makes SetMaterialShaderParamXxx() functions take `sMaterial=""` to mean all materials. | -| `NWNX_TWEAKS_SUMMON_ASSOCIATE_USE_COMPUTE_SAFE_LOCATION` | true or false | CNWSCreature::SummonAssociate() will use ComputeSafeLocation() instead of ComputeNonVisibleLocation() | | `NWNX_TWEAKS_HIDE_HARDCODED_ITEM_VFX` | int | See [here](https://github.com/nwnxee/unified/tree/master/Plugins/Tweaks#nwnx_tweaks_hide_hardcoded_item_vfx). | -| `NWNX_TWEAKS_FIX_DM_FACTION_BUG` | true or false | Fixes a DM faction bug when using a non-DMClient BIC file. | | `NWNX_TWEAKS_CANUSEITEM_CHECK_ILR_FOR_HENCHMEN` | true or false | The CNWSCreature::CanUseItem() function will also check ILR for Henchmen. | -| `NWNX_TWEAKS_FIX_DM_SELECTION_BOX` | true or false | Fixes the DM creature selection box not showing up when player party control is off. | | `NWNX_TWEAKS_FIX_TRIGGER_ENTER_DETECTION` | true or false | Adds an additional bounds check for triggers to fix a trigger detection bug. | -| `NWNX_TWEAKS_FIX_MULTICLASS_XP_PENALTY_BUG` | true or false | Fixes a bug where multiclass xp penalties are calculated incorrectly. | | `NWNX_TWEAKS_UNCAP_DAMAGE_RESISTANCE_DAMAGE_FLAGS` | true or false | Uncaps the compounded damage flags of EffectDamageResistance. | | `NWNX_TWEAKS_FIX_RESOLVE_SPECIAL_ATTACK_DAMAGE` | true or false | Stops damage from being resolved when a special attack misses. | diff --git a/Plugins/Tweaks/RetainLocalVariablesOnItemSplit.cpp b/Plugins/Tweaks/RetainLocalVariablesOnItemSplit.cpp index 3799bc9edcc..9f955e1c9d1 100644 --- a/Plugins/Tweaks/RetainLocalVariablesOnItemSplit.cpp +++ b/Plugins/Tweaks/RetainLocalVariablesOnItemSplit.cpp @@ -19,8 +19,8 @@ void RetainLocalVariablesOnItemSplit() static bool s_SplitItem; static Hooks::Hook s_SplitItemHook = Hooks::HookFunction( - API::Functions::_ZN8CNWSItem9SplitItemEi, - (void*)+[](CNWSItem *thisPtr, int32_t nNumberToSplitOff) -> CNWSItem* + &CNWSItem::SplitItem, + +[](CNWSItem *thisPtr, int32_t nNumberToSplitOff) -> CNWSItem* { s_SplitItem = true; auto retVal = s_SplitItemHook->CallOriginal(thisPtr, nNumberToSplitOff); @@ -29,8 +29,8 @@ void RetainLocalVariablesOnItemSplit() }, Hooks::Order::Earliest); static Hooks::Hook s_CopyItemHook = Hooks::HookFunction( - API::Functions::_ZN8CNWSItem8CopyItemEPS_i, - (void*)+[](CNWSItem *thisPtr, CNWSItem *pSourceItem, int32_t bCopyVars) -> int32_t + &CNWSItem::CopyItem, + +[](CNWSItem *thisPtr, CNWSItem *pSourceItem, int32_t bCopyVars) -> int32_t { return s_CopyItemHook->CallOriginal(thisPtr, pSourceItem, s_SplitItem ? true : bCopyVars); }, Hooks::Order::Early); diff --git a/Plugins/Tweaks/SendTlkOverrideBeforeChargen.cpp b/Plugins/Tweaks/SendTlkOverrideBeforeChargen.cpp index 5c3de9502eb..f45b73152ec 100644 --- a/Plugins/Tweaks/SendTlkOverrideBeforeChargen.cpp +++ b/Plugins/Tweaks/SendTlkOverrideBeforeChargen.cpp @@ -19,8 +19,8 @@ void SendTlkOverrideBeforeChargen() LOG_INFO("Sending Tlk Overrides before Character Generation."); static Hooks::Hook s_SendServerToPlayerCharListHook = Hooks::HookFunction( - API::Functions::_ZN11CNWSMessage26SendServerToPlayerCharListEP10CNWSPlayer, - (void*)+[](CNWSMessage *thisPtr, CNWSPlayer *pPlayer) -> int32_t + &CNWSMessage::SendServerToPlayerCharList, + +[](CNWSMessage *thisPtr, CNWSPlayer *pPlayer) -> int32_t { auto retVal = s_SendServerToPlayerCharListHook->CallOriginal(thisPtr, pPlayer); diff --git a/Plugins/Tweaks/SneakAttackCritImmunity.cpp b/Plugins/Tweaks/SneakAttackCritImmunity.cpp index d322ee2380f..655993fa0f5 100644 --- a/Plugins/Tweaks/SneakAttackCritImmunity.cpp +++ b/Plugins/Tweaks/SneakAttackCritImmunity.cpp @@ -29,11 +29,11 @@ void SneakAttackCritImmunity() LOG_INFO("Sneak attacks will now be possible on creatures with immunity to critical hits"); static Hooks::Hook s_ResolveSneakAttackHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature18ResolveSneakAttackEPS_, - (void*)&ResolveSneakAttackHook, Hooks::Order::Final); + Hooks::HookFunction(&CNWSCreature::ResolveSneakAttack, + &ResolveSneakAttackHook, Hooks::Order::Final); static Hooks::Hook s_ResolveDeathAttackHook = - Hooks::HookFunction(Functions::_ZN12CNWSCreature18ResolveDeathAttackEPS_, - (void*)&ResolveDeathAttackHook, Hooks::Order::Final); + Hooks::HookFunction(&CNWSCreature::ResolveDeathAttack, + &ResolveDeathAttackHook, Hooks::Order::Final); } static void ResolveSneakAttackHook(CNWSCreature *pThis, CNWSCreature *pTarget) diff --git a/Plugins/Tweaks/StringToIntBaseToAuto.cpp b/Plugins/Tweaks/StringToIntBaseToAuto.cpp index 4d61ab6f694..fa02a5ea997 100644 --- a/Plugins/Tweaks/StringToIntBaseToAuto.cpp +++ b/Plugins/Tweaks/StringToIntBaseToAuto.cpp @@ -20,8 +20,8 @@ void StringToIntBaseToAuto() LOG_INFO("Setting StringToInt() base to auto to allow for conversion of hex strings to proper values."); static Hooks::Hook s_ExecuteCommandStringConversionsHook = - Hooks::HookFunction(Functions::_ZN25CNWVirtualMachineCommands31ExecuteCommandStringConversionsEii, - (void*)+[](CNWVirtualMachineCommands* thisPtr, int32_t nCommandId, int32_t nParameters) -> int32_t + Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandStringConversions, + +[](CNWVirtualMachineCommands* thisPtr, int32_t nCommandId, int32_t nParameters) -> int32_t { ASSERT(thisPtr); ASSERT(nParameters == 1); auto *vm = Globals::VirtualMachine(); diff --git a/Plugins/Tweaks/SummonAssociateUseComputeSafeLocation.cpp b/Plugins/Tweaks/SummonAssociateUseComputeSafeLocation.cpp deleted file mode 100644 index f35e38af548..00000000000 --- a/Plugins/Tweaks/SummonAssociateUseComputeSafeLocation.cpp +++ /dev/null @@ -1,69 +0,0 @@ -#include "nwnx.hpp" - -#include "API/CNWSCreature.hpp" -#include "API/CNWSCreatureStats.hpp" -#include "API/CNWSArea.hpp" -#include "API/CNWCCMessageData.hpp" - - -namespace Tweaks { - -using namespace NWNXLib; -using namespace NWNXLib::API; - - -void SummonAssociateUseComputeSafeLocation() __attribute__((constructor)); -void SummonAssociateUseComputeSafeLocation() -{ - if (!Config::Get("SUMMON_ASSOCIATE_USE_COMPUTE_SAFE_LOCATION", false)) - return; - - LOG_INFO("SummonAssociate() will use ComputeSafeLocation() instead of ComputeNonVisibleLocation()."); - - static Hooks::Hook s_GetDEXStatHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature15SummonAssociateE7CResRef10CExoStringt, - (void*)+[](CNWSCreature *pThis, CResRef cResRef, CExoString sAssociateName, uint16_t nAssociateType) -> void - { - CNWSCreature *pCreature = new CNWSCreature; - if (!pCreature->LoadFromTemplate(cResRef)) - { - LOG_WARNING("Failed to summon associate, invalid creature file: %s", cResRef); - delete pCreature; - return; - } - - CExoLocString sName; - sName.AddString(0, sAssociateName); - pCreature->m_pStats->m_lsFirstName = sName; - pCreature->SetAssociateType(nAssociateType); - - if (auto *pArea = pThis->GetArea()) - { - Vector vSpawnPosition{}; - if (!pArea->ComputeSafeLocation(pThis->m_vPosition, 20.0f, pCreature->m_pcPathfindInformation, false, &vSpawnPosition)) - { - LOG_WARNING("Failed to compute safe location, using master's position."); - vSpawnPosition = pThis->m_vPosition; - } - - pThis->AddAssociate(pCreature->m_idSelf, nAssociateType); - - auto *pEffect = new CGameEffect; - pEffect->m_nType = Constants::EffectTrueType::VisualEffect; - pEffect->SetInteger(0, 36); - pArea->ApplyEffect(pEffect, vSpawnPosition, pThis->m_vOrientation); - - pCreature->SetPosition(vSpawnPosition); - pCreature->AddToArea(pArea, vSpawnPosition.x, vSpawnPosition.y, pArea->ComputeHeight(vSpawnPosition)); - - auto *pMessageData = new CNWCCMessageData; - pMessageData->SetObjectID(0, pCreature->m_idSelf); - pThis->SendFeedbackMessage(154, pMessageData); - } - else - { - LOG_WARNING("Associate's master is in an invalid area somehow? How did this happen."); - } - }, Hooks::Order::Final); -} - -} diff --git a/Plugins/Tweaks/TURDByCDKey.cpp b/Plugins/Tweaks/TURDByCDKey.cpp index 08da59854ee..65ed4b5f5b5 100644 --- a/Plugins/Tweaks/TURDByCDKey.cpp +++ b/Plugins/Tweaks/TURDByCDKey.cpp @@ -23,8 +23,8 @@ void TURDByCDKey() LOG_INFO("TURDs are associated by CDKey/CharacterName instead of PlayerName/CharacterName."); - static Hooks::Hook s_GetPlayerNameHook = Hooks::HookFunction(Functions::_ZN10CNWSPlayer13GetPlayerNameEv, - (void*)+[](CNWSPlayer *pPlayer) -> CExoString + static Hooks::Hook s_GetPlayerNameHook = Hooks::HookFunction(&CNWSPlayer::GetPlayerName, + +[](CNWSPlayer *pPlayer) -> CExoString { if (s_GetCDKeyInsteadOfPlayerName) { @@ -39,24 +39,24 @@ void TURDByCDKey() return s_GetPlayerNameHook->CallOriginal(pPlayer); }, Hooks::Order::Late); - static Hooks::Hook s_DropTURDHook = Hooks::HookFunction(Functions::_ZN10CNWSPlayer8DropTURDEv, - (void*)+[](CNWSPlayer *pPlayer) -> void + static Hooks::Hook s_DropTURDHook = Hooks::HookFunction(&CNWSPlayer::DropTURD, + +[](CNWSPlayer *pPlayer) -> void { s_GetCDKeyInsteadOfPlayerName = true; s_DropTURDHook->CallOriginal(pPlayer); s_GetCDKeyInsteadOfPlayerName = false; }, Hooks::Order::Early); - static Hooks::Hook s_RemoveFromTURDListHook = Hooks::HookFunction(Functions::_ZN10CNWSModule18RemoveFromTURDListEP10CNWSPlayer, - (void*)+[](CNWSModule *pModule, CNWSPlayer *pPlayer) -> void + static Hooks::Hook s_RemoveFromTURDListHook = Hooks::HookFunction(&CNWSModule::RemoveFromTURDList, + +[](CNWSModule *pModule, CNWSPlayer *pPlayer) -> void { s_GetCDKeyInsteadOfPlayerName = true; s_RemoveFromTURDListHook->CallOriginal(pModule, pPlayer); s_GetCDKeyInsteadOfPlayerName = false; }, Hooks::Order::Early); - static Hooks::Hook s_GetPlayerTURDFromListHook = Hooks::HookFunction(Functions::_ZN10CNWSModule21GetPlayerTURDFromListEP10CNWSPlayer, - (void*)+[](CNWSModule *pModule, CNWSPlayer *pPlayer) -> CNWSPlayerTURD* + static Hooks::Hook s_GetPlayerTURDFromListHook = Hooks::HookFunction(&CNWSModule::GetPlayerTURDFromList, + +[](CNWSModule *pModule, CNWSPlayer *pPlayer) -> CNWSPlayerTURD* { s_GetCDKeyInsteadOfPlayerName = true; auto retVal = s_GetPlayerTURDFromListHook->CallOriginal(pModule, pPlayer); diff --git a/Plugins/Tweaks/UncapDamageResistanceDamageFlags.cpp b/Plugins/Tweaks/UncapDamageResistanceDamageFlags.cpp index d2c3f0c97c6..b0749a29ecf 100644 --- a/Plugins/Tweaks/UncapDamageResistanceDamageFlags.cpp +++ b/Plugins/Tweaks/UncapDamageResistanceDamageFlags.cpp @@ -19,8 +19,8 @@ void UncapDamageResistanceDamageFlags() LOG_INFO("Damage flags for EffectDamageResistance will be uncapped."); static Hooks::Hook s_ExecuteCommandEffectDamageResistanceHook = - Hooks::HookFunction(Functions::_ZN25CNWVirtualMachineCommands36ExecuteCommandEffectDamageResistanceEii, - (void*)+[](CNWVirtualMachineCommands *thisPtr, int32_t, int32_t) -> int32_t + Hooks::HookFunction(&CNWVirtualMachineCommands::ExecuteCommandEffectDamageResistance, + +[](CNWVirtualMachineCommands *thisPtr, int32_t, int32_t) -> int32_t { auto *pVM = Globals::VirtualMachine(); int32_t nDamageFlags, nAmount, nLimit; diff --git a/Plugins/Tweaks/UnhardcodeShields.cpp b/Plugins/Tweaks/UnhardcodeShields.cpp index 7a8db84627d..ca66d3bdb28 100644 --- a/Plugins/Tweaks/UnhardcodeShields.cpp +++ b/Plugins/Tweaks/UnhardcodeShields.cpp @@ -33,10 +33,10 @@ void UnhardcodeShields() LOG_INFO("Using baseitems.2da to define shield AC and create shield-like items"); - s_CNWSItemItemComputeArmorClassHook = Hooks::HookFunction(Functions::_ZN8CNWSItem17ComputeArmorClassEv, - (void*)&CNWSItem_ComputeArmorClassHook, Hooks::Order::Final); - s_CNWSCreatureComputeArmourClassHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature18ComputeArmourClassEP8CNWSItemii, - (void*)&CNWSCreature_ComputeArmourClassHook, Hooks::Order::Late); + s_CNWSItemItemComputeArmorClassHook = Hooks::HookFunction(&CNWSItem::ComputeArmorClass, + &CNWSItem_ComputeArmorClassHook, Hooks::Order::Final); + s_CNWSCreatureComputeArmourClassHook = Hooks::HookFunction(&CNWSCreature::ComputeArmourClass, + &CNWSCreature_ComputeArmourClassHook, Hooks::Order::Late); } static int32_t CNWSItem_ComputeArmorClassHook(CNWSItem* thisPtr) diff --git a/Plugins/Util/NWScript/nwnx_util.nss b/Plugins/Util/NWScript/nwnx_util.nss index b85f80cb4d1..0839b8644cf 100644 --- a/Plugins/Util/NWScript/nwnx_util.nss +++ b/Plugins/Util/NWScript/nwnx_util.nss @@ -72,7 +72,6 @@ string NWNX_Util_GetCustomToken(int customTokenNumber); /// @return The converted itemproperty. itemproperty NWNX_Util_EffectToItemProperty(effect e); -/// /// @brief Convert an itemproperty type to an effect type. /// @param ip The itemproperty to convert to an effect. /// @return The converted effect. @@ -83,12 +82,6 @@ effect NWNX_Util_ItemPropertyToEffect(itemproperty ip); /// @return The new string without any color codes. string NWNX_Util_StripColors(string str); -/// @brief Determines if the supplied resref exists. -/// @param resref The resref to check. -/// @param type The @ref resref_types "Resref Type". -/// @return TRUE/FALSE -int NWNX_Util_IsValidResRef(string resref, int type = NWNX_UTIL_RESREF_TYPE_CREATURE); - /// @brief Retrieves an environment variable. /// @param sVarname The environment variable to query. /// @return The value of the environment variable. @@ -108,12 +101,6 @@ void NWNX_Util_SetMinutesPerHour(int minutes); /// @return The url encoded string. string NWNX_Util_EncodeStringForURL(string str); -/// @anchor twoda_row_count -/// @brief Gets the row count for a 2da. -/// @param str The 2da to check (do not include the .2da). -/// @return The amount of rows in the 2da. -int NWNX_Util_Get2DARowCount(string str); - /// @brief Get the first resref of nType. /// @param nType A @ref resref_types "Resref Type". /// @param sRegexFilter Lets you filter out resrefs using a regexfilter. @@ -148,12 +135,6 @@ object NWNX_Util_GetLastCreatedObject(int nObjectType, int nNthLast = 1); /// @return "" on success, or the compilation error. string NWNX_Util_AddScript(string sFileName, string sScriptData, int bWrapIntoMain = FALSE, string sAlias = "NWNX"); -/// @brief Gets the contents of a .nss script file as a string. -/// @param sScriptName The name of the script to get the contents of. -/// @param nMaxLength The max length of the return string, -1 to get everything -/// @return The script file contents or "" on error. -string NWNX_Util_GetNSSContents(string sScriptName, int nMaxLength = -1); - /// @brief Adds a nss file to the UserDirectory/nwnx folder, or to the location of sAlias. /// @note Will override existing nss files that are in the module /// @param sFileName The script filename without extension, 16 or less characters. @@ -325,15 +306,6 @@ string NWNX_Util_StripColors(string str) return NWNX_GetReturnValueString(); } -int NWNX_Util_IsValidResRef(string resref, int type = NWNX_UTIL_RESREF_TYPE_CREATURE) -{ - string sFunc = "IsValidResRef"; - NWNX_PushArgumentInt(type); - NWNX_PushArgumentString(resref); - NWNX_CallFunction(NWNX_Util, sFunc); - return NWNX_GetReturnValueInt(); -} - string NWNX_Util_GetEnvironmentVariable(string sVarname) { string sFunc = "GetEnvironmentVariable"; @@ -366,14 +338,6 @@ string NWNX_Util_EncodeStringForURL(string sURL) return NWNX_GetReturnValueString(); } -int NWNX_Util_Get2DARowCount(string str) -{ - string sFunc = "Get2DARowCount"; - NWNX_PushArgumentString(str); - NWNX_CallFunction(NWNX_Util, sFunc); - return NWNX_GetReturnValueInt(); -} - string NWNX_Util_GetFirstResRef(int nType, string sRegexFilter = "", int bModuleResourcesOnly = TRUE) { string sFunc = "GetFirstResRef"; @@ -428,17 +392,6 @@ string NWNX_Util_AddScript(string sFileName, string sScriptData, int bWrapIntoMa return NWNX_GetReturnValueString(); } -string NWNX_Util_GetNSSContents(string sScriptName, int nMaxLength = -1) -{ - string sFunc = "GetNSSContents"; - - NWNX_PushArgumentInt(nMaxLength); - NWNX_PushArgumentString(sScriptName); - NWNX_CallFunction(NWNX_Util, sFunc); - - return NWNX_GetReturnValueString(); -} - int NWNX_Util_AddNSSFile(string sFileName, string sContents, string sAlias = "NWNX") { string sFunc = "AddNSSFile"; diff --git a/Plugins/Util/NWScript/nwnx_util_t.nss b/Plugins/Util/NWScript/nwnx_util_t.nss index 77de36e3037..9560357ff66 100644 --- a/Plugins/Util/NWScript/nwnx_util_t.nss +++ b/Plugins/Util/NWScript/nwnx_util_t.nss @@ -33,11 +33,6 @@ void main() string strip_colors = NWNX_Util_StripColors(str); NWNX_Tests_Report("NWNX_Util", "RegexReplace", strip_colors == "This is a test of stripped colors."); - string sValidResRef = "nw_undeadhigh"; - NWNX_Tests_Report("NWNX_Util", "IsValidResRef", NWNX_Util_IsValidResRef(sValidResRef, NWNX_UTIL_RESREF_TYPE_ENCOUNTER)); - string sInValidResRef = "aaaaaaaaaaaaaaaa"; - NWNX_Tests_Report("NWNX_Util", "IsValidResRef", NWNX_Util_IsValidResRef(sInValidResRef, NWNX_UTIL_RESREF_TYPE_ITEM) == 0); - string sEnvVar = "NWNX_CORE_LOG_LEVEL"; NWNX_Tests_Report("NWNX_Util", "GetEnvironmentVariable", StringToInt(NWNX_Util_GetEnvironmentVariable(sEnvVar)) > 0); @@ -49,9 +44,6 @@ void main() string sStringForURL = "This is a test, yes."; NWNX_Tests_Report("NWNX_Util", "EncodeStringForURL", NWNX_Util_EncodeStringForURL(sStringForURL) == "This+is+a+test%2C+yes."); - string sTwoDA = "bodybag"; - NWNX_Tests_Report("NWNX_Util", "Get2DARowCount", NWNX_Util_Get2DARowCount(sTwoDA) == 7); - NWNX_Tests_Report("NWNX_Util", "GetFirstResRef", NWNX_Util_GetFirstResRef(NWNX_UTIL_RESREF_TYPE_NSS, "nwnx_util.*") != ""); NWNX_Tests_Report("NWNX_Util", "GetNextResRef", NWNX_Util_GetNextResRef() != ""); diff --git a/Plugins/Util/Util.cpp b/Plugins/Util/Util.cpp index 83d5b17900a..38ab3d7dac2 100644 --- a/Plugins/Util/Util.cpp +++ b/Plugins/Util/Util.cpp @@ -14,6 +14,7 @@ #include "API/CWorldTimer.hpp" #include "API/CGameObjectArray.hpp" #include "API/CScriptCompiler.hpp" +#include "API/CServerExoAppInternal.hpp" #include "API/CExoAliasList.hpp" #include "API/CExoFile.hpp" #include "API/CNWSDoor.hpp" @@ -65,8 +66,8 @@ static auto s_id = MessageBus::Subscribe("NWNX_CORE_SIGNAL", } }); -static Hooks::Hook s_MainLoopHook = Hooks::HookFunction(API::Functions::_ZN21CServerExoAppInternal8MainLoopEv, - (void*)+[](CServerExoAppInternal *pServerExoAppInternal) -> int32_t +static Hooks::Hook s_MainLoopHook = Hooks::HookFunction(&CServerExoAppInternal::MainLoop, + +[](CServerExoAppInternal *pServerExoAppInternal) -> int32_t { static int ticks; static time_t previous; @@ -189,14 +190,6 @@ NWNX_EXPORT ArgumentStack StripColors(ArgumentStack&& args) return retVal; } -NWNX_EXPORT ArgumentStack IsValidResRef(ArgumentStack&& args) -{ - const auto resRef = args.extract(); - const auto resType = args.extract(); - - return Globals::ExoResMan()->Exists(CResRef(resRef.c_str()), resType, nullptr); -} - NWNX_EXPORT ArgumentStack GetEnvironmentVariable(ArgumentStack&& args) { std::string retVal; @@ -259,14 +252,6 @@ NWNX_EXPORT ArgumentStack EncodeStringForURL(ArgumentStack&& args) return result; } -NWNX_EXPORT ArgumentStack Get2DARowCount(ArgumentStack&& args) -{ - const auto twodaRef = args.extract(); - auto *pTwoda = Globals::Rules()->m_p2DArrays->GetCached2DA(twodaRef.c_str(), true); - - return pTwoda ? pTwoda->m_nNumRows : 0; -} - NWNX_EXPORT ArgumentStack GetFirstResRef(ArgumentStack&& args) { std::string retVal; @@ -400,31 +385,6 @@ NWNX_EXPORT ArgumentStack AddScript(ArgumentStack&& args) return ""; } -NWNX_EXPORT ArgumentStack GetNSSContents(ArgumentStack&& args) -{ - std::string retVal; - - const auto scriptName = args.extract(); - ASSERT_OR_THROW(!scriptName.empty()); - ASSERT_OR_THROW(scriptName.size() <= 16); - const auto maxLength = args.extract(); - - if (Globals::ExoResMan()->Exists(scriptName.c_str(), Constants::ResRefType::NSS, nullptr)) - { - CScriptSourceFile scriptSourceFile; - char *data; - uint32_t size = 0; - - if (scriptSourceFile.LoadScript(scriptName, &data, &size) == 0) - { - retVal.assign(data, maxLength < 0 ? size : (uint32_t)maxLength > size ? size : maxLength); - scriptSourceFile.UnloadScript(); - } - } - - return retVal; -} - NWNX_EXPORT ArgumentStack AddNSSFile(ArgumentStack&& args) { const auto fileName = args.extract(); diff --git a/Plugins/Visibility/Visibility.cpp b/Plugins/Visibility/Visibility.cpp index d21770f9d28..0f412ed627f 100644 --- a/Plugins/Visibility/Visibility.cpp +++ b/Plugins/Visibility/Visibility.cpp @@ -13,8 +13,8 @@ static int32_t GetGlobalOverride(ObjectID); static int32_t GetPersonalOverride(ObjectID, ObjectID); static Hooks::Hook s_TestObjectVisibleHook = - Hooks::HookFunction(API::Functions::_ZN11CNWSMessage17TestObjectVisibleEP10CNWSObjectS1_, - (void*)+[](CNWSMessage *pThis, CNWSObject *pAreaObject, CNWSObject *pPlayerGameObject) -> int32_t + Hooks::HookFunction(&CNWSMessage::TestObjectVisible, + +[](CNWSMessage *pThis, CNWSObject *pAreaObject, CNWSObject *pPlayerGameObject) -> int32_t { if (pAreaObject->m_idSelf == pPlayerGameObject->m_idSelf) { diff --git a/Plugins/Weapon/Weapon.cpp b/Plugins/Weapon/Weapon.cpp index c9fa3e495dd..3f1cc2c4ffe 100644 --- a/Plugins/Weapon/Weapon.cpp +++ b/Plugins/Weapon/Weapon.cpp @@ -54,22 +54,22 @@ Weapon::Weapon(Services::ProxyServiceList* services) #undef REGISTER - m_GetWeaponFocusHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats14GetWeaponFocusEP8CNWSItem, (void*)&Weapon::GetWeaponFocus, Hooks::Order::Late); - m_GetEpicWeaponFocusHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats18GetEpicWeaponFocusEP8CNWSItem, (void*)&Weapon::GetEpicWeaponFocus); - static auto s_GetWeaponFinesseHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats16GetWeaponFinesseEP8CNWSItem, (void*)&GetWeaponFinesse, Hooks::Order::Final); - - m_GetWeaponImprovedCriticalHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats25GetWeaponImprovedCriticalEP8CNWSItem, (void*)&Weapon::GetWeaponImprovedCritical, Hooks::Order::Late); - m_GetWeaponSpecializationHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats23GetWeaponSpecializationEP8CNWSItem, (void*)&Weapon::GetWeaponSpecialization, Hooks::Order::Late); - m_GetEpicWeaponSpecializationHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats27GetEpicWeaponSpecializationEP8CNWSItem, (void*)&Weapon::GetEpicWeaponSpecialization, Hooks::Order::Late); - m_GetEpicWeaponOverwhelmingCriticalHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats33GetEpicWeaponOverwhelmingCriticalEP8CNWSItem, (void*)&Weapon::GetEpicWeaponOverwhelmingCritical, Hooks::Order::Late); - m_GetEpicWeaponDevastatingCriticalHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats32GetEpicWeaponDevastatingCriticalEP8CNWSItem, (void*)&Weapon::GetEpicWeaponDevastatingCritical, Hooks::Order::Late); - m_GetIsWeaponOfChoiceHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats19GetIsWeaponOfChoiceEj, (void*)&Weapon::GetIsWeaponOfChoice, Hooks::Order::Late); - m_GetMeleeDamageBonusHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats19GetMeleeDamageBonusEih, (void*)&Weapon::GetMeleeDamageBonus, Hooks::Order::Late); - m_GetDamageBonusHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats14GetDamageBonusEP12CNWSCreaturei, (void*)&Weapon::GetDamageBonus, Hooks::Order::Late); - m_GetRangedDamageBonusHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats20GetRangedDamageBonusEv, (void*)&Weapon::GetRangedDamageBonus, Hooks::Order::Late); - m_GetAttackModifierVersusHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats23GetAttackModifierVersusEP12CNWSCreature, (void*)&Weapon::GetAttackModifierVersus, Hooks::Order::Late); - m_GetMeleeAttackBonusHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats19GetMeleeAttackBonusEiii, (void*)&Weapon::GetMeleeAttackBonus, Hooks::Order::Late); - m_GetRangedAttackBonusHook = Hooks::HookFunction(Functions::_ZN17CNWSCreatureStats20GetRangedAttackBonusEii, (void*)&Weapon::GetRangedAttackBonus, Hooks::Order::Late); + m_GetWeaponFocusHook = Hooks::HookFunction(&CNWSCreatureStats::GetWeaponFocus, &Weapon::GetWeaponFocus, Hooks::Order::Late); + m_GetEpicWeaponFocusHook = Hooks::HookFunction(&CNWSCreatureStats::GetEpicWeaponFocus, &Weapon::GetEpicWeaponFocus); + static auto s_GetWeaponFinesseHook = Hooks::HookFunction(&CNWSCreatureStats::GetWeaponFinesse, &GetWeaponFinesse, Hooks::Order::Final); + + m_GetWeaponImprovedCriticalHook = Hooks::HookFunction(&CNWSCreatureStats::GetWeaponImprovedCritical, &Weapon::GetWeaponImprovedCritical, Hooks::Order::Late); + m_GetWeaponSpecializationHook = Hooks::HookFunction(&CNWSCreatureStats::GetWeaponSpecialization, &Weapon::GetWeaponSpecialization, Hooks::Order::Late); + m_GetEpicWeaponSpecializationHook = Hooks::HookFunction(&CNWSCreatureStats::GetEpicWeaponSpecialization, &Weapon::GetEpicWeaponSpecialization, Hooks::Order::Late); + m_GetEpicWeaponOverwhelmingCriticalHook = Hooks::HookFunction(&CNWSCreatureStats::GetEpicWeaponOverwhelmingCritical, &Weapon::GetEpicWeaponOverwhelmingCritical, Hooks::Order::Late); + m_GetEpicWeaponDevastatingCriticalHook = Hooks::HookFunction(&CNWSCreatureStats::GetEpicWeaponDevastatingCritical, &Weapon::GetEpicWeaponDevastatingCritical, Hooks::Order::Late); + m_GetIsWeaponOfChoiceHook = Hooks::HookFunction(&CNWSCreatureStats::GetIsWeaponOfChoice, &Weapon::GetIsWeaponOfChoice, Hooks::Order::Late); + m_GetMeleeDamageBonusHook = Hooks::HookFunction(&CNWSCreatureStats::GetMeleeDamageBonus, &Weapon::GetMeleeDamageBonus, Hooks::Order::Late); + m_GetDamageBonusHook = Hooks::HookFunction(&CNWSCreatureStats::GetDamageBonus, &Weapon::GetDamageBonus, Hooks::Order::Late); + m_GetRangedDamageBonusHook = Hooks::HookFunction(&CNWSCreatureStats::GetRangedDamageBonus, &Weapon::GetRangedDamageBonus, Hooks::Order::Late); + m_GetAttackModifierVersusHook = Hooks::HookFunction(&CNWSCreatureStats::GetAttackModifierVersus, &Weapon::GetAttackModifierVersus, Hooks::Order::Late); + m_GetMeleeAttackBonusHook = Hooks::HookFunction(&CNWSCreatureStats::GetMeleeAttackBonus, &Weapon::GetMeleeAttackBonus, Hooks::Order::Late); + m_GetRangedAttackBonusHook = Hooks::HookFunction(&CNWSCreatureStats::GetRangedAttackBonus, &Weapon::GetRangedAttackBonus, Hooks::Order::Late); m_WeaponFinesseSizeMap.insert({Constants::BaseItem::Rapier, (uint8_t) Constants::CreatureSize::Medium}); @@ -1242,8 +1242,8 @@ ArgumentStack Weapon::GetOneHalfStrength(ArgumentStack&& args) ArgumentStack Weapon::SetMaxRangedAttackDistanceOverride(ArgumentStack&& args) { - static Hooks::Hook s_MaxAttackRangeHook = Hooks::HookFunction(Functions::_ZN12CNWSCreature14MaxAttackRangeEjii, - (void*)+[](CNWSCreature *pCreature, ObjectID oidTarget, BOOL bBaseValue, BOOL bPassiveRange) -> float + static Hooks::Hook s_MaxAttackRangeHook = Hooks::HookFunction(&CNWSCreature::MaxAttackRange, + +[](CNWSCreature *pCreature, ObjectID oidTarget, BOOL bBaseValue, BOOL bPassiveRange) -> float { if (auto *pEquippedWeapon = pCreature->m_pInventory->GetItemInSlot(Constants::EquipmentSlot::RightHand)) {